什么样的量子比特才算好
到现在为止,你已经从抽象层面了解了量子比特:一个两能级量子系统,其状态为 |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