比特 vs 量子比特
你已经熟悉经典比特了:它就像一个小开关,要么是 0,要么是 1。你手机里的每一张照片、每一条消息、每一个程序,在底层都是由这些确定的 0 和 1 组成的一长串。在任何一个瞬间,一个比特只有一个值,读取它只是告诉你它本来就已经是什么值。
量子比特就是这个开关的量子版本——但它遵循的是量子物理的规则,而不是日常的逻辑。在你测量它之前,一个量子比特可以处于 0 和 1 的混合之中,这种混合叫做叠加态。这里有个关键的诚实之处:这并不是说量子比特像文件夹里的两份文件那样偷偷同时存着一个 0 和一个 1。它是一个单一的量子态,由若干数字描述(我们很快就会认识它们),这些数字决定了你最终去看时每个结果出现的概率。
单个量子比特中的叠加
那么叠加态究竟给你带来了什么?想象一枚硬币。经典比特就像一枚平躺着的硬币——正面或反面,已成定局。而测量之前的量子比特更像一枚真正悬而未决的硬币,物理规律为它落在正面赋予了一个确定的概率,也为它落在反面赋予了一个确定的概率。诚实的部分在于接下来发生的事:就在你测量的那一瞬间,硬币恰好落在某一面上,而这唯一的结果就是你所能读到的全部。
人们很容易说量子比特「同时尝试 0 和 1」或者「一次性探索所有答案」。请抵制这种说法——它是量子计算中最大的迷思。处于叠加态的量子比特是一个状态,一次测量给出一个比特。量子计算之所以有可能胜过经典计算机,并不是因为你能同时偷看许多个答案。而是因为,在许多量子比特之间,你可以安排底层那些数字发生干涉——加强通向正确答案的路径,抵消掉错误的路径——从而让你测量到的那唯一一个结果,很可能正是你想要的那一个。这套精密的编排才是真正的引擎,而要做到这一点是相当困难的。
写出量子比特的状态
为了把这件事说精确,物理学家使用一套紧凑的记号。我们把两个确定的状态写作 |0> 和 |1>(读作「ket 零」和「ket 一」)——它们就是量子比特版本的普通 0 和 1。单个量子比特的一般量子态,用两个数字 alpha 和 beta 把它们混合起来,这两个数字叫做振幅。
|psi> = alpha|0> + beta|1>, |alpha|^2 + |beta|^2 = 1
最后那条规则,|alpha|^2 + |beta|^2 = 1,就是缩微版的玻恩规则:把每个振幅的大小平方一下,就得到那个结果出现的概率。注意,振幅比概率更丰富——它带有一个符号(更一般地说,是一个相位)。正是这个符号,使得叠加态之后能够彼此抵消或加强,这就是我们所说的、真正在干活的那种干涉。单凭概率永远不会变成负数,所以它们永远无法相互抵消;而振幅可以。
布洛赫球图像
随身带着两个复数有点别扭,所以有一幅很美的几何图像:布洛赫球。想象一个地球仪。北极是 |0>,南极是 |1>,而球面上其他每一个点都是一个合法的单量子比特态——某一个特定的叠加态。一个量子比特的状态,就是一支从球心指向这个球面上某处的箭头。
这幅图像让一切豁然开朗。从极点向赤道移动,意味着从「确定是 0」或「确定是 1」转向一个均匀的 50/50 叠加态。绕着竖直轴旋转,会改变相位——也就是振幅中那种类似符号的信息——而不改变测量的概率。这些绕赤道的旋转,对单次测量来说看起来是隐形的,然而它们至关重要,因为当多个量子比特协同工作时,正是相位使得干涉成为可能。
多个量子比特:2^n 个振幅
状态空间就是在这里急剧膨胀的。一个量子比特需要 2 个振幅(分别对应 |0> 和 |1>)。两个量子比特有四个基本状态——|00>、|01>、|10>、|11>——一般的状态需要 4 个振幅。三个量子比特需要 8 个。一般而言,n 个量子比特由 2^n 个振幅来描述,每一个 0 和 1 组成的可能字符串都对应一个振幅。
让它继续增长。到 50 个量子比特时,你就有超过一千万亿(即 10^15)个振幅;到 300 个量子比特时,振幅的数量超过了可观测宇宙中原子的总数。这就是为什么在经典计算机上模拟一台量子计算机会如此残酷地困难——光是存下所有这些振幅,超过几十个量子比特后就已经不可能了。这个空间的规模,正是量子计算所倚仗的资源。
最后,给这个领域今天所处的位置打一剂现实:我们正处于 NISQ 时代——含噪声的中等规模量子设备,拥有数十到几百个并不完美的量子比特。目前还没有大规模的、纠错的量子计算机。2^n 这个状态空间是真实而强大的,但要可靠地驾驭它,仍是一个尚未解决的工程挑战,而不是一件已经完工的成品。