随机梯度下降(SGD)是一种迭代优化方法,通过使用随机选择的数据子集来估计梯度,从而近似梯度下降。为应对其局限性(如收敛速度慢和对学习率敏感),已开发出多种SGD变体。这些变体包括动量、Nesterov加速梯度、AdaGrad、RMSProp以及现代自适应方法(如Adam),它们被广泛用于机器学习和深度学习中,以高效训练模型。
SGD的核心思想可追溯至20世纪50年代的Robbins–Monro算法,该算法引入了用于求根的随机近似。在机器学习中,SGD最小化的目标函数通常是逐样本损失函数之和。基本更新规则为 \( w := w - \eta \nabla Q_i(w) \),其中 \( \eta \) 是学习率,\( Q_i \) 是第 \( i \) 个样本的损失。虽然简单,但此更新可能收敛缓慢,并可能在损失景观的沟壑区域发生振荡。变体通过修改更新方向、学习率或两者来解决这些问题。
动量
动量是一种通过累积持续梯度方向上的速度向量来加速SGD的技术。由Boris Polyak于1964年提出,动量模拟物理惯性:第 \( t \) 步的更新为 \( v_t = \mu v_{t-1} - \eta \nabla Q_i(w_t) \) 和 \( w_{t+1} = w_t + v_t \),其中 \( \mu \) 是动量系数(通常为0.9)。这有助于优化器沿一致方向更快移动,并抑制高曲率区域的振荡。动量在训练深度网络时特别有效,因为它平滑了噪声梯度估计。
Nesterov加速梯度
Nesterov加速梯度(NAG)是一种添加了前瞻步骤的变体。由Yurii Nesterov于1983年提出,NAG在投影位置 \( w_t + \mu v_{t-1} \) 处计算梯度,而非当前位置。更新变为 \( v_t = \mu v_{t-1} - \eta \nabla Q_i(w_t + \mu v_{t-1}) \) 和 \( w_{t+1} = w_t + v_t \)。此修正减少了过冲,并提供更准确的未来梯度估计,从而在凸设置中加快收敛。NAG常用于训练神经网络,并已被纳入许多库中。
AdaGrad
AdaGrad由John Duchi、Elad Hazan和Yoram Singer于2011年提出,它基于历史平方梯度之和,为每个参数调整学习率。对于每个参数 \( w_j \),更新为 \( w_j := w_j - \frac{\eta}{\sqrt{G_{j,j} + \epsilon}} \nabla Q_i(w_j) \),其中 \( G_{j,j} \) 累积平方梯度,\( \epsilon \) 是用于数值稳定性的小常数。AdaGrad在稀疏数据上表现良好,因为它为不频繁出现的特征提供更大的更新。然而,平方梯度的累积会导致学习率随时间缩小,这可能过早停止训练。
RMSProp
RMSProp由Geoffrey Hinton于2012年在其讲义中提出,通过使用平方梯度的指数衰减平均来解决AdaGrad学习率递减的问题。更新维护移动平均 \( E[g^2]_t = \rho E[g^2]_{t-1} + (1-\rho) g_t^2 \),其中 \( \rho \) 是衰减率(通常为0.9)。参数更新为 \( w := w - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} g_t \)。RMSProp在非凸设置中有效,并广泛用于训练循环网络和深度学习模型。
Adam
Adam(自适应矩估计)由Diederik Kingma和Jimmy Ba于2015年提出,结合了动量和RMSProp。它维护梯度的第一矩(均值)和第二矩(方差),并对早期步骤进行偏差校正。更新为 \( 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) \)。参数更新为 \( w := w - \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} \)。由于其鲁棒性和快速收敛性,Adam已成为许多深度学习任务的默认优化器。变体如AdamW(解耦权重衰减)和AMSGrad(解决收敛问题)也已开发出来。
现代自适应方法
除Adam外,还提出了多种自适应方法。AdaBelief(2020年)根据对当前梯度方向的置信度调整步长。RAdam(修正Adam)引入修正器以稳定早期训练阶段。Lion(进化符号动量)由Google Brain于2023年发现,使用符号运算减少内存使用,并显示出有竞争力的性能。这些方法常用于训练大型语言模型和其他大规模系统,其中效率和稳定性至关重要。
实际考虑
选择正确的SGD变体取决于具体问题。对于凸问题,NAG通常提供理论保证。对于深度网络,Adam或RMSProp是常见起点。学习率调度(如预热和衰减)通常与这些优化器结合使用。小批量大小也会影响性能;较大的批次提供更平滑的梯度,但需要更多内存。在分布式训练中,变体如LARS(层-wise自适应速率缩放)和LAMB(层-wise自适应矩)用于扩展到大批次,如AWS Trainium和Google Cloud等系统所示。
对机器学习的影响
SGD变体对现代人工智能的成功起到了关键作用。它们使得在大型数据集上训练具有数百万参数的深度网络成为可能,如OpenAI、Google DeepMind和Anthropic等组织所做的那样。优化器的选择会显著影响模型准确性和训练速度。研究持续改进这些方法,新变体不断涌现。理解其属性对于机器学习及相关领域的从业者至关重要。