训练量子机器学习模型,尤其是我们后续会遇到的变分算法,几乎总是涉及一个经典优化循环。虽然部分计算在量子处理器上进行(评估成本函数或其梯度),但经典计算机运行优化算法以更新量子电路的参数。因此,透彻掌握经典优化方法对于构建和训练高效的QML模型是不可或缺的。本节回顾一些有影响的基于梯度和无梯度优化方法,它们常被用于这种混合量子-经典环境中。基于梯度的优化机器学习中多数常用的优化器依赖于梯度,即成本函数 $L(\theta)$ 关于参数 $\theta$ 的最陡上升(或下降)方向。通用的更新规则是 $\theta_{t+1} = \theta_t - \eta \nabla_{\theta} L(\theta_t)$,其中 $\eta$ 是学习率。随机梯度下降 (SGD) 和小批量计算精确梯度通常需要对整个数据集的贡献进行求和,这在计算上可能开销巨大。随机梯度下降 (SGD) 通过在每一步中,仅使用数据的一个小部分、随机选择的子集(称为小批量)来估计梯度,从而应对此问题。$$ \theta_{t+1} = \theta_t - \eta \nabla_{\theta} L(\theta_t; x^{(i:i+b)}, y^{(i:i+b)}) $$这里,$L(\theta_t; x^{(i:i+b)}, y^{(i:i+b)})$ 是在从索引 $i$ 开始的大小为 $b$ 的小批量上计算的损失。梯度估计的随机性引入了噪声,有时这能帮助优化器摆脱较浅的局部最小值,但也会导致在最优值附近波动。动量方法简单SGD可能速度较慢,尤其是在成本曲面在一个维度上比另一个维度更陡峭的区域(形成长而窄的山谷)。动量方法旨在加速收敛并抑制振荡,其做法是将前一个更新向量的一小部分 $\gamma$ 添加到当前向量中,从而模拟物理动量。更新规则如下: $$ v_t = \gamma v_{t-1} + \eta \nabla_{\theta} L(\theta_t) $$ $$ \theta_{t+1} = \theta_t - v_t $$通常,$\gamma$ 值约为0.9。这有助于优化器继续沿主流方向移动,并平滑由随机梯度估计引起的波动。Nesterov加速梯度 (NAG) 是一种改进,其中梯度是在使用当前动量向前投影的点上计算的,从而可能实现更好的收敛。自适应学习率方法调整学习率 $\eta$ 可能具有挑战性。自适应方法在训练过程中自动调整学习率,通常是针对每个参数进行的。AdaGrad (自适应梯度): 累积每个参数过去梯度的平方和,并使学习率与此和成反比。它对不常出现的参数执行更大的更新,对常出现的参数执行更小的更新。然而,累积和会持续增长,导致学习率最终变得无限小,可能过早地停止学习。RMSProp (均方根传播): 通过使用平方梯度的指数衰减平均值而非总和来修改AdaGrad。这可以避免学习率单调下降。Adam (自适应矩估计): 可能是目前最受欢迎的自适应优化器,Adam结合了动量和RMSProp的思路。它维护过去梯度 ($m_t$,一阶矩估计) 和过去平方梯度 ($v_t$,二阶矩估计) 的指数衰减平均值。Adam的更新步骤如下:计算梯度: $g_t = \nabla_{\theta} L(\theta_t)$更新有偏的一阶矩估计: $m_t = \beta_1 m_{t-1} + (1-\beta_1) g_t$更新有偏的二阶原始矩估计: $v_t = \beta_2 v_{t-1} + (1-\beta_2) g_t^2$计算偏差校正后的一阶矩估计: $\hat{m}_t = m_t / (1 - \beta_1^t)$计算偏差校正后的二阶原始矩估计: $\hat{v}_t = v_t / (1 - \beta_2^t)$更新参数: $\theta_{t+1} = \theta_t - \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}$常用值是 $\beta_1=0.9$,$\beta_2=0.999$,和 $\epsilon=10^{-8}$。Adam通常在默认设置下表现良好,并常用于训练经典的深度神经网络和变分量子电路。{"layout": {"title": "优化器路径比较", "xaxis": {"title": "参数 1", "range": [-2, 2]}, "yaxis": {"title": "参数 2", "range": [-1, 3]}, "showlegend": true, "width": 600, "height": 400, "colorscale": {"sequential": "Blues"}}, "data": [{"type": "contour", "z": [[(Math.pow(x*x+y-11, 2) + Math.pow(x+y*y-7, 2))/200 for x in [-2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2]] for y in [-1, -0.5, 0, 0.5, 1, 1.5, 2, 2.5, 3]], "x": [-2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2], "y": [-1, -0.5, 0, 0.5, 1, 1.5, 2, 2.5, 3], "contours": {"coloring": "lines"}, "line": {"width": 1}, "showscale": false}, {"type": "scatter", "x": [-1.5, -1.2, -0.8, -0.5, 0.1, 0.8, 1.2, 1.8, 2.0], "y": [2.5, 2.6, 2.2, 1.5, 1.0, 0.6, 0.4, 0.1, 0.0], "mode": "lines+markers", "name": "SGD", "line": {"color": "#ff6b6b"}, "marker": {"size": 5}}, {"type": "scatter", "x": [-1.5, -1.0, -0.2, 0.7, 1.5, 1.9, 2.0], "y": [2.5, 1.8, 1.0, 0.5, 0.2, 0.05, 0.0], "mode": "lines+markers", "name": "Momentum", "line": {"color": "#4c6ef5"}, "marker": {"size": 5}}, {"type": "scatter", "x": [-1.5, -0.5, 0.8, 1.6, 1.95, 2.0], "y": [2.5, 1.2, 0.3, 0.1, 0.02, 0.0], "mode": "lines+markers", "name": "Adam", "line": {"color": "#37b24d"}, "marker": {"size": 5}}, {"type": "scatter", "x": [2], "y": [0], "mode": "markers", "name": "最优值", "marker": {"symbol": "star", "size": 12, "color": "#f59f00"}}]}SGD、动量和Adam在样本成本曲面上的优化路径图。像Adam这样的自适应方法通常能更直接地收敛到最小值。二阶方法虽然梯度下降使用一阶导数(梯度),但二阶方法也包含二阶导数(Hessian矩阵,$H$),其中包含成本曲面曲率的信息。牛顿法: 更新规则是 $\theta_{t+1} = \theta_t - \eta H^{-1} \nabla_{\theta} L(\theta_t)$。通过使用曲率信息,牛顿法在最优值附近收敛速度可能远快于梯度下降。然而,计算、存储和求逆Hessian矩阵的计算开销很大(求逆为 $O(d^3)$,其中 $d$ 是参数数量),这使得它对于拥有众多参数的模型不切实际。拟牛顿法(例如,BFGS,L-BFGS): 这些方法利用连续步骤中梯度变化的信息来近似逆Hessian矩阵。L-BFGS(有限内存BFGS)尤其受欢迎,因为它只存储有限的梯度和更新历史,这使其比标准BFGS更节省内存,同时通常能保持良好的收敛特性。如果梯度可获取且参数数量适中,这些方法有时可用于优化VQA。无梯度优化在某些QML情况下,计算梯度可能具有挑战性或无法完成。这可能是由于成本函数的性质、量子硬件上存在明显的噪声导致梯度估计不可靠,或者仅仅因为梯度计算(例如,通过参数偏移规则)的计算开销过大。在这种情况下,无梯度(或无导数)优化方法变得不可或缺。同步扰动随机近似 (SPSA): SPSA特别适合带有噪声函数评估的优化问题,这在近期量子计算机上运行算法时很常见。SPSA不计算完整梯度(有限差分或参数偏移需要 $2d$ 次测量),而是无论维度 $d$ 如何,都仅使用两次测量来估计梯度。它通过使用随机方向向量 $\Delta_k$(其中每个元素通常从伯努利分布中抽取,例如 $\pm 1$)同时扰动所有参数来实现这一点。梯度估计的形成方式如下: $$ \hat{g}_k(\theta_k) = \frac{L(\theta_k + c_k \Delta_k) - L(\theta_k - c_k \Delta_k)}{2 c_k} \Delta_k^{-1} $$ 其中 $c_k$ 是一个随迭代次数减少的增益序列。尽管这是一个噪声更大的估计,但其低测量成本使其在硬件上优化VQA时具有吸引力。Nelder-Mead法: 此方法使用单纯形(在 $d$ 维度中有 $d+1$ 个顶点的几何形状),并根据顶点处的函数值,通过反射、扩展和收缩来迭代修改单纯形,试图将单纯形移向最小值。这是一种启发式方法,没有很强的收敛保证,但在实践中对于低维问题通常表现良好。COBYLA (通过线性近似的约束优化): 另一种无导数方法,它在信任区域内使用线性插值来近似目标函数和约束。QML环境下的优化难题优化QML模型与经典机器学习相比,具有一些独特的难题:硬件噪声: 在量子硬件上评估成本函数 $L(\theta)$ 不可避免地涉及噪声(退相干、门错误、读出错误)。这种噪声可能损坏成本值和从中估计的任何梯度,从而可能使优化器停滞或产生误导。对噪声的鲁棒性是一个值得关注的因素,这使得SGD或SPSA等本身能够处理随机性的方法更受青睐,或者需要精密的错误缓解技术(在第7章中会阐述)。贫瘠高原: 对于许多常用的参数化量子电路 (PQC) 选择,尤其是深度或全局性的电路,成本函数的梯度会随着量子比特数量呈指数级消失。这种“贫瘠高原”现象使得基于梯度的优化极其困难,因为曲面几乎处处平坦。缓解此现象的方案包括仔细的Ansatz设计、特定的初始化,或者使用无梯度方法(尽管这些方法也并非完全免疫)。这将在第4章中详细介绍。复杂的成本曲面: 源自量子电路的成本函数可能高度非凸,具有众多局部最小值。找到全局最小值,甚至一个良好的局部最小值,需要有效的优化策略,并且通常需要细致的超参数调整(学习率、动量参数、SPSA增益序列)。测量开销: 从量子计算机获取精确的期望值(成本函数和梯度所必需)需要重复测量(shot)。这种统计估计开销为优化过程增加了额外方面,通常涉及测量精度和优化速度之间的权衡。尽管经典优化算法为训练提供了动力,但它们在QML中的成功应用需要审慎考虑这些量子特有因素。梯度方法(如Adam)与无梯度方法(如SPSA)之间的选择通常取决于具体问题、PQC架构、可用硬件以及所涉噪声水平。理解这些经典工具是掌握构建和训练高级量子机器学习模型实际操作的第一步。