SGD(確率的勾配降下法)によるモーメンタム

英語からの翻訳

SGD with momentum(モーメンタム付き確率的勾配降下法)は、速度ベクトルを蓄積することで収束を加速し、ノイズの多い勾配推定を平滑化し、高次元最適化における振動を低減する確率的勾配降下法のバリアントである。

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

核心思想可追溯至经典优化,并在1980年代由伯克利研究员Bernard Widrow等人推广至神经网络训练,但当今广泛使用的具体公式由卡内基梅隆教授Geoffrey Hinton在其1986年论文《Learning representations by back-propagating errors》中引入,并在其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会在谷壁间来回曲折。动量帮助优化器更直接地沿谷底移动,减少达到最小值所需的迭代次数。

变体与扩展

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

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

在深度学习训练中的作用

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

与Adam的比较

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

收敛性质

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

实践考虑

实现SGD with momentum时,若干实践细节很重要。动量系数通常默认设为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 · 履歴