跳转至

优化器:Adam → Muon → Scheduler → Per-Layer LR → 调参理论

更新日期:2026-04-16


一、优化器全景

飞书 add-on(待手动转 mermaid / 图)

component: blk_631fefbbae02400430b8f9f4

优化器 更新规则 内存 核心改进 论文
SGD+Momentum \(\theta \leftarrow \theta - \eta(\beta m + g)\) \(1\times\) 一阶动量 -
Adam \(\theta \leftarrow \theta - \eta \frac{m_t}{\sqrt{v_t}+\epsilon}\) \(2\times\) 自适应学习率 Adam (2014)
AdamW Adam + \(\lambda\theta\) 解耦衰减 \(2\times\) 权重衰减不经过自适应 AdamW (2017)
Muon \(\theta \leftarrow \theta - \eta \cdot \text{orth}(m_t)\) \(1.33\times\) 正交化保留梯度结构 Muon (2024)
NorMuon Muon + 逐行归一化 \(1.33\times\) 解决深层不稳定 NorMuon (2025)

二、AdamW:为什么它是标准

2.1 Adam 的设计动机

为什么不用 SGD?SGD 对所有参数用同一个学习率。但 LLM 中不同参数的梯度量级差异极大——embedding 的梯度可能是 attention 权重的 100 倍。SGD 要么学 embedding 太快(不稳定),要么学 attention 太慢。 Adam 的解法:每个参数自己算自适应学习率。对梯度大的参数自动减小 lr,对梯度小的自动增大。

数学上:有效学习率 \(= \eta \cdot m_t / \sqrt{v_t}\)\(v_t\) 大(梯度方差大)→ 有效 lr 小;\(v_t\) 小 → 有效 lr 大。

2.2 为什么要 AdamW 而非 Adam+L2

Adam + L2 正则:权重衰减项 \(\lambda\theta\) 经过了 Adam 的自适应缩放 \(\frac{1}{\sqrt{v_t}}\)。结果:梯度大的参数衰减被压小了,梯度小的参数衰减被放大了——这不是我们想要的。 AdamW 解耦:衰减项 \(\lambda\theta\) 直接作用在参数上,不经过 Adam 缩放。每个参数的衰减强度一样。参考 Loshchilov & Hutter (2017)

2.3 超参经验值与"为什么"


三、Warmup:为什么必须有

3.1 不 warmup 会怎样

不 warmup 直接用高 lr 训几乎一定崩溃(loss spike 或 NaN)。但为什么? 三个原因(参考 Analyzing Warmup in GPT Training (2024)):

原因 1:Adam 的二阶矩 \(v\) 还没准备好

训练初期 \(v \approx 0\)(刚初始化)。偏差修正后 \(\hat{v}_t = v_t/(1-\beta_2^t)\),当 \(t\) 很小时分母 \((1-\beta_2^t)\) 接近 0 → \(\hat{v}\) 极大波动 → 有效 lr = \(m/\sqrt{\hat{v}}\) 不可预测。

原因 2:梯度信噪比(SNR)高

训练初期所有样本对模型都是"新的",梯度方向高度一致(SNR 高)。这意味着一步更新会大幅改变模型表示。如果 lr 大 → 一步就把 embedding 空间搞乱,后续难以恢复。

原因 3:表示坍缩

初期大 lr 可能导致某些神经元永久死亡(ReLU 饱和)或 attention 分布退化。这种"结构损伤"无法通过后续训练修复

3.2 Warmup 的机制

Warmup 让 lr 从 0 线性增长到 peak。这给了 Adam 的 \(v\) 时间累积有意义的统计量(约需 \(1/(1-\beta_2)\) 步 ≈ 20 步才相对准确),也让模型逐步建立稳定的内部表示。

实验证据:即使 5% 的 warmup 步数(1000 步中的 50 步)就能显著改善最终性能。参考 Analyzing Warmup (2024)


六、Muon:为什么比 Adam 快 2 倍

6.1 Adam 的问题

Adam 的逐元素缩放 \(m_i/\sqrt{v_i}\) 把梯度矩阵打散成独立的标量。这丢失了矩阵结构信息(如低秩结构、方向关联)。

6.2 Muon 的解法

Muon 对动量矩阵做 Newton-Schulz 正交化:所有奇异值变为 1 → 所有方向步长一样 → 保留了梯度的方向信息

\(X_{k+1} = \frac{3}{2}X_k - \frac{1}{2}X_k X_k^T X_k\)

5 次迭代后 \(X^TX \approx I\)

为什么这更高效?想象一个 [4096, 11008] 的 FFN 权重矩阵。Adam 把它看成 4500 万个独立参数。Muon 把它看成一个整体矩阵,保留了行-列关联。参考 Muon is Scalable (Liu & Su, 2025)

6.3 Muon 的限制与混合

Muon 只对 2D 矩阵有效。Embedding、LM Head、LayerNorm 必须用 AdamW。

def build_optimizer(model):
    muon_params = [p for n,p in model.named_parameters()
                   if p.ndim==2 and 'embed' not in n and 'lm_head' not in n]
    adam_params = [p for n,p in model.named_parameters()
                   if p not in muon_params]
    return CombinedOptimizer([
        Muon(muon_params, lr=0.02, momentum=0.95),
        AdamW(adam_params, lr=3e-4, betas=(0.9,0.95), weight_decay=0.1)
    ])

6.4 实际收益



参考文献

  • [1] Kingma & Ba. Adam. 2014. 论文

  • [2] Loshchilov & Hutter. AdamW. 2017. 论文

  • [3] Jordan. Muon. 2024. 博客

  • [4] Liu & Su. Muon is Scalable. 2025. 论文

  • [5] NorMuon. 2025. 论文

  • [6] Analyzing Warmup in GPT Training. 2024. 论文

  • [7] Essential AI. Practical Efficiency of Muon. 2025. 论文


上级 · D1. 优化器:Adam → Muon → 调参理论(Parabolic Fitting、μP)