Momentum、RMSProp、Adam 有什么区别?
简化版
Momentum 对梯度做指数移动平均,沿一致方向加速并抑制来回震荡;Adam 再对梯度平方做移动平均,为每个参数自适应缩放步长,并用偏差修正处理初期矩估计偏小。Adam 收敛快,但泛化与权重衰减实现仍需验证。
详细版
-
SGD momentum 维护速度,一阶矩使持续梯度累积。
-
Adam 的 m 是一阶矩、v 是二阶原始矩,不是严格方差。
-
偏差修正在训练初期尤其重要,因为 m、v 从零初始化。
-
ε 防止除零,也会影响极小 v 参数的有效步长。
-
AdamW 将 weight decay 与自适应梯度更新解耦。
完整版教学
一、优化器在方向平滑与坐标缩放上递进
狭长损失谷中,普通 SGD 在陡峭方向左右摆动,Momentum 将相反梯度部分抵消,同时积累平缓方向速度。
Adam 用 1/sqrt(v) 让历史大梯度坐标步长变小、小梯度坐标相对变大;它对尺度鲁棒,却可能产生与 SGD 不同的隐式偏置。
二、底层机制与公式
m_t=beta1*m_(t-1)+(1-beta1)*g_t
v_t=beta2*v_(t-1)+(1-beta2)*g_t^2
mhat=m_t/(1-beta1^t); vhat=v_t/(1-beta2^t)
theta=theta-lr*mhat/(sqrt(vhat)+eps)
三、带数字的推演
第一步 g=2、β1=0.9、β2=0.999,得到 m=0.2、v=0.004;偏差修正后 mhat=2、vhat=4,忽略 ε 的更新幅度约为 lr,而不是被零初始化缩小。
四、方案对比
| 方案/对象 | 核心特点 | 代价或边界 |
|---|---|---|
| SGD | 当前梯度直接更新 | 需精细调 LR |
| Momentum | 平滑方向并加速 | 新增速度状态 |
| Adam/AdamW | 逐参数自适应 | 状态多、泛化需比较 |
五、执行流程
选优化器基线 -> 调峰值 LR -> 再调 momentum/betas 与 decay
-> 观察梯度/更新范数 -> 相同预算比较收敛与测试表现
六、边界条件与工程代价
稀疏梯度、混合精度和超大模型会放大优化器状态内存;Adam 通常为每参数保存 m、v,状态成本显著高于 SGD。
不能在不同学习率配方下简单宣称 Adam 优于 SGD。
优化器、scheduler、warmup 与 batch size 是耦合系统,比较时需各自合理调参。
记忆钩子:Momentum 记“一阶方向平均”,Adam 再加“平方尺度平均”,偏差修正负责起步。
七、常见误区与追问
-
误区:Adam 的 v 是梯度方差。 它是梯度平方的指数移动平均,未减均值平方。
-
追问:偏差修正为何必要? 零初始化使早期移动平均系统性偏小。
-
误区:Adam 自适应所以无需调学习率。 峰值 LR 仍是最敏感超参数之一。
-
追问:AdamW 与 Adam+L2 有何区别? AdamW 直接衰减参数,不让 L2 梯度被自适应缩放。
-
追问:Momentum 如何减少震荡? 相反方向梯度在速度平均中抵消,持续方向则累积。
八、加强记忆
Momentum 记“一阶方向平均”,Adam 再加“平方尺度平均”,偏差修正负责起步。
工程回答还要带上 AdamW、状态内存和公平调参。