先记住一句话
Adam 的分子是带 momentum 的 gradient 均值,分母是 gradient 平方的均值开根号;它是 diagonal preconditioner,不是完整二阶 Hessian method。
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 大 |
| 通常容易得到可用 baseline | diagonal 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 与原始分析。