先记住一句话
optimizer 不是固定公式加一个 LR:momentum 的时间常数、每步 tokens 和 LR 随 step 的轨迹共同决定真实 update。
1. Classical momentum
mₜ=βmₜ₋₁+(1−β)gₜθₜ₊₁=θₜ−ηmₜ这是 EMA convention;有些文献写 v=βv+g,LR scale 因此不同。β=0.9 大致保留十几步有效记忆,0.99 更长。持续同方向 gradient 累积,交替符号的窄谷方向互相抵消。
2. Nesterov 的直觉
Nesterov momentum 在“按 momentum 先走到的 look-ahead 点”评估/组合 gradient,使更新更早感知前方 curvature。不同 framework 的 Nesterov 实现符号与 dampening convention 可能不同,迁移 checkpoint/超参数要看公式而非只看开关名。
3. Effective global batch
B_global = B_per_device × data_parallel_world × accumulation_stepssequence 模型还要看 non-padding tokens。gradient accumulation 降低 activation 峰值并模拟更大 batch,但不减少总 forward/backward,且 batch-dependent layer、dropout 与 optimizer-step schedule 会使它不完全等价。
4. Batch 变大,LR 能线性放大吗
linear scaling 是经验起点,不是定律。大 batch gradient noise 低,常可增 LR;但超过 critical batch 后每步更多数据却减少不了 steps,sample efficiency 下降。Adam/归一化/sequence mix 会改变 scaling,必须做短 sweep 并按 tokens 对齐。
5. Warmup 为什么常用
训练初期 representations、gradient scale 与 optimizer moments 都未稳定,直接用 peak LR 容易大步破坏初始化。linear warmup 从小 LR 升至 peak;它缓解 early transient,但过长会浪费 compute。resume 时错误重启 warmup 会造成 LR discontinuity。
6. 常见 schedules
| Schedule | 形状 | 适用直觉 |
|---|---|---|
| Constant + warmup | 升高后保持 | 持续 pretraining、结束时间不确定 |
| Cosine decay | 平滑降到 min LR | 总 budget 已知,后期收敛 |
| Linear decay | 均匀下降 | 简单、常见于 finetuning |
| Step/multistep | 里程碑骤降 | 经典 vision recipes |
| WSD | warmup–stable–decay | 长稳定训练,最后独立 anneal |
7. Scheduler 的 step 单位
要明确每 optimizer step、每 epoch 还是按 tokens 更新;gradient accumulation 改变 optimizer steps 数,dataloader 长度/packing 改变 epoch 含义。checkpoint 必须保存 scheduler state/global step,否则 resume 后 LR 可能跳回。
8. Update-to-weight ratio
relative update ≈ ‖ΔW‖ / (‖W‖+ε)它比 global grad norm 更接近“参数实际动了多少”。分层记录能发现某些 embedding/head 或 normalization 参数因 scale 不同而动得过猛;Muon/LARS/LAMB 等还会显式调整 layer-wise update scale。
9. 可复现比较的最小报告
- optimizer 完整公式/convention、betas、epsilon、decay;
- global batch 与 tokens/step,gradient accumulation;
- peak/min LR、warmup/decay 的 steps 或 token 数;
- gradient clipping 与 mixed precision;
- 总 tokens、wall-clock、hardware 和 validation curve;
- 是否从相同 checkpoint 连续 optimizer state。
10. 四个 momentum、batch 与 schedule 计算
例 1:momentum 的三拍记忆
取 β=0.9、m₀=0,连续三拍 gradient 都为 1。EMA convention 下 m₁=0.1,m₂=0.9×0.1+0.1=0.19,m₃=0.271;它逐步接近 1,而不是第一拍就等于 1。
例 2:effective global batch
8 张 GPU,每卡 microbatch=4,每次 optimizer step 累积 2 个 microsteps:global batch=8×4×2=64。若每样本 2048 tokens,就是 131,072 tokens/step。
例 3:linear warmup
Peak LR=3×10−4,warmup=1000 steps。第 300 step 的 LR=3e−4×300/1000=9e−5;resume 错把 step 清零,就会意外重新降到 warmup 区。
例 4:update-to-weight ratio
某层 ‖W‖=20,一次更新 ‖ΔW‖=0.04,ratio=0.04/20=0.002=0.2%。另一层同样更新但 weight norm=2,ratio=2%,实际扰动大十倍。
换 optimizer 后只保持同一个数值 LR 不是公平比较。不同算法对 update 做的归一化不同,例如 Lion sign update、Muon matrix orthogonalization 都会改变 update norm,必须重新 sweep LR/decay。
自测
1. momentum 为什么能减小窄谷震荡?
反复换符号的 gradient 在 EMA 中抵消,持续一致的方向累积。
2. accumulation 翻倍后 warmup steps 不变意味着什么?
以 samples/tokens 计的 warmup 实际翻倍;比较 recipe 时必须统一 step 的定义。
3. resume 最容易漏存哪类状态?
optimizer moments、scheduler/global step 与 gradient scaler;只加载 model weights 会改变训练动力学。
参考
PyTorch optimizer 文档列出 SGD momentum/Nesterov、per-parameter options 与 fused/foreach implementation;具体训练仍应以项目保存的 optimizer/scheduler state 为准。