Momentum(动量法)
就是给梯度加了个惯性——下坡的时候不会因为一点小颠簸就猛刹车,而是顺着大势继续跑,收敛更快、抖动更少。
亦作、亦称:动量法 · momentum SGD · Nesterov momentum · SGD with Momentum · Gradient Momentum · Gradient Descent with Momentum · 重球法 · 动量梯度下降
动量法通过积累历史梯度方向、赋予参数更新「惯性」,显著加快深度模型训练收敛速度并抑制梯度噪声震荡。它是 SGD 到 Adam 之间最关键的过渡性优化思想,至今仍是各类优化器的核心组件。
概述
动量法(Momentum)是梯度优化的核心改进之一,广泛用于深度学习模型训练。
- 核心思想:将历史梯度以指数加权方式累积为「动量」,参数更新时同时考虑当前梯度与过去方向
- 物理比喻:如同重球在碗形曲面滚动,具有惯性,不会因单次小扰动改变大方向
- 标准形式:v_t = β·v_{t-1} + (1-β)·∇L,θ = θ - α·v_t
- 超参数:动量系数 β(通常 0.9)和学习率 α 是两个主要调节旋钮
- 适用范围:几乎所有基于梯度的模型训练,尤其适合高曲率、高噪声场景
工作原理
动量法通过指数移动平均对梯度历史进行加权平滑,形成稳定的更新方向。
- 梯度平滑:v_t 是过去所有梯度的指数加权平均,β 越大历史权重越重(衰减越慢)
- 方向稳定:在梯度一致的维度上,动量不断积累,步长等效放大;在震荡维度上,正负相消,步长收缩
- 学习率缩放:有效步长约为 α/(1-β),β=0.9 时约等于 10 倍学习率效果
- 噪声抑制:mini-batch 的随机梯度噪声被历史动量稀释,轨迹更平滑
- 鞍点逃逸:惯性使优化器能「冲过」平坦的鞍点区域,而非在此停滞
主要变体
动量法有两个最重要的变体,在理论保证和实践效果上各有特点。
- 标准动量(Heavy Ball / Classical Momentum):Polyak 1964,直接用当前位置梯度更新动量,实现简单
- Nesterov 加速梯度(NAG):先沿当前动量方向走一步,再计算「未来位置」梯度,理论收敛速度从 O(1/k) 提升至 O(1/k²)
- Adam 内置动量:Adam 的一阶矩 m_t = β₁·m_{t-1} + (1-β₁)·∇L 本质上是带偏差修正的动量项,β₁ 默认 0.9
- 带动量的 AdamW:在 Adam 动量基础上加入权重衰减解耦,为 Transformer 训练主流选择
- SAM + Momentum:Sharpness-Aware Minimization 与动量结合,寻找更平坦的泛化极小值
应用场景
动量法在深度学习各领域均有核心应用,是工程实践的标准配置。
- 计算机视觉:ResNet、ViT 等大型 CV 模型训练时,SGD + Momentum(β=0.9)是获得 SOTA 泛化性能的常用组合
- 自然语言处理:预训练 LLM 通常使用 AdamW(内置动量),β₁=0.9 为标准配置
- 强化学习:策略梯度方法中,动量帮助稳定高方差的策略更新
- 对比学习:MoCo 等方法中,动量编码器(Momentum Encoder)以极慢速度更新 key 编码器,维持特征一致性
- 学习率 Warmup 配合:大批量训练时,动量与线性 warmup 结合可避免训练初期不稳定
与相邻概念区别
动量法常与 Adam、RMSProp 等自适应优化器混淆,核心区别在于是否适应每维度学习率。
- vs 普通 SGD:SGD 每步只用当前梯度,动量法引入历史方向,收敛更快、轨迹更稳
- vs Adam:Adam = 动量(一阶矩)+ 自适应学习率(二阶矩),动量法本身不调整各参数维度的学习率
- vs RMSProp:RMSProp 只用二阶矩做自适应缩放,不积累一阶方向动量
- vs Nesterov:标准动量在当前位置算梯度;NAG 先「跳」到预估的下一步位置再算梯度,更具前瞻性
- vs 动量编码器(Momentum Encoder):MoCo 中的「动量」指以小系数 EMA 缓慢更新网络权重,与优化动量概念不同,注意区分
局限与误区
动量法并非无副作用,在某些场景下需谨慎调参。
- 超调风险:β 过大时,惯性导致优化器在最优点附近反复「冲过头」,引发震荡甚至发散
- 局部最优陷阱:惯性虽助于逃出浅层鞍点,但在凸性较强的局部极小值附近可能过冲
- 超参敏感:β 与学习率 α 存在耦合,调整其中一个往往需同步调另一个
- 误解「动量越大越好」:β=0.999 极端情况下几乎只沿历史方向走,对数据分布变化响应极慢
- 非平稳场景:在线学习或数据分布漂移时,过大动量会让模型「忘不掉」旧分布的梯度方向
发展脉络
动量法的演化跨越六十年,从数值分析到现代深度学习均留下重要足迹。
- 1964 年:Polyak 发表「重球法」,提出动量思想,证明可将收敛步数减少至 √R 倍(R 为条件数)
- 1983 年:Nesterov 提出加速梯度法(NAG),理论收敛率达 O(1/k²),优于标准动量的 O(1/k)
- 1986 年:Rumelhart、Hinton、Williams 在反向传播论文中将动量引入神经网络训练
- 2013 年:Sutskever 等人发表 ICML 论文,系统研究动量初始化与超参在深度学习中的影响,确立 β=0.9 实践标准
- 2015-2017 年:Adam(β₁=0.9)成为深度学习默认优化器,动量内置于一阶矩
- 2020 年后:AdamW、LAMB、LARS 等新一代优化器均以动量为基础组件,持续推动大模型训练边界
常见误解
日常交流中容易听到的简化说法,未必准确,但能帮助理解误解从何而来。
- 「就是给梯度加了个惯性——下坡的时候不会因为一点小颠簸就猛刹车,而是顺着大势继续跑,收敛更快、抖动更少。」
- 「动量法相当于给优化器装了个『记忆』,记住之前走的方向,不会被单次噪声梯度带跑偏。」
- 「常见误解:动量系数 β 越大越好——实际上 β 过大会让模型在最优点附近一直『冲过头』,反而难以收敛。」
相关术语
和本术语关联紧密的其他词条,便于串联理解。
延伸阅读
从知识库精选 3 篇文章,帮助深入理解该术语。
外部参考
维基百科:查看「Momentum」词条本页内容为本站原创撰写;维基百科链接仅作延伸参考。