量子计算中的叠加
已完成
6 分钟
对于某些计算任务,量子计算提供指数加速。 这些加速之所以成为可能,要归功于量子力学的三种现象:叠加、干涉和牵连。
在使用量子开发工具包创建你的第一个 Q# 程序模块中,你使用叠加从量子位生成随机数字。 在此部分中,你将了解有关叠加的详细信息。
量子计算机是量子系统
量子计算机是可控制的量子机械设备,它们利用量子物理的属性来执行计算。 你可能见过或听过描述每个量子力学系统的薛定谔方程:
$$i \hbar \frac{\partial}{\partial t}\psi(t)= \hat H \psi(t).$$
此公式捕获波函数 $\psi(t)$(它表示量子系统的状态)和哈密顿算子 $\hat H$(它表示系统的能量)。 在这里,$t$ 是时间,$\hbar$ 是 Planck 常数。
你可能会认为你起初并没有选择银河冒险生活来了解量子力学和代数。 幸运的是,你不需要薛定谔方程来执行量子编程。 实际上,在编写量子算法时,没有人会想到薛定谔方程。 但我们可以用这个方程来帮助理解量子计算的一些概念。
薛定谔方程确定系统状态的演变,由波函数 $\psi$ 表示。 也就是说,给定时间 $t$,此公式可以帮助我们找到当时的系统状态。 每个波函数 $\psi$ 都与量子计算中的一个重要概念相关联:波函数的概率振幅。 概率振幅是一个复数,用于确定测量系统时获取特定结果的概率。
概率振幅是与传统计算的一个重要区别。 在量子计算中,我们不会将位描述为确定的事实状态。 而是会根据在观察位时发现这些状态的概率来描述位。
备注
在本模块中以及有关 Q# 的文档中,我们将 $\LaTeX$ 字体用于数学线性运算符,它将量子位状态转换为量子位状态。 相反,我们使用 code 字体来表示 Q# 运算,这些运算将量子位寄存器作为输入来转换其状态。 例如,线性运算符 $H$ 将输入状态 $|0\rangle$ 映射到状态 $H|0\rangle=\frac{1}{\sqrt2}(|0\rangle+|1\rangle)$,而运算 H 在量子位上作为 H(qubit) 将 qubit 的状态从 $|0\rangle$ 更改为 $\frac{1}{\sqrt2}(|0\rangle+|1\rangle)$。
什么是狄拉克符号表示法?
我们如何描述量子态?
狄拉克符号表示法是用于表示量子态的一种便利表示法。 在此表示法中,我们使用称为 kets $| \rangle$ 的符号来描述量子系统的可能状态。
例如,$|0\rangle$ 和 $|1\rangle$ 分别表示 0 个和 1 个量子态。 它们是一个量子比特的两个可能状态。 如果量子位的状态为 $|\psi\rangle = |0\rangle$,则表示在测量量子位时观察到 Zero 的概率为 100%。 同样,如果量子位处于 $|\psi\rangle =|1\rangle$ 状态,当我们进行测量时,它也会产生 One。
备注
量子力学中有许多关于测量概念的解释,但相关详情不在本模块的范畴内。 对于量子计算,无需担心这一点。 在这里,我们将测量理解为“观察”一个量子位的非正式概念,这会立即将量子叠加折叠为对应于传统值 0 和 1 的两种基本状态之一。
若要在量子力学上下文及其历史论述中详细了解测量,请参阅关于测量问题的维基百科文章。
什么是线性运算符?
我们可以对量子态进行度量,但也可以对其进行更改。 例如,我们可以将 $|0\rangle$ 状态转换为 $|1\rangle$ 状态。
运算符是对量子系统状态进行操作并将其转换为另一种状态的函数。
$$A |\psi\rangle = |\psi'\rangle$$
假设当运算符 $A$ 为线性,当它使用以下属性对复数 $a$ 进行加法和乘法运算时:
$$A( |\psi_1\rangle + |\psi_2\rangle) = A |\psi_1\rangle + A|\psi_2\rangle$$
$$A(a|\psi\rangle)=a A(|\psi\rangle)$$
线性运算符与量子叠加有什么关系?
薛定谔方程是一个线性方程。 这表明,如果 $|\psi_1\rangle$ 和 $|\psi_2\rangle$ 这两种状态是薛定谔方程(即有效量子态)的解,则状态的任意线性组合也是有效量子态:
$$|\psi\rangle=a |\psi_1\rangle+b|\psi_2\rangle.$$
$ |\psi_1\rangle$ 和 $|\psi_2\rangle$ 的线性组合称为 $ |\psi_1\rangle$ 和 $|\psi_2\rangle$ 的叠加。 在此,$a$ 和 $b$ 分别是 $ |\psi_1\rangle$ 和 $|\psi_2\rangle$ 的概率振幅。
记住,在使用量子开发工具包创建你的第一个 Q# 程序模块中,你使用了叠加来创建量子随机数生成器。 你使用了运算 H 将状态为 $|0\rangle$ 的量子位置于叠加中。
在数学上,方程为:$$ H |0\rangle = \frac1{\sqrt2} |0\rangle + \frac1{\sqrt2} |1\rangle.$$
线性是量子力学的基本属性,因此也是量子计算的基本属性。
备注
符号 $H$(不含 hat)引用量子运算符,也称为“Hadamard 门”。 你使用此运算符创建了量子叠加。 与此相反,符号 $\hat H$(含 hat)是指作为薛定谔方程的一部分的哈密顿运算符。
备注
有时,大家会说量子门而不是运算。 量子门一词是对传统逻辑门的类比。 它植根于量子计算的早期,当时算法只是一种理论构造。 它们已可视化为类似于传统计算中线路图的关系图。
量子计算机是概率计算机
传统计算机和量子计算机之间的根本区别在于,量子计算机中的程序本质上是概率性质的,而传统计算机通常是确定性的。 量子算法包括应用于量子位寄存器的线性运算,用于将状态修改为所有可能的特定叠加。 每个可能的状态都具有关联的概率振幅。 在进行测量时,将获得一个具有一定概率的可能状态。 该情况与传统计算相反,在传统计算中,一个位只能是确定的 0 或 1。
备注
虽然传统计算机的某些程序也是概率性的,但概率性传统程序无法提供可通过量子计算机获得的相同加速。 性能差异其实是由叠加、干涉和牵连所致。
这些特征意味着,有时必须多次运行该算法,以确保输出中出现最高概率的结果。 这种重复操作看似效率低下。 但在许多情况下,相比以传统方式解决任务,多次运行量子算法效率更高。
在下图中,可以看到量子位和位之间的简化比较:
下图显示了与每个简化的量子位关联的概率。
这些示例并不代表实际的量子位。 毕竟,硬币和大理石自动售货机不可能存在于叠加状态中。 但这些示例可帮助我们直观了解概率。 只有像离子或超导电路这样的量子系统才能以叠加态存在,从而实现量子计算的能力。
我们如何知道与给定叠加关联的概率呢? 假设我们有一个由两个量子位组成的寄存器,它可以处于四种可能的叠加状态:$$|\psi\rangle = a |00\rangle + b |01\rangle + c |10\rangle + d |11\rangle.$$
请记住,$a,b,c$ 和 $d$ 是复数,它们是每种状态的概率振幅。 它们的绝对值(例如 $|a|$,平方)提供相应的概率。 例如,观察到 $|00\rangle$ 的概率为 $P(00)=|a|^2$。 对于 $|01\rangle$,它为 $P(01)=|b|^2$,依此类推。
概率振幅的数字类型没有限制。 这些值可以为正数、负数甚至复数。 但是,在有效的量子叠加中,所有概率的总和必须为 1:$|a|^2+|b|^2+|c|^2+|d|^2=1$。 此约束通常称为“标准化条件”。 可以将标准化条件看作这样一个事实,即在测量时总是得到一个结果,因此测量每个可能结果的概率之和必须为 1。
在下图中,你将看到模拟量子叠加所需的参数数目随量子位的数目呈指数级增长。 这种增长并不意味着我们可存储在叠加中的信息会随着量子位的数量呈指数级增长。 毕竟,我们不能获取有关叠加的全部信息。 只能获得测量后的结果。
在我们为量子随机位生成器生成的示例状态 $|\psi\rangle=\frac1{\sqrt2} |0\rangle + \frac1{\sqrt2} |1\rangle$ 中,每种状态的概率为
$$P(0)=\left|\frac1{\sqrt{2}}\right|^2=\frac12;$$ $$P(1)=\left|\frac1{\sqrt{2}}\right|^2=\frac12.$$
每种状态的测量概率为 50%,因此我们提供了一个均衡的位生成器。 还可以检查 $\frac12 + \frac12 = 1$。
在下一部分中,你将使用 Q# 来了解如何准备不同的叠加量子位并检查其可能性。