先记住一句话

没有一个变体同时免费解决收敛、内存、吞吐与泛化;换 optimizer 必须连同 LR、decay、batch 和 kernel support 一起重做 baseline。

定位瓶颈拆 direction/scale算 state 成本匹配参数形状独立调 LR同 tokens 比较
Adafactorfactor v
Lionsign direction
LAMBlayer ratio
Lookaheadslow/fast wrapper
四类方法替换 optimizer pipeline 的不同部件,名称相邻不代表更新规则相似。

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。读论文/代码先标注:

  1. 一阶方向是否变?
  2. 分母统计的是什么?
  3. bias/variance correction 在哪里?
  4. weight decay 是否 decoupled?
  5. 额外 state、kernel 与 distributed support 如何?

若只用未经调参 AdamW 做弱 baseline,论文相对提升不能直接外推到你的模型。

7. 选择表

主要瓶颈先试必须重测
稳定通用 baselineAdamWLR/decay/schedule
optimizer state 显存Adafactor / 8-bit / shardingloss quality、kernel、checkpoint
只想少一份 v stateLion更小 LR、decay、update norm
极大 global batchLAMB/LARS(依任务)layer trust ratio 与 scaling
matrix geometry/更少 stepsShampoo/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。

一手资料

Adafactor提出 row/column factored second moment 与 update clipping;Lion由 symbolic search 得到 sign-momentum update,并报告其内存与 LR 特性。