SGD 与动量:今天真正弄懂
先记住:一句话定义 + 一句记忆口诀
一句话定义:SGD 是每次只用一小批样本算梯度来更新参数;动量(Momentum)则是给更新方向加上“物理惯性”,让它顺着主方向加速、抑制左右瞎晃。
一句记忆口诀:小步随机探路快,加上惯性不乱摆。
生活类比:推着重铁球滚出峡谷 想象你在一条狭窄陡峭的山谷里找最低点(最优解)。 - 普通 SGD:像盲人拄拐杖,每走一步测一下脚下坡度。在峡谷里,两边山壁很陡,谷底坡度很缓。结果就是:他在两边峭壁之间来回横跳,震得头晕,顺着山谷往前走的速度却极慢。 - 动量(Momentum):相当于把盲人换成一个“沉重的大铁球”。铁球横向来回撞时,左右冲力会互相抵消;而顺着谷底向下的冲力会不断累积,越滚越快,还能凭惯性冲过小坑洼。
核心公式与符号拆解 动量优化器每一步做两件事:更新速度 $v$,再更新参数 $\theta$。
1. 速度累加(算惯性): $$v_t = \gamma v_{t-1} + \eta g_t$$ 2. 参数更新(按惯性走): $$\theta_t = \theta_{t-1} - v_t$$
符号逐个看: - $\theta_t$:当前模型权重(如卷积核、全连接层参数)。 - $g_t = \nabla L(\theta_{t-1})$:当前 mini-batch 算出来的损失梯度,代表“脚下的即时坡度”。 - $v_t$:当前累积的速度向量,包含了过去走过的方向。 - $\eta$(Learning Rate):学习率,控制当前梯度推力有多大(通常取 0.01 到 0.1)。 - $\gamma$(Momentum 系数):动量衰减系数(通常取 0.9),表示保留上一时刻速度的比例。$\gamma=0.9$ 意味着即使当前没有坡度,铁球也能保留上一轮 90% 的冲劲。
它解决什么问题?没有它会怎样? - 解决病态曲率(峡谷震荡):损失曲面往往一个方向极陡、另一个方向极平。普通 SGD 会在陡峭方向疯狂震荡,导致训练发散或极慢;动量利用历史抵消了震荡,使平缓方向加速前进。 - 解决局部小坑洼(逃离鞍点和局部极小值):普通 SGD 一旦梯度接近 0 就会停滞;动量带有历史速度,能顺势冲过鞍点。
在音视频与说话人日志中的真实位置 在说话人识别系统(如用 ECAPA-TDNN 或 ResNet 提取说话人 x-vector)中,分类头通常搭配 AAM-Softmax(加性角度间隔损失)。 - 很多一线方案在预训练 Conformer 声学模型时用 AdamW,但在精调说话人嵌入(Speaker Embedding)分类网络时,依然偏爱 SGD with Momentum (momentum=0.9)。 - 为什么?因为说话人特征空间要求超球面上各类间距分界极度平滑,实践中 SGD + 动量往往比 AdamW 具有更好的泛化边界,不容易过拟合到特定录音信道。
推荐学习法:想推导几何曲面直觉,查阅 *Dive into Deep Learning* 优化算法章节,先看直觉和公式,再运行章节中的可视化代码;想看工程配置,参考 *PyTorch Tutorials* 的基础训练循环写法。
动量优化器中系数 gamma 通常取什么值?
相比 AdamW,SGD+Momentum 在显存占用上有什么天然优势?
遇到梯度为 0 的鞍点时,动量为什么能通过?
发展流程:从算不动到滚得快 1. 全量梯度下降(BGD):每次把整个数据集算一遍才更新一次。太慢,内存塞不下。 2. 随机梯度下降(Mini-batch SGD):每次随机挑几十上百个音频切片(Batch)算梯度。算得飞快,但单个 Batch 的梯度充满噪声,走位像醉汉,遇到峡谷曲面震荡严重。 3. 引入动量(SGD with Momentum, 1986):借鉴物理惯性原理,平滑噪声,加速峡谷下坡。 4. 现代用法(2020s-2026):很少单独裸用,通常搭配学习率热身(Warmup)和余弦退火(Cosine Decay),在大规模视觉与音频表征学习中依然是检验模型泛化极限的标杆。
与相近概念的区别 - SGD vs SGD + Momentum:SGD 每次只看眼前,步步清零;Momentum 带有历史记忆,抹平抖动。 - Momentum vs Nesterov Momentum (NAG):普通动量是“站在原地看坡度 + 加上昨天速度”;Nesterov 是“先按昨天速度往前探一步,在超前位置看坡度”,刹车更灵敏。 - SGD + Momentum vs Adam/AdamW: - Momentum 是全局统一的学习率,靠惯性平滑; - Adam/AdamW 会为每一个参数单独调整学习率(自适应一阶+二阶矩估计)。Adam 收敛快、对调参宽容,但最终泛化性能有时被调参充分的 SGD+Momentum 反超。
局限性与未来研判 - 当前事实局限:对超参数极为敏感。初始学习率 $\eta$、动量系数 $\gamma$、Batch 大小相互深度绑定;学习率给大容易飞,给小几个 epoch 纹丝不动。训练 Transformer 类长上下文语音大模型时,冷启动阶段稳定性不如 AdamW。 - 未来推测(至2026及以后):随着端到端说话人日志模型朝轻量化边端部署演进,SGD+Momentum 内存开销极小(只需多存一个速度向量 $v$,而 AdamW 需存一阶和二阶两个状态向量),在边端设备在线微调(On-device Continual Learning)中可能会保持长久生命力。
- 如果动量系数设为 1.0,模型更新会发生什么?
- 为什么在病态峡谷地形中,动量能抵消左右震荡?(用矢量叠加解释)
- 在说话人识别微调时,为什么有人弃用收敛更快的 AdamW 而选 SGD+Momentum?