经典比特
点它切换。无论何时看,它都只有一个确定的值。
量子计算机不是一台更快的普通电脑,它换了一种存储和处理信息的方式。这一页不推公式,从一枚硬币出发,用箭头、路径和柱子,一步步搭出一个真正的量子算法。
每一课只多一个新概念,并且都建立在上一课的基础上。建议按顺序读:先看文字,再在实验台上动手,最后看“要点”。全程约 30 分钟。
普通电脑里的一切,照片、文字、视频,最终都存成一长串 0 和 1。每一位叫一个比特(bit)。比特就像一个开关:要么关(0),要么开(1),任何时刻都是确定的。
量子计算机的基本单位叫量子比特(qubit)。先打个比方:它像一枚在桌上旋转的硬币。转着的时候,说不清它是正面还是反面,它同时带着两面的成分;只有拍下去看一眼,它才变成确定的一面。这个“看一眼”,在量子力学里叫测量。
点它切换。无论何时看,它都只有一个确定的值。
旋转时同时带着 0 和 1 的成分。测量后才倒成确定的一面。
硬币正在旋转:此刻它既不是 0,也不是 1。
真实的旋转硬币,每一刻其实都有确定的朝向,只是我们没看清。量子比特不一样:在测量之前,它确实没有确定的 0 或 1,这不是“我们不知道”,而是“它本来就没定”。
更重要的是,量子比特的两种成分带有正负号,正负可以互相抵消,硬币完全没有这种性质。第 5 课会看到,这正是量子计算的力量来源。所以硬币只是帮你入门,下一课换一种更准确的画法。
比特任何时刻只有一个确定的值。量子比特在测量前可以同时带有 0 和 1 的成分,测量时才变成确定的 0 或 1。
画一个圆,从圆心伸出一根长度为 1 的箭头。规定:箭头朝右,代表确定的 |0⟩;箭头朝上,代表确定的 |1⟩。
符号 | ⟩ 只是一个标签,表示“这是一个量子状态”,|0⟩ 读作“状态 0”就行。
箭头斜着指,就是 0 和 1 的叠加。给箭头打两束光,它在横轴上的影子长度记作 a,在竖轴上的影子长度记作 b。这两个数叫振幅。于是状态可以写成:
意思就是“含有 a 份的 0 和 b 份的 1”(|ψ⟩ 读作“psi”,是状态的名字)。
为什么 a² + b² 总等于 1?看图:两个影子和箭头正好围成一个直角三角形,箭头是斜边,长度为 1。这就是勾股定理。这个“平方和等于 1”马上会在下一课派上大用场。
这根箭头也不完全是比喻。光子(光的最小单位)的偏振方向就可以这样画:水平偏振当作 |0⟩,竖直偏振当作 |1⟩,斜着 45° 的偏振就是两者等量的叠加。
量子比特的状态 = 一根长度为 1 的箭头。它在两个方向上的影子 a、b 叫振幅,总满足 a² + b² = 1。箭头斜着就是叠加。
箭头本身是看不见的。我们能做的只有测量,而一次测量只会给出一个答案:0 或 1。
结果是随机的,但概率由箭头决定。得到 0 的概率是 a²,得到 1 的概率是 b²。上一课的 a² + b² = 1,正好保证两个概率加起来是 100%。这条规则叫玻恩规则。
测量会改变状态。测完之后,箭头不再斜着,而是直接倒在得到的那根轴上,这叫塌缩。原来的 a 和 b 就此丢失,之后再测多少次,都只会得到同一个结果。
拿光子来说:测量就像让它穿过一片水平方向的偏振片,穿过去记为 0,被挡住记为 1。45° 偏振的光子,有一半机会穿过去;而穿过去的光子,偏振就变成了水平,这就是塌缩。
拖动滑块准备一个量子比特,再试试测量。
那怎么才能知道一根箭头原来的角度?只能把同样的量子比特重新准备很多份,每份测一次,看 0 和 1 各占多少。注意是重新准备,而不是复制:量子力学不允许把一个未知的量子状态原样复制一份,这叫不可克隆定理。
测量只给出 0 或 1,概率是振幅的平方。测完箭头塌缩,原来的振幅信息丢失。要了解一个状态,只能反复准备、反复测量,看统计结果。
普通电脑用“与”“或”“非”这样的逻辑门改变比特。量子计算机用量子门改变量子比特,在我们的图里,就是让箭头换个方向。量子门有两条规矩:
箭头长度始终是 1。否则概率加起来就不是 100% 了。
每一步都能倒着做回去。量子门不会丢失信息(会丢信息的是测量)。
先认识一个新情况:箭头也可以指向左边或下面。这时振幅是负数,比如 −0.71。负号不影响概率,因为 (−0.71)² 和 0.71² 一样都是 0.5。看起来负号没用,但它是下一课的主角。
最常用的三个量子门,在这张图里恰好都像一面镜子:箭头以红色虚线为镜面,翻到对面去。
X 门(翻面):把 |0⟩ 和 |1⟩ 对调,相当于经典的“非”门。镜子是 45° 斜线。
Z 门(改符号):把 |1⟩ 那一份的振幅变号,0.71 变成 −0.71。镜子是横轴。它不改变任何概率。
H 门(Hadamard 门,对半分):把 |0⟩ 变成 0.71|0⟩ + 0.71|1⟩,把 |1⟩ 变成 0.71|0⟩ − 0.71|1⟩。镜子是 22.5° 斜线。
这里的 0.71 是 1/√2 的近似值,0.71² ≈ 0.5,也就是“一半”。
量子门改变箭头方向但不改变长度,而且可以撤销。X 对调 0 和 1,Z 改变 |1⟩ 的符号,H 制造(或消除)一半一半的叠加。振幅可以是负数。
为什么按两次 H 会回到 |0⟩?换个角度看:把 H 门想成一个岔路口,每经过一次,状态就分成“去 |0⟩”和“去 |1⟩”两条路。两次 H,就是两层岔路。
沿着这些路算振幅,只需要两条规则:
沿一条路走,振幅相乘。每过一个 H 门乘 0.71;其中只有“从 |1⟩ 走到 |1⟩”这一种走法要额外乘 −1(这就是上一课 H 门定义里的那个减号)。
几条路到达同一个结果,振幅相加。加完再平方,才是这个结果的概率。
因为振幅能正能负,相加时就有两种情况:同号相加会变大,叫相长干涉;异号相加会抵消,叫相消干涉。这和两列水波相遇一样:波峰叠波峰,浪更高;波峰遇波谷,水面变平。
硬币的比喻在这里彻底失效了。普通的概率只能是正数,几种可能性加在一起只会更大,永远不会抵消。正是“振幅可以为负”这一点,让量子计算机和“随机抛硬币”有了本质区别。
量子算法的核心,就是精心安排这些路径:让通向错误答案的路径互相抵消,让通向正确答案的路径互相加强。最后一测量,正确答案就有很大概率出现。第 8 课会看到一个完整的例子。
振幅沿路径相乘、在终点相加。正负抵消叫相消干涉,同号加强叫相长干涉。量子算法就是靠干涉,把概率集中到正确答案上。
两个量子比特放在一起,测量结果可能有 4 种:|00⟩、|01⟩、|10⟩、|11⟩。左边那位是第一个量子比特,右边那位是第二个,比如 |01⟩ 表示“第一个是 0,第二个是 1”。
要完整描述这两个量子比特,就要给这 4 种结果各配一个振幅,规则和单个时一样:平方是概率,所有平方加起来等于 1。
每多一个量子比特,可能的结果就翻一倍:3 个有 8 种,4 个有 16 种,n 个有 2ⁿ 种,振幅也就有 2ⁿ 个。
内存按最直接的存法估算:每个振幅约 16 字节(一般情况下振幅是复数,要存两个小数)。
这就是普通电脑很难模拟量子计算机的原因:每多一个量子比特,要存的数字就翻一倍。几十个量子比特,就足以让最大的超级计算机吃力。
不过要当心一个流行说法:“n 个量子比特能同时计算 2ⁿ 个答案”。振幅确实有 2ⁿ 个,可是第 3 课说过,测量只会给出一个结果,其余的全部丢失。想利用这片巨大的空间,只能靠第 5 课的干涉。
n 个量子比特有 2ⁿ 种可能结果,需要 2ⁿ 个振幅来描述,普通电脑模拟它的代价随 n 指数增长。但测量一次仍然只得到一个结果。
前面的门都只作用在一个量子比特上。CNOT(受控非门)作用在两个量子比特上,一个叫控制位 A,一个叫目标位 B。规则很简单:如果 A 是 1,就把 B 翻面;如果 A 是 0,B 不动。
如果 A 是确定的 0 或 1,CNOT 就是个普通的条件开关。有趣的是 A 处在叠加中的时候:A 同时带着 0 和 1 的成分,于是“翻”和“不翻”两种情况同时发生。下面一步一步看。
最后的状态 0.71|00⟩ + 0.71|11⟩ 里,只剩“都是 0”和“都是 1”两种可能。它没法拆成“A 自己的一根箭头”加上“B 自己的一根箭头”:单说 A 是什么状态,已经没有意义了。这就是纠缠。
把这对纠缠的量子比特,一个送到北京,一个送到上海,两边同时测量。和“两枚互不相关的硬币”对比一下:
点击测量,看看两边的结果。
纠缠的一对:每一边单独看,都是 50/50 的随机,可两边的结果永远相同。互不相关的两个:四种组合都会出现。
你可能会想:这和把一双手套分装进两个盒子有什么区别?打开一个看到左手,自然知道另一个是右手,结果早在出发前就定了。
只沿同一个方向测量,确实分辨不出来。1964 年,物理学家贝尔想出了检验办法:让两边各自随机换用不同的测量方向(相当于把第 3 课的偏振片转个角度),再统计两边结果的一致程度。任何“事先约好”的方案,这个一致程度都有一个上限;量子力学预言纠缠会超过这个上限。几十年来的实验一次次证实了量子力学的预言,相关实验工作获得了 2022 年诺贝尔物理学奖。
但纠缠不能用来超光速传消息:北京这边看到的永远只是随机的 0 和 1,在和上海对照结果之前,得不到任何信息。它真正的用处,是让很多量子比特协同起来,形成普通比特表达不了的关联。
H 加 CNOT 就能制造纠缠:两个量子比特单独看都随机,合起来看完全相关,而且这种关联无法用“事先约好”来解释。纠缠不能传递信息。
3 个量子比特有 8 种结果(000 到 111)。把它们想象成 8 个盒子,其中一个藏着答案。普通电脑只能一个个打开检查,平均大约要开一半,也就是 4 个左右。
Grover 搜索算法是这样做的:
准备:对 3 个量子比特各做一次 H 门,得到 8 种结果的均匀叠加。每个振幅都是 0.35(即 1/√8),概率都是 12.5%。
标记:用一个“检查答案”的线路,把答案那一格的振幅变成负数(就像 Z 门)。概率是平方,所以单看这一步,什么都没变。
绕平均值翻转:以所有振幅的平均值为镜子,每一格翻到镜子另一侧,离镜子的距离不变。答案那一格原本远在镜子下方,翻上去就变得最高;其余各格只比镜子高一点,翻下去就变矮。这一步本质上是一次精心设计的干涉。
重复第 2、3 步合适的轮数,然后测量。
你可能会问:能“标记答案”,不就已经知道答案了吗?其实不然。检查一个答案对不对,往往比找到它容易得多。比如数独:检查一份填好的答案是否正确,几秒钟的事;从头解出来就难多了。Grover 算法只需要“会检查”,不需要事先知道答案在哪。
盒子越多,优势越明显:100 万个盒子,普通方法平均要检查约 50 万次,Grover 大约 800 轮就够(轮数约为盒子数的平方根)。这叫平方级加速,很可观,但并不是“一步就找到”。
Grover 算法 = H 门制造均匀叠加 + 反复“标记、翻转”。每一轮都用干涉把答案的振幅放大一点。它只需要会检查答案,搜索速度提升到平方根级别。
任何有两个可以区分的状态、又能维持叠加的微小物理系统,都可以拿来当量子比特。几条主要路线:
芯片上的微型电路,冷却到比外太空还冷得多的约百分之一开尔文时,电流毫无阻力,表现出量子行为。用微波脉冲来做量子门。
用电磁场把单个带电原子悬在真空中,一字排开,再用激光照射来做量子门。
用聚焦的激光像镊子一样夹住单个原子,排成阵列,也用激光操作。
就是第 2、3 课里的偏振。光子跑得快、不怕热,但让两个光子相互作用很难。
量子比特只要和外界发生一点点作用,比如热、振动、杂散的电磁场,叠加和纠缠就会慢慢消散,这叫退相干。计算必须赶在它消散之前做完。
每个量子门都有一点误差,步骤一多就会累积。解决办法是量子纠错:用许多个物理量子比特合成一个更可靠的“逻辑量子比特”,代价可能是上百甚至上千比 1。
量子比特越多,布线、控制和互相干扰的问题就越复杂。比特的数量和质量要同时提高,才能运行真正有用的算法。
量子计算机更像一种专用工具,而不是更快的电脑。它最大的挑战是让脆弱的量子比特又多、又准、又能坚持足够久。
说明:为了直观,本页的箭头只画了振幅为实数(正数或负数)的情况。完整描述一个量子比特,振幅一般是复数,要用三维的“布洛赫球”来画;正负号在那里推广成了“相位”。但本页建立的直觉,包括概率是振幅的平方、正负能抵消、测量会塌缩,在完整理论里都同样成立。