量子计算重新定义编程语言





人类将逐渐进入量子时代,量子计算正在悄然而至,作为程序员,你是否想过,如何在量子计算机中进行编程?你是否想过,我们现在的编程思维是否在量子计算编程中也同样可行?本期,我们就聊一聊有关量子计算的事情。本期节目极其简单,不需要任何量子物理学专业知识,因此,不要有任何负担。

网易云音乐:点击播放

企业FM:点击播放

喜马拉雅:点击播放

如果你觉得Robust这样一档技术类的谈话节目还不错,希望我继续做下去,不妨打赏支持。你可以扫描本文下方的二维码打赏,也可以加我微信后红包打赏。


以下是我的手稿原文:

什么是量子?

我们在讨论量子的时候,经常会涉及光子、质子,甚至夸克,这些人类已知甚至未知的最小物质微粒。但是,量子不是直接指微观世界的物质总和。

量子不是物质,也不是在描述物质的特征。

量子是对微观世界运动状态的概括,或者说,量子是对人类可观测的能量的存在形式的概括

为什么需要量子理论?

人类需要量子理论,从初衷出发,是为了解决人们对能量这种东西的本质进行研究的需要

和量子理论相对的,是经典物理学理论,包括经典的牛顿力学、热力学、电力学等物理理论。经典物理理论从宏观的角度去研究物质的性质和运动状态

量子理论和经典物理理论是两种不同的物理学范式,没有谁对谁错,都是经过证明的科学。极端的例子是,对于同一个现象,我们用经典物理学和量子理论去解释都可以解释通,但它们的结论可以正好相反。这种情况下,没有谁对谁错,都是对的。这听上去不可思议。但这就是科学,而量子理论中经典的物理实验,光究竟是波还是粒子的"双缝实验",就是在这样的科学趣味性中完成的。

波粒二象性,叠加态

我们虽然说这很有意思,有趣味,但对科学家来说,这简直就是毁灭它们三观的灵异事件。

20 世纪初,物理学家开始重点纠结一个纠结了上百年的问题:光,到底是波还是粒子?

很多著名科学家(牛顿、爱因斯坦、普朗克)做了很多权威的实验,确凿无疑地证明了光是一种粒子。

很多著名科学家(惠更斯、麦克斯韦、赫兹)做了很多权威的实验,确凿无疑地证明了光是一种波(具有干涉衍射现象),电磁波。

  • 粒子可分成一个一个的最小单位,单个粒子不可再分波是连续的能量分布,无所谓「一个波」或者「两个波」
  • 粒子是直线前进的波却能同时向四面八方发射
  • 粒子可以静止在一个固定的位置上波必须动态地在整个空间传播

托马斯·杨(Thomas Young,1773—1829)于1801年进行了一次光的干涉实验,即著名的杨氏双孔干涉实验,并首次肯定了光的波动性。于这个实验,科学界进行了一场更深入的对抗实验,及波派和粒派的对抗实验。这场实验虽然一开始是一场思想实验,但是在长达100年的时间中,逐渐成为现实实验。实验是这样的:

实验准备:双缝实验相关设备,光电设备,思想假设:如果光是波,那么会由于干涉产生斑马状条纹如果是粒子,那么由于粒子的直线运动,只会产生两条主要纹路

  1. 第一阶段:杨氏双缝实验。证明光是波。粒派不服,认为应该将光子一个一个发射。
  2. 第二阶段:一个一个发射光子穿过实验,仍然产生了斑马条纹。这个实验虽然证明了光是波,但是问题在于,一个一个光子穿过a、b两个缝之后,只有自己,怎么产生了衍射干涉呢?一个光子不可能自己和自己干涉呀。
  3. 第三阶段:在a、b两个缝上各自装上摄像头,观察光子是否在穿过缝之前发生了分裂,导致穿过缝之后才产生了干涉。实验结果是,光子只从一个缝穿过,没有发生分裂。但是,此时实验结果发生了变化,在背景幕布上,原本应该是斑马条纹的,结果现在变成了两条光斑。这说明光是粒子。但是和第二阶段相比,仅仅是安装了摄像机,而摄像机本身不会对光子产生影响,不会由于摄像机使原本为波的光变成粒子的光。这是怎么回事?
  4. 第四阶段:在光子穿过缝之后再将摄像机安装上去进行观测,从常识来讲,此时摄像机的观测毫无意义,因为光子已经穿过缝了,摄像机按道理既观察不到任何东西,也不会影响光子的运动轨迹。然而,事实是,幕布上仍然只有两条杠,证明光是粒子。这就是是 1978 年 惠勒 延迟选择实验。

这个实验的核心问题在于,我们是否用摄像机对光子穿过缝口进行了观测(或叫“测量”),如果观测,那么光是粒子,如果不观测,那么光是波。这是非常诡异的,观测这个动作影响了实验结果。我们可以想象,除了观测光子穿过缝口,我们还可以在其他地方进行观测,是否还会带来更复杂的结果呢?

如果不是有实验做支撑,我们很难在物理世界想象,人的主观行为,可以改变客观事实。人是否选择观测,改变了光的本质。这和中国古语“我思故我在”几乎一模一样,难道我们的客观世界要从唯物变成唯心?

并非如此。

测量与叠加态坍缩

量子理论通过新的方式解释波粒二象性。其中包括如下几点:

  • 在观测之前,光处于波粒叠加态中,即是波,也是粒子
  • 在观测发生后,叠加态发生坍缩,光子只有一种状态表现自己
  • 坍缩为什么状态,取决于我们观测的方式(用摄像机观测为粒子,不用摄像机观测为波)
  • 在没有观测的情况下,单个光子发生干涉了吗?发生了,也没有发生。从经典电磁学角度,光子发生干涉是因为光子在未被观察时,处于叠加态,一个光子有多个状态,因此,在穿过缝口后,不同态之间发生了衍射,从而产生了干涉现象。从量子理论出发,叠加态的本质是概率,一个光子是波的可能性是n, 是粒子的可能性是m, n+m=1,运动中的光子产生了概率波,虽然一个光子在运动过程中没有受到外力影响,但在概率波性质影响下,最终落在幕布上的什么位置,由该次运动的概率决定。而正是由于概率波的存在,所以在穿过两个缝口后,概率波发生了衍射和干涉,导致最终光子落在屏幕上形成了斑马条纹的分布效果。当然,这些都是在未进行观测,光处于叠加态时产生。一旦进行观测,叠加态坍缩,概率波就消失了。

“薛定谔的猫”这个思想实验实际上是用来嘲笑爱因斯坦提出的叠加态的,但最终成为用来解释叠加态的最好比喻。一只猫在一个房子里,我们没有看它时,它是死还是活呢?只有我们观测它的时候,它的状态才坍缩为其中一种,在我们观测之前,它处于非死非活的叠加态。

自旋与量子纠缠

当我们理解了叠加态,我们就可以来讨论量子纠缠。

量子纠缠的一个前提是叠加态中,每种状态的概率之和为1.

另一个前提是微观粒子无时无刻不在发生自旋。所谓自旋,跟地球的自转差不多,当然,还要抽象很多。一个电子,在我们没有观察它之前,它的自旋叠加态为“上旋”和“下旋”,两种状态的概率和为1. 当我们观测它时,坍缩为其中一种。

当有另外一个电子和这个电子发生量子纠缠时,它们所处的自旋状态完全相反,且相反状态的自旋概率之和为1,一般认为各自1/2. 当我们观测它们时,一个电子“上旋”,另一个电子“下旋”,但是它们的自旋概率之和为1.

一旦两个电子发生量子纠缠,那么无论将它们的距离拉到多大的距离,它们的纠缠都不会消失。即使在宇宙的两端,当我们观测其中一个电子时,如果这个电子为“上旋”态,那么不用想,另外一个电子一定是“下旋”态。

这也是平行宇宙的前提。

自旋系统是普遍现象,也是量子纠缠的前提。光子等电磁波具有偏振状态,光子具有左旋偏正光,右旋偏正光。电磁会产生磁极(类似磁铁),也可能是由于自旋系统带来的。

量子纠缠已经被实验证明过了。而且在一次公开的演示中,物理学家将特定物质特定设备处于极低温状态下,可以让一个物体悬浮在空中,并且可以以任意姿态悬浮,例如悬浮在所持物体的下方。这种应该就是未来宇宙飞船悬浮的基础理论。

但是,理想是丰满的,现实是骨感的。想要得到两个电子的量子纠缠状态,需要的条件极其苛刻,几乎是不可能。但是就是实现了,它所持续的时间也极其的短暂。

另外就是,处于量子纠缠的两个电子,同步状态的速度也受到各种条件的影响。目前已知的是,该速度是光速的几个数量级。量子纠缠可用于远程无线传输,包括传送信息,传输能量(如电),所有两个电子之间的连接的集合被成为量子隧道,量子隧道的距离也具有持续性。

要得到或者改变量子纠缠,需要消化极大的能量。

量子计算机

冯诺伊曼体系仍然成立:计算单元和存储单元。

量子比特。一个量子比特在存储单元中处于叠加态,通过观测来实现坍缩,得到确切值。例如我们现在有3个比特,对于经典计算机而言,它只能存一个数据,每一个比特必须是0或1中的一个,一旦数据被存储,那么就不可修改,我们得到了一个客观数据。但是对于量子计算机而言,3个比特位上处于同时存在0和1的叠加态,3个比特可以表示十进制0-7中的任意一个值,具体是哪个值,取决于我们的测量姿势。由于叠加态的本质是概率叠加,所以,我们不同的测量姿势得到的结果是不一样的,也就是说,如果不进行限制,这3个比特位给出的结果每一次都不同,具体是什么值,全凭概率。为了得到确切值,我们需要通过训练来得到需要的测量姿势,以保证我们得到需要的结果。

接下来是量子计算。同样这3个比特,和另外3个比特进行计算,比如相加,最终会得到什么呢?这里面涉及到叫“量子逻辑门操作”的幺正变换,单量子比特门和任意量子门等等。得到的结果取决于你的算法。量子计算机里面,算法本身包含了量子测量。但和经典计算机不同,量子比特由于叠加态,可以做到并行计算,但实现难度较大。比如,我们现在只有1个比特和另外1个比特进行相加,那么可能是 0+1, 0+0, 1+0, 1+1 它们各自的概率是1/4. 但是我们可以在计算结束之后采用不同的测量姿势去坍缩其叠加态,从而只得到一个结果,如果我们用另外一种姿势去测量,那么得到的就是另外一个结果。这两个结果都是我们想要的,只是我们观测方式不同,就同时得到它们了。并行计算则是在每一步运算中都按照这样的逻辑进行测量。当然这里面计算没那么简单,不然量子计算各种算法大家就不用研究了。

量子计算的本质和人工智能有点像,即通过一种算法找到概率最大的解(最优解)。量子计算要经过多次计算,才能找到最优解。量子本身的概率波特性,会在运算过程中发生干涉,形成强能量场,从而影响下一次计算。所以,实际上,多次运算过程中,后一次获得正确结果的概率大于前一次,如果执行的次数足够多,获得正确结果的概率几乎为1.

二进制序列。要形成存储单元的数据,必须进行二进制序列化,否则量子计算机只能做比特计算,不能形成操作系统等更高级的应用。要序列化量子比特,就必须依赖量子纠缠。通过纠缠在一起的量子,形成二进制序列化。

在量子计算机的物理实现层面上,有基于光子的量子计算机,也有基于光学共振腔量子电动力学的,实现比较复杂,不是普通环境能得到的。

“全球第一款商用型量子计算机”的计算设备“D-Wave One”,但是这台计算机只能做量子退火运算。也就是说,它不能执行其他的计算,因此算不算真正意义的量子计算机。目前来讲,谷歌和IBM的量子计算机应该走在最前面。

2019年10月24日,《自然》杂志刊发了谷歌公司的一篇论文。谷歌在该论文中表示,其开发出一款54量子比特数(其中53个量子比特可用)的超导量子芯片“Sycamore”。基于Sycamore,谷歌对一个53比特、20深度的电路采样一百万次只需200秒。而目前最强的经典超级计算机Summit要得到类似的结果,则需要一万年。基于这一突破,谷歌宣称其率先实现了“量子霸权”。

简单讲,量子霸权就是指在特定领域,量子计算机的计算能力超过现有最强经典计算机的能力。

量子计算下的编程

作为程序员,我们很想知道量子计算下的编程是怎样的。目前几乎所有的编程都是基于经典计算机的二进制进行编程的,所以,几乎所有编程语言都无法在量子计算机中运行。量子计算的编程基于叠加态的量子进行编程,比较知名的编程工具是 QPanda

首先假设有一台量子计算机,它有 2 个量子比特:1、2,接着对其中一个量子比 特(1)进行 H 门操作,构造了一个量子叠加态;并对1和2做 门操作,1为 控制量子比特,2为目标量子比特,最后对所有的量子比特进行测量操作。此时,将有 50%的概率得到 00 或者 11 的测量结果。

直观上讲,量子编程完全是在操作量子比特,即用代码的方式去控制量子观测,有点像最原始的计算机编程,比汇编还要古老,而非真正意义上的编程。

编程环境上,我们进行量子编程,直接在自己的电脑上进行,QPanda 会创建一个完全符合量子计算的虚拟机,这样,就可以在普通电脑上得到量子运算的结果。但是,要发挥量子运算的真正能力,必须将代码放到可运行的量子环境中跑,因为在自己的电脑上跑一年的代码,可能在量子计算机中只需要1秒。

微软也开源了量子编程语言 Q#,有兴趣的同学可以去看下。

2019-12-15 1953