量子计算会终结现在的密码体系吗?(5) 回到Shor算法

上文回顾:量子傅立叶变换 量子傅立叶变换是Shor算法的核心步骤之一。今天我们回到Shor算法,看看如何用量子傅立叶变换来求解Order Finding和函数周期问题。 Shor算法第一步 用量子计算机求解Order Finding问题,实质上是要找到函数 \(f(x)=a^x \mod N\) 的周期。 Shor算法的第一步,是构造函数f(x)对应的可逆变换 \(U_f\) (这里的 \(|x\rangle, |y\rangle\) 都是多个量子位组成的寄存器): 然后给它制备输入: 在输出端测量 \(|\beta\rangle\) ,使得它坍缩到某个值z,这时 \(\alpha\) 就会坍缩到 \(|l\rangle, |l+r\rangle, |l+2r\rangle, \dots, |l+Ar\rangle\) 的叠加态: \begin{matrix} |\alpha\rangle = \frac{1}{\sqrt{A+1}} \sum_{j=0}^{A}|jr+l\rangle \end{matrix} 其中\(l\) 称为offset,是满足 \(a^l \mod N = z\) 的最小整数。假设 \(|\alpha\rangle\) 有n个量子位,那么A就是在0到 \(q=2^n\) 之间有多少个周期。 这里面, \(l, j\) 都是未知的,并且每次运行这个电路都有可能不同,不能直接从中导出周期r。所以下一步我们要做的,就是用量子傅立叶变换从中提取出有用的周期信息。 Shor算法的关键:用量子傅立叶变换提取周期信息 接着上一步:如果我们对 \(|\alpha\rangle\) 做量子傅立叶变换,会发生什么? 节省大家时间,先把答案放在这里,如果你有兴趣可以看我后文的推导。 如果我们对 \(|\alpha\rangle\) 做量子傅立叶变换,然后对它测量,得到某个值y,那么这个y值与 \(q=2^n\) 之间的比值,会非常接近某个整数k与周期r的比值。 \begin{matrix} \frac{y}{q} = \frac{y}{2^n} \approx \frac{k}{r} && (q=2^n) \\\ \end{matrix} 好了,到了这一步,q是已知的(n个量子位, \(q=2^n\) ),y是测量得到的,也就是说左边这个分数是已知的。这个不等式告诉我们:测量得到的y,与q的比值,是 \(\frac{k}{r}\) 的一个 近似估计 。我们知道r小于N(N是要分解的数),所以右边是一个分母小于N的分数。如果我们能从左边 \(\frac{y}{q}\) 估计出一个和它很接近,并且分母小于N的分数,那这个分数的分母就有可能是我们要找的周期r!然后我们要做的就是对这个候选的r进行验证,如果它确实是函数f(x)的周期,那么问题解决,否则就重新运行Shor算法电路。 ...

May 17, 2021 · 1 min · Ping Zhou

量子计算会终结现在的密码体系吗?(4) 量子傅立叶变换

上文回顾:Shor算法初探 用量子计算机求解Order Finding问题,其实就是要找到函数 \(f(x)=a^x \mod N\) 的周期。在上文中我们已经看到,如果我们把f(x)包装成量子变换 \(U_f\) ,然后把它的输入x制备成叠加态,在输出端就能得到 \(|l\rangle, |l+r\rangle, |l+2r\rangle, \dots\) 的叠加态。但是这个叠加态并不能直接告诉我们周期(r)是什么,我们还需要对它做更多的处理才能提取出有用的信息。这个处理过程,就是 量子傅里叶变换 。 离散傅里叶变换(DFT) 先复习一下傅里叶变换… 我们有一个N维的矢量 \(\{f(0), f(1), \dots, f(N-1)\}\) , 其中每个分量f(j)都是复数。 离散傅里叶变换会把它变成一个新的矢量: \(\{ \tilde{f}(0), \tilde{f}(1), \dots, \tilde{f}(N-1) \}\) 其中每个分量 \(\tilde{f}(k)\) 是这样计算的: \begin{matrix} \tilde{f}(k) = \frac{1}{\sqrt{N}} \sum_{j=0}^{N-1} e^{2\pi ijk/N}f(j) \end{matrix} 如果我们记 \(\omega = e^{2 \pi i/N}\) ,那么上面的定义可以简写成: \begin{matrix} \tilde{f}(k) = \frac{1}{\sqrt{N}} \sum_{j=0}^{N-1} \omega^{jk}f(j) \end{matrix} 学过信号处理的朋友应该很熟悉这个吧! 其他相关性质 也复习一下: 根据定义, \(e^{ix} = \cos x + i\sin x\) 。 所以 \(\omega^N = e^{2 \pi i} = \cos 2\pi + i\sin 2\pi = 1\) 。 ...

May 3, 2021 · 2 min · Ping Zhou

量子计算会终结现在的密码体系吗?(3) Shor算法初探

上文回顾:因式分解问题可以转化为Order Finding 在上文中,我们分析了为什么因式分解问题可以转化为Order Finding,因此如果能高效求解Order Finding,也就能高效解决因式分解问题。 所谓Order Finding问题,就是已知互质的两个数a和N,求满足 \(a^r=1 \mod N\) 的最小正整数r。 这个问题可以进一步归纳为一个周期求解问题:假如我们定义函数 \(f(x)=a^x \mod N\) ,那么 \(f(x)=f(x+r)\) ,因此这个函数的值是以r为周期的。我们要找的r,就是这个函数的周期。 用量子计算机解决因式分解问题:Shor算法 Shor算法是Peter Shor在1994年提出的一种量子计算算法,可以在多项式时间内求解因式分解问题。 要完整理解这个算法涉及的知识面很多,容易迷失在细节里。我的经验是,先从高层次出发,理解它的总体思路,然后对其中的重要步骤逐一分解研究。 Shor算法求解因式分解问题的过程,分为『经典』部分和『量子』部分: 『经典部分』假设要分解的数为N; 『经典部分』如果N是偶数,或者N是某个质数的幂,那么已经找到了它的因子,问题解决; 『经典部分』在2到N-1之间,随机选一个与N互质的数,即 \(GCD(a, N)=1\) ; 『量子部分』 计算a对N模的order,即满足 \(a^r \mod N=1\) 的最小正整数r; 『经典部分』如果r是奇数,回到步骤3重新选a; 『经典部分』如果r是偶数,计算 \(GCD(a^{r/2}+1, N)\), \(GCD(a^{r/2}-1, N)\), 两者中必有N的非平凡因子。 这就是Shor算法解决因式分解问题的总体思路! 这其中,只有第4步Order Finding需要用到量子计算,因此Shor算法的核心,就是用量子计算机找到a对N模的order。接下来我们来看一下,量子计算机是如何解决Order Finding问题的。 用量子计算机求解Order Finding问题 用量子计算机求解Order Finding问题,实质上是要找到函数 \(f(x)=a^x \mod N\) 的周期。看过我之前文章的朋友可能会想到,首先我们要考虑如何将这个函数整合到我们的量子电路里,也就是把它转换成一个量子电路能用的变换 \(U_f\) 。 为了避免迷失在实现细节里(后文会讨论 \(U_f\) 的实现),咱们先假设已经有了这样一个可逆变换 \(U_f\) : 这个变换使用2个量子寄存器x和y。这两个寄存器都是由多个量子位构成的,可以把它们看作是多个量子位构成的二进制数。 \(U_f\) 的作用是: 输入 \(|x\rangle\) 和 \(|y\rangle\) 输出 \(|x\rangle\) 和 \(|y f(x)\rangle = |y a^x \mod N\rangle\) 还记得我们是如何解决Deutsch问题的吗?我们给 \(U_f\) 输入叠加态,然后在输出端经过一些变换就能得到函数的性质。 ...

April 29, 2021 · 2 min · Ping Zhou

量子计算会终结现在的密码体系吗?(2) 因式分解和Order Finding问题

上文回顾:RSA公钥加密算法 在上文中我们讲了以RSA为代表的公钥加密算法,以及为什么其安全性的核心是因式分解问题。 那么为什么量子计算机能高效求解因式分解问题呢?这是因为,因式分解可以转化为Order Finding或函数周期求解问题,而这类问题,正是量子计算机所能高效求解的! 下面我们就来看一下,如何将因式分解问题转化为Order Finding问题。 Order Finding问题 给定两个互质的数N和a,求使得 \(a^r=1 \mod N\) 的最小整数r,这就是所谓的Order Finding问题。求出的r,称为"the order of a modulo N"。 如果 \(a^r=1 \mod N\) ,那么很显然 \(a^{2r}, a^{3r}, \dots\) 也对N取模为1。 进一步推论,如果a的幂取任意整数 \(x=jr+l\) ,那么 \(a^x=a^{jr+l}=a^{jr}a^l=a^l \mod N\) , 同理可知 \(a^{x+r} = a^xa^r = a^x \mod N\) 。 因此如果我们定义一个函数 \(f(x)=a^x \mod N\) ,那么这个函数的值其实是 以r为周期的 ,即 \(f(x)=f(x+r)\) 。因此Order Finding问题就相当于找到这个函数f(x)的周期。 例如N=15,a=7,那么 \(f(x)=7^x \mod 15\) 函数的值: Table 1: \(f(x)=7^x \mod 15\) \(x\) 0 1 2 3 4 5 6 \(\dots\) \(f(x)\) 1 7 4 13 1 7 4 \(\dots\) 不难看出,7对15模的order是4,因此这个函数的值是以4为周期不断重复。 ...

April 26, 2021 · 1 min · Ping Zhou

量子计算会终结现在的密码体系吗?(1) RSA公钥算法

公钥加密系统 关于量子计算,很多人可能都听说过这个耸人听闻的说法:有了量子计算机之后,现在的密码就都不安全了,因为量子计算机可以轻易破解它们。真的有这么夸张吗?实际上,量子计算机威胁的主要是基于『大数分解』的一类加密算法,其中最广泛使用的就是RSA。 RSA (Rivest–Shamir–Adleman) 是目前广泛使用的一种公钥加密系统(RSA是三位设计者的名字首字母的组合)。所谓公钥加密系统,就是说它里面的密码是分为可以公开的『公钥』和必须保密的『私钥』。公钥和私钥是成对的,用一个公钥加密的信息,只能用它对应的私钥来解密。为什么要这么设计呢? 我们知道,两个人之间要实现保密通信,最简单直接的办法是互相约定一个密码,用这个密码来加密他们之间传递的信息,甲方用它来加密,乙方用同样的密码来解密。这种密码又叫做『对称密码』,因为加密和解密使用相同的密码。但是问题来了,甲方和乙方怎样才能『约定』这个共享的通信密码呢?如果直接把这个通信密码发过去,中间被人窃听了,别人知道了通信密码,那后面的通信岂不就是在网上裸奔了吗? 这时候就需要公钥加密算法来帮忙了: 甲方生成一对公钥和私钥,然后把公钥发给乙方。 乙方生成要共享的通信密码,用甲方提供的公钥来加密,然后把这个加密后的通信密码发回给甲方。 甲方收到乙方的回复,用它的私钥来解密,得到共享的通信密码。 甲方和乙方都有了通信密码,就可以放心的通信了。 这个过程中,即使有人在中间窃听,因为信息是用甲方的公钥加密的,只有拥有私钥的甲方能解密,窃听的人就是截获了信息也无法得到通信密码,所以不用担心通信密码泄露的问题。 可见,公钥加密系统保证了通信双方『约定通信密码』这个步骤的安全。没有这个保证,通信的双方就无法安全的建立联系,更不用说安全的通信了。除此之外,公钥加密系统还是电子签名,电子证书等许多网络安全技术的基础。这也是为什么说以RSA为代表的公钥加密系统是当前网络通信和安全的基石之一。如果RSA的安全性受到量子计算机的挑战,那么基于RSA的很多通信协议,认证服务等等都会变得不安全,这个影响还是挺大的。 RSA的工作原理 为什么量子计算机被认为会威胁到RSA公钥加密体系呢?要回答这个问题,需要先了解一下RSA的工作原理。 生成公钥私钥 RSA生成公钥和私钥的流程大致是这样: 首先随机选两个很大的质数(p, q),然后用它们计算两个乘积: \(N=pq\) \(\phi(N)=(p-1)(q-1)\) 其中的 \(\phi(N)\) 也被称为『欧拉函数』,它的意思是“小于等于N并且与N互质的正整数的个数”。例如,如果某个数p是质数,那么显然有 \(\phi(p)=p-1\) 。为什么要用这个欧拉函数,后面会看到。 然后,随机选一个与 \(\phi(N)\) 互质的奇数e,计算它对于 \(\phi(N)\) 的『模逆』d,也就是找到某个正整数d,使得\(ed = 1 \mod \phi(N)\) ,这个数d可以用欧几里德算法高效计算出来。 最后,把e和N拼在一起,组成公钥P,而d和N拼在一起,组成私钥S。 加密和解密过程 有了公钥和私钥后,可以用公钥加密,然后用对应的私钥解密(下图左边是加密过程,右边是解密过程): 我们把要加密的消息看作是一个固定长度的二进制数M,加密的时候,我们用公钥里的e和N,对M求e次幂,然后对N取模,得到加密后的消息E(M): \[ M^e \mod N \to E(M) \] 解密的方式和加密类似,但使用的是私钥里的d和N,对收到的消息E(M)求d次幂,然后对N取模,就能解密出原来的消息M。 \[ E(M)^d \mod N \to M \] 如果你对RSA算法的数学原理感兴趣,可以参阅本文最后的分析。 RSA安全性的关键:因式分解 RSA如何保证加密后信息的安全性?或者说,它安全性的关键点在哪里?从上面的过程不难看出,RSA安全性的关键点在于N是否被分解。想象一下:假如我们能够把N分解回p和q,那么就可以知道 \(\phi(N)=(p-1)(q-1)\) ,再加上公钥里的e,用欧几里德算法把d也算出来,这样私钥也有了,整个加密过程就被攻破了! 好在,因式分解问题目前在经典计算机上还没有找到高效的算法(现有的算法都是指数级时间复杂度),因此只要N足够大,就可以保证加密后的消息无法在合理的时间内被破解,使得破解失去意义。 量子计算机对RSA的威胁就在于,它能实现高效的因式分解(多项式时间复杂度),这就是为什么我们说量子计算机对现有网络通信和安全会构成一定的挑战。当然,凡事有矛必有盾,一方面现在的量子计算机还远远没有达到能破解RSA的程度,另一方面,也已经有不基于因式分解的公钥加密算法,以及抗量子计算的密码研究。因此可以说,挑战是存在的,但过于夸大量子计算的作用也没有必要。 总结 现在我们理解了RSA的工作原理,以及为什么它的安全性取决于因式分解的难度。那么接下来的问题是,为什么量子计算能高效计算因式分解呢?实际上,量子计算机解决的是Order Finding问题(或者说函数周期求解问题),在下一篇里,我们来看看因式分解是如何转化为Order Finding/函数周期求解问题的。 ...

April 20, 2021 · 3 min · Ping Zhou

Understanding the Power of Quantum Computing 1: Deutsch Problem

Introduction Quantum computing is one of the hottest topic these days. You might have already heard about hypes like "quantum supremacy". But why quantum computers can be faster on solving some problems? And how does it work behind the scene? In this article I'm going to use a simple problem (the Deutsch Problem) as an example and walk you through the process. Ok, let's get started. Terms and Basic Concepts Before we start discussing the problem, let's first review some basic terms and concepts. ...

April 1, 2021 · 10 min · Ping Zhou

Understanding the Power of Quantum Computing 2: Extending Deutsch Problem to 2-bits

Two-Bit Deutsch Problem My previous article discussed Deutsch Problem in its simplest form - determine attribute of an unknown 1-bit function. Now what if we extend the function to having 2-bit input? \[ f(x_0, x_1) \to \{0, 1\} \] For 2-bit functions, there are 4 possible inputs: 00, 01, 10, 11. Outputs of the function are still 1-bit. So the truth table of the function will be like this: input output 00 0 or 1 01 0 or 1 10 0 or 1 11 0 or 1 We define the attribute of the function in a similar way as 1-bit Deutsh Problem. If the function returns a constant value regardless of the input, we call it constant. Apparently there are 2 constant functions (always return 0, or always return 1). ...

April 1, 2021 · 7 min · Ping Zhou

聊聊量子搜索算法(Grover算法) - 2

在上文中我们讨论了量子搜索算法的实现,其中的关键是用G变换多次迭代,逐渐逼近答案,最后在输出端测量得到结果。 那么为什么多次重复G变换能达到这样的效果呢?Grover算法的查询次数是\(O(\sqrt{N})\),这个\(O(\sqrt{N})\)又是怎么来的呢?本文接着上一篇继续讨论这些问题。 Grover算法的图像化 要理解Grover算法的原理,最直观的方法是把它图像化,从几何意义来理解。 回顾一下上文的量子搜索电路: 我们的电路有n个搜索用的量子比特,可以表示\(N=2^{n}\)个基态,对应搜索空间0到N-1的编号。为方便讨论,我们用\(|0\rangle, |1\rangle, |2\rangle, |3\rangle, \dots, |N-1\rangle\)来表示这些基态。 假定在这N个编号中,有M个是符合条件的答案。在上文的讨论中我们假定M=1,也就是只有1个符合条件的编号,这里我们把它扩展到更普遍的情况,M可以大于1,也就是可以有多个符合条件的答案。因此不符合条件(也就是让判断函数f返回0)的编号有N-M个。 我们把所有 不符合条件 的N-M个基态叠加在一起,组成一个叠加态的状态向量,把它记作\(|\alpha\rangle\)。 类似的,把所有 符合条件 的M个状态叠加在一起,组成一个状态向量,把它记作\(|\beta\rangle\)。 显然,上面这两个向量\(|\alpha\rangle\),\(|\beta\rangle\)是正交的。因此我们可以用它们作轴,张成一个二维平面。 然后我们在这个平面里,考察前面G变换公式里的\(|\psi\rangle\),这是一个所有基态无差别叠加的状态,那么这个\(|\psi\rangle\)在这个二维平面里,可以写成: \begin{matrix} |\psi\rangle=\sqrt{\frac{N-M}{N}}|\alpha\rangle + \sqrt{\frac{M}{N}}|\beta\rangle \end{matrix} 这个\(|\psi\rangle\)向量,和\(|\alpha\rangle\)轴之间的夹角,我们记作\(\frac{\theta}{2}\),如下图所示: 根据简单的三角函数,我们很容易得到: \begin{matrix} \cos\frac{\theta}{2} = \sqrt{\frac{N-M}{N}} && \sin\frac{\theta}{2} = \sqrt{\frac{M}{N}} \end{matrix} 继续分析G变换。从上文我们知道,G变换可以写成: \[ G=(2|\psi\rangle \langle\psi|-I)O \] 我们先从O(Oracle)变换看起。O变换干了什么呢?它是把输入的状态\(|x\rangle\)变成\((-1)^{f(x)} |x\rangle\)。如果f(x)=1,那么它就给输出加上一个-1的相位,否则不变。那么这个操作在二维平面图中,实际上就是把输入的向量对\(|\alpha\rangle\)轴做了一个 反射 。 ...

January 26, 2021 · 2 min · Ping Zhou

聊聊量子搜索算法(Grover算法) - 1

今天来聊一下量子计算里面的一个经典算法:量子搜索算法(Grover算法)。 搜索问题 假设我们有N个无结构的元素,比如很多指纹信息,我们的任务是从中找出符合某些要求的元素。为方便讨论,我们给这些元素编号,从0开始一直到N-1,并且其中只有1个符合我们要找的条件。如果我们用经典计算机来搜索的话,只能一个一个元素的试,看它是否符合要求,因此需要试的次数为\(O(N)\)。但是如果使用量子计算机,只需要试\(O(\sqrt{N})\)次数就可以找到。和经典计算机相比,虽然这不是指数级别的加速,但也相当可观了,尤其是如果“判断元素是否符合要求”这个操作很费力的话,减少判断次数的收益也会很大。 这个问题可以进一步抽象:我们有N个数(元素编号),这里为了方便讨论,假设\(N=2^{n}\),即编号可以用一个n位二进制数来表示。然后我们有一个判断函数f,给它输入编号x(n位二进制数),它判断该编号对应的元素是否符合要求,如果符合就返回1,否则返回0。 \[ f : \{0, 1\}^{n} \rightarrow \{0, 1\} \] 你可能会问:我都知道判断函数f了,为什么还需要查询呢?这里需要分清“找到符合条件的元素”和“判断元素是否符合条件”的区别。前者是“搜索”,而后者是“检验”。还是拿指纹做例子:警察在犯罪现场发现了嫌疑人的指纹,但是光有指纹并不能找到对应的嫌疑人,需要拿着指纹去和指纹库里的样本比对。这个“找到对应嫌疑人”的过程就是搜索,而“和指纹库里的样本进行比对”的过程就是检验,也就是前面说的判断函数f。 量子搜索算法(Grover算法) 定义了搜索问题,接下来讨论量子搜索算法。 量子搜索电路 量子搜索算法(Grover算法)是一个迭代的过程,主要思路是从初始状态出发,重复进行多次变换,让系统越来越接近目标状态,最后进行测量,就能以很高的概率得到正确结果。 量子搜索的电路图长这样: 整个算法大致分成这样几步: 在输入端,我们需要准备一组量子比特,包括n个用来搜索的\(|0\rangle\),以及用于操作辅助量子比特的工作区(workspace)。这些辅助量子比特相当于程序里的临时变量,因此我们不用关心工作区的内部操作,只需要讨论前面的n个搜索用的量子比特。 计算的第一步,用H门把这n个量子比特从初始的\(|0\rangle\)变成无差别叠加态,也就是把\(|0\dots0\rangle\)变成\(\frac{1}{N}\sum_{x=0}^{N-1}|x\rangle\)(其中\(N=2^{n}\))。 然后,对这些量子比特进行G变换(后面会详细介绍),这个过程反复迭代多次。 最后在输出端测量,得到结果(n位二进制数)。 你可能会问,这个算法里的第3步里,需要多少次迭代(重复多少次G变换)呢? 答案是重复\(O(\sqrt{N})\)次后,我们就能以很高的概率得到正确结果。这个结果是怎么来的?后文分析原理的时候会详细讨论。现在先看看G变换里面是啥。 G变换 我们把量子搜索算法里每次迭代的过程称为G变换,这个G变换内部又分成4个步骤。 G变换的第一步:Oracle 首先要做什么?看过我之前文章的读者应该能猜到,要把判断函数f包装成量子计算机能用的可逆变换。套路和Deutsch问题类似,在输入的量子比特\(|x\rangle\)之外,增加一个辅助量子比特\(|y\rangle=\frac{1}{\sqrt{2}}(|0\rangle - |1\rangle)\),然后在输出端,原样输出\(|x\rangle\),外加输出\(|y \oplus f(x)\rangle\)。我们把这个变换称作Oracle,简称O变换: \[ O|x\rangle|y\rangle = |x\rangle |y \oplus f(x)\rangle = |x\rangle \frac{1}{\sqrt{2}}(|0 \oplus f(x)\rangle - |1 \oplus f(x)\rangle) \] (其中的\(\oplus\)表示异或) 我们知道判断函数f(x)的输出是0或者1,那么如果f(x)=1,上面右边就是\(|x\rangle \frac{1}{\sqrt{2}}(|0\rangle - |1\rangle)\),也就是\(|x\rangle |y\rangle\);而如果f(x)=1的话,上面右边就变成了\(|x\rangle \frac{1}{\sqrt{2}}(|1\rangle - |0\rangle)\),也就是\(-|x\rangle |y\rangle\)。这样一来,f(x)的输出就变成了相位:\(|x\rangle |y\rangle\)前面的正负号。所以Oracle变换可以写成: ...

January 25, 2021 · 2 min · Ping Zhou

量子神经网络

上次讨论了量子机器学习框架TensorFlow Quantum的Hello World,这次看一下另一个应用:量子神经网络。 注:本文根据TensorFlow Quantum的MNIST示例整理:https://www.tensorflow.org/quantum/tutorials/mnist 这个示例是基于谷歌在2018年发表的一篇论文"Classification with Quantum Neural Networks on Near Term Processors"。 在这篇论文中,作者Farhi等人提出了将量子电路和神经网络的结合起来实现二元分类的一种方案,主要思路是这样: 将训练输入看作是二进制的字串,把其中每个比特转换成量子比特,例如0对应 \(|0\rangle\) ,1对应 \(|1\rangle\) ; 创建一个量子电路,输入端有N+1个量子比特,其中N个量子比特对应输入的字串长度,另有一个read out量子比特,用来输出分类结果; 量子电路内部,用一组带参数的门连接起来,具体用什么门以及如何连接,似乎没有特别的要求,在文章里作者经过试验选用了带参数的XX和ZZ门。每个门带有一个控制参数(例如 \({XX}^\alpha\) )。如果量子电路有32个这样的门,那么就有32个参数需要学习; 把量子电路作为神经网络的一层,输入训练集和标签,学习控制参数。 整个训练过程大致如下: 把量子电路看作神经网络的一层,那么输入训练集里的字串,从它的read out那里读出分类结果,和训练标签比较,产生loss,然后反馈给神经网络进行梯度下降。经过训练,模型会学习到一组量子电路的参数,用这组参数控制量子电路,就能对未知的输入作出准确的分类预测。 论文原文在这里:https://arxiv.org/pdf/1802.06002.pdf 这个思路看起来不难,可以用TensorFlow Quantum实现,实际上整个示例,模型部分是很简单的,主要工作在于数据处理。 因为目前的量子计算机和模拟器,对于量子比特的数量和量子电路的深度都有一定的限制,例如MNIST里的图片都是28x28,即使转换成黑白图像,也需要784个量子比特来代表输入,这显然是不现实的。所以在这个示例里,MNIST图像先要降低分辨率,然后要去掉重复,再去掉矛盾的标签,等等,经过一番处理,才能把输入送入模型进行训练。 接下来我们来看一下具体的代码。首先还是先引入要用的包。 import tensorflow as tf import tensorflow_quantum as tfq import cirq import sympy import numpy as np import seaborn as sns import collections # visualization tools %matplotlib inline import matplotlib.pyplot as plt from cirq.contrib.svg import SVGCircuit 读入数据,把每个像素从0-255转换为0-1之间的浮点数: ...

December 13, 2020 · 5 min · Ping Zhou