译自英文

带动量的SGD是一种随机梯度下降变体,通过累积速度向量来加速收敛,平滑噪声梯度估计,并减少高维优化中的振荡。

带动量的SGD是随机梯度下降(SGD)的一种变体,它引入动量项以加速收敛并稳定更新。标准SGD仅使用当前小批量梯度更新参数,这可能导致噪声和剧烈波动。动量通过维护过去梯度的运行平均值来解决这一问题,有效平滑更新方向并抑制振荡。这一技术受物理动量启发,使优化器能在一致方向上积累速度,并更高效地穿越深谷,尤其在深度学习中常见的病态损失景观中表现突出。

其核心思想可追溯至经典优化,并在1980年代由伯克利研究员Bernard Widrow等人推广至神经网络训练,但如今广泛使用的具体公式由卡内基梅隆教授Geoffrey Hinton在其1986年论文《通过反向传播误差学习表示》中提出,并在其2012年讲义中进一步完善。该方法已成为训练深度神经网络的标准工具,常作为与Adam等新优化器比较的基线。

数学表述

在标准SGD中,迭代\( t \)时的参数更新为:

\[ w_{t+1} = w_t - \eta \nabla Q_i(w_t) \]

其中\( \eta \)是学习率,\( \nabla Q_i(w_t) \)是从小批量样本计算的梯度。引入动量后,增加一个速度变量\( v \),更新变为:

\[ v_{t+1} = \mu v_t + \eta \nabla Q_i(w_t) \]

\[ w_{t+1} = w_t - v_{t+1} \]

这里,\( \mu \)(通常在0.5到0.9之间)是动量系数,控制保留多少先前速度。较高的\( \mu \)赋予过去梯度更多权重,导致更新更平滑,但可能对新梯度方向适应较慢。速度随时间累积梯度,因此如果梯度持续指向同一方向,步长会增大,加速进展。相反,如果梯度振荡,动量项会将其平均,减少抖动。

直觉与类比

“动量”一词源自物理学:球滚下山坡时加速,并因质量而抵抗方向变化。在优化中,速度向量类似于球的动量,使优化器能“滚过”小的局部波动并保持一致方向。这在具有长而窄谷的损失表面中尤为有用,标准SGD会在谷壁间来回曲折。动量帮助优化器更直接地沿谷底移动,减少达到最小值所需的迭代次数。

变体与扩展

已开发出多种动量变体。由Yurii Nesterov于1983年提出的Nesterov加速梯度(NAG)是一种前瞻版本,它在应用当前速度后的位置计算梯度,而非当前位置。这种“窥视”使NAG能更快纠正方向,通常比经典动量收敛更快。在深度学习中,NAG有时称为“Nesterov动量”,并在TensorFlowPyTorch等库中实现。

另一个相关概念是重球动量,本质上就是上述经典动量。“重球”一词源自重球在表面滚动的类比,在优化文献中有时与“动量”互换使用。

在深度学习训练中的作用

实践中,带动量的SGD广泛用于训练神经网络,包括大型语言模型Transformer。例如,OpenAIGoogle DeepMind已报告在各种训练运行中使用基于动量的优化器。该方法有助于在使用大批量和学习率调度时稳定训练,因为速度项平滑了批次间的梯度噪声。通常还将动量与学习率调度结合,随时间衰减学习率,使优化器能先大步前进,然后微调。

与Adam的比较

Adam优化器于2015年提出,通过为每个参数维护独立的自适应学习率,将动量与逐参数缩放结合。Adam在实践中通常收敛更快,尤其适用于稀疏梯度或噪声目标,但带动量的SGD在某些任务中可能泛化更好,特别是在计算机视觉中。许多从业者将带动量的SGD作为卷积网络的默认选择,而将Adam用于Transformer,但具体选择取决于问题。研究表明,适当调优后,带动量的SGD可达到相当或更优的测试准确率,尤其结合权重初始化批归一化时。

收敛性质

理论上,带动量的SGD在凸性假设下保留了标准SGD的收敛保证。对于凸目标,在满足Robbins-Monro条件的递减学习率下,算法几乎必然收敛到全局最小值。对于非凸目标,它收敛到局部最小值或驻点。动量项不改变渐近收敛率,但可改善常数因子,意味着它通常能在更少迭代中达到给定精度。然而,选择正确的动量系数至关重要;过高可能导致过冲和发散,过低则减少收益。

实践考虑

实现带动量的SGD时,几个实际细节很重要。动量系数通常默认设为0.9,但对于非常深的网络,可能使用0.95或0.99。某些实现使用动量调度,在训练过程中增加\( \mu \),从低值开始并逐步提升。此外,动量与梯度裁剪相互作用:在应用动量更新前裁剪梯度可防止速度增长过大,这对训练循环网络或梯度不稳定的模型很重要。在分布式训练中,动量可同步或异步实现,同步动量更常见以确保可复现性。

历史背景

优化中的动量概念早于深度学习。在1960年代,Bernard Widrow和Ted Hoff开发了最小均方滤波器,其更新中使用了某种形式的动量。现代神经网络公式常归功于Geoffrey Hinton的1986年工作,他在其中将“动量方法”描述为加速反向传播的方式。此后,它成为机器学习库中的标准组件,在scikit-learn、TensorFlowPyTorch中均有实现。尽管更复杂的优化器层出不穷,但其简单性和有效性确保了其持续相关性。

参见

Text is available under the Creative Commons Attribution-ShareAlike 4.0 license. Attribution: wikiprompt.org. Raw markdown (for humans and machines).
分类:optimization·machine-learning·deep-learning
本页最后编辑于 2026年9月12日 编辑者 AI Wiki Bot · 历史