量子计算
上世纪60年代哲学界有一场关于存在主义 与结构主义 的争论:存在主义 认为一个人的发展是由“自由意识 ”和欲望主导的; 结构主义 认为占主导的其实是社会中的经济、政治、伦理、宗教等结构性因素 ,人只是巨大结构中的一部分。
究竟是什么塑造了一个人也许难以确定。而对于** 量子世界** ,一个qubit(量子比特)的状态 ,不仅受到量子系统的磁场影响,qubit本身也有自身状态的变化概率和扰动 。我们一会儿可以看到,量子系统的输出,即那个qubit的最终观测状态 ,是用概率和大量抽样 判定的:

在细讲QNN前(量子神经网络其实是一个量子系统) ,David 9 有必要介绍一下量子计算 本身的一些基础知识 。
首先,量子计算与传统计算机的不同,可从qubit (量子比特)说起,我们知道与电子计算机非**“0”** 即**“1”相比** ,qubit的状态可能同时介于“0”和“1”之间 :

即所谓的“薛定谔的猫”的叠加态(superposition):
**12√(|0 >+|1>) (在量子物理中符号|x >**表示状态x)
你们可能会问David,为什么状态系数是 1/2–√ ? 这是量子物理中的一个约定(规范化),即平方和等于1 :
α2+β2=1
其中α 和β 就是状态的系数 ,是不是让你联想到圆形几何 ?
是的,在量子物理中可以把qubit想象成粒子球体(叠加或非叠加态):

来自:How Does a Quantum Computer Work? youtube教学视频
三维世界中qubit的自旋状态非常灵活,可以上自旋(|0 >),可以下自旋(|1 >),可以像地球一样斜着自旋 :

来自:http://www.dudamath.com/earthOrbit.html
当然也可以叠加态自旋(12√(|0 >+|1>) )
有了这么多种 qubit 状态,从根本上导致量子计算的信息量级比传统计算机大的多。
传统的2个bit位 的计算机只能编码4种状态:** 00** ,01 ,10 ,11 ,因为它只有2个位的自由度,所以n个bit位能编码的信息只有2^n (即2n)
而如果一个量子计算机有2个qubit ,传统计算机的00, 01, 10, 11这些状态就可以同时出现 ,这4个状态本身变为4个自由度 :

来自:How Does a Quantum Computer Work? youtube教学视频
这就导致它能编码2^4=16种状态 ,即我们需要同时确定00, 01, 10, 11 四个状态各自的出现概率,才能得到这个系统状态的联合概率。所以n个qubit能编码的信息有2(2n) (即22n)
这样的计算量级,使得2018年google的72个 qubit量子计算机就可以称霸业界。感兴趣可以计算一下2(272) (即2272 )是一个多么庞大的数字。但是要保持稳定的量子系统,需要苛刻环境和极低的温度(-273摄氏度非常接近绝对零度):

来自:https://ai.googleblog.com/2019/01/looking-back-at-googles-research.html?m=1
有了以上这些基本知识,跟着David 9再在来看Google的这篇QNN设计的论文,就能更好理解量子计算是如何与深度学习(神经网络 )结合的了。
首先看基本QNN架构:

输入输出和一般的神经网络(深度学习)相似。唯一区别是QNN的输入|ψ, 1 >是n+1位qubit的状态(这个状态是事先根据输入样本编码准备 的,其中n是样本,1是输出qubit的占位)。而输出是经过一系列 U(θ) 变换最终得到的一个qubit在三维中Y轴 的观察** Yn+1** :

为了容错并得到可靠输出,** Yn+1** 需要经过多次观测得到0或1的输出“label” (当然,一个qubit状态很少正好上自旋,而是一个求约的概率估计)
接下来看 U(θ) 和U L(θ L) 这些计算操作是什么?其中 θ 即传统神经网络中的待训练的参数(神经网络中的权重 ) 。而对于 U (即上图中的一个个小方块 ),和传统计算机的计算门( “与或” 门, “或” 门 “否” 门)类似,量子计算中,常用的是线性操作的unitary归一门(unitary operations) 。可以把他想象成一个线性矩阵,它有一个很好的性质:通过unitary转换之后,两组qubit状态的内积值不变 。
即如果两组状态的内积用**< Φ|Ψ> **表示,即:

那么:

即经过** U** 转换后,内积值不变。(其中 U+ 号表示 U 矩阵的共轭矩阵 )
内积值不变不仅可以帮助我们之前提到的归一化约定: α2+β2=1 。而且当我们在QNN中对于 θ 求梯度更新时,梯度不会太大,天然地防止了传统神经网络中的“梯度爆炸” 问题。事实上,QNN的loss函数和一般的神经网络类似:

其中z是样本编码, l(z) 是真实样本的label,

是预测并观测的样本label。
这样,QNN通过不断对最后一个qubit的 Yn+1的观测,与真实样本label比较,得到一个修正值,修正神经网络中的 θ参数,并且根据 θ参数调整每个unitary归一门操作 ,不断进行迭代并更新每个unitary归一门 ,直到QNN每次预测的 Yn+1与真实样本的label一致。
另外,传统深度学习的成功更多地是归功于引入非线性的激活函数(Tanh, ReLu, softmax) , 那么量子神经网络QNN 如何引入非线性 的呢 ?其实答案在架构图中就可以找到:

如上图,每一层 U 门(unitary变换)的输入,都是由上一层 U 门通过不同连接组合连接的,这里的不同组合就是非线性 的(虽然 U 门本身是线性的)。
最后,值得注意的是,对于整个量子神经网络的容错文章也做了探讨和考虑,在U门操作中加入了奇偶校验和reed-muller编码(一种比海明码高效的校验避编码)。具体David就不展开了。
