先记住一句话
没有一个变体同时免费解决收敛、内存、吞吐与泛化;换 optimizer 必须连同 LR、decay、batch 和 kernel support 一起重做 baseline。
1. Adafactor:分解 second moment
对 matrix gradient G∈R^(m×n),Adam 保存完整 m×n 的 v;Adafactor 只存 row/column statistics,用 outer-product-like reconstruction 近似:
state: O(mn) → O(m+n) per matrix second moment原方法还提出 update clipping、随时间变化的 decay 与 parameter-scale-relative step;可省去 first moment 获得更低内存,也有实现保留 momentum。不要把所有框架中的 Adafactor defaults 当同一个 recipe。
2. Adafactor 适合与不适合
- 大 Transformer matrix 占主导、optimizer state 卡显存时吸引力大;
- vector/scalar 参数不能 row/column factor,仍需 unfactored state;
- factored approximation 丢掉细粒度 coordinate scale,收敛需验证;
- relative-step mode 与外部 scheduler 的组合容易重复控制 LR。
3. Lion:sign of momentum-like update
Lion 只维护一阶 momentum,不保存 Adam 的 v,并用 momentum/gradient 组合的 sign 作为 update direction。每个 coordinate 的 update magnitude 相同(decay 另算):
θ ← θ − η · sign(update_direction) − ηλθstate 比 Adam 少一份;sign update norm 往往更大,所以原论文强调用比 Adam 更小的 LR,并重新调 weight decay。它不是 per-coordinate adaptive magnitude。
4. LARS 与 LAMB:layer-wise trust ratio
大 batch 时,不同层 weight/update norm 差异大。LARS 在 SGD-like update 外乘 ‖W‖/‖update‖;LAMB 把类似 trust ratio 放到 Adam-style update 上。它们主要做 layer-wise normalization,曾用于大 batch vision/BERT;norm 很小、bias/norm 参数通常需要 special handling。
5. Lookahead:不是替代 base optimizer
Lookahead 维护 fast weights 由任意 inner optimizer 连走 k 步,再把 slow weights 朝 fast weights 插值。它平滑 outer trajectory,却仍需选择 AdamW/SGD 等 inner optimizer;state、checkpoint 和 scheduler 也因此增加一层。
6. RAdam、AdaBelief 等该怎么读
这类算法多修改 early variance、second-moment 解释或 effective step。读论文/代码先标注:
- 一阶方向是否变?
- 分母统计的是什么?
- bias/variance correction 在哪里?
- weight decay 是否 decoupled?
- 额外 state、kernel 与 distributed support 如何?
若只用未经调参 AdamW 做弱 baseline,论文相对提升不能直接外推到你的模型。
7. 选择表
| 主要瓶颈 | 先试 | 必须重测 |
|---|---|---|
| 稳定通用 baseline | AdamW | LR/decay/schedule |
| optimizer state 显存 | Adafactor / 8-bit / sharding | loss quality、kernel、checkpoint |
| 只想少一份 v state | Lion | 更小 LR、decay、update norm |
| 极大 global batch | LAMB/LARS(依任务) | layer trust ratio 与 scaling |
| matrix geometry/更少 steps | Shampoo/SOAP/Muon | 额外计算、通信与适用参数 |
8. 最小公平实验
固定 architecture、data order、global tokens、precision 和 eval;每个 optimizer 分别 sweep 其合理 LR/decay,而非共享同值。报告 best validation per token、达到目标 loss 的 wall-clock、peak memory、failure rate,并至少跑多 seed/大规模复验。
9. 四个变体的手算例子
例 1:Adafactor state 数量
4096×4096 matrix 的完整 second moment 有 16,777,216 个数;factor 后只需 4096 row + 4096 column=8192 个,数量缩小 2048×(未计其他 state)。
例 2:Lion sign update
假设组合后的方向 c=[−0.2,3.0,−7.0],sign(c)=[−1,1,−1]。η=0.001 时 parameter delta=−η sign(c)=[0.001,−0.001,0.001],各坐标 magnitude 相同。
例 3:LAMB trust ratio
某层 weight norm=12,Adam-style update norm=3,则 trust ratio=12/3=4。若 global LR=0.001,该层最终 update norm 约 0.001×4×3=0.012,即 weight norm 的 0.1%。
例 4:Lookahead 插值
Slow weight=2.0,base optimizer 跑 k 步后的 fast weight=1.4,α=0.5;同步后 slow=2+0.5×(1.4−2)=1.7,再把 fast reset 到 1.7。
optimizer state 少不等于训练显存按同样比例下降。activation 或 parameter shards 可能才是峰值主因;必须看 memory snapshot,而不是按公式猜总收益。
自测
1. Adafactor 在大矩阵上把 v state 降到什么量级?
从每元素 O(mn) 降为 row+column 的 O(m+n) 量级。
2. Lion 为什么通常需更小 LR?
sign 让各坐标 update magnitude 固定,整体 update norm 与 Adam 的 normalized magnitude 不同。
3. Lookahead 是完整方向 estimator 吗?
不是;它是包裹 base optimizer 的 slow/fast weights outer scheme。