Qiskit中VQC模型的梯度与海森矩阵计算方法问询
VQC模型的梯度与海森矩阵计算方案
梯度计算
用QNN内置梯度配置:你用的
VQC基于NeuralNetworkClassifier/Regressor,底层的EstimatorQNN支持直接配置梯度计算方式,不用碰qiskit.algorithms.gradients。构建QNN时指定梯度类即可:from qiskit_machine_learning.neural_networks import EstimatorQNN from qiskit.primitives.gradients import ParamShiftGradient # 假设你已经定义好ansatz量子电路、观测器observable,以及输入/权重参数 qnn = EstimatorQNN( circuit=ansatz, observables=observable, input_params=input_params, weight_params=weight_params, gradient=ParamShiftGradient() # 用参数移位法算梯度 )把这个QNN传给
VQC后,直接调用qnn.gradient(input_data, weights)就能拿到梯度值,训练时也会自动用这个梯度更新参数。适配新版API:如果你的Qiskit是较新版本,
qiskit.algorithms.gradients已经迁移到qiskit.primitives.gradients,用这里的ParamShiftGradient或者FiniteDiffGradient都能适配VQC的参数计算。
海森矩阵计算
官方的海森计算功能已弃用,目前可以这么搞:
- 手动嵌套梯度计算:海森矩阵是梯度的梯度,先算模型参数的一阶梯度,再对每个梯度分量再次计算梯度,最后把结果组合成矩阵。这种方法虽然麻烦,但完全基于现有梯度工具就能实现。
- 社区库替代:一些Qiskit生态的第三方库(比如Qiskit Dynamics)有自动微分工具,可以用来构建VQC并计算海森矩阵,注意核对版本兼容性就行。
关键提醒
- 新版本Qiskit的梯度API迁移到了
qiskit.primitives下,旧的qiskit.algorithms.gradients确实不适配新VQC架构,别再用旧模块了。 - 参数移位法是量子模型梯度计算的常规操作,虽然参数多了计算量会涨,但小规模VQC完全够用。
内容的提问来源于stack exchange,提问作者Zhelun Li
相关产品推荐
相关产品推荐

