Skip to content

变分量子算法

变分量子算法理论,包括变分原理、VQE、QAOA、贫瘠高原和梯度计算方法。本指南将理论基础与 pyqpanda3 的变分量子线路(VQC)框架联系起来。


变分原理

Rayleigh-Ritz 变分原理

所有变分量子算法的基础是 Rayleigh-Ritz 变分原理

对于任何参数化量子态 |ψ(θ) 和任何哈密顿量 H,能量的期望值提供了基态能量 E0上界

ψ(θ)|H|ψ(θ)E0

当且仅当 |ψ(θ)H 的基态时等号成立。

能量作为代价函数

变分原理允许我们将基态问题表述为优化问题:

E0=minθψ(θ)|H|ψ(θ)

损失函数(能量)为:

L(θ)=ψ(θ)|H|ψ(θ)

这个损失函数具有重要性质:

  • 非负曲率L(θ)E0λmin(H)
  • 平滑性:对于解析拟设,Lθ 的平滑函数
  • 可观测性L(θ) 可以从量子测量中估计

变分量子线路作为尝试态

在 pyqpanda3 中,尝试态 |ψ(θ)变分量子线路(Variational Quantum Circuit, VQC) 制备 — 一种参数化量子线路:

|ψ(θ)=U(θ)|0n

其中 U(θ) 是由 θ=(θ1,θ2,,θp) 参数化的幺正线路。

VQC 使用 pyqpanda3 的 VQCircuit 类构建:

python
from pyqpanda3.vqcircuit import VQCircuit
from pyqpanda3.core import RY, CNOT
import numpy as np

# 构建硬件高效拟设
vqc = VQCircuit()
vqc << RY(0, vqc.Param([0], "theta_0"))
vqc << RY(1, vqc.Param([1], "theta_1"))
vqc << CNOT(0, 1)
vqc << RY(0, vqc.Param([2], "theta_2"))
vqc << RY(1, vqc.Param([3], "theta_3"))

表达能力

VQC 的表达能力(Expressibility) 衡量其探索希尔伯特空间的能力。完美表达的拟设生成 Haar 均匀的幺正分布。表达能力较弱的拟设可能无法达到最优解。

表达能力通过偏离 Haar 分布的程度来衡量:

E=DKL(Pansatz|PHaar)

设计良好的拟设在表达能力与可训练性之间取得平衡(避免贫瘠高原)。


VQE — 变分量子特征值求解器

算法概述

变分量子特征值求解器(Variational Quantum Eigensolver, VQE)是一种用于寻找哈密顿量基态能量的混合量子-经典算法:

哈密顿量分解

为了在量子计算机上测量能量,哈密顿量必须分解为可测量的 Pauli 字符串:

H=ihiPi

其中 Pi{I,X,Y,Z}n 是 Pauli 算符,hi 是系数。

能量期望值则为:

H=ihiPi

每个 Pi 从量子测量中估计。对易的 Pauli 字符串可以同时测量(分组到同一测量线路中)。

pyqpanda3 提供:

  • expval_hamiltonian(prog, hamiltonian, qvm, shots) — 直接期望值计算
  • expval_pauli_operator(prog, pauli_op, qvm, shots) — Pauli 算符期望值

拟设设计策略

硬件高效拟设(Hardware-Efficient Ansatz)

设计为匹配目标硬件的原生门集和连接性:

U(θ)=l=1L[iRY(θl,i)]ENTANGLE

其中 ENTANGLE 是匹配硬件拓扑的 CNOT 门层。

  • 优点:浅深度、原生门、较少 SWAP 开销
  • 缺点:可能需要多层,容易陷入贫瘠高原

化学启发拟设(幺正耦合簇):

基于幺正耦合簇单双激发(UCCSD):

U(θ)=eT(θ)T(θ)

其中 T(θ)=iaθiaaaai+i<j,a<bθijabaaabajai

  • 优点:物理动机明确、小分子参数少
  • 缺点:线路深、需要 Trotter 化

自适应拟设(ADAPT-VQE):

通过添加具有最大梯度的算符来迭代增长拟设:

Uk+1=eθk+1Ak+1Uk

其中 Ak+1=argmaxApool|EθA|θA=0|

  • 优点:紧凑拟设、系统化构建
  • 缺点:每步需要梯度池评估

经典优化

经典优化器更新参数以最小化能量:

θk+1=θkηL(θk)

VQE 中常用的优化器:

优化器类型优点缺点
梯度下降一阶简单、稳定收敛慢
Adam一阶(自适应)快速、鲁棒可能振荡
L-BFGS-B拟牛顿超线性收敛对噪声梯度敏感
COBYLA无导数可处理噪声参数多时慢
SPSA随机抗噪声、每步 O(1) 次测量收敛慢
SNOBFIT代理模型适合噪声景观每次迭代代价高

测量噪声与统计误差

能量估计具有来自有限测量次数的统计不确定性:

σE=ihi2Var(Pi)Nshots

其中 Var(Pi)=1Pi2 为 Pauli 可观测量的方差。

经验法则:精度翻倍需要 4× 的测量次数(标准量子极限)。

收敛性分析

VQE 收敛取决于:

  1. 拟设质量:拟设能否到达基态?
  2. 优化器效率:优化器多快找到最小值?
  3. 噪声抗性:噪声对能量估计的影响有多大?

VQE 通常被认为是噪声抗性的,因为:

  • 变分原理仍然成立(含噪声的能量仍然是上界)
  • 优化器可以部分补偿系统性噪声
  • 测量噪声的误差条可以指导优化器

QAOA — 量子近似优化算法

算法概述

QAOA 专为组合优化问题设计。给定比特串 x{0,1}n 上的代价函数 C(x),QAOA 制备一个近似最小化 C 的态:

|γ,β=p=1PeiβpHMeiγpHC|+n

其中:

  • HC=xC(x)|xx|代价哈密顿量(在计算基中是对角的)
  • HM=iXi混合哈密顿量(Mixer Hamiltonian)
  • γ=(γ1,,γP)β=(β1,,βP) 是变分参数
  • PQAOA 深度(交替层数)

MaxCut 示例

QAOA 的典型应用是 MaxCut。给定图 G=(V,E)

代价哈密顿量

HC=(i,j)E12(IZiZj)

这为 Z 值不同的顶点的边分配能量 1(即在不同分区中),为同一分区的边分配能量 +1

混合哈密顿量

HM=iVXi

QAOA 线路构建

每个代价层 eiγpHC 分解为 RZZ 门:

eiγpHC=(i,j)EeiγpZiZj/2

每个混合层 eiβpHM 分解为 RX 门:

eiβpHM=ieiβpXi=iRX(2βp)i

近似比

近似比衡量 QAOA 的质量:

α=HCQAOAopt(HC)
  • P=1:对于 3-正则图上的 MaxCut,α=0.6924(由 QAOA 理论保证)
  • Pα1(QAOA 收敛到最优)
  • 在实践中,P=520 通常可实现 α>0.9

QAOA 变体

变体描述优势
标准 QAOA固定深度 P,优化 γ,β理论保证
热启动 QAOA从经典解初始化更好的初始点
递归 QAOA迭代固定量子比特减小问题规模
多角度 QAOA每个门不同角度更具表达力
带约束的 QAOAHC 中的惩罚项处理约束问题

贫瘠高原

梯度消失问题

贫瘠高原(Barren Plateaus) 在代价函数的梯度随量子比特数量指数级消失时出现:

Var[Lθi]O(12n)

这意味着对于 n 个量子比特的系统,梯度是指数级小的,使优化变得不可行。

贫瘠高原的成因

1. 表达能力引起的:高表达能力的拟设覆盖整个希尔伯特空间,倾向于将代价函数值集中在均值附近,使景观平坦化。

2. 纠缠引起的:深度纠缠线路产生全局态,其中局部参数变化的影响呈指数级减小。

3. 噪声引起的:硬件噪声通过将所有输出驱动到最大混合态来平坦化代价景观。

4. 全局代价函数:依赖所有量子比特的代价函数(如全局保真度)即使对于浅线路也会出现贫瘠高原。

缓解策略

1. 局部代价函数

将全局代价函数替换为局部代价函数:

Lglobal=1ψ|UtargetOUtarget|ψLlocal=1ni=1n(1ψ|UtargetOiUtarget|ψ)

局部代价函数的梯度以多项式而非指数形式消失。

2. 结构化拟设

使用内置结构的拟设(如保对称性、受问题启发的):

  • 组合优化的 QAOA 拟设
  • 化学的 UCCSD 拟设
  • 有限深度的硬件高效拟设

3. 参数初始化

  • 恒等初始化:从接近恒等线路的参数开始(θ0
  • 逐层训练:一次训练一层,逐步添加层
  • 经典预训练:使用经典优化找到好的初始点

4. 梯度保持架构

  • 使用梯度大小可证明有下界的线路
  • 例如:量子卷积神经网络(QCNN)、某些层次化线路

梯度计算方法

概述

计算期望值 Hθ 对参数 θ 的梯度是优化变分量子算法的核心。有多种方法,各有不同的权衡:

参数平移规则

参数平移规则通过每个参数两次线路评估提供精确梯度:

θiH=Hθi+sHθis2sin(s)

其中 s 是平移值(通常 s=π/2)。

对于特征值为 ±r/2 的生成元 G(如 Pauli 生成元):

θiH=r(Hθi+π/(2r)Hθiπ/(2r))

开销p 个参数需要 2p 次线路评估。

优势

  • 精确梯度(无近似误差)
  • 硬件兼容(只需前向评估)
  • 可与测量噪声配合使用(仅有统计误差)

伴随微分

伴随微分以 O(1) 次线路评估计算梯度,与参数数量无关。这是 pyqpanda3 的 ADJOINT_DIFF 使用的方法:

θiH=Re[ϕL|Uθi|ϕR]

其中 |ϕL=U|ψmeas|ϕR=U|ψinit

算法(Jones & Gacon, 2020):

  1. 前向传播:计算 |ϕR=U(θ)|0
  2. 反向传播:逆序施加门,计算内积
  3. 总计:无论参数数量多少,只需 2 次线路评估(一次前向,一次反向)

开销:总共 2 次线路评估。

优势

  • 对于大参数量显著加速:O(1) 相比 O(2p)
  • 精确梯度
  • 非常适合基于仿真的优化

限制

  • 需要存储中间态矢量(内存:O(2n)
  • 仅适用于态矢量仿真,不适用于硬件测量
  • 依赖于模拟器的实现

在 pyqpanda3 中的使用

python
from pyqpanda3.vqcircuit import VQCircuit, DiffMethod
from pyqpanda3.hamiltonian import Hamiltonian
import numpy as np

vqc = VQCircuit()
# ... 构建拟设 ...

params = np.array([0.1, 0.2, 0.3, 0.4])
observable = Hamiltonian(...)

# 使用伴随微分获取梯度
gradients = vqc.get_gradients(params, observable, DiffMethod.ADJOINT_DIFF)

# 同时获取梯度和期望值
result = vqc.get_gradients_and_expectation(params, observable, DiffMethod.ADJOINT_DIFF)
expectation = result.expectation_val()
grads = result.gradients()

有限差分

最简单的梯度近似:

θiHHθi+hHθih2h

开销p 个参数需要 2p 次线路评估。

缺点

  • 近似误差 O(h2)
  • 选择 h:太小 → 被噪声主导;太大 → 近似误差
  • 由于测量噪声敏感性,不推荐用于量子计算

幺正线性组合(LCU)

使用辅助量子比特的高级方法:

θiH=Re[0|ViUHUVi|0]

可以通过 Hadamard 测试或迭代 QPE 实现,但需要辅助量子比特和门的受控版本。

方法比较

方法线路评估次数精确?硬件兼容?内存
参数平移2pO(n) 量子比特
伴随微分(ADJOINT_DIFF)2否(仅仿真)O(2n) 态矢量
有限差分2p否(O(h2)O(n) 量子比特
LCUO(1) + 辅助比特是(需辅助比特)O(n+k) 量子比特

对于 pyqpanda3 仿真,推荐使用 ADJOINT_DIFF,因为它具有 O(1) 的扩展性。对于硬件实验,参数平移规则是标准选择。


pyqpanda3 中的参数管理

多维参数

pyqpanda3 通过 set_Param()Param() 方法支持多维参数数组:

python
vqc = VQCircuit()

# 设置参数维度:例如 3 层 × 4 个参数
vqc.set_Param([3, 4], ["layer", "param"])

# 访问特定参数元素
theta_00 = vqc.Param([0, 0], "theta_00")  # 第 0 层,第 0 个参数
theta_12 = vqc.Param([1, 2], "theta_12")  # 第 1 层,第 2 个参数

这对于以下场景很有用:

  • 批量优化:同时评估多组参数的梯度
  • 结构化拟设:将参数映射到物理结构(如层 × 量子比特)
  • 迁移学习:在线路块之间共享参数

批量梯度计算

对于 N 组参数,pyqpanda3 提供批量梯度计算:

python
# 单组参数
grads = vqc.get_gradients(params_1d, observable, DiffMethod.ADJOINT_DIFF)
# 返回: ResGradients(1 组梯度)

# N 组参数(扁平数组,行优先顺序)
grads_n = vqc.get_gradients(params_flat, observable, N, DiffMethod.ADJOINT_DIFF)
# 返回: ResNGradients(N 组梯度)

结果类

方法返回值
ResGradientsget_gradients(params, H, diff)1 组参数的梯度
ResNGradientsget_gradients(params, H, N, diff)N 组参数的梯度
ResGradientsAndExpectationget_gradients_and_expectation(params, H, diff)1 组的梯度 + 期望值
ResNResGradientsAndExpectationget_gradients_and_expectation(params, H, N, diff)N 组的梯度 + 期望值

实践考虑

拟设选择指南

问题类型推荐拟设理由
分子基态UCCSD / k-UpCCGSD化学动机、系统性可改进
组合优化QAOA理论保证、结构化
通用优化硬件高效浅深度、硬件原生
量子机器学习分层旋转 + 纠缠表达能力、可训练
动力学模拟Trotter 化演化物理动机

优化器选择指南

场景推荐优化器
仿真(精确梯度)L-BFGS-B 配合伴随微分
含噪声仿真Adam 配合学习率调度
硬件(测量噪声)SPSA 或参数平移 + Adam
少量参数COBYLA(无导数)
大量参数Adam 或自然梯度方法

性能建议

  1. 仿真时使用伴随微分O(1) 相比 O(p) 梯度评估
  2. 分组 Pauli 测量:对易的 Pauli 字符串可以同时测量
  3. 使用 get_gradients_and_expectation:在单次调用中计算两者,比分别计算更高效
  4. 从经典解热启动:从经典可解近似初始化参数
  5. 监控收敛:同时跟踪能量和梯度范数;当梯度范数低于阈值时停止

另请参阅

Released under the MIT License.