版权所有 (c) 2021 百度量子计算研究所,保留所有权利。
量子相位估计(Quantum Phase Estimation, QPE),顾名思义,就是要用量子算法来估计相位。具体来说,就是通过量子算法来估计给定(酉)算符的对应于其某个(或者某些,以叠加态形式表示)本征向量的本征值的相位。由于酉算符的所有本征值的模均为 ,进而可以被表示为 ,其中 。因此,估计本征值的 相位因子 就相当于估计本征值自身,故相位估计有时也被称为本征值估计(Eigenvalue Estimation)。量子相位估计算法是量子计算中最重要的算法之一,也是很多量子算法能够实现指数加速的重要原因,比如秀尔算法,HHL 算法等。
假设我们有一个酉算符 及其一个本征向量 ,同时 对应的本征值为 ,那么
量子相位估计算法的目标就是在给定 和 后给出相位因子 的一个在精度 下的估计(简称, -估计,下同)。这里精度 的具体数值可以根据具体问题通过改变量子比特数目来确定。需要特别注意的是,相位 和相位因子 是不同的概念,本节的直接结果是估计 ,当然也会间接地估计出相位 。
量子相位估计算法,输入为一个酉算符 (其控制形式) 及其的一个本征态 ,输出为该本征态对应的相位因子 的估计值。此算法需要涉及两个寄存器,其中第一个寄存器,也称辅助寄存器,用于输出相位的估计值,通常包含 个量子比特并且初始化为量子态 ;另一个寄存器,也称工作寄存器,通常初始化为本征态 。
注 1. 量子相位估计算法不是直接使用酉算符 ,而是使用其控制形式,即 :
算法总共可分为四个步骤(具体量子电路如图 1 所示):
步骤1:均匀叠加:使用 Hadamard 门作用在辅助寄存器上制备均匀叠加态(对应图 1 中状态 );
步骤2:控制酉操作:使用注 1 中 门将相位因子 蕴含为量子态的相对相位(对应图 1 中状态 );
步骤3:量子傅里叶逆变换:使用量子傅里叶变换的逆变换 将相对相位转存为量子态 (对应图 1 中状态 );
步骤4:测量:通过测量量子态 ,得到相位因子 的一个估计。
图 1:相位估计的量子电路
这里辅助寄存器的量子比特数 决定最终估计的精度,也就是说算法最终将以一定概率得到 的一个 -近似值。
接下来我们将详细地描述该算法:
这里工作寄存器 的量子比特数与 作用的量子比特数相同。对初始状态的辅助寄存器的每个量子比特分别作用 Hadamard 门得到状态 :
结合式 可知,式 可化简为
故作用 个 门后得到状态 (这里注意量子比特顺序):
其中, 是 位二进制整数。这里式 的证明可以参考 4.2 节的式 。
并简记该状态为 。
从上面的算法步骤中,我们得到算法最终的输出状态(仅辅助寄存器)为
此时,只需考察式 中的量子态的概率幅,即可知道对该量子态测量后的每个可能结果出现的概率,也就知道了对 估计的好与差。
引理 1. 式 中
证明. 因为
为等比数列求和,因此, (i)若 ,则式 可化简为 ; (ii)若 ,则式 化简为
其中,若 ,则有式 等于 0。综上所述,引理 1 得证。
接下来,根据引理 1,我们分为两种情况进行阐述。如果 是整数,那么式 中所有 以外的计算基态 所对应的概率幅均为 0,而基态 所对应的概率幅为 1,因此,对式 中的量子态 沿着计算基进行测量将以概率 1 坍缩到 ,即算法可以精确估计出 。
如果 不是整数,那么对式 中的量子态 沿着计算基进行测量时,其坍缩到 (即测量结果为 )的概率为
设 为 四舍五入到个位得到的整数(即离 最近的整数),并且令 , 由式 可得
其中不等式 是因为 。因此,对量子态 测量时有很大的概率()得到 的最优 -估计。
习题 1. 证明:若 ,则对量子态 进行测量的结果为 或 的概率 ,这里 分别表示下取整和上取整。 提示:
其中 。
这里我们说 是 的一个 -估计。考虑到相位具有周期性,这里距离 的定义应当是在单位圆周 上的,而不是数轴上的距离。 与 的距离 , 而不是简单的 。
定理 2. 证明:若 ,并且令 为 四舍五入到个位得到的整数,则对任意正整数 ,对量子态 进行测量的结果 落在区间 外的概率为 。
证明. 根据式 ,设 ,,则概率
其中第一个不等号是由于 。
由定理 2 可知,对量子态 进行测量的结果 将以极大的概率集中在 附近的整数值。如果想在保持精度的条件下进一步提升算法的成功概率,通常有两种策略:一是增加辅助寄存器的比特数,二是增加算法运行的次数。比如,若想以概率 达到精度 ,根据定理 2,只需将辅助寄存器的量子比特数设置为
即可;或者根据 Chernoff 定理,辅助寄存器的比特数仍然设置为 ,但是将整个算法重复运行 次。
在本段中,我们将使用量易伏平台来演示量子相位估计算法。首先,我们使用 QComposer 来估计一个简单的例子: 的相位因子 ,并给出对应电路;然后估计一个复杂的例子: 的相位因子 ,并给出基于混合语言编程的代码。这里:
我们使用量易伏中的 CU
门来实现 门:
注: 需要注意,量易伏平台上模拟返回的字符串采用大端在前的标记方法,从左往右第一位表示的是最高位的量子比特,故对得到的测量结果需要做翻转再进行二进制计算。
在本段中,我们使用量易伏的 QComposer 在辅助寄存器使用 个量子比特来对 门的本征向量 对应的本征值 进行相位估计。 QComposer 中的电路如下图 2 所示:
图 2:量易伏 QComposer 上对 门相位因子 的相位估计电路
其对应的 OPENQASM 代码如下:
OPENQASM 2.0;
include "qelib1.inc";
qreg q[6];
creg c[6];
// 将工作寄存器变为本征向量|1>,得到相位估计算法的初始状态
x q[3];
h q[0];
h q[1];
h q[2];
// 至此得到状态1
cu(0,0,pi/2) q[2], q[3];
cu(0,0,pi) q[1], q[3];
cu(0,0,pi*2) q[0], q[3];
//至此得到状态2,接下来开始做逆 QFT
swap q[0], q[2];
h q[2];
cu(0,0,-pi/2) q[2], q[1];
h q[1];
cu(0,0,-pi/4) q[2], q[0];
cu(0,0,-pi/2) q[1], q[0];
h q[0];
//至此完成逆 QFT,得到状态3,接下来进行测量
measure q[0] -> c[0];
measure q[1] -> c[1];
measure q[2] -> c[2];
输出结果为:
{
"010": 1024
}
由翻转后的测量结果 010 可得相位因子估计结果为 ,对应本征值为 ,与预期相符。这里 为整数的二进制表示(可参考第一章第三节)。
在本段中,我们给出基于混合语言编程的代码,使用 个量子比特来对 门的本征向量 对应的本征值 进行相位估计,推荐读者在本地使用 QCompute SDK 进行模拟实验。
from QCompute import *
import numpy as np
# 不直接给出输出,后续通过print给出需要信息
from QCompute import Define
Define.Settings.drawCircuitControl = []
Define.Settings.outputInfo = False
# 创建环境
env = QEnv()
# 选择随机数
seed = int(2147483647*np.random.random())
# 选择 Backend 为本地模拟器
# 注:量易伏也支持云端模拟器和真机后端,访问 https://quantum-hub.baidu.com/ 获取更多信息。
env.backend(BackendName.LocalBaiduSim2, '-s ' + str(seed))
shots = 1024
t = 6 # 辅助寄存器的量子比特数
pi = np.pi
theta = pi / 3 # 要被估计的 U1 门的参数
q = [env.Q[i] for i in range(0, t+1)] # 量子比特的列表
X(q[t]) # 将工作寄存器变为本征向量|1>,得到相位估计算法的初始状态
for i in range(0, t):
H(q[i])
# 至此得到状态 1
for i in range(0, t):
CU(0, 0, 2 ** i * theta)(q[t - 1 - i], q[t])
# 至此得到状态2,接下来开始做逆 QFT
# 逆 QFT 的 swap 部分
for i in range(0, t // 2):
SWAP(q[i], q[t - i - 1])
# 逆 QFT 的第二部分
for i in range(0, t):
H(q[t - i - 1])
for j in range(0, i + 1):
CU(0, 0, -pi / 2 ** (i - j + 1))(q[t - j - 1], q[t - i - 2])
# 完成逆 QFT,至此得到状态3,接下来进行测量
MeasureZ(q[:-1], range(0, t)) # 测量时没有测量最后一个比特,只测量了算法中的辅助寄存器
taskResult = env.commit(shots, fetchMeasure=True)
print("Shots", taskResult['shots'])
print("Counts", taskResult['counts'])
print("Seed", seed)
输出结果为
Shots 1024
Counts {
'110100': 690,
'001100': 43,
'010100': 195,
'000100': 15,
'111100': 3,
'100100': 28,
'101100': 14,
'111000': 8,
'011000': 5,
'011100': 3,
'110110': 1,
'010101': 1,
'110010': 1,
'110111': 1,
'101111': 1,
'110000': 1,
'010010': 1,
'100010': 2,
'101010': 2,
'000110': 1,
'100111': 1,
'010111': 1,
'010110': 1,
'000000': 1,
'101000': 2,
'101001': 1,
'100001': 1}
Seed 437929267
在对测量结果翻转后,可得相位估计结果会以很大概率()为 ,是预期结果 在精度 下的最佳近似。此外,还会以较大概率()为 是 在精度 下的次佳近似。
注 2.(i)这里只观测了前 个比特;(ii)在量子在线平台和 QComposer 输出的结果中,所有的观测的比特的输出结果会按倒序输出,如 "101110"
表示 q[0]
和 q[4]
被观测为 ,而其它比特被观测为 。
[1] Kitaev, A. Yu. "Quantum measurements and the Abelian stabilizer problem." arXiv preprint quant-ph/9511026, 1995.
[2] Nielsen, Michael A., and Isaac L. Chuang. "Quantum Computation and Quantum Information: 10th Anniversary Edition." Cambridge University Press, 2010.
当 不是 的本征向量时, 设 是 的谱分解(参见 1.2 节),则 可分解为:
记相位估计算法的量子电路为 即
那么有
故而对辅助寄存器测量时一定会以大于 的概率返回 的某个本征向量 对应的本征值的相位因子的估计值 。而这一用法正是被用的更多的情形,比如下一节的 Shor 算法。
最后更新时间:2021年12月20日