版权所有 (c) 2021 百度量子计算研究所,保留所有权利。
前面几章在逻辑门层面上介绍各种量子算法。量子算法的基础是单量子、双量子比特门,那么在真实世界中,如何在物理硬件上实现这些常见的单量子比特门、双量子比特门?
本章节主要介绍超导量子计算中单、双量子比特门的物理操控方式:微波脉冲序列。本节将首先引入脉冲的设计原则,辅以量脉的示例程序实际生成脉冲,以得到期望的量子门;同时,结合量子门最优化脉冲求解,得到最佳的脉冲调控序列。在附录部分,本章对量子门最优化脉冲求解做进一步分析,重点介绍量子最优控制的原理、建模方法和关键步骤。
在超导量子计算中,量子门操作实质上是对量子态演化的操控,通过对量子比特施加外部微波脉冲驱动或磁通实现。
对超导量子计算,常用到两种方式实现单量子比特门 :
微波调控:又称 , 通道调控,实验上是通过微波脉冲实现的,利用本机振荡器(Local Oscillator)产⽣一个高频的微波信号,频率为 ,然后⽤任意波形发生器(Arbitrary Wave Generator, AWG)产生的低频信号进行调制,低频信号频率为 。调制后的信号是中心频率在 的高斯型或正切型函数包络的脉冲。需要指出的是,此处的频率指角频率。
磁通调控:又称 通道调控,常见的做法是用超导量子干涉仪(Superconducting Quantum Interference Device, SQUID)替换单个约瑟夫森结。SQUID 是由两个约瑟夫森结构成的回路,可以通过在闭环回路内施加垂直于回路平面的磁场来改变外加磁通,实现对量子比特频率的调控。
在理想情况下,超导量子比特中非谐性带来能隙差异,通过特定频率的微波脉冲可实现对量子跃迁过程选择性激发。然而,由于 Transmon 量子比特的非谐性较弱,驱动场的频率带宽有限,计算空间中的量子态可能会被激发至更高的能级,从而产生能量泄露。随着能级升高,能隙差异越来越大,高能级对体系的影响越来越小,能量泄露到高能级的情况,一般发生在第三能级,因此我们仅考虑超导量子比特最低的三个能级。引入泄露到第三能级的情况,在旋波近似(Rotating Wave Approximation, RWA)下,描述在微波脉冲作用下三能级量子系统的哈密顿量写为:
其中, 是非谐系数, 表示第 个 通道控制的脉冲强度, 表示第 个 通道控制的脉冲的强度。, 是产生和湮灭算符。
在实验中,可以利用任意波形产生器生成特定波形的脉冲。通常选用高斯型脉冲:
其中,, 表示脉冲振幅,, 表示脉冲峰值的位置,, 表示脉冲宽度,上述参数共同决定高斯型脉冲的形状,也是在实现脉冲序列调控过程中需要优化的参数。
磁通调控是通过改变磁通的方式实现量子比特调控,区别于微波控制,磁通调控通常采用方波信号作为输入,即 ,其中 表示磁通的值,是待优化的参数。
量子比特门实质上是一种从初态到末态的演化。而量子系统在 的作用下,经过一段时间 (脉冲时长)的动力学演化,可以得到的各种不同的末态,对应不同的量子比特门。我们的目标是,通过调节参数和 的作用时间,得到我们期望的末态,这个演化过程本质上就是一个量子比特门。通过调节参数,使得在 的作用下动力学演化末态最大程度接近目标末态,即实际量子门最大程度接近目标量子门。具体优化原理,在附录中有详细讨论。
以量脉(Quanlse)中 Hadamard 门为例,介绍脉冲控制的具体实现和优化方式。
首先,从 Quanlse 库导入需要用到的各种包:
# 导入库 numpy 和 math
from numpy import round
from math import pi
# 导入哈密顿量模块
from Quanlse.QHamiltonian import QHamiltonian as QHam
# 导入云服务器上的模拟器交互
from Quanlse.remoteOptimizer import remoteOptimize1Qubit
# 导入相关的包
from Quanlse.Utils.Functions import project
from Quanlse.QOperator import duff
from Quanlse.QOperation import FixedGate
之后,定义构建哈密顿量所需的一些基本参数:采样周期、系统中的量子比特数以及要考虑的系统能级:
# 采样间隔周期
dt = 0.2
# 量子比特数
qubits = 1
# 系统能级数
level = 3
然后,定义量子比特的非谐频率:
# 定义非谐
qubitArgs = {
"qubit_anharm": - 0.33 * (2 * pi), # 量子比特的非谐系数
}
最后,使用 QHam()
实例化一个哈密顿量对象,同时传入上面定义的各种参数,并通过 addDrift()
方法加入比特的非谐项。该方法参数包括非谐项算符,量子比特索引编号和非谐项的强度。
# 定义系统信息,初始化哈密顿量
ham = QHam(qubits, level, dt)
# 添加漂移哈密顿量
ham.addDrift(duff(level), 0, coef=qubitArgs["qubit_anharm"] / 2)
创建系统哈密顿量之后,可使用 remoteOptimize1Qubit()
方法生成并优化脉冲。该方法涉及的参数包括一个哈密顿量对象,目标比特门,最大脉冲数量,以及目标保真度。由于本地设备上进行优化通常需要很长时间,量脉提供了云服务来加速这一过程。在使用量脉云服务之前,用户需要从量易伏平台获取一个 token 令牌,并使用以下命令将任务提交到量脉的服务器上:
# 定义类并设置token令牌
# 设置token令牌请访问 http://quantum-hub.baidu.com
from Quanlse import Define
Define.hubToken = ''
# 运行优化器
gateJob, infidelity = remoteOptimize1Qubit(ham, FixedGate.H.getMatrix(), depth=4, targetInfid=0.0001)
成功运行,输出结果:
Result downloaded successfully
定义量子门的失真度为: ,其中 是单量子比特门的目标演化的酉矩阵; 是 的维度; 是实际演化的酉矩阵, 是投影到计算空间的演化算符。
plot()
方法将生成的脉冲可视化。通过 simulate()
和 project()
方法可以得到表示系统演化的矩阵:
# 输出失真度,查看脉冲
print(f"minimum infidelity: {infidelity}")
gateJob.plot(dark='True')
# 输出演化过程
result = ham.simulate(job=gateJob)
projectedEvolution = project(result.result[0]["unitary"], qubits, level, 2)
print("Projected evolution:\n", round(projectedEvolution, 2))
输出失真度:
minimum infidelity: 7.935914028833757e-05
输出波形:
图 1:Hadamard 门的优化脉冲。
输出演化过程:
Projected evolution:
[[ 0.13+0.69j 0.12+0.7j ]
[ 0.13+0.69j -0.13-0.7j ]]
双量子比特门是对两个量子比特的状态同时进行操控。受控门是一种重要的双量子比特门:选取其中一个量子比特作为控制量子比特,根据其状态决定是否在另一量子比特(称为目标量子比特)上执行酉变换。
常用的双量子比特受控门有 CNOT 门和 CZ 门。当控制量子比特状态为 时,CNOT 门会对目标量子比特的状态进行翻转(进行 门操作),而 CZ 则会改变目标量子比特的相位(进行 门操作);当控制量子比特状态为 时,对目标量子比特不进行任何操作。下面,以三个超导量子计算中的原生双量子比特门: iSWAP 门,CZ 门和 CR 门为例,介绍双量子门在超导量子计算中的实现。
在超导量子计算中,CZ 和 iSWAP 门是非常容易实现的 :仅通过磁通调控就可以实现这两种量子门。iSWAP 门的作用是交换 和 量子态,并且附加 的相位(),其对应的矩阵形式为:
CZ 门完成一种受控操作,当控制量子比特的状态为 时,将目标量子比特旋转 相位 ()。其对应的矩阵形式为:
类比于单量子比特门,对两个超导量子比特构成的系统,考虑用三能级系统来刻画每个量子比特,即考虑高能级泄露引入的噪声。在实验室坐标系下,系统哈密顿量表示为:
其中, 为第 个量子比特的频率, 为第 个量子比特的湮灭算符, 为第 个量子比特的产生算符, 为第 个量子比特的非谐性, 为耦合强度。只需通过施加磁通 就可以实现 iSWAP 和 CZ 门。
为了更清楚地阐述 CZ 门和 iSWAP 门的物理实现原理和过程,我们给出了量子系统对应的能谱,即量子系统本征能量随着外加磁通的变化特征,如图 2 所示。可以通过绝热调控的方式来实现 CZ 门和 iSWAP 门。
图 2:通过磁通来实现 CZ 和 iSWAP 门。不同颜色的实线分别代表了不同量子态的能谱。通过绝热调控外加磁通大小使量子比特到达特定的频率并演化一段时间,从而实现 CZ 和 iSWAP 门。
CZ 门的原理利用磁通调控计算能级与更高能级之间的回避交叉来实现,即 和 。图 2 中上方的 表示施加磁通的方式:缓慢增加外磁通 至 ,利用 和 之间的回避交叉,在系统自由演化一段时间 后,达到期望的 CZ 末态,从而实现 CZ 门操作。这个过程的演化算符可以写为:
其中,
是量子态 在轨迹 上所积累的相位, 为量子态 的跃迁频率,其中 ,而 为第 个量子比特上 能级的能量。如果我们考虑 、,那么有如下的哈密顿量:
其中, 为耦合强度。引入参数 用于表示 与单激发态 和 之间的频率差。通过设计合适的磁通轨迹 使得:
因而演化算符可以写为:
通过增加额外作用在单比特上的脉冲消去相位 和 ,最终得到:
超导量子计算机上的另外一种常用原生门为 iSWAP 门, iSWAP 门的实现不需要借助高能级。与 CZ 门相似,施加磁通至 并停留一段时间 ,在 时间内,量子态在 与 之间周期性振荡,如图 3 所示:
图 3:量子态在 处 和 的概率。
同时,由于外加磁通调控会影响量子比特的频率。对于每个量子比特,都会产生一个新的相位:
如上文所述,磁通调控通常是类方波的函数形式,构造类方波函数一般通过误差函数实现:
其中, 是误差函数,对 。量脉超导支持 的更高阶的求和,即线性叠加 个类方波以生成更加丰富的脉冲波形。 是需要被优化的脉冲参数。同样,通过优化函数 (通过控制磁通 来完成),可以提高 CZ 门和 iSWAP 门的保真度。
前面介绍的 iSWAP 和 CZ 门是通过磁通调控量子比特的频率实现的,这种调控方式在物理实现上存在较大的噪声,因而误差较大。而 CR 门 是一种通过微波脉冲调控实现的双量子比特门。一个理想的受控量子门可以通过以目标量子比特的频率对控制量子比特施加微波脉冲实现。由于两个量子比特间的交互,目标量子比特中会产生拉比振荡,即交叉共振(Cross-Resonance)效应。
理想 CR 门的有效耦合形式为 ,即 ,其中 为泡利 算符。通过选择合适的脉冲波形(用 表示)和门时间 使得 ,获得 ,其中 是耦合强度, 是两个量子比特的频率差。CR 量子门对应的酉矩阵可以写为
通过 CR 门和两个单比特量子门 、 可以构造一个 门:
其对应的量子电路图如下所示:
图 4:使用交叉共振门实现 CNOT 门。
接下来构造 CR 门的物理模型,考虑三能级的量子系统,应用旋波近似后的哈密顿量 进行仿真和优化,在旋转频率为脉冲频率 的参考系中哈密顿量表示为:
其中, ()为第 个量子比特的产生湮灭算符, 为第 个量子比特的失谐,、 分别为第 个量子比特的频率和脉冲驱动频率, 为第 个量子比特的非谐项, 是量子比特间的耦合强度, 是施加到量子比特 1 的微波脉冲。基于该模型哈密顿量,以及期望得到的目标量子门,运用合适的优化算法可以得到最优的控制脉冲。
现在,通过量脉来优化在上述系统中实现 CZ 门所需的脉冲。首先,从量脉(Quanlse)和其它常用的 Python 库导入以下包:
# 导入哈密顿量相关模块
from Quanlse.QHamiltonian import QHamiltonian as QHam
from Quanlse.QOperator import duff, number
# 导入受控 Z 门的优化器
from Quanlse.remoteOptimizer import remoteOptimizeCz
# 导入结果分析工具
from Quanlse.Utils.Functions import project
# 导入 numpy 和 math
from numpy import round
from math import pi
随后构造哈密顿量
# 采样间隔周期
dt = 1.0
# 量子比特数
qubits = 2
# 系统能级数
level = 3
# 定义系统信息,初始化哈密顿量
ham = QHam(subSysNum=qubits, sysLevel=level, dt=dt)
初始化哈密顿量的字典之后,我们可以向该字典添加不同的项。首先定义硬件参数:
# 指定硬件参数
qubitArgs = {
"coupling": 0.0277 * (2 * pi), # Q0 和 Q1 的耦合
"qubit_freq0": 5.805 * (2 * pi), # Q0 的频率
"qubit_freq1": 5.205 * (2 * pi), # Q1 的频率
"drive_freq0": 5.205 * (2 * pi), # Q0 上的驱动频率 (旋转坐标系)
"drive_freq1": 5.205 * (2 * pi), # Q1 上的驱动频率 (旋转坐标系)
"qubit_anharm0": -0.217 * (2 * pi), # Q0 的非谐
"qubit_anharm1": -0.226 * (2 * pi) # Q1 的非谐
}
接下来,使用 addDrift()
函数在哈密顿量中添加漂移项。该函数的输入参数有哈密顿量的字典、用户定义的名称、该项作用的量子比特的列表、相应的算符和系数
# 添加漂移哈密顿量
for qu in range(2):
# 添加失谐项
ham.addDrift(number(level), qu, (qubitArgs[f"qubit_freq{qu}"] - qubitArgs[f"drive_freq{qu}"]))
# 添加非谐项
ham.addDrift(duff(level), qu, qubitArgs[f"qubit_anharm{qu}"] / 2)
通过函数 addCoupling()
添加耦合项。函数输入参数包括哈密顿量的字典,用户定义的名称,此项作用的量子比特的列表,以及耦合强度。
# 添加耦合项
ham.addCoupling([0, 1], qubitArgs["coupling"] / 2)
在本地设备上处理优化过程通常需要很长时间,通过量脉提供的云服务可以显著加速此过程。在使用量脉云服务之前,用户需要从量易伏平台获取 token。
# 导入工具以访问云服务
from Quanlse import Define
# 要在云上使用 remoteOptimizerCz(),请将您的token令牌(一个字符串)粘贴到这里
Define.hubToken = ''
使用 remoteOptimizeCz()
生成和优化控制脉冲以达到指定的目标失真度。要使用这个函数,用户需要指定一个哈密顿量的字典、振幅的范围、门持续时间、最大迭代次数和目标失真度。此函数返回一个哈密顿量字典和失真度的局部极小值。通过 aBound
设定脉冲强度的界限,更大的界限会意味着更大的搜索空间,因此可以增加迭代次数以获取更好的结果。
aBound=(-5, -1) # 脉冲强度的范围
gateJob, infidelity = remoteOptimizeCz(ham, aBound=aBound, tg=40, maxIter=5, targetInfidelity=0.005)
成功运行的结果:
Result downloaded successfully
打印输出波形:
print(f"minimum infidelity: {infidelity}")
gateJob.plot()
得到失真度:
minimum infidelity: 0.006121725502064357
图 5:CZ门的优化脉冲。
之前定义的系统是由两个三能级量子比特组成的,即该系统的时间演化算符是一个 的矩阵。用户可以使用 simulate()
函数来模拟演化,系统演化后投影到计算子空间的矩阵 可以由函数 project()
得到:
result = ham.simulate(job=gateJob)
process2d = project(result.result[0]["unitary"], qubits, level, 2)
print("The projected evolution P(U):\n", round(process2d, 2))
运行结果:
The projected evolution P(U):
[[ 1. +0.j 0. +0.j 0. +0.j 0. +0.j ]
[ 0. +0.j 1. +0.06j -0. +0.01j 0. +0.j ]
[ 0. +0.j -0. +0.01j 1. +0.09j 0. +0.j ]
[ 0. +0.j 0. +0.j 0. +0.j -0.98-0.01j]]
本节主要介绍了超导量子计算中常用的单量子比特门、原生双量子比特门的物理实现和优化脉冲生成。脉冲调控的结果是为了控制量子比特的演化过程,量子比特演化结果的状态读取将在后续章节介绍。
在量子系统中,通常将一组脉冲信号作用到量子系统上以实现一个特定的量子操作,核心目标就是让这组脉冲产生的真实量子门尽可能与目标量子门更为接近。量子优化控制的核心思想是将控制信号的设计转化为一个优化问题进行求解。因此,对量子系统进行建模、设计目标函数及优化方法并进行数值求解,对脉冲的设计与优化至关重要。本附录着重介绍这些内容。
在量子优化控制领域中,通过模拟量子态演化确定输入脉冲所实现的量子操作。模拟量子态演化需要对量子系统进行建模,利用系统哈密顿量刻画量子系统的结构和控制脉冲。将量子系统分为不含时和含时两个部分 :
其中,不含时的部分 被称为漂移哈密顿量,在超导量子比特中一般用于描述能级结构、量子比特间耦合等信息;含时部分一般用来刻画控制脉冲,其中 一般作为微波、磁通的控制函数, 为控制脉冲的形状、振幅等参数。最后, 为控制哈密顿量,一般用于表征控制脉冲与量子系统之间的耦合形式。
量子优化控制的目的是使用优化方法改进脉冲设计,提高量子操作的保真度。前面的章节已经介绍过,量子操作可以用由若干量子门组成的量子电路模型进行表示。这里使用算符 表示目标量子门, 表示上述哈密顿量含时演化的真实量子门:
其中, 为时序算符,表示考虑对易关系的前提下,通过交换算符的顺序,把时刻较靠前的算符移到右侧,在下一部分介绍其求解方法。构造目标函数是优化问题的核心,即让真实量子门尽可能接近目标量子门,定义 和 之间的失真度(Infidelity)作为目标函数来定量衡量他们之间的差异 :
其中, 为算符 的维度, 为待优化的脉冲参数。确定目标函数后,应用不同的优化算法去寻找一组脉冲参数 使得失真度最小,从而使得真实量子门尽可能接近期望实现的高保真目标量子门。
前面介绍了量子优化控制的问题以及优化方法。接下来介绍如何计算特定控制脉冲对应的演化算符,即得到这组脉冲对应的量子门操作,并计算真实量子门与目标量子门之间的差异,定义为距离。在薛定谔绘景下,量子态波函数的动力学演化由含时的薛定谔方程描述。在海森堡绘景中,动力学演化由演化算符 描述,其动力学方程为:
其中, 是约化普朗克常数(设 )。上式是一个微分方程,在经典计算机上可使用数值求解的方式近似求解。考虑一种简单的情况,求解不含时哈密顿量下的演化问题:
此时 不再是时间 的函数,这里,由于酉变换满足对易性,算符之间可以任意地交换顺序,利用矩阵指数的方法就可以直接得到系统的演化算符:
对于含时的哈密顿量而言,由于各个时刻不再对易,无法任意交换顺序,上述方法不再适用。一种有效的方法是对整个演化过程在时间上切片,并假设在每一个切片 内,哈密顿量 是不含时的,其中下标 为切片的顺序编号。对每一个切片对应的演化算符 可以使用式 分别进行求解,再将他们组合得到整个演化过程:
其中 为切片的数量。常用 GRAPE 优化算法把整个脉冲控制过程在时间上进行均匀切片,并假设每个切片内的脉冲强度为一个常数,并作为优化参数,这种思想称为分段常数(Piecewise Constant, PWC)。
[1] Krantz, Philip, et al. "A quantum engineer's guide to superconducting qubits." Applied Physics Reviews 6.2 (2019): 021318.
[2] Rigetti Chad, and Michel Devoret. "Fully microwave-tunable universal gates in superconducting qubits with linear couplings and fixed transition frequencies." Physical Review B 81.13 (2010): 134507.
[3] Machnes, Shai, et al. "Tunable, flexible, and efficient optimization of control pulses for practical qubits." Physical Review Letters 120.15 (2018): 150401.
最后更新时间:2021年12月20日