“我想我可以有把握地说,没有人理解量子力学。”——理查德·费曼
量子计算这个话题一直让科技作家和记者着迷。 它的计算潜力和复杂性赋予了它一定的神秘光环。 很多时候,专题文章和信息图表详细描述了该行业的各种前景,而几乎没有触及其实际应用:这可能会误导不太专心的读者。
科普文章省略了对量子系统的描述,并做出如下陈述:
常规位可以是 1 或 0,但量子位可以同时是 1 和 0。
如果你很幸运(我不确定),你会被告知:
量子位处于“1”和“0”之间的叠加状态。
这些解释似乎都不可信,因为我们正在尝试使用在非常传统的世界中开发的语言来制定量子力学现象。 要想清楚地解释量子计算的原理,就需要使用另一种语言——数学。
在本教程中,我将介绍建模和理解量子计算系统所需的数学工具,以及如何说明和应用量子计算的逻辑。 另外,我会举一个量子算法的例子,告诉你它相对于传统计算机的优势是什么。
我会尽力用清晰的语言解释这一切,但我仍然希望本文的读者对线性代数和数字逻辑有基本的了解(线性代数涵盖
首先,让我们回顾一下数字逻辑的原理。 它基于使用电路来进行计算。 为了使我们的描述更加抽象,让我们将电线的状态简化为“1”或“0”,这将对应于“开”或“关”状态。 通过按一定顺序排列晶体管,我们将创建所谓的逻辑元件,这些元件采用一个或多个输入信号值,并根据布尔逻辑的某些规则将它们转换为输出信号。
常见逻辑门及其状态表
基于这些基本元素的链,可以创建更复杂的元素,并且基于更复杂元素的链,我们最终可以期望获得中央处理器的类似物。
正如我之前提到的,我们需要一种以数学方式表示数字逻辑的方法。 首先,我们来介绍一下数学传统逻辑。 使用线性代数,值“1”和“0”的经典位可以表示为两个列向量:
左边的数字是
身分 | 身份转变 |
在否定 | 拒绝 |
常数-0 | 常数“0”的计算 |
常数-1 | 常数“1”的计算 |
基于我们提出的新的位表示,使用向量变换对相应位执行操作非常容易:
在进一步讨论之前,让我们先看一下这个概念
同
现在我们已经掌握了几乎所有必要的数学概念,让我们继续讨论第一个量子逻辑门。 这是运营商
该运算符可以表示为以下变换向量:
为了演示到目前为止我们所介绍的所有内容,我将向您展示如何在多个位上使用 CNOT 元素:
总结一下已经说过的内容:在第一个示例中,我们将 |10⟩ 分解为其张量积的一部分,并使用 CNOT 矩阵来获得该积的新对应状态; 然后我们根据前面给出的 CNOT 值表将其分解为 |11⟩。
因此,我们已经记住了所有有助于我们理解传统计算和普通位的数学规则,我们最终可以转向现代量子计算和量子位。
如果您已经读到这里,那么我有个好消息给您:量子位可以轻松地用数学方式表达。 一般来说,如果一个经典位(cbit)可以设置为|1⟩或|0⟩,则该量子位只是处于叠加状态,并且在测量之前可以同时为|0⟩和|1⟩。 测量后,它会折叠成 |0⟩ 或 |1⟩。 换句话说,一个量子位可以根据以下公式表示为 |0⟩ 和 |1⟩ 的线性组合:
哪里 a₀ и 一个₁ 分别表示幅度 |0⟩ 和 |1⟩。 这些可以被认为是“量子概率”,它代表一个量子位在测量后塌陷到其中一种状态的概率,因为在量子力学中,处于叠加状态的物体在固定后塌陷到其中一种状态。 让我们扩展这个表达式并得到以下结果:
为了简化我的解释,这是我将在本文中使用的表示形式。
对于这个量子位,崩溃到该值的机会 a₀ 测量后等于|a₀|²,以及崩溃到该值的机会 a₁ 等于 |a₁|²。 例如,对于以下量子位:
塌陷为“1”的几率等于 |1/ √2|²,即 50/50,即 XNUMX/XNUMX。
由于在经典系统中,所有概率之和必须为 0(对于完整的概率分布),我们可以得出结论,幅度 |1⟩ 和 |XNUMX⟩ 的绝对值的平方必须加起来为 XNUMX。 根据这些信息,我们可以制定以下等式:
如果您熟悉三角学,您会注意到这个方程对应于毕达哥拉斯定理(a²+b²=c²),也就是说,我们可以将量子位的可能状态图形化表示为单位圆上的点,即:
逻辑运算符和元素应用于量子位的方式与经典位的情况相同 - 基于矩阵变换。 到目前为止我们回忆过的所有可逆矩阵运算符,特别是 CNOT,都可以用于处理量子位。 此类矩阵运算符允许您使用量子位的每个幅度,而无需测量和折叠它。 让我举一个在量子位上使用否定运算符的示例:
在我们继续之前,让我提醒您,幅度值 a₀ 和 a₁ 实际上是
然而,为了简化解释,我们将在这里限制为实数。
似乎是时候讨论一些仅在量子计算背景下才有意义的逻辑元素了。
最重要的运算符之一是“Hadamard 元素”:它需要处于“0”或“1”状态的位,并将其置于适当的叠加状态,有 50% 的机会折叠成“1”或“0”测量后。
请注意,Hadamard 运算符的右下角有一个负数。 这是因为应用运算符的结果取决于输入信号的值:- |1⟩ 或 |0⟩,因此计算是可逆的。
Hadamard 元素的另一个重要点是它的可逆性,这意味着它可以采用适当叠加的量子位并将其转换为 |0⟩ 或 |1⟩。
这非常重要,因为它使我们能够在不确定量子位状态的情况下从量子态进行转换,因此也不会使其崩溃。 因此,我们可以基于确定性原理而不是概率性原理来构建量子计算。
仅包含实数的量子算子是它们自己的相反数,因此我们可以将算子应用于量子位的结果表示为状态机形式的单位圆内的变换:
因此,上图中所示状态的量子位在应用哈达玛运算后,将转换为相应箭头所示的状态。 同样,我们可以构造另一个状态机,该状态机将使用如上所示的否定运算符(也称为泡利否定运算符或位反转)来说明量子位的转换,如下所示:
为了在我们的量子位上执行更复杂的操作,我们可以链接多个运算符或多次应用元素。 基于串行变换的示例
也就是说,如果我们从位 |0⟩ 开始,应用位反转,然后进行 Hadamard 运算,然后进行另一个位反转,再次进行 Hadamard 运算,最后进行位反转,我们最终得到由 on 给出的向量链条的右侧。 通过将不同的状态机分层,我们可以从 |0⟩ 开始,跟踪与每个转换相对应的彩色箭头,以了解它是如何工作的。
既然我们已经走到这一步了,是时候考虑一种量子算法了,即:
让我们想象一下,您有一个黑匣子,其中包含一位函数/运算符(请记住 - 对于一位,只能执行四种操作:恒等转换、求反、常量“0”的求值和常量“1”的求值”)。 盒子里到底执行什么功能? 您不知道是哪一个,但您可以根据需要检查输入值的多种变体并评估输出结果。
您需要通过黑匣子运行多少个输入和输出才能找出正在使用哪个功能? 想一想这个问题。
对于经典计算机,您需要进行 2 次查询才能确定要使用的函数。 例如,如果输入“1”产生“0”输出,那么很明显,要么使用计算常数“0”的函数,要么使用求反函数,之后您将必须更改输入信号的值到“0”,看看出口处会发生什么。
对于量子计算机,还需要两个查询,因为您仍然需要两个不同的输出值来精确定义应用于输入值的函数。 然而,如果你稍微重新表述一下这个问题,就会发现量子计算机仍然具有很大的优势:如果你想知道所使用的函数是常数还是变量,量子计算机将具有优势。
如果输入信号的不同值在输出处产生不同的结果(例如,恒等转换和位反转),并且如果无论输入值如何输出值都不会改变,则框中使用的函数是可变的,则函数是常数(例如,计算常数“1”或计算常数“0”)。
使用量子算法,您可以仅根据一次查询来确定黑匣子中的函数是常量还是变量。 但在我们详细了解如何做到这一点之前,我们需要找到一种在量子计算机上构造每个函数的方法。 由于任何量子算子都必须是可逆的,我们立即面临一个问题:计算常数“1”和“0”的函数不是可逆的。
量子计算中使用的常见解决方案是添加一个额外的输出量子位,该输出量子位返回函数接收到的任何输入值。
До: | 后: |
这样,我们就可以仅根据输出值来确定输入值,并且函数变得可逆。 量子电路的结构需要额外的输入位。 为了开发相应的算子,我们假设附加输入量子位设置为|0⟩。
使用我们之前使用的相同量子电路表示,让我们看看如何使用量子运算符来实现四个元素(恒等变换、求反、常数“0”的求值和常数“1”的求值)中的每一个。
例如,您可以这样实现计算常数“0”的函数:
常数“0”的计算:
在这里我们根本不需要运算符。 第一个输入量子位(我们假设为 |0⟩)返回相同的值,第二个输入值返回自身 - 像往常一样。
对于计算常数“1”的函数,情况略有不同:
常数“1”的计算:
由于我们假设第一个输入量子位始终设置为 |0⟩,因此应用位反转运算符的结果是它始终在输出处产生一个 XNUMX。 和往常一样,第二个量子位在输出处给出自己的值。
当映射恒等变换算子时,任务开始变得更加复杂。 操作方法如下:
相同的变换:
这里使用的符号表示 CNOT 元素:顶线表示控制位,底线表示控制位。 让我提醒您,使用 CNOT 运算符时,如果控制位等于 |1⟩,则控制位的值会发生变化,但如果控制位等于 |0⟩,则保持不变。 由于我们假设顶线的值始终等于 |0⟩,因此它的值始终分配给底线。
我们以类似的方式处理否定运算符:
否定:
我们只需反转输出线末尾的位即可。
现在我们已经有了初步的了解,让我们看看量子计算机相对于传统计算机的具体优势,即仅使用一个查询来确定隐藏在黑匣子中的函数的恒定性或可变性。
为了在单个请求中使用量子计算来解决这个问题,有必要在将输入量子位传递给函数之前将它们置于叠加状态,如下所示:
Hadamard 元素被重新应用于函数的结果,以打破量子位的叠加并使算法具有确定性。 我们在状态 |00⟩ 下启动系统,如果所应用的函数是常数,则得到结果 |11⟩,原因我稍后会解释。 如果黑盒内的函数是可变的,则测量后系统返回结果|01⟩。
为了理解本文的其余部分,让我们看一下我之前展示的插图:
通过使用位反转运算符,然后将 Hadamard 元素应用于等于 |0⟩ 的两个输入值,我们确保它们被转换为 |0⟩ 和 |1⟩ 的相同叠加,如下所示:
使用将此值传递给黑盒函数的示例,很容易证明两个常量值函数都输出 |11⟩。
常数“0”的计算:
类似地,我们看到计算常数“1”的函数也产生 |11⟩ 作为输出,即:
常数“1”的计算:
请注意,输出将为 |1⟩,因为 -1² = 1。
通过同样的原理,我们可以证明,当使用这两个变量函数时,我们总是会在输出中得到|01⟩(假设我们使用相同的方法),尽管一切都有点复杂。
相同的变换:
由于 CNOT 是一个双量子位运算符,因此它不能表示为简单的状态机,因此需要根据两个输入量子位的张量积以及与 CNOT 矩阵的乘法来定义两个输出信号,如前所述:
通过这种方法,我们还可以确认如果否定函数隐藏在黑匣子中,则接收到输出值|01⟩:
否定:
因此,我们刚刚演示了一种情况,其中量子计算机明显比传统计算机更高效。
下一步是什么?
我建议我们到这里就结束了。 我们已经做得很好了。 如果您已经理解了我所介绍的所有内容,我想您现在已经很好地理解了量子计算和量子逻辑的基础知识,以及为什么量子算法在某些情况下比传统计算更高效。
我的描述很难被称为量子计算和算法的全面指南 - 相反,它是对数学和符号的简要介绍,旨在消除读者对科普来源强加的主题的想法(说真的,很多人真的无法理解)情况!)。 我没有时间讨论很多重要的话题,比如
如果你想系统化和结构化你关于量子计算机的知识, 非常 我建议你阅读
来源: habr.com