版权所有 (c) 2021 百度量子计算研究所,保留所有权利。
经过第一章的学习,相信你已经对量子态的演化规律和基本的量子门有了一定的了解。接下来,我们将介绍量子电路模型,并学习如何从基本的量子门出发搭建量子电路,为之后学习和理解复杂的量子算法打下基础。同时,我们还会介绍量子电路的等价性和量子门集合的通用性这两个基础且重要的概念。
在本节的附录我们给出量易伏平台的简要使用说明,帮助读者理解此处的电路模型是如何在量易伏平台上实现的,进而便于读者在后续章节的阅读中对量子算法进行实践。
在之前的学习中,我们知道量子态的演化可以通过量子门来表示,并且这种操作在数学上用酉变换进行刻画。在量子电路模型中,我们用方框表示一个单量子比特门,用左右两端的线段分别表示量子门的输入和输出。当输入或输出的量子态不是我们考虑的重点时往往可以省略。
图 1: 门, 门, 门电路模型。
图 1 就是单量子比特 门, 门和 门的电路表示。
如果我们要对一个量子态进行多种操作,那么就是让对应的量子比特依次通过一系列的量子门。在电路模型中把这些量子门的输入输出线段串联起来,便构成了一个基本的量子电路。
图 2: 串联电路。
图 2 就是一个简单的量子电路,最左边表示的是输入态 ,依次通过 ,,, 门,演化后的状态为
可以看出,在阅读量子电路时我们约定量子门对量子态操作的执行顺序是从左至右,但在计算公式中量子门对应算符对量子态的作用是从右至左进行的。
多比特门的电路表示和单比特门类似,这里我们加入第一章中提到的重要的两量子比特门——受控非门 。首先在图 2 的下方多画一条线来表示第二个量子比特,并且以第一个量子比特作为控制位,第二个量子比特作为目标位,在第二个 门和最后的 门之间加入 门,就可以得到如下的量子电路:
图 3: 的电路表示。
以上几乎就是用量子门搭建量子电路的全部规则。我们用每一条水平连线表示一个量子比特,用方框表示单量子比特门,将多条水平线纵向连接表示作用在这些量子比特上的多量子比特门(如 门, 门等),并约定从左至右的执行顺序,我们就可以搭建任意的量子电路。这个过程就像堆积木一样,将一块块的小零件按顺序排列起来。
在搭建更多的量子电路之前,我们不妨先来回顾一下目前手中有哪些可以用来搭建电路的“零件”。
首先是单量子比特门(具体的狄拉克表示与矩阵形式见第一章量子计算一节)。单量子比特门中最基本也最重要的四个泡利门 、、、:
图 4: 泡利门。
还有三个广泛使用的单量子比特门,它们分别是 门、 门和 门:
图 5: , , 门。
最后,我们加入三个在一般酉门分解中非常重要的旋转门 , , :
图 6: , , 门。
与其他单量子比特门不同,旋转门本身是参数化的,这让它们成为量子机器学习中非常重要的电路组成元件。一个典型的由多个旋转门和 门组成的参数化量子电路(Parameterized Quantum Circuit, PQC)如下图所示:
图 7: 参数化量子电路的例子。
我们将在第五章详细介绍参数化量子电路的作用。
对于多量子比特门,除了受控非门( 门)之外,
图 8: 门。
我们允许在量子电路中加入更一般的,受 个量子比特同时控制的酉门
图 9: 多重控制门。
当且仅当 个控制位都为 时对目标比特位作用 门,否则目标比特保持不变。因此, 门即为 的 门; 门即为 的 门。实际上, 并没有任何特殊之处,我们同样可以规定控制比特为 时对目标位作用 ,而为 时令目标位保持不变。这样的受控门通常在控制位用空心点表示如下:
图 10: 控制的受控门。
单量子比特门和多量子比特门共同组成了量子电路中允许存在的酉门。
除了酉门外,量子电路中另一类重要的组成“零件”是量子测量模块。在量子电路中我们用“仪表盘”样式表示计算基上的投影测量,并用双线表示测量得到的经典的输出结果:
图 11: 测量以及测量结果的电路表示。
大部分时候量子测量出现在电路图的最后一列,但有时候也可能会出现在电路中间,其输出的经典结果可以用于控制后续量子门的操作(例如本章第 节量子隐形传态的电路模型)。如果我们希望根据一个量子比特 的测量结果来决定要不要对另一个量子比特施加 门( 不施加, 施加),这个操作在量子电路中的表示如下:
图 12: 测量结果控制量子操作。
最后我们指出,量子电路中还有两个不那么“量子”的操作,即量子比特的添加和丢弃。和经典计算机一样,在量子计算中,我们可以借用额外的量子比特来简化计算(如何尽量少地引入额外的量子比特也是量子计算中的重要技巧之一),也可以扔掉一些我们不想要的量子比特(数学刻画为取偏迹)。在量子电路中引入额外的量子比特,只需要在原电路下方添加一条水平线;丢弃一个量子比特则不需要做额外的操作,电路图上表现为从某处开始不再对其施加包括测量的任何操作(注:在许多文献中会通过接地线的方式表示丢弃某个量子比特)。
习题1. 考虑如下所示的电路图:
图 13: 习题 1 电路模型。
其中 。
将电路在通过 门之前的量子态记作 ,计算 的矩阵表示。
将电路在通过 门之后的量子态记作 ,计算 的矩阵表示。
计算电路最右侧量子测量的结果概率分布。
在上一小节中我们学习了搭建量子电路的基本规则以及一些常用“零件”。由此自然地引出了一个问题:是否存在两个搭建方法不同但功能完全相同的电路呢?如果存在,我们则称这两个量子电路等价。量子电路的等价性分析可以帮助我们在实现量子电路时选择量子门更少或者物理上更容易实现的方式,从而降低量子电路的运行成本。
回忆我们一开始介绍的图 2 中 串联量子电路例子:如果对这个电路的作用效果稍作观察,会发现整个电路对输入的量子态不做任何改变,它会把任意量子态 原样输出,即
这一点可以从量子门的矩阵表示中得出。如果我们把四个酉变换视作一个整体的酉变换,则
这便是一个等价量子电路的例子,我们将这种电路图的等价性表示为:
图 14: 串联和单个 等价。
另外注意到 ,则有
这意味着在量子电路中 门和 门等价:
图 15: 串联和单个 等价。
另一个有趣的例子是 和 等价(同样可以用矩阵乘法轻松得到这一结论)。
第一章中量子计算一节提到了三个旋转门 ,, ,对该等价变换稍作修改,以下推论便是不那么直观发现的:
这意味着 门和 门等价:
图 16: 和 。
如果我们把 门也考虑进来,将得到更多有意思的等价电路。 首先是一个将 门中控制位和目标位“互换”的等价电路:
图 17: 交换。
在量子计算中我们有时需要将两个量子比特交换位置。将量子交换门( 门)记作 ,则 。容易证明 门与三个 门等价:
图 18: 门与三个 门等价。
对于有两个控制位的受控门 ,如下等价关系允许我们将其转化只有一个控制位的受控门 和 门的组合:
图 19: 门的等价分解。
其中 满足 。这个技巧启发了我们将更一般的具有多个控制位的受控门 转化为 的方法,具体的练习可见本节习题 5。
前文中提到的用测量得到的经典结果控制量子比特的电路中,测量模块在电路中间,和常见的量子电路模型结构不太一致。我们可以将经典控制部分替换为量子受控门,并且将测量部件放在最后,这样可以获得与原电路同样的效果,且电路结构也统一。
图 20: 测量结果控制量子操作,测量可以延迟。
这种等价性被称为推迟测量原理(Principle of Deferred Measurement)。利用这个原理,我们可以将电路中的测量部分调整到合适的位置而不改变电路的整体作用效果。一般来说,尽早地进行测量可以降低量子比特存储容量的要求,使得算法更容易在物理上实现;但另一方面,将测量操作推迟到量子电路最后往往有利于我们对量子算法和协议进行理论分析。
习题 2. 写出受控 门的矩阵表达式,并证明受控 门的控制位和目标位互换后与原量子门等价,
图 21: 门等价性证明。
习题 3. 证明下列电路的等价性:
图 22: 电路等价性证明。
习题 4. 证明下列电路的等价性:
图 23: 延迟测量电路等价性证明。
习题 5. 利用 门和 门构造 门。(提示:可以额外引入置位为 的量子比特。)
前面我们提到用基本的量子门“零件”可以搭建出各种量子电路,并且不同的量子电路可以实现相同的功能。那么,对于任意一个量子电路,是否都可以用我们手中的“零件”实现呢?这个问题被称为量子门的通用性问题。
如果你对数字电路或者计算机科学熟悉,那么可能已经知道经典电路中任何布尔函数都能仅用与非门实现。量子力学允许任意的酉变换操作,因此在量子计算中,我们希望找到一组量子门,使得其中元素的排列组合所搭建出的量子电路可以实现任意给定的酉变换。我们称这种门集合为通用量子门集合。注意经典计算机中的计算是离散的,而酉变换是连续的。因此关于量子门集合通用性更准确的表述是:使用一组量子门集合中的有限个元素搭建出的量子电路,能够以任意精度逼近任意给定的酉变换。和经典计算一样,量子计算中存在(且不止一组)这样的通用量子门集合。
事实上,量子门的通用性是一个相当深刻的问题,本教程的篇幅不足以详细展示通用性证明的每一个细节,因此本节将给出一组量子门集合 的通用性证明思路。部分证明细节参见本节附录,完整的证明细节,以及其他通用量子门集合可以参考文献中的相关章节。
量子门集合 通用性证明的思路如下:
首先,证明作用于 个量子比特的任意酉门 可以分解为有限个两级酉门(只作用于态矢量的两个分量上的酉门)实现。
随后证明任意两级酉门可以由有限多个 级受控门 实现。
随后证明任意 可以由有限个 和 门实现(本节习题5),进而可以由有限个单量子比特门 门和 门实现。
随后证明任意单量子比特门 门可以由有限个绕两不平行轴旋转的量子门 实现。
最后证明绕两固定轴任意角度的旋转门可以用有限多个 门和 门以任意精度逼近。
这样就完成了我们的证明。整个证明的思路如下图所示:
图 24: 量子门通用性证明思路。
本节我们介绍了量子电路模型的组成和解读方式,并探讨了量子电路的等价性问题和量子门集合的通用性问题。简单来说,量子电路可以由基础的量子门和量子测量这些“零件”拼接搭建而成,我们默认从左至右的执行顺序。不同的量子门组成的量子电路之间可能等价,并且等价性验证可以很方便的用量易伏平台进行代码验证。同时,任意给定的酉变换都可以使用通用量子门集合中的元素构成的量子电路近似实现。
[1] Nielsen, Michael A., and Isaac L. Chuang. Quantum Computation and Quantum Information. Cambridge University Press, (2000).
[2] Hamada, Mitsuru. "The minimum number of rotations about two axes for constructing an arbitrarily fixed rotation." Royal Society Open Science 1.3 (2014): 140145.
[3] Boykin, P. Oscar, et al. "On universal and fault-tolerant quantum computing." arXiv preprint quant-ph/9906054 (1999).
量易伏平台(英文名:Quantum Leaf)是百度研究院旗下量子计算研究所开发的云原生(Cloud Native)量子计算平台,提供以量子设施即服务(Quantum Infrastructure as a Service)模式的量子计算环境,并为用户提供了多种方式进行量子计算实验。读者可以通过其官网,了解量易伏的快速使用指南,或者通过此链接提供的《用户手册》,了解更多量易伏相关规则以及进阶用法。
在这里我们简要介绍 QComposer 与 QCompute 两种运行量子电路模式,其中通过 QComposer 还可以运行来自中科院物理所的 10 比特量子真机,体验在真实量子计算机上实验量子算法。
注: 关于量易伏平台对量子态的测量结果,有一点需要强调:与狄拉克表示中对多比特量子态的编码顺序不同('' 将被编码到量子态 ),在测量结果输出部分,量易伏采用大端在前的标记方法,即(量子态 在测量后将以顺序 '' 输出)。在理解量易伏实验输出结果,以及编写自己的算法时,读者尤其需要注意这一点。
QComposer 是一个可视化的在线量子电路编辑环境。非常适合初学者学习入门,可以很方便地理解量子计算。用户无需复杂的配置,在网站注册后即可使用。在这里我们通过两个简单的例子来帮助读者理解如何使用(注: 如果想要在 QComposer 使用真机,只要将【运行目标】设置为 CloudIoPCAS 即可):
在 QComposer 中可以如下搭建习题 1 中的电路,并对第一个量子比特进行测量:
图 25:量易伏 QComposer 上习题 1 的电路
如图所示,用户可以在右侧的量子图形编排系统中,拖动预定义的量子门图标即可创建量子电路,并且左侧 QASM 代码框中会自动生成相应的 QASM 代码。相应的,用户编辑左侧的 QASM 代码,也同样实时自动的将电路绘制在右侧。左右两侧的运算含义一致,但表示方法不一样,方便用户对照理解。此电路对应的 OPENQASM 代码如下:
OPENQASM 2.0;
include "qelib1.inc";
qreg q[6];
creg c[6];
//
// 加入量子门
h q[0];
x q[1];
h q[0];
t q[1];
cx q[1], q[0];
s q[1];
//
// 测量第一个量子比特
measure q[0] -> c[0];
编写好量子电路之后,启动运行,就能获取计算结果。在这个例子里,理想模拟器输出结果为:
{
"1": 1024
}
在这个例子里程序共运行 1024 次,测量结果均为 1。如果想要调整运行次数等其他参数,如下图所示点击【设置】按钮即可修改。
图 26:量易伏 QComposer 上修改参数
在第二个例子里,我们给出上一章量子计算一节中“Bell 态的制备与测量”在 QComposer 中的运行结果,其电路如下:
图 27:量易伏 QComposer 上 Bell 态制备电路
理想模拟器输出结果为:
{
"11": 515,
"00": 509
}
可见此纠缠态两个量子比特的测量结果具有高度相关性。
此外,除了工具栏中提供的大量内置量子门,读者也可以通过 Subroutines 功能搭建自己的子程序。由于本教程中大多数算法并不涉及子程序,故此处不做过多讲解。有兴趣的读者可以阅读《用户手册》中的“入门教程之 QComposer”一章。
量子开发套件——QCompute 是基于 Python 的开发工具包。这个产品可以使用户全面地使用量易伏平台的功能。它非常适合用于进阶学习,在实现一般的量子算法时,相比于 QComposer 中的电路搭建方法将更加高效。
我们推荐读者根据以下安装说明,在本地安装 QCompute,并在后续几章学习量子算法的过程中参考给出的范例实际体验(可直接复制代码并在本地运行)。想要具体了解如何编写代码的同学,可以阅读《用户手册》中的“进阶教程之 QCompute”一章。
1. 安装 Python: 请使用 Python 3.6 以上版本的运行环境。
2. 安装 QCompute: 安装 QCompute 有以下两种方式,用户可任选其一:
方式一: 从源代码安装 QCompute
- 从 GitHub 下载源代码包并解压缩
- 在源码目录执行 pip install -e .
方式二: 从 PyPI 安装 QCompute
- 执行 pip install qcompute
3. 验证安装: 安装完成后,运行:
python -m QCompute.Test.PostInstall.PostInstall 稍候片刻,如输出: Local test succeeded. 表示本地模拟器测试通过。
下面我们给出 Bell 态的制备与测量的 QCompute 代码,其中随机数用 输入本地模拟器,取值范围为 [0, 2147483647]。
from QCompute import *
import numpy as np
# 不直接给出输出,后续通过print给出需要信息
from QCompute import Define
Define.Settings.drawCircuitControl = []
Define.Settings.outputInfo = False
# Bell 态的制备与测量
def main():
"""
main
"""
# 设置测量的次数
shots = 1024
# 创建环境
env = QEnv()
# 选择随机数
seed = int(2147483647*np.random.random())
# 选择 Backend 为本地模拟器
env.backend(BackendName.LocalBaiduSim2, '-s ' + str(seed))
# 初始化全部量子比特
q = [env.Q[0], env.Q[1]]
# 制备 Bell 态
H(q[0])
CX(q[0], q[1])
# 进行测量
MeasureZ(q, range(2))
np.random.seed(None)
taskResult = env.commit(shots, fetchMeasure=True)
# 输出结果
print("Shots", taskResult['shots'])
print("Counts", taskResult['counts'])
print("Seed", seed)
return taskResult['counts']
if __name__ == '__main__':
main()
代码输出:
Shots 1024
Counts {'00': 497, '11': 527}
Seed 2077588173
这里进一步介绍量子门集合 的通用性证明。如本节正文所述,通用性证明可以分为五个步骤完成,现逐一介绍如下。
利用两级酉门实现任意多比特酉门
两级酉门也可以被理解为复线性空间的 Givens 旋转。两级酉门 的矩阵形式是一个单位阵,其中第 行 列、 行 列、 行 列、 行 列矩阵元分别被替换为 的矩阵 的矩阵元。这里一个重要性质是可以通过连续作用两级酉门将任一向量旋转到计算基上。例如,考虑任意一个三维向量 ,则存在两级酉门 使得
随后,再构造两级酉门 使得
这样就得到了两级酉门的组合 使得 。
这个重要性质可以帮助我们将任意酉门分解到两级酉门的乘积。对于任意一个作用在 个量子比特上的酉门 ,只考虑其第一列,可以由上述方法用至多 个两级酉门将其转换为第一列只有第一个元素为 1,其他元素全为 0 的矩阵 。由于矩阵 依旧是酉的,矩阵 的第一行也一定只有第一个元素为 1,因此矩阵 最多是一个 级酉门。如此重复至多 次,就得到一个两级酉门 。将 与之前用到的所有两级酉门组合起来,就得到了任意酉门 到有限个两级酉门的分解。
受控酉门实现任意两级酉门
作用在只有一位不同的两个计算基矢分量上的两级酉门是很好实现的:以 举例,设需要实现的两级酉门只作用在 和 两个分量上,即
设作用在一个量子比特上的酉门
则有 可以由以第一、第三量子比特为控制位,第二量子比特为目标位的受控 门实现。只有一位不同的两个码字在格雷码中称为相邻码字(比如 101 和 100 是相邻的码字,而 101 和 010 则是不相邻的码字)。问题的难点在于如何实现作用在不相邻码字上的两级酉门。格雷码同样提示了我们方法。
不妨设需要实现的两级酉门只作用在 和 两个不相邻分量上,根据格雷码的知识,我们可以用有限多个相邻码字将 101 和 010 连接起来:
我们希望将 转换到 上,这样就可以用受控 门实现需要的两级酉门,最后再将 转换回来。相邻码字的转换可以通过一般的受控非门来实现。实现作用在 和 上的两级酉门的完整电路如下:
图 28: 格雷码实现两级酉门。
其中第一个受控非门将 变换为 ,第二个受控非门将 变换为 ,中间的受控 实现两级酉变,最后两个受控非门还原 到 的状态。因此我们得到了受控酉门实现任意两级酉门的方法。
单比特门和 门实现任意受控酉门
由本节习题 5 可知,任意 可以由有限个 和 门实现,我们现在论证任意 可由单比特门和 门实现。我们利用如下定理:
定理 1. 任意单量子比特门都存在 ZYZ 分解,即对任意单量子比特门 , 存在实数 使得
(定理的证明留作本节习题,见习题 )
由定理 1出发,令 ,,,容易验证 且 。因此,如下等价电路实现了任意 :
图 29: 受控酉门的等价分解。
绕两不平行轴旋转门实现任意单量子比特门
这事实上是定理 1对更一般情况的推广。定理 1将任意单量子比特门分解为绕 轴和绕 轴的一共三个旋转门。事实上,任意单量子比特门可以分解为绕任意两正交轴的一共三个旋转门(见本节习题 7)。对于非正交的两轴,任意单量子比特门也可以分解为绕它们的旋转,只不过需要旋转门的数量会更多一些(直观地理解,显然两轴的夹角越小,所需的门数量越大,对于两平行的轴则不能完成该分解)。我们直接给出如下定理,定理的完整证明可以参考文献:
定理 2. 对任意单量子比特门 ,以及不平行的两轴 和 ,存在实数 使得
且 。
用 门和 门逼近绕两固定轴任意角度的旋转门
我们考虑 门和 门。不难发现, 门是绕 轴旋转 角度, 门是绕 轴旋转 角度,则
且
可见 和 分别是绕轴 和轴 旋转 角度的酉矩阵。由于 是 的无理数倍(这一点并不显然,其证明可以在文献中找到),因此重复 和 分别逼近绕轴 和轴 旋转任意角度的旋转门。显然, 和 不平行,满足定理 2的要求。
至此,我们就完成了量子门 通用性证明。
习题 6. 证明定理 1 :任意单量子比特门都存在 分解。
提示:尝试证明任意单量子比特门可以写成
的形式。
习题 7. 在上题的基础上,证明对任意正交轴 和 ,存在实数 使得
最后更新时间:2021年12月20日