Skip to content

微分方法(DiffMethod) ​

DiffMethod 是一个枚举,用于选择 VQCircuit.get_gradients 和 VQCircuit.get_gradients_and_expectation 在计算参数梯度时使用的微分策略。

概述 ​

微分方法的选择决定了期望值对每个变分参数的梯度如何计算。不同的方法在线路求值次数、内存使用和数值精度之间进行权衡。

枚举值 ​

值描述
ADJOINT_DIFF伴随微分方法(Adjoint Differentiation)。通过正向运行线路然后反向运行(伴随)来计算梯度,无论参数数量多少,都只需要两次线路求值。基于 Jones 和 Gacon 在 "Efficient calculation of gradients in classical simulations of variational quantum algorithms"(arXiv:2009.02823)中描述的方法。

用法 ​

将 DiffMethod 值传递给 VQCircuit 的梯度计算方法:

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

# Build a simple variational circuit with 4 parameters
vqc = VQCircuit()
vqc.set_Param([4])
p0 = vqc.Param([0])
p1 = vqc.Param([1])
p2 = vqc.Param([2])
p3 = vqc.Param([3])
vqc << RY(0, p0) << RY(1, p1)
vqc << CNOT(0, 1)
vqc << RY(0, p2) << RY(1, p3)

params = np.array([0.1, 0.2, 0.3, 0.4])
hamiltonian = Hamiltonian({"Z0 Z1": 1.0, "Z0": 0.5, "Z1": 0.3})

# Use adjoint differentiation
grads = vqc.get_gradients(params, hamiltonian, DiffMethod.ADJOINT_DIFF)
print("Gradients:", grads.gradients())

# Also available with expectation value
result = vqc.get_gradients_and_expectation(params, hamiltonian, DiffMethod.ADJOINT_DIFF)
print("Expectation:", result.expectation_val())
print("Gradients:", result.gradients())

运行结果:

Gradients: [0.0179528385604528, -0.721177868772871, -0.3633729025298299, -0.6801970817746747]
Expectation: 1.5189304033281137
Gradients: [0.0179528385604528, -0.721177868772871, -0.3633729025298299, -0.6801970817746747]

参考文献 ​

  • T. Jones and S. Gacon, "Efficient calculation of gradients in classical simulations of variational quantum algorithms," arXiv:2009.02823, 2020. Available at https://arxiv.org/abs/2009.02823.

另见 ​

Released under the MIT License.