← 返回题目列表

Momentum、RMSProp、Adam 有什么区别?

高频 中等 第 11 / 25 题 更新于 2026/09/19
深度学习神经网络反向传播优化器

简化版

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、状态内存和公平调参。