什麼樣的量子位元才算好
到現在為止,你已經從抽象層面了解了量子位元:一個兩能階量子系統,其狀態為 |psi> = alpha|0> + beta|1>,且 |alpha|^2 + |beta|^2 = 1。這是數學。而硬體的問題則赤裸裸地具體——到底有什麼真實的實體東西,能讓你拿一根導線或一束雷射指著它,它就照那樣運轉?你需要一個具備兩個乾淨能階的系統,把它們叫做 |0> 和 |1>,你能把它放進二者的疊加態,並且在最後能夠讀出它。
事實證明,大自然中到處都是兩能階系統,但它們幾乎全都無法用於計算,因為它們都不滿足四項要求中的某一項。一個好的量子位元必須是可控的(你能按需施加量子閘)、可測量的(你能在最後透過玻恩定則讀出 0 或 1)、可連接的(它能與其他量子位元相互作用,從而產生糾纏和雙量子位元閘),以及——最難的那一項——可隔離的。讓你能控制量子位元的那種耦合,同樣也讓環境得以擾動它,而任何無意的輕微推動都會引發退相干,在你的計算完成之前悄悄地把狀態攪亂。
超導量子位元
第一種方法是用電路來打造一個人造原子,而不是去借用一個真實的原子。超導量子位元是一段刻蝕在晶片上的微小電路,很像一塊普通的微晶片,只不過被冷卻到絕對零度以上幾千分之一度(幾個毫克耳文)。在那個溫度下,金屬會變成超導態——電流以零電阻流動——整個電路便能像一個單一的量子對象那樣運轉。
不過,一段普通的電路有著*均勻間隔*的能階,就像一架橫檔完全相同的梯子。這就成了問題:如果你從 |0> 到 |1> 的台階與從 |1> 到 |2> 的台階一樣大,那麼任何本想翻轉量子位元的脈衝都會一併把它踢上能階 2 乃至更高,它就不再是一個乾淨的兩能階系統了。解決辦法是一個叫做 Josephson 接面的特殊元件,它讓橫檔變得參差不齊。如今最低的兩個能階與其餘能階的間隔不同了,於是你就能把它們單獨挑出來作為 |0> 和 |1>,而不去碰那些更高的能階。
Transmon
早期的超導量子位元有一個致命的弱點:它們對電荷雜訊敏感得令人頭痛。在晶片附近遊蕩的雜散電荷會擾動能階,幾乎立刻就把資訊攪亂,使你的相干時間短得根本無法用來計算。transmon正是修正這一缺陷的設計,如今它已是迄今為止最常見的一類超導量子位元——當人們說「IBM 和 Google 的量子位元」時,幾乎總是指 transmon。
transmon 的竅門說起來很簡單:在電路上跨接一個相對較大的電容。這能把量子位元的能量對雜散電荷的依賴程度抹平,抹平到電荷雜訊幾乎不再要緊的地步。這正是 transmon 能把狀態保持得足夠久、足以派上用場的主要原因。這裡的取捨很坦誠,也值得點明:更大的電容也會讓能階重新變得*更加*均勻間隔(非諧性更弱),於是 |0> 和 |1> 在間隔上離那些不想要的更高能階更近了。工程師們靠精心整形的微波脈衝來應對這一點,這些脈衝會把量子位元在 |0> 和 |1> 之間推來推去,卻不會把它洩漏到能階 2 上去。
離子阱
與之相反的理念是:不再去打造人造原子,乾脆就用一個真實的。離子阱量子位元把資訊儲存在一個帶電的單原子(離子)內部,靠精心整形的電場和磁場讓它在真空中近乎完美地靜止——就像一顆彈珠落進一隻看不見的碗底。這個原子有內部能階;你從中挑兩個作為 |0> 和 |1>。你用精確調諧的雷射來寫入和讀出:一束雷射讓量子位元在它的兩個能階之間翻轉,另一束則讓原子在某個狀態下發光、在另一個狀態下保持暗著,於是一台相機就能分辨它處於哪個狀態。
由於某種元素的每一個原子都是*天然全同*的,而且離子懸浮在遠離任何表面的地方,離子阱的隔離性極好。相比超導晶片,這換來了兩個實實在在的優勢:長得多的相干時間和非常高的閘保真度——操作的結果與你的意圖非常接近,錯誤極少。同一個阱中的離子還能透過它們共享的振動與許多夥伴相互作用,這讓雙量子位元閘變得靈活。
光子量子位元
第三條路線把量子位元編碼在單個光粒子——光子——之中。光子量子位元利用一個光子的某個非此即彼的自由度,比如它的偏振(垂直對水平)或者它走兩條路徑中的哪一條。最大的吸引力在於:光子幾乎不與周圍環境相互作用,所以它們能很好地保持狀態,而且不需要稀釋制冷機——許多光子系統在室溫下就能運行。而且既然光本來就在光纖和自由空間中傳播,光子便是在機器之間發送量子資訊的天然載體,這使它們非常適合通訊、組網以及量子密鑰分發。
但讓光子如此易於隔離的那種「漠不關心」,同樣也是它們的詛咒。兩個光子通常會徑直穿過彼此而毫無察覺,所以要構建一個雙量子位元閘——其中一個量子位元必須有條件地影響另一個——是真真切切地難。常見的變通做法依賴於測量和額外的「輔助」光子,而且只在一部分時候才成功,因此需要巧妙的方案才能變得可靠。出色的信使,彆腳的處理器。
# A 'qubit' in software is platform-agnostic: the same Qiskit # circuit can target a transmon, an ion, or a photonic backend. # The hardware differs; the logical description does not. from qiskit import QuantumCircuit qc = QuantumCircuit(2, 2) qc.h(0) # put qubit 0 into a superposition (a Hadamard gate) qc.cx(0, 1) # entangle qubit 1 with qubit 0 (a CNOT) qc.measure([0, 1], [0, 1]) # read out -> one outcome, by the Born rule print(qc) # ┌───┐ ┌─┐ # q_0: ─┤ H ├──■──┤M├─── # └───┘┌─┴─┐└╥┘┌─┐ # q_1: ──────┤ X ├─╫─┤M├ # └───┘ ║ └╥┘ # c: 2/════════════╩══╩═ # 0 1