量子计算机真的不只存在在科幻小说里吗?它和普通计算机有何区别?和咱普通程序员又有何关系。本篇文章专治不明觉厉,希望带你一探量子计算机的究竟!
2001年的时候,IBM发表文章说“在未来的几十年里,量子计算机很可能会走出科幻小说与科研实验室(主要在IBM)进入实际应用。”
现在这句话已经成为了现实,并且只用了十几年的时间。在本周三,IBM的科学家首次将该公司的量子计算机接入云端服务向大众公开。科技的发展总是令人震惊不已。并且IBM希望几年之内就能开发出可用于量子计算机的实验芯片。目前,IBM还没有正式公开量子计算服务,但是有兴趣的朋友可以登录IBM Quantum申请试用。
IBM正在研发的是基于超导效应的量子逻辑门架构的通用量子计算机。对于量子计算机,国内媒体报道转载的很多,不过大多基本停留在翻译英文媒体的水平。而且互相转发,鲜有原创或者类似电子产品的试用评测。本文作者者恰好做过量子加密的研究和实验,对于量子计算也有兴趣,而且作者的专业之一光子学(Photonics)恰好也是量子加密/量子计算的物理实现途径之一。
所以我们特约了一篇从浅入深,老少咸宜的科普介绍,来给大家解说量子计算机的原理,和普通计算机的区别,与咱们程序员有什么关系,并且作者还利用IBM的开放服务做了一些评测。希望没有任何专业背景的读者能从本文管窥全豹,同时对于拥有相关背景知识(主要是大学物理、量子力学和数字电路/模拟电路)的读者也能有所收获。
量子计算机的发明历史
史蒂芬·威斯纳在1969年最早提出“基于量子力学的计算设备”。1980年代一系列的研究使得量子计算机的理论变得丰富起来。在1981年五月的MIT物理学和计算机技术的一次会议上,1918年出生的美国物理学家理查德·费曼,作了一个“Simulating Physics With Computers”的报告,揭开了研究发展量子计算机的新篇章。
费曼在报告中提出:经典的图灵计算机可以用来模拟量子物理吗?答案是否定的,用传统计算机来模拟量子力学,计算量将随着系统(微观粒子数)的增大而指数增加。费曼认为微观世界的本质是量子的,想要模拟它,就得用和自然界的工作原理一样的方式,也就是量子的方式才行。费曼首先将物理学和计算机理论联系到一起,他在MIT会上精彩的演讲,使得计算机科学家开始关注物理学的进展,关注量子力学。
1994年,贝尔实验室的专家彼得·秀尔(Peter Shor)证明量子计算机能做出离散对数运算,而且速度远胜传统电脑。
2011年5月11日,加拿大的D-Wave 系统公司发布了一款号称“全球第一款商用型量子计算机”的计算设备“D-Wave One”。
2013年5月,谷歌和NASA在加利福尼亚的量子人工智能实验室发布D-Wave Two。
什么是量子计算
量子计算是一门理论科学。它是研究如何直接应用量子力学现象(例如量子叠加态和量子纠缠态)对数据进行操作的计算系统的科学。在最终的运算结果上,量子计算机和现有计算机没有任何不同(否则一定是有一方算错了,那算错的一方也就没有什么实用价值了)。它们最大的不同之处在于运算的过程有着天壤之别,后文将会详细解释。
量子计算模型,主要有3种:
● 量子电路模型
● 单向量子计算模型
● 绝热量子计算模型
1. 量子电路模型
量子电路模型(Quantum circuit model)是把量子计算过程化成像经典计算一样有不同的“逻辑门”(当然是quantum operation)作用在量子态上,最后得到所期待的量子态。
2. 单向量子计算模型
单向量子计算模型 (one-way quantum computation model) 是把量子计算,化成通过传输(teleportatio)和测量二维簇态(two dimensional cluster state),使得我们可以得到我们想要的量子门操作(quantum gates)。
3. 绝热量子计算模型
绝热量子计算模型(adiabatic quantum computation model)是通过先把问题划归成复杂的汉密尔顿量的基态(Hamiltonian ground state)的问题(即找到基态就可以找到最终结果),然后开始与一个简单的汉密尔顿量,通过绝热过程最后得到所需要的基态。
量子计算机比传统计算机优越在哪里?
量子计算机造出来了,依然需要优秀的算法。就像我们日常所用的电子计算机中的排序问题,写得好的算法基本可以做到O(n*log(n))的时间复杂度,而差的算法很可能就是O(n^2)了。
举一个非常实用的例子:快速傅立叶变换(FFT)在信号处理和图像处理中是十分常见也非常有用的函数。它的时间复杂度是O(n*long(n))。借助量子计算机,FFT 的复杂度可以降低到 O((log(n))^2),甚至连读一遍数据的 O(n) 时间都不用,因为只要 log(n) 个量子比特就可以描述 n 维向量了。利用高性能的 FFT,因子分解的复杂度可以达到亚指数时间(sub-exponential time)。
目前量子计算机已经以可扩展的方式,使用 Shor's Algorithm 完成了对15的素数分解。有人表示:用 Shor 算法实现素数分解这一件事情,可以与经典计算机中的 "Hello World!" 相提并论。 除了赞叹它的开创性地位之外,也从一个侧面说明目前量子计算还处在起步阶段。
量子算法与我们有什么关系?
量子算法的时间复杂度与大数据的关系:
有了上面的介绍,有心的读者应该已经了然于胸了:数据量越大,量子算法在时间复杂度上的优势就越明显:n=1000时,O(n^2)的传统算法需要运算一百万步,而O(n*log(n))稍好,也得几千步。而量子计算只需要几步就完成整个运算拿到最终结果了。
在大数据时代,n=10000000是家常便饭,那么上边的对比就成了10^12 vs 10^6 vs 10^2,在耗时上的差距是几个数量级。
上面仅仅是以FFT为例子,实际上一旦找到实用的算法可以实现O(n)甚至O(1)的效率,那在大数据领域里就可以给常规电子计算机画上句号了。
懂得量子算法的程序员,就会和目前熟悉深度学习算法以及大数据架构的程序员一样,变得格外抢手。
所以现在投入必要的时间精力学习一点量子计算的知识,是自我提高的一个不错的选择。而IBM量子体验的网站,正好也提供了这个平台和机会。
量子算法的时间复杂度与云计算的关系:
量子算法对云存储行业,则多少会有些打击。目前各个有能力的大国*都在静悄悄的研究量子计算以便即时破解重要的加密文件。而只要这个技术成熟可用,那么任何存储在第三方的云数据都变得不安全了。因为哪怕是加密存储,也可以在转眼间被破解。
有了量子计算的威胁,用户会更加保守的将敏感数据保存在只有自己能接触到的物理环境,而不再会大大咧咧的加密上传到第三方云存储服务商。当然,量子计算一定能同时带动加密技术的发展。但是目前来看这对矛与盾的较量,在*大机构的影响下,应该是解密技术占上风且更容易流入民用。量子加密技术则主要还是有*机构掌握。所以从一点来看,量子计算的出现,对提供云存储服务行业并不是一个利好消息。当然,作为程序员,如果能理解甚至设计可靠的量子加密算法,也许很快就会成为IT业内的抢手当红辣子鸡,甚至被*特工追杀也不是没有可能。
量子计算的终极实现会是什么样?
量子计算研究的终极目标之一是制造并应用通用量子计算机(Universal Quantum computer)。以当前的设计构想,至少要能够处理上百量子比特位(qubit)才有意义,目前IBM开放的5-qubit计算服务离这一目标还差得很远。通用量子计算机的具体指标可以参考《The Physical Implementation of Quantum Computation》(http://arxiv.org/abs/quant-ph?0002077 )
而硬件上的具体物理实现有很多,比如通过:
● 光子学
● 核磁共振
● QED腔
● 量子点
● Redberg atom
● ion trap
● Josephson junction
等等来实现。
较之D-wave量子计算机,IBM牛在哪里?
比较出名的D-wave 1代和2代使用的都是Josephson junction 。
NASA、CIA、Google都购买了D-wave进行相关研究。牛津大学则和洛克马丁、诺基亚合建了一个基于D-wave模型的量子人工智能的研究中心。D-Wave受到质疑的地方在于其应用场景受限,目前的设计并不是通用量子计算机。
而IBM正在研发的是基于量子逻辑门的通用型量子计算机,所以通用性没有问题,所有的量子算法都能运行。
此外,IBM还完成了两个很重要的突破。
一是同时检测两种量子误差(quantum errors):1. bit-flip, 2. phase-flip。从而大大增强量了子计算机的稳定性。
最简单的单个量子比特的狄拉克表示: |Psi>=a|0>+b|1> ,其中a,b是两个基态的系数。其他量子比特基态对还有|+>和|->, |spin+>和|spin->等。所以也可记为|Psi>=a|+>+b|->或者|Psi>=a|spin+>+b|spin->,采用何种正交基主要取决于量子系统的物理实现,例如光子的偏振态、粒子的自旋等等,这里就不再深入。
一个量子比特是两个标准正交比特0和1的任意叠加。a和b满足归一化条件即可,所以a和b之间有一个相位*度。如果相位在量子计算过程中被干扰,这个flip就是就是phase-flip。 bit-flip就是运算操作过程中0意外变成1,或者1意外变成0了。理想情况下,量子计算不会有误差。 但实际上由于环境噪音(主要是热和电磁辐射),量子系统会受到环境干扰。只有在零场强和绝对零度的环境里,才能有理想状态下的量子计算。D-wave是在20mk(零下273.13度)工作的,IBM用的也是超导芯片,工作温度是15mk(零下273.135度,仅比绝对零度-273.15度高0.015度)。
之前的研究只能测量两个error中的一个,也就无法做到EC(error correction)。如今IBM解决了这个问题(http://spectrum.ieee.org/tech-talk/computing/hardware/ibm-shows-first-full-error-detection-for-quantum-computers)。
二是IBM提供了有史以来最好的可扩展性。当然落实在实际硬件开发应该还会有新的问题。IBM接下来的目标应该是把量子比特加到50至100。再往后就需要更多的研发资源了。
在这里附带澄清一下很多媒体对量子比特的普遍误解,以及连带到对量子计算的误解:对于量子计算的优势,媒体上常见的解释是,相比较我们常用的电子计算机采用的0,1二进制值,量子计算机每一个量子位都能存储0到1之间的信息。这是一个想当然的解释,这根本不是量子计算机的本质优势:
因为很明显我们用电阻电容组成的模拟电路一样可以表征0到1之间的任何连续值。所以说本质区别不是比特位所携带数值的无穷可能性,而是比特信息的量子叠加态特性。对于多比特位的运算,量子计算机的优势才得以明显体现:所有的比特位可以同时完成逻辑运算,这一点是传统电子计算机根本做不到的。
对于多比特位的量子系统,整个系统的量子比特位状态是可定量预测的,而单个量子比特位是不能确定的。
举一个简单的例子来说明这种量子态的叠加关联性——在IBM量子计算服务的教程里也用到的十分常见的Hadamard Gate:
Hadamard Gate的功能就是将输入 α0|0⟩+α1|1⟩,转换成输出 2^{-1/2}(α0+α1)|0⟩+2^{-1/2}(α0-α1)|1⟩ 。换言之,Hadamard Gate 就是把经典的状态 |0⟩ 和 |1⟩ 转换成 |0⟩ 和 |1⟩ 的“halfway" 状态。
关键之处在于:这个操作,即使是仅对 n 个量子比特中的第一位进行Hadamard gate 运算,所有的 2^{n} 个系数都会改变。这里的“并行”运算是量子力学的物理本质确保的,而不是很多媒体中不明就里的多核多设备的”并行/多线程“。
必须“冷酷”的量子计算机
回到IBM 量子计算的实验室硬件,下面放了两张从官方网站视频中的截图:
图一是开放式稀释冰箱( open dilution refrigerator)。冰箱底部的温度最低,低到仅比绝对零度高15mK,以便维持芯片中超导材料的超导状态,用来处理量子信息 。
图二 是冰箱的气体处理系统。面板显示的是阀门以及泵的开关情况。冰箱里使用的气体是氦的同位素氦气-3(Helium-3) 。
IBM开放的服务是什么?
看完这么多高大上高冷贵的东西,再来看看IBM为爱好者提供了什么试用服务。
下图是申请到的试用帐号,下面按照他们的教程(User Guide)尝试的几个实验。
IBM量子在线体验含七个部分
第一部分(The IBM Quantum Experience)是面向所有人介绍世界上第一个基于云端的量子计算服务。
第二部分(The Weird and Wonderful World of the Qubit)是介绍基本的量子比特常识
第三部分(Multiple Qubits, Gates, and Entangled States)通过四个小课程演示多量子比特的复杂性和精巧之处。
第四部分(Quantum Algorithms)更深入的介绍量子世界的奇妙之处,介绍可用于编程的量子算法。
第五部分(Quantum Error Correction)介绍如何利用量子纠缠态纠错
第六部分(FAQ)就是常见问题的回答。
页面右下端还有一个小虫子的图标,方便用户反馈各种bu
IBM服务示例
IBM官方介绍视频里用的是Grover's Search算法做例子,这里我就以Deutsch-Jozsa 算法再举一个例子。毕竟这个例子的物理模型可以对应于光学中双缝干涉,看上去格外亲切。
Deutsch-Jozsa Algorithm简介
Deutsch-Jozsa 量子算法是第一个证明量子算法能绕过经典算法困境的例子。这个算法演示允许量子振幅取正值和负值,而不像传统的概率必须总是非负的。
Deutsch-Jozsa量子问题定义如下。考虑一个函数f(x)对输入的n比特位x返回0或1。
假设我们确保f(x)或者是一个常数函数,它的返回值是常数c,对所有输入x有c∈{0,1},或者f(x)是平衡函数,对任何0,1输入他都取半值。我们的目标是通过尽可能少的尝试来确定f(x)到底是常数函数还是平衡函数。传统算法在最坏情况下需要进行2^(n-1) + 1次计算。而使用Deutsch-Jozsa量子算法,这个问题可以只用一次运算来解答。
要了解Deutsch-Jozsa量子算法是如何工作的,让我们先考虑一个典型的干涉实验:其行为类似波的粒子,如光子,可以从源头上检测器阵列通过两个或多个路径行进。观察到粒子出现概率大的区域是入射波在到达时具有相同的相位的区域。
设想我们可以建立一个干扰实验,具有2^n个探测器和从源到每个探测器的2^n个可能的路径。我们将其分别标记为n比特输入x和n比特探测器y。进一步假设x与探测器ý沿路径累积的相位等于C(-1)^(f(x)+x+y),其中
x⋅y=Σi= xiyi
是二进制的内积(点乘),C是归一化系数。观察检测器y中的粒子出现的概率可以通过累加所有路径的幅值x到达y时的绝对值平方来计算:
PR(y)= |CΣx(-1)^(f(x)+x⋅y)| ^2
归一化条件ΣyPr(y)= 1,则使C = 2^(-n)。接下来计算检测器Y = 0^N观察粒子的概率谱(Y = 0^n)(全零字符串)。我们有Pr(Y = 0^n)= | 2^(-n)Σ(-1)f(x)|^ 2
如果函数f(x)= c是常数函数,我们将得到谱Pr(Yy= 0^n)= |(-1)^c |^ 2 = 1。而当f(x)是一个平衡函数时,我们会得到Pr(y = 0^n)= 0,因为所有的总和超过x的项彼此抵消。
因此,我们可以只用一次实验判断是否f(x)是常数还是平衡函数。
当然,以光学手段进行这个实验不太实际,因为它需要一个非常大的光学平台!但是,我们可以用量子计算机模拟这个实验,仅用n量子比特和访问Oracle电路Uf就能实现。
事实上,考虑下面的算法:
第1步:初始化n的全零状态量子比特| 0,...,0>。
第2步 应用Hagamard门H至每个量子位。
第3步. 应用Oracle电路Uf。
第4步:重复步骤2。
第5步:测量每个量子位。设y =(y1,...,yn)是测量结果的列表。
如果f是一个常数函数,那么将会观测到y是全零字符串。Hagamard门将输入|0>映射到均匀叠加的|0>和|1>。 第二步之后系统的状态是2^(-n/2)Σ|x>。
接着Oracle电路将此状态映射到2^(-n /2)Σ(-1)^f(x)|x>。第4步再次应用Hadamards门,它将基态|x>映射到一个叠加态2^(-n/2)Σ(-1)^(xy)|y>。第4步完成后系统的状态是|ψ>=Σψ(y)|y>,其中ψ(y)= 2^(-n)Σ(-1)^(f(x)+x⋅y)。
这正是我们需要的干扰实验。
在步骤5的测量起着检测粒子的作用。如上结果表明,如果概率y=0^n值为1,则f是一个常数函数。为零,则f是一个平衡函数。因此,我们只通过一次运算就解决了Deutsch-Jozsa量子问题的确切解答。
量子线路设计
拉拉杂杂扯这么多,没有量子力学基础的读者可能有点晕。那么下面就是实际量子线路的设计:
一 n=3,函数为常数函数时的模拟:
结果跟理论分析预测的是一样的,即输出为1
二 n=3,函数为平衡函数时的模拟:
输出跟理论分析预测的是一样的,即输出为0
牛人对IBM量子计算的评价
从外界的评价来看:“……IBM所做的是对的。该服务的界面易于使用,“任何对量子计算机有所了解的学生都知道如何与这个设备交互。”
Cory周末对IBM这个新服务进行了试用,让他吃惊的是:这个系统相当稳定——每一次测试它几乎都得到了相同的结果。这在传统计算机中是个寻常的现象,但在基本都是围绕捕获概率展开的量子计算机世界中,结果的稳定一致就意味着标志性的进步。 ”
IBM的确用他的量子计算平台证明了他的突破之一:对双误差同时测量来大大提高系统的稳定性。此外能对公众开放5qubit的平台,也给大家留下了想象的空间——IBM到底能在短期内将qubit推进到多少位?
总结:
IBM提供的这个平台,看上去是为自己的研发成果和企业品牌打广告,事实也的确起到了广而告之的作用。
但是如果你真的认为就只有这么点儿信息,那说明你还没有亲自尝试网页上的各种量子计算和算法。
如果你稍有尝试,应该不难发现,IBM提供的其实是一个双向学习的平台:尝试用户可以从中学习了解量子计算的各项基本知识和常见算法,IBM则可以从中统计用户的大致认知水平。
既然每个用户都是用邮箱注册,又在平台上摆弄了一番。IBM的研究团队也会从试用用户中发现具备相关背景知识、能熟练实用的“高级用户”,说不定这些用户在不久就能从注册邮箱收到IBM的招聘挖人邮件呢——这只是yy而已,不过既然人家免费提供了这个学习平台,为什么不利用闲暇时间了解学习一下,提高一下作为程序员的未来职业素养呢。
原文发布时间为:2016-11-14
本文作者:陈圳
本文来源:虎嗅网,如需转载请联系原作者。