先记住一句话

Adam 的分子是带 momentum 的 gradient 均值,分母是 gradient 平方的均值开根号;它是 diagonal preconditioner,不是完整二阶 Hessian method。

gradient gₜ更新 mₜ更新 vₜbias correction逐坐标归一化parameter step
Directionm̂ₜ
÷
Scale√v̂ₜ+ε
Preconditioneddₜ
×
LRη
Update−ηdₜ
Adam 的两条记忆支路必须先 bias-correct,再组合成逐坐标 update。

1. AdaGrad:累积平方梯度

vₜ=vₜ₋₁+gₜ², θ←θ−η gₜ/(√vₜ+ε)

高频出现且 gradient 大的 coordinate 步幅不断缩小,对 sparse features 有吸引力;但 v 只增不减,长训练后 LR 可能衰减到几乎不动。

2. RMSProp:只记近期尺度

vₜ=β₂vₜ₋₁+(1−β₂)gₜ²
θ←θ−η gₜ/(√vₜ+ε)

EMA 让旧 gradient 忘却,能适应非平稳训练。逐坐标除以 RMS 改善不同 scale,但丢失 coordinate correlation。

3. Adam 的完整更新

mₜ=β₁mₜ₋₁+(1−β₁)gₜ
vₜ=β₂vₜ₋₁+(1−β₂)gₜ²
m̂ₜ=mₜ/(1−β₁ᵗ), v̂ₜ=vₜ/(1−β₂ᵗ)
θₜ=θₜ₋₁−η m̂ₜ/(√v̂ₜ+ε)

m 平滑方向,v 缩放坐标。这里的 “second moment” 是 E[g²],不是 Hessian;Adam 仍只调用一阶 gradient。

4. Bias correction 为什么存在

m₀=v₀=0,EMA 初期系统性偏向零;除以 1−β^t 修正 initialization bias。β₂ 很接近 1 时尤其重要。resume 时若丢失 step count/moments,correction 和更新尺度都会重启。

5. Betas 的时间尺度

参数控制改小后
β₁方向 momentum更快响应新 gradient、更 noisy
β₂squared-gradient scale分母更快适应 spike,也更抖
ε除零/小 v 下的 scale floor更接近纯 normalization,低精度更敏感

“有效窗口约 1/(1−β)”是便于理解的量级,不是硬截断窗口。

6. Epsilon 放在哪里

√v + ε√(v+ε) 不等价;framework 默认值和 mixed-precision behavior 也不同。epsilon 在常规大 v 时看似无关,在小 gradient、bf16/fp16 或 normalization 参数上可能主导有效 LR。

7. Adam 的优点与代价

优点代价
对参数 scale/稀疏 gradient 较稳健每参数保存 m/v,state memory 大
通常容易得到可用 baselinediagonal scale 看不到矩阵相关结构
对 noisy/nonstationary objectives 有适应性LR、beta、epsilon 与 decay 仍耦合系统实现

8. AMSGrad 等修正

Adam 在某些 online convex 例子中存在 convergence 问题;AMSGrad 维护历史最大的 second-moment estimate,阻止 effective LR 因 v 下降而增大。理论修正不自动代表所有深度网络更好,recipe 与实测仍重要。

9. 该记录哪些量

  • layer-wise ‖g‖, ‖m̂/(√v̂+ε)‖, ‖ΔW‖/‖W‖
  • v 的分位数、epsilon 主导的参数比例;
  • grad clip fraction、NaN/Inf 与 loss scale;
  • optimizer state 是否正确从 checkpoint 恢复;
  • train/validation loss 对 tokens 与 wall-clock 的曲线。

10. 四个 adaptive update 计算

例 1:AdaGrad 两拍

Scalar gradients 依次为 3、4,v₀=0。第一拍 v₁=9,normalized gradient=3/3=1;第二拍 v₂=9+16=25,normalized gradient=4/5=0.8,历史大 gradient 让有效步幅缩小。

例 2:RMSProp 的新尺度

β₂=0.9、v₀=0、g₁=2:v₁=0.9×0+0.1×4=0.4,RMS=√0.4≈0.632,未做 bias correction 的 normalized gradient≈3.162。

例 3:Adam 第一拍 bias correction

β₁=0.9、β₂=0.99、g₁=2:m₁=0.2,v₁=0.04;修正后 m̂₁=0.2/0.1=2、v̂₁=0.04/0.01=4,所以 m̂/√v̂=1。η=0.001 时更新约 −0.001。

例 4:beta 的记忆长度

β₂=0.999 时,一次旧 squared gradient 在 1000 步后的权重约 0.999¹⁰⁰⁰≈0.368;因此有效时间尺度约 1/(1−β₂)=1000 步,突然换数据分布后适应很慢。

常见误解:

Adam 的 v 叫二阶矩,不代表它使用 loss 的二阶导数。它统计每个坐标 gradient 的平方,没有建模不同参数之间的 curvature/correlation。

自测

1. AdaGrad 为什么长训练可能停滞?

squared gradients 永久累积,分母持续增长,effective LR 单调缩小。

2. Adam 为什么要保存两个 state tensor?

m 是一阶 momentum,v 是逐坐标 squared-gradient EMA。

3. β₂ 降低会怎样?

scale estimator 更快响应当前 gradient,记忆变短、噪声更大。

一手资料

Adam: A Method for Stochastic Optimization给出 moment estimates、bias correction、AdaMax 与原始分析。