版权所有 (c) 2021 百度量子计算研究所,保留所有权利。
目前普遍认为,量子计算在近期很有前景的一个应用是处理量子化学问题。变分量子本征求解器(Variational Quantum Eigensolver, 以下简称 VQE)作为这个研究方向的核心算法之一,为研究者们提供了在目前有噪中等规模量子(Noisy Intermediate-Scale Quantum, NISQ)设备上研究量子化学的可能。
VQE 的核心任务是求解一个量子尺度上封闭物理系统的哈密顿量 的基态能量及其对应的量子态,其实现是通过在量子设备上准备一个参数化的试探波函数(量子态) ,然后结合经典机器学习中的优化算法(例如梯度下降法)去不断地优化参数向量 , 使得期望值 最小。这套方案的基本原理是瑞利-里兹变分原理,即
其中 表示该系统的基态能量, 是一组各自独立的参数所组成的向量。从数值分析的角度来看,该问题可以被理解为求解一个离散化哈密顿量 (为厄米矩阵,满足 )的最小本征值 和该本征值对应的本征向量 。具体的离散化过程属于量子化学的专业领域范畴,感兴趣的读者可以参考《量子化学: 基本原理和从头计算法》系列丛书。
通常来说,为了能在近期量子设备上处理量子化学问题,哈密顿量 会被表示为泡利算符的张量积形式,即
其中 表示权重系数,, 表示所需的量子比特个数。通过式(2)我们把哈密顿量分解成了 泡利字符串(Pauli String)的形式。以下为一个 2 量子比特的具体例子:
在 NISQ 设备上,试探波函数 的制备通常是先将所有量子比特初始化为 态,然后施加一个参数化量子电路(Parameterized Quantum Circuits)。该电路可以由一系列的固定量子门 和参数化量子门 构成,即 。整个试探波函数的制备过程可以描述为
此时可以对哈密顿量 测量,并记期望值为
注: 在经典计算机上高效地制备、存储和测量波函数 是相对困难的,量子态的描述难度随着量子位的增多会呈现指数增长。
在本节中,我们会以求解氢分子的基态能量为例,展现如何通过 VQE 解哈密顿量优化问题。故在下一小节,我们会首先补充一些关于电子结构问题的背景知识,本质上讨论的是如何根据实际问题,得到上述形式哈密顿量。
在本小节,我们将集中讨论量子化学中的一个基本问题——电子结构问题。更准确地说,我们关心的是如何得到分子的基态。这些信息可以帮助我们预测化学反应的速率和分子的稳定结构等等。
假设一个分子由 个原子核和 个电子组成,描述该分子系统总能量的哈密顿量算符 可以写为
其中 和 分别表示第 个原子核的位置、质量和原子序数(原子核内质子数),第 个电子的位置则表示为 。以上公式右边前两项分别代表原子核和电子的总动能。第三项表示带正电的质子和带负电的电子之间的库仑相互吸引作用。最后两项则表示原子核-原子核之间,电子-电子之间的相互排斥作用。这里,分子哈密顿量 使用的是原子单位制能量 哈特里能量,记为 Ha。 哈特里能量的大小为 电子伏或 千卡/摩尔,其中 、 和 分别表示电子质量、基本电荷和玻尔半径, 表示约化普朗克常数。
由于一般原子核的质量要远大于电子,因而在同样的相互作用下电子的运动速度会比原子核快很多。所以,将原子核所处的位置看成固定 常数 是一种合理的近似。这种通过在时间尺度上将电子行为和原子核行为去耦合的近似处理思想被称为玻恩-奥本海默近似。作为近似的直接结果,式(6)中原子核的动能项会被消去,并且表示原子核-原子核相互排斥作用的项可以被认为是一个能量移位(这个项是与电子位置 无关的)从而也可以作为常数项被忽略。经过这些步骤后,我们可以把哈密顿量近似为:
在经过以上近似后,分子中多电子结构的能级在理论上可以通过求解以下不含时薛定谔方程获得:
其中 指代能级, 是指第 能级的能量, 是对应 能级的连续波函数,也可以称为定态(或者轨道)。值得注意的是,电子哈密顿量中电子-电子相互排斥作用的求和项数会随着电子数 的增多至 项。这意味着对于一个含有16个电子的氧分子(O)我们需要计算多达120项的相互排斥作用项。 一般来说,这样的问题是无法从理论上精确求解的。正如狄拉克在 Quantum mechanics of many-electron systems 中所指出的那样,
The underlying physical laws necessary for the mathematical theory of a large part of physics and the whole of chemistry are thus completely known, and the difficulty is only that the exact application of these laws leads to equations much too complicated to be soluble.
-- Paul Dirac (1929)
既然解析的做法因为太复杂了不太可行,那么我们可以尝试采用数值方法来处理。一个最简单的数值方法(离散化方法)就是把上述作用中连续的无限维希尔伯特空间离散化为等间距排开的立方体晶格点。经过这样一个离散化的过程,主要的运算规则也从偏微分方程的求解变为了复数域上的线性代数。假设空间的每个轴都离散为等间距排开的 个点,则 -电子(为了方便后续讨论,去掉下标 )的多体波函数可以写为
其中 , 表示反对称化操作(基于 泡利不相容原理),坐标 记录第 个电子的空间位置信息和自旋, 且 , 同时 表示自旋向下和向上,并且 。这样一种离散化方式共计需要 个数据来表示波函数。可以看出,经典计算机存储这样一个波函数需要的内存是随着电子个数呈指数增长的。这使得基于这种离散化的经典数值方法,很难模拟超过几十个电子的系统。
那么,我们是不是能够通过量子设备来存储和准备这样一个波函数然后求解基态能量 呢?在下一节中,我们将以最简单的分子系统——氢分子(H)为例,讲解 VQE 算法。
注: 关于量子化学和现有数值计算方法的综述也超过了本教程的处理范围,我们推荐感兴趣的读者去查阅以下经典教材: Trygve Helgaker 等人撰写的 Molecular Electronic-Structure Theory 以及 Szabo 与 Ostlund 撰写的 Modern Quantum Chemistry: Introduction to Advanced Electronic Structure Theory。 如果需要弥补量子计算和量子化学之间知识空缺,请参考综述文章 [1] 和 [2]。
在这一小节中,我们以求解氢分子的基态能量为例详细地讲解 VQE 算法的运作原理和过程。
具体的运行过程主要涉及对分子哈密顿量预处理、通过量子电路构建参数化试探波函数、 对试探波函数做泡利测量和对参数经典优化这四部分。我们将以上流程总结在下图中。
图 1:VQE算法的运行流程。
以下我们将结合量桨中提供的包和函数详细介绍 VQE 算法的基本思路流程,并求解氢分子基态能量。此处给出对应代码及模拟运行结果,有兴趣的读者可以参考量桨官网安装说明与快速入门,通过 Python 自行运行体验。
按照矩阵的谱分解理论,我们可以把离散化后的分子哈密顿量 写成以下形式
其中 为矩阵的本征值,对应的本征向量为 。现在我们将上述形式带入式(1),可以得到
根据上式,我们总是可以把关于可观测量 的期望值写成加权求和的形式,权重系数 ,且 。那么,显然我们可以推得式(1)
以上便是对于 VQE 中涉及变分原理的推导。值得注意的是,对于任意波函数关于 的期望值都至少是 ,式(12)中的等号成立当且仅当波函数是基态 。
式(7)中的哈密顿量通常被称为一次量子化表示,对应地需要我们去记录电子波函数在空间上各个点的数据,导致计算量很大。目前的 VQE 算法遵循现代计算化学的研究思路,采用二次量子化的表示。通过引入有限的自旋轨道(Spin-Orbital)集合 离散化希尔伯特空间然后记录每个轨道上电子的占据情况,由此我们可以将 -电子的波函数记为
其中因为每个轨道 可以至多被两个不同自旋的电子占据 ,故表示为 。当第 个分子轨道被占据时 ,没有被占据时则表示为 。这使得我们可以直接用多个量子比特的状态(例如 )来表示电子的波函数。
在二次量子化表示下,我们通常将哈密顿量表示为如下费米算符的形式:
其中下标 代表不同的单电子自旋分子轨道,产生算符 与湮灭算符 分别表示在第 个分子轨道上产生和凐灭一个电子。常数 和 被分别称为单电子积分和双电子积分,
可以看出式(15)对应着式(7)中前两项电子动能和核-电子之间的库仑相互作用项,式(16)则对应式(7)中剩下的一项描述电子-电子相互排斥作用。读者不用担心,这些积分的计算通常交由完善的计算化学包 PySCF 或者 OpenFermion 来完成。
习题 1. 按照式(14)的描述,写出产生算符 与湮灭算符 的矩阵表示。
需要注意的是,产生算符 与湮灭算符 并不是量子计算机上原生的操作,我们还需要一步从费米算符到泡利算符的映射。常用的映射方法包括 Jordan-Wigner 变换
这种映射方式通常需要 个量子比特来编码哈密顿量,其中 表示自旋轨道的数量。对于氢分子而言, 。也就是说在 JW 变换下,针对氢分子的 VQE 运算需要4个量子比特。而在实际的 VQE 实验中通常会采用更为高效但复杂的映射来减少计算所需的量子比特数量,例如 Bravyi-Kitaev 变换。目前来说,最优的从费米算符到泡利算符的映射方法仍是一个开放问题。
习题 2. 已知费米算符遵守反对易关系 ,证明在 JW 变换下该关系依然成立。
接下来我们具体学习下如何通过量桨的量子化学模块 paddle_quantum.qchem
来获取预处理好的泡利字符串形式的哈密顿量。关于 qchem
模块的环境设置,请参考量桨的安装说明。
对于具体需要分析的分子,我们需要其几何构型(Geometry)、自旋轨道基组(Basis Set,例如常见的 STO-3G 是基于高斯类型函数拟合的轨道)、多重度(Multiplicity)以及净电荷数(Charge)等多项信息来建模。这里我们以氢分子为例,生成的 量子比特的哈密顿量共计 项。代码部分如下:
# 引入量桨中的量子化学模块
import paddle_quantum.qchem as qchem
geo = qchem.geometry(structure=[['H', [0.0, 0.0, -0.35]], ['H', [0.0, 0.0, 0.35]]])
# 将分子信息存储在 molecule 里
# 信息包括单体积分(One-body Integrations)、双体积分(Two-body Integrations)、分子的哈密顿量等
molecule = qchem.get_molecular_data(
geometry=geo,
basis='sto-3g',
charge=0,
multiplicity=1,
method="fci",
if_save=True,
if_print=True
)
# 通过 JW 变换提取泡利字符串形式的哈密顿量
molecular_hamiltonian = qchem.spin_hamiltonian(
molecule=molecule,
filename=None,
multiplicity=1,
mapping_method='jordan_wigner'
)
# 打印哈密顿量
print("\nThe generated H2 Hamiltonian is \n", molecular_hamiltonian)
运行结果为:
FCI energy for H2_sto-3g_singlet (2 electrons) is -1.1361894540879054.
The generated H2 Hamiltonian is
-0.042078976477822494 [] +
-0.04475014401535163 [X0 X1 Y2 Y3] +
0.04475014401535163 [X0 Y1 Y2 X3] +
0.04475014401535163 [Y0 X1 X2 Y3] +
-0.04475014401535163 [Y0 Y1 X2 X3] +
0.17771287465139946 [Z0] +
0.17059738328801055 [Z0 Z1] +
0.12293305056183797 [Z0 Z2] +
0.1676831945771896 [Z0 Z3] +
0.17771287465139946 [Z1] +
0.1676831945771896 [Z1 Z2] +
0.12293305056183797 [Z1 Z3] +
-0.24274280513140462 [Z2] +
0.1762764080431959 [Z2 Z3] +
-0.24274280513140462 [Z3]
注: 生成这个哈密顿量的几何构型中,两个氢原子间的间隔(Interatomic Distance)为 Å(1Å = m)。如果你需要测试更多分子的几何构型,请移步至此数据库。除了输入分子的几何结构外,qchem
模块还支持读取分子的几何构型文件 (.xyz
文件),关于该模块更多的用法请参考量桨中哈密顿量的构造教程。
如何设计一个量子电路,让其在具有足够表达能力来完成任务的同时又使用尽量少的量子门,至今仍然是一个具有挑战性的开放问题。VQE 算法中通常使用两种类型的量子电路 来制备试探波函数 。第一类是针对量子硬件相干时间和拓扑结构限制设计的可拓展型量子电路,通常只由含参单比特旋转门 和两两相邻的受控非门 CNOT 组成。第二类是基于量子化学领域内的幺正耦合簇理论(Unitary Coupled Cluster, UCC)启发构造的 UCC 拟设电路。 这种类型的电路构造需要专门的理论知识,不易于入门。
注: 变分量子算法中涉及的量子电路通常也被称为拟设(Ansatz)。
囿于现有 NISQ 设备的噪声、相干时间以及拓扑结构限制(例如超导硬件上并非任意两个量子比特都可以执行双比特门),硬件高效的电路结构 旨在使用尽量少的并且容易在硬件上实现的量子门来构成一种可拓展的模板。图 2 给出一种简单的可拓展模板,虚线框部分即为可添加的重复单元。
注: 尽管目前基于硬件高效电路结构的 VQE 在实验上对于小规模化学系统的模拟取得了一定成果,但是普遍认为在处理大型任务上,这类电路结构是不太适用的。一方面因为这样的电路设计没有考虑到需要模拟的分子系统的任何性质,对于硬件高效未必对于解决物理问题来说就是高效的。另一方面,Jarrod McClean 等人在2018年发现硬件高效的电路结构在随机化初始电路参数时会出现一种随着问题规模的扩大而呈现的梯度消失问题,从而使得经典优化算法在大型的计算任务中难以找到全局最优解。这种现象被称为贫瘠高原效应(Barren Plateau)。
图 2:一种硬件高效的拟设电路结构。
这里我们提供图 2 中拟设电路在量桨中的实现方法:
import paddle
from paddle_quantum.circuit import UAnsatz
def circuit(theta, N, D):
"""
一种可拓展的硬件高效拟设电路,输入参数:
量子门角度:theta
量子比特数:N
深度(上图中虚线模块的重复次数):D
"""
# 按照量子比特数量初始化电路
cir = UAnsatz(N)
# 内置的 {R_y + CNOT} 电路模板, D 为模板的重复次数
cir.real_entangled_layer(theta[:D], D)
# 铺上最后一列 R_y 旋转门
for i in range(N):
cir.ry(theta=theta[D][i][0], which_qubit=i)
return cir
在 VQE 中另一类常见的电路结构是基于幺正耦合簇理论搭建的 UCC 拟设电路。这是为了能将量子化学中的黄金标准 -- 耦合簇理论(Coupled Cluster,CC)应用到量子计算机上而产生的幺正版本。UCC 拟设电路的作用形式一般表示为
其中 是一个参考态(通常选取为平均场近似下的 Hartree-Fock 基态), 表示簇算符(由一系列的产生算符 与湮灭算符 组成)。具体的,
其中 和 分别表示没被占据和被占据的轨道, 仅含单粒子激发(Single Excitation)算符 描述单个电子的产生和湮灭(轨道跃迁), 含双粒子激发(Double Excitation)算符,依此类推下去。但由于越高阶激发算符的系数 会越小,我们一般把簇算符截断到双粒子激发算符 为止。这时的 UCC 拟设也被称为 UCCSD 拟设。对于氢分子,其 UCCSD 算符可以写为
注意到 UCC 拟设电路和硬件高效拟设电路的两点不同:UCC 电路需要一个中间过程去制备参考态;关于分子系统的信息会被编码在 UCC 拟设电路中。由于后者的存在,对于不同的分子我们需要单独去构造对应的 UCC 电路然后经过 JW 等变换再去简化需要的量子门数量,这个过程是较为复杂的。具体地对于JW 变换下的氢分子 而言,参考态取 并且对应的 UCC 电路可以简化为仅含单参数的
那么这个时候我们的试探波函数可以具体地写为:
图 3:氢分子的简化 UCC 拟设电路。
注: 氢分子的基态波函数为 。
习题 3. 利用数学推导或者数值方法验证图 3 中的量子电路和式(24)是等价的。
在介绍了 VQE 中量子部分最重要的波函数制备过程后,我们需要计算关于给定分子哈密顿量的期望值。这个将量子信息(量子态)转换为经典信息(期望值)的过程在数学上用矩阵乘法描述。
举一个简单的例子,假设 ,量子态 ,则期望值为
然而在真实的硬件上我们每次测量直接得到的并不是期望值,而是二进制的比特串例如 110...01(每个经典比特对应一个量子比特上的测量结果是0或1)。这意味着,我们需要每次重新制备量子态然后重复测量多次,再对统计结果进行后处理得到期望值。现有量子计算机上的架构默认可以对每个量子比特进行计算基(泡利 算符)上的测量,测量算子为 。如果需要对其他基底进行测量,则需要在测量前施加一定的旋转门 (pre-Measurement Rotation)。这样测量期望值的过程就较为清晰了
其中 是测量过程中出现 0 的次数占总的测量次数的比例, 是测量过程中出现 1 的次数占总的测量次数的比例。测量的总次数越多,理论上 和 会逐渐靠近各自的理论值 和 。
如果想要对泡利算符 和 估算期望值,在本质上都会转化为对 求期望值。一般的,对于任意的可观测量 ,我们要做的就是找到一个旋转门 使得 然后重复在计算基上的过程。这样的旋转门会使得量子态在测量前演化为 ,而不再是原来的 。
可观测量 | 测量前的旋转门 |
---|---|
、 |
注: 期望值永远是1。
以上我们讨论的都是单比特的情形,当给定一个多比特泡利字符串的时候,情况会略微复杂一些。比如两量子比特情况下给定 ,这时候我们的计算基也变多了 。对应的期望值计算变为
其中 是测量过程中出现 00 的次数占总的测量次数的比例, 是测量过程中出现01的次数占总的测量次数的比例,依此类推。再假设给定 ,按照单比特中的讨论我们只需要在计算基测量前对量子态进行一次演化 ,则
经过仔细观察,我们可以把上述规则拓展到 个量子比特的情形。给定一个泡利字符串形式的哈密顿量 和量子态 ,估算期望值的第一步是通过局部的旋转门先把哈密顿量处理成 同时量子态演化为 。第二步进行计算基下的测量然后进行统计,
其中 是测量过程中出现 的二进制字符串的次数占总的测量次数的比例, 表示 的二进制字符串中含有1的个数(例如 ,其二进制字符串为 1001,)。到这里,相信读者对 VQE 中的泡利测量已经有了初步的认识。接下来我们再次回到氢分子的例子中(氢分子的哈密顿量中含有 15 项泡利字符串),估算的基态能量可以写为
现在我们假设估算 需要的测量次数至少为 次。按照以上假设,需要执行电路的次数大约是 次。
注: 对于泡利测量还有一种只需要测量少数量子比特的实现方式,但其缺点也很明显。一方面我们需要在测量前添加更多的旋转门操作把信息集中在个别量子比特上,另一方面在目前 NISQ 设备存在噪声的情况下会使得误差非常集中于被测量的量子比特上。故这里不作详细介绍。
注: 对于量子化学中的能量计算,我们期望能够达到 化学精度(Chemical Accuracy) Ha 或者 1 千卡/摩尔,这也意味着在 VQE 的实验任务中所需要的测量次数往往会很大。
习题 4. 思考如何构造量子电路模拟哈密顿量 。(提示:思考表 1 中旋转门的作用。)
习题 5. 思考对于3量子比特的哈密顿量 是否需要测量第二个量子比特来估算期望值?
介绍完以上在量子处理器上运作的部分之后,我们接下来讨论如何在经典处理器上决定优化方向,从而循环更新试探波函数 。
目前 VQE 的优化器选择主要有两大难题,一是噪声影响优化过程的收敛,另一个则是由于搜索空间过大导致容易陷入局部最优解。VQE 中的优化方法大致分为两类:直接搜索(不需要梯度信息)和基于梯度信息的梯度下降法(Gradient Descent)和其衍生算法。按照现有的实验结果来看直接搜索方法会表现的更抗噪,但相比于梯度下降的方法需要执行更多次电路来获取关于优化方向的信息。
直接搜索方法 | 梯度下降方法 |
---|---|
单纯形法(Nelder-Mead) | 解析梯度法(Analytical Gradient) |
模拟退火(Simulated Annealing) | 随机梯度下降法(SGD) |
粒子群算法(Particle Swarm) | L-BFGS-B 算法 |
协方差自适应进化策略(CMA-ES) | 量子自然梯度下降法(Quantum Natural Gradient Descent) |
为了简化讨论,这里我们只介绍基于解析梯度(Analytical Gradient)的梯度下降法。梯度下降法针对第 个参数 的更新方法为:
其中 通常被称为学习率(Learning Rate)。梯度信息 的计算方式为:
可以看出梯度信息的计算需要额外估算两次期望值。值得注意的是,该方法与有限差分方法(Finite Difference Method,FDM)不同,梯度是精确的,故被称为解析梯度。FDM 的梯度估计方法为
其中 。
习题 6. 估计单次优化循环中电路所需要的执行次数。 参数量为 10,选用优化器为基于解析梯度的梯度下降法,测量次数为 8192 次,哈密顿量含有 30 个泡利字符串。
在这一小节,我们总结一下通过 VQE 求解氢分子基态能级的完整流程,并且给出量桨上的实现代码:
步骤 1: 通过计算化学包获取分子的哈密顿量,保存为泡利字符串形式。具体代码在上一小节给出,对应泡利字符串存为“molecular_hamiltonian”。
步骤 2: 构建此问题的参数化量子电路,用以生成试探波函数。此问题中我们使用可拓展量子电路,具体代码见上一小节“circuit(theta, N, D)”。
步骤 3: 对试探波函数进行测量,得到期望值作为损失函数。
步骤 4: 使用经典优化器(此处我们使用 Adam 优化器)通过优化损失函数对电路参数进行迭代优化。
以下代码展示通过对此电路生成的参数化试探波函数进行测量,并通过 Adam 优化器优化电路中的参数以得到氢分子最低能级:
from numpy import pi as PI
import matplotlib.pyplot as plt
class VQENet(paddle.nn.Layer):
def __init__(self, shape, dtype="float64"):
super(VQENet, self).__init__()
# 初始化 theta 参数列表,并用 [0, 2*pi] 的均匀分布来填充初始值
self.theta = self.create_parameter(
shape=shape,
default_initializer=paddle.nn.initializer.Uniform(low=0.0, high=2 * PI),
dtype=dtype,
is_bias=False)
# 定义损失函数和前向传播机制
def forward(self, N, D):
# 生成电路
cir = circuit(self.theta, N, D)
# 从默认的初始态 |0000> 开始执行电路
cir.run_state_vector()
# 计算损失函数:给定哈密顿量的期望值
loss = cir.expecval(molecular_hamiltonian)
return loss
ITR = 80 # 设置训练的总迭代次数
LR = 0.4 # 设置学习率
D = 2 # 设置硬件高效拟设电路中重复计算模块的深度 Depth
# 模拟氢分子所需的量子比特数
num_qubits = molecular_hamiltonian.n_qubits
# 确定网络的参数维度
net = VQENet(shape=[D + 1, num_qubits, 1])
# 使用 Adam 优化器
opt = paddle.optimizer.Adam(learning_rate=LR, parameters=net.parameters())
# 记录优化结果
summary_iter, summary_loss = [], []
# 优化循环
for itr in range(1, ITR + 1):
# 前向传播计算损失函数
loss = net(num_qubits, D)
# 反向传播极小化损失函数
loss.backward()
opt.minimize(loss)
opt.clear_grad()
# 更新优化结果
summary_loss.append(loss.numpy())
summary_iter.append(itr)
# 打印结果
if itr % 20 == 0:
print("iter:", itr, "loss:", "%.4f" % loss.numpy())
print("iter:", itr, "Ground state energy:", "%.4f Ha" % loss.numpy())
训练结果如下:
iter: 20 loss: -1.1034
iter: 20 Ground state energy: -1.1034 Ha
iter: 40 loss: -1.1287
iter: 40 Ground state energy: -1.1287 Ha
iter: 60 loss: -1.1355
iter: 60 Ground state energy: -1.1355 Ha
iter: 80 loss: -1.1361
iter: 80 Ground state energy: -1.1361 Ha
完成训练后,通过 VQE 得到的基态能量的估计值为 Ha,这与通过全价构型相互作用(FCI)计算得出的值 Ha 是在化学精度 Ha 内相符合的。
这里我们给出优化过程中损失函数的变化曲线,作图可以看到随着优化迭代,试探波函数的能量逐渐逼近氢分子最低能级。
import numpy
eig_val, eig_state = numpy.linalg.eig(molecular_hamiltonian.construct_h_matrix())
min_eig_H = numpy.min(eig_val.real)
min_loss = numpy.ones([len(summary_iter)]) * min_eig_H
plt.figure(1)
func1, = plt.plot(summary_iter, summary_loss, alpha=0.7, marker='', linestyle="-", color='r')
func_min, = plt.plot(summary_iter, min_loss, alpha=0.7, marker='', linestyle=":", color='b')
plt.xlabel('Number of iteration')
plt.ylabel('Energy (Ha)')
plt.legend(
handles=[func1, func_min],
labels=[r'$\left\langle {\psi \left( {\theta } \right)} '
r'\right|H\left| {\psi \left( {\theta } \right)} \right\rangle $',
'Ground-state energy'],
loc='best'
)
plt.show()
图 4:VQE 算法寻找氢分子基态能量的训练过程。
习题 7. 尝试另一种自旋轨道基组 6-31G 估计 H 的基态能量,效果是否更好?
在这一节中,我们学习了求解分子系统基态能量的 VQE 算法。主要包括了预处理分子哈密顿量、在量子计算机上制备和测量试探波函数、以及经典优化器更新迭代波函数这几个组成部分。相信读者在阅读完之后,对 VQE 算法已经有了初步的认识。这里我们也部分总结了 VQE 目前的实验进展(表 2)。可以说目前 VQE 算法中依然有许多开放问题等待解决,比如如何高效地将费米算符形式的哈密顿量映射成泡利字符串的形式、如何利用对称性减少 VQE 任务中涉及的量子比特数、如何有效地构建大型分子的 UCC 拟设电路、哪种经典优化器对于 VQE 实验是最优的等等。希望在未来,这些问题都能得到一一解决从而让 VQE 算法逐渐迈向实际应用。
物理系统 | 实验平台 | 年份 | 量子比特数 | 运算方法 | 参考资料 |
---|---|---|---|---|---|
HeH | 光子 | 2013 | 2 | UCC 拟设电路 | [3] |
H | 超导 | 2015 | 2 | UCC 拟设电路 | Google [19] |
H, LiH, BeH | 超导 | 2017 | 6 | 硬件高效拟设电路 | IBM [12] |
H, LiH | 离子阱 | 2018 | 3 | UCC 拟设电路 | [15] |
HO | 离子阱 | 2019 | 4 | UCC 拟设电路 | IonQ [20] |
H, H, HNNH | 超导 | 2020 | 12 | Hartree-Fock | Google [21] |
[1] Cao, Yudong, et al. "Quantum chemistry in the age of quantum computing." Chemical Reviews 119.19 (2019): 10856-10915.
[2] McArdle, Sam, et al. "Quantum computational chemistry." Reviews of Modern Physics 92.1 (2020): 015003.
[3] Peruzzo, Alberto, et al. "A variational eigenvalue solver on a photonic quantum processor." Nature Communications 5.1 (2014): 1-7.
[4] Moll, Nikolaj, et al. "Quantum optimization using variational algorithms on near-term quantum devices." Quantum Science and Technology 3.3 (2018): 030503.
[5] Griffiths, David J, and Darrell F. Schroeter. "Introduction to quantum mechanics." Cambridge University Press, (2018).
[6] 徐光宪, 黎乐民, 王德民. 量子化学: 基本原理和从头计算法(上)[M], 第二版. 北京: 科学出版社, 2012.
[7] Helgaker, Trygve, Poul Jorgensen, and Jeppe Olsen. "Molecular electronic-structure theory." John Wiley & Sons, (2014).
[8] Dirac, Paul Adrien Maurice. "Quantum mechanics of many-electron systems." Proceedings of the Royal Society of London. Series A, Containing Papers of a Mathematical and Physical Character 123.792 (1929): 714-733.
[9] Szabo, Attila, and Neil S. Ostlund. "Modern quantum chemistry: introduction to advanced electronic structure theory." Courier Corporation, (2012).
[10] Nielsen, Michael A. "The Fermionic canonical commutation relations and the Jordan-Wigner transform." School of Physical Sciences The University of Queensland 59 (2005).
[11] Bravyi, Sergey B, and Alexei Yu Kitaev. "Fermionic quantum computation." Annals of Physics 298.1 (2002): 210-226.
[12] Kandala, Abhinav, et al. "Hardware-efficient variational quantum eigensolver for small molecules and quantum magnets." Nature 549.7671 (2017): 242-246.
[13] Romero, Jonathan, et al. "Strategies for quantum computing molecular energies using the unitary coupled cluster ansatz." Quantum Science and Technology 4.1 (2018): 014008.
[14] McClean, Jarrod R, et al. "Barren plateaus in quantum neural network training landscapes." Nature Communications 9.1 (2018): 1-6.
[15] Hempel, Cornelius, et al. "Quantum chemistry calculations on a trapped-ion quantum simulator." Physical Review X 8.3 (2018): 031022.
[16] Mitarai, Kosuke, et al. "Quantum circuit learning." Physical Review A 98.3 (2018): 032309.
[17] Sweke, Ryan, et al. "Stochastic gradient descent for hybrid quantum-classical optimization." Quantum 4 (2020): 314.
[18] Stokes, James, et al. "Quantum natural gradient." Quantum 4 (2020): 269.
[19] O’Malley, Peter JJ, et al. "Scalable quantum simulation of molecular energies." Physical Review X 6.3 (2016): 031007.
[20] Nam, Yunseong, et al. "Ground-state energy estimation of the water molecule on a trapped-ion quantum computer." npj Quantum Information 6.1 (2020): 1-6.
[21] Arute, Frank, et al. "Hartree-Fock on a superconducting qubit quantum computer." Science 369.6507 (2020): 1084-1089.
还记得在前面的注释中提到我们默认使用的两个氢原子间原子间隔为 Å 吗?VQE的另一个应用便是估计真实原子间隔,通过在不同的原子间隔下多次运行并观察运行结果的最小值,得到这个最小值的间隔即为估计的真实原子间隔。
图 5:利用 VQE 算法估算氢分子真实原子间隔。
可以看出,最小值发生在 Å 附近,这是与实验测得数据 Å 相符合的。
习题 8. 利用 VQE 估计分子 LiH 的基态能量、原子间隔并和实验数据 作比较。
最后更新时间:2021年12月20日