“我可以肯定地说,没有人了解量子力学,”理查德·费曼(Richard Feynman)
量子计算的话题一直吸引着技术作家和新闻工作者。 她的计算潜力和复杂性给了她一种神秘的光环。 主题文章和信息图表经常详细描述该行业的各种前景,而几乎没有涉及其实际应用的问题:这可能会误导一个不太谨慎的读者。
在科普文章中,省略了对量子系统的描述,并给出了以下语句:
常规位可以等于“ 1”或“ 0”,但是一个量子位可以同时等于“ 1”和“ 0”。如果您很幸运(我不确定),那么他们会告诉您:
量子位在“ 1”和“ 0”之间重叠。这些解释似乎都不合理,因为我们正在尝试使用在非常传统的世界中创建的语言工具来表达量子力学现象。 为了清楚地解释量子计算的原理,有必要使用另一种语言-数学。
在本指南中,我将讨论建模和理解量子计算系统所需的数学工具,以及如何说明和应用量子计算的逻辑。 此外,我将举一个量子算法的例子,并说明它比传统计算机有什么优势。
我将尽一切努力以一种可理解的语言来谈论所有这些,但是我仍然希望本文的读者对线性代数和数字逻辑有基本的了解(线性代数
在这里描述,数字逻辑在
这里 )。
首先,让我们回顾一下数字逻辑的原理。 它基于电路的使用进行计算。 为了使我们的描述更加抽象,我们将导线的状态简化为“ 1”或“ 0”,这将对应于“ on”或“ off”状态。 按一定顺序构建晶体管后,我们将创建所谓的逻辑元件,这些逻辑元件将根据布尔逻辑的某些规则将输入信号的一个或多个值转换为输出信号。
通用逻辑元素和状态表
根据这些基本元素的链,您可以创建更复杂的元素,而根据更复杂的元素的链,我们最终可以依赖于获得高度抽象的中央处理器的类似物。
如前所述,我们需要一种数学上映射数字逻辑的方法。 首先,让我们介绍传统的数学逻辑。 使用线性代数,值“ 1”和“ 0”的经典位可以表示为两个列向量:
其中左边的数字是
Dirac向量
符号 。 通过以这种方式表示我们的位,我们可以使用向量变换对位进行逻辑运算建模。 请注意:尽管在逻辑元素中使用两位时,使用一位时仍可以执行许多操作(“与”(AND),“不”(NOT),“排除或”(XOR)等)。这些位只能执行四个操作:身份转换,取反,常数“ 0”的计算和常数“ 1”的计算。 在相同的转换期间,该位保持不变,如果取反,则该位的值将反转(从“ 0”到“ 1”或从“ 1”到“ 0”),并且常数“ 1”或“ 0”的计算会将位设置为“ 1”或“ 0”,无论其先前的值如何。
基于我们对位的新表示,使用矢量变换对相应位执行操作非常容易:
在继续之前,让我们看一下
可逆计算的概念,它仅意味着为了确保操作或逻辑元素的可逆性,有必要根据输出信号和所用操作的名称来确定输入信号值的列表。 因此,我们可以得出结论,恒等变换和求反是可逆的,但是计算常数“ 1”和“ 0”的操作则不是。 由于量子力学的
统一性 ,量子计算机仅使用可逆操作,这就是我们将重点放在它们上的原因。 接下来,我们将不可逆元素转换为可逆元素,以确保它们可以被量子计算机使用。
使用单个位的
张量积,可以表示很多位:
现在我们有了几乎所有必要的数学概念,我们将继续研究第一个量子逻辑元素。 这是
CNOT运算符,或受控的“ NOT”(NOT),在可逆和量子计算中非常重要。 CNOT元素应用于两位,并返回两位。 第一位分配为“控制”,第二位分配为“控制”。 如果控制位设置为“ 1”,则控制位会更改其值; 如果控制位设置为“ 0”,则控制位不会改变。
该运算符可以表示为以下转换向量:
为了演示我们已经处理的所有内容,我将向您展示如何针对许多位使用CNOT元素:
我们总结一下已经说过的内容:在第一个示例中,我们将|10⟩分解为其张量积的一部分,并使用CNOT矩阵获得乘积的新状态。 然后根据前面给出的CNOT值表将其分解为|11⟩。
因此,我们记住了所有有助于我们处理传统计算和普通位的数学规则,最后我们可以继续使用现代量子计算和量子位。
如果您读过这个地方,那么对您来说是个好消息:量子位可以很容易地用数学表示。 通常,如果可以将经典位(cbit)设置为|1⟩或|0⟩,则量子位只是简单地叠加,并且在测量之前可以等于|0⟩和|1⟩。 测量后,它在|0⟩或|1⟩处塌陷。 换句话说,根据以下公式,量子位可以表示为|0⟩和|1⟩的线性组合:
其中a₀和a₁分别代表幅度|0⟩和|1⟩。 它们可以被认为是“量子概率”,它表示量子位在测量后崩溃为任何状态的概率,因为在量子力学中,叠加后的物体在固定后会崩溃为其中一种状态。 扩展此表达式并获得以下信息:
为了简化我的解释,我将在本文中使用这个概念。
对于此量子位,测量后到
a₀的坍塌几率是| ₀|²,倒塌为₁的机会等于| a₁|²。 例如,对于以下量子位:
“ 1”崩溃的可能性是| 1 /√2|²,即½,即50/50。
由于在经典系统中,所有概率必须加起来为1(对于完整的概率分布),因此可以得出结论:幅度|0⟩和|1⟩的绝对值的平方必须总计为1。 基于此信息,我们可以组成以下方程式:
如果您熟悉三角学,您会发现该方程式对应于勾股定理(a²+b²=c²),也就是说,我们可以在单位圆上以点的形式用图形表示量子位的可能状态,即:
逻辑运算符和元素以及基于矩阵变换的经典位都适用于qubit。 到目前为止,我们记得的所有可逆矩阵运算符(尤其是CNOT)都可以用于qubit。 这样的矩阵运算符使得可以使用量子位的每个幅度而无需对其进行测量和折叠。 让我举一个使用求反运算符来量子化的例子:
在继续之前,我记得振幅a₀和
a actually实际上是
复数 ,因此量子位状态可以最精确地显示在三维单位球体上,也称为
Bloch球体 :
但是,为了简化说明,在此我们将自己限制为实数。
似乎该讨论一些仅在量子计算中有意义的逻辑元素了。
最重要的运算符之一是“ Hadamard元素”:需要一点点处于“ 0”或“ 1”状态,并将其置于相应的叠加中,测量后有50%的机会将其折叠为“ 1”或“ 0”。
请注意,Hadamard运算符的右下角有一个负数。 这是因为使用运算符的结果取决于输入信号的值:-|1⟩或|0⟩,因此计算是可逆的。
与Hadamard元素有关的另一个重要点是它的可逆性,也就是说,它可以在相应的叠加中取一个qubit并将其转换为|0⟩或|1⟩。
这是非常重要的,因为它允许我们从量子状态转换而无需确定量子位的状态-并且因此无需崩溃。 因此,我们可以基于确定性原理而不是概率性原理来构造量子计算。
相反,仅包含实数的量子算子相反,因此我们可以以状态机的形式给出将算子应用于量子位的结果,作为单位圆内的转换:
因此,在应用Hadamard操作后,其状态如上图所示的qubit转换为相应箭头指示的状态。 类似地,我们可以构造另一个状态机,该状态机将使用否定运算符来说明qubit的转换,如上所示(也称为Pauli求反运算符或位求反),如下所示:
要使用我们的qubit执行更复杂的操作,您可以使用许多运算符链或多次应用元素。 基于
量子链表示的串行转换的示例如下:
也就是说,如果我们从位|0⟩开始,先进行位反转,然后进行Hadamard运算,然后再进行另一位反转,再进行Hadamard运算,然后进行最后的位反转,就可以得到向量在链的右侧。 通过将各种状态机相互叠加,我们可以从|0⟩开始并跟踪与每个转换相对应的彩色箭头,以了解其工作原理。
既然我们走了这么远,是时候考虑一种量子算法,即
Deutsch-Joji算法了 ,并展示出它在经典计算机上的优势。 值得注意的是,Deutsch-Yogi算法是完全确定性的,也就是说,它在100%的情况下返回正确的答案(与许多其他基于量子位确定的量子算法不同)。
假设您有一个黑匣子,其中包含一个在一个位上的函数/运算符(请记住-使用一位时,只能执行四个操作:相同地变换,求反,计算常数“ 0”和计算常数“ 1”)。 盒子中执行什么功能? 您不知道是哪一个,但是,可以根据需要选择尽可能多的输入值变体,并在输出中评估结果。
通过黑匣子必须驱动多少个输入和输出信号才能找出使用了哪个功能? 想一想。
对于经典计算机,您将需要进行两次查询才能确定所使用的功能。 例如,如果您输入“ 1”,则输出为“ 0”,则很明显使用了用于计算常数“ 0”的函数或取反函数,然后您必须将输入信号的值更改为“ 0”,然后看看会发生什么情况。在出口处。
对于量子计算机,由于还需要两个不同的输出值来确定应用于输入值的确切函数,因此您还将需要两个查询。 但是,如果我们稍微重新提出这个问题,事实证明量子计算机仍然具有很大的优势:如果您想确定所使用的函数是常数还是变量,则优势将在量子计算机方面。
框中使用的函数是变量,如果输入信号的不同值在输出端给出不同的结果(例如,相同的转换和位的反转),并且如果输出值与输入值无关而没有变化,则该函数为常数(例如,计算常数“ 1”或常数“ 0”的计算)。
使用量子算法,您可以仅根据一个请求确定黑盒中的函数是常量还是变量。 但是在详细研究如何执行此操作之前,我们需要找到一种方法,使我们能够在量子计算机上构造所有这些功能。 由于任何量子算符都必须是可逆的,因此我们立即遇到一个问题:用于计算常数“ 1”和“ 0”的函数不是。
在量子计算中,通常使用以下解决方案:添加了一个附加的输出qubit,它返回该函数接收的输入信号的任何值。
因此,我们可以仅根据在输出处获得的值来确定输入值,并且该函数变为可逆的。 量子电路的结构产生了对额外输入位的需求。 为了开发相应的运算符,我们假定附加输入qubit设置为|0⟩。
应用我们之前使用的相同的量子链表示,我们将看到如何使用量子算子来实现四个元素(恒等变换,求反,常数“ 0”的计算和常数“ 1”的计算)中的每一个。
例如,通过这种方式,您可以实现计算常数“ 0”的功能:
常数“ 0”的计算:在这里,我们根本不需要运算符。 第一个输入qubit(等于|0⟩)将返回相同的值,第二个输入值将返回自身-像往常一样。
使用用于计算常数“ 1”的函数,情况略有不同:
常数“ 1”的计算:由于我们接受到第一个输入qubit始终设置为|0⟩,因此,由于应用了位求反运算符,它始终在输出处给出一个。 并且像往常一样,第二个量子位在输出中给出其自己的值。
当显示身份转换运算符时,任务开始变得更加复杂。 方法如下:
身份转换:此处使用的符号表示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⟩, :
:, , , .
?
. . , , , , , .
— , , , - (, !). — ,
,振幅值|0⟩和|1⟩的复杂性以及Bloch球进行转换期间各种量子逻辑元素的功能。如果您想系统化和构建量子计算机的知识,我强烈建议您阅读Emma Strubel的“量子算法入门:尽管有大量的数学公式,但本书更详细地讨论了量子算法。