跳转到内容

权重更新与优化器:参数如何动起来

训练循环的每一步,模型都要做一次「体检 → 开药」:

  1. 前向传播:输入数据,算出预测和损失(错得有多离谱)
  2. 反向传播:用链式法则算出每个参数对损失的贡献(梯度)
  3. 优化器更新:根据梯度决定每个参数往哪个方向、挪多大一步

第三步就是本页的主角。它听起来简单——「梯度反方向走一步」——但魔鬼全在细节里:这一步该多大?所有参数走一样的步长吗?走快了震荡怎么办?噪声太大怎么平滑?显存不够怎么省?

优化器简史:从「一刀切」到「量体裁衣」

Section titled “优化器简史:从「一刀切」到「量体裁衣」”
graph LR
A[SGD<br/>所有人同一个学习率] --> B[Momentum<br/>把过去的梯度平滑一下]
B --> C[AdaGrad<br/>每个参数自己的学习率]
C --> D[Adam<br/>一阶+二阶动量]
D --> E[AdamW<br/>权重衰减解耦]
E --> F[Adafactor / 8-bit<br/>给状态瘦身]
F --> G[Muon<br/>对动量做正交化]
style G fill:#f9f,stroke:#333

核心直觉:梯度本身又吵又偏——单个 batch 算出来的方向不代表全局。优化器的全部工作,就是在「相信当前梯度」和「参考历史惯性」之间做权衡,顺便决定每个参数该用多大步长。

Adam 维护两个量:

  • 一阶动量 m:梯度的指数滑动平均(“最近平均往哪走”)
  • 二阶动量 v:梯度平方的指数滑动平均(“这个参数平时有多吵”)

更新规则:参数变化量 ≈ m / √v。吵闹的参数(v 大)被自动缩小步长,稳定的参数放大步长。再加上 AdamW 的解耦权重衰减——每步直接乘 (1 − lr·λ) 把权重往零拉一点点,起到正则化效果。

LLM 训练的标准配置已经相当固化:

配置项常见取值说明
β₁ / β₂0.9 / 0.95β₂ 用 0.95 而非默认 0.999:LLM 数据分布漂移快,二阶矩要「忘」得快
学习率1e-5 ~ 3e-4模型越大,学习率越小
权重衰减 λ0.1AdamW 的解耦衰减
梯度裁剪global norm 1.0防单步爆炸
预热(warmup)前 0.1%~2% 步线性爬升到峰值学习率

优化器状态内存计算器

主权重: 420.0 GB梯度: 140.0 GB优化器状态: 560.0 GB合计(不含激活值): 1120.0 GB

内存构成(GB / 卡)

主权重
420.0
梯度
140.0
优化器状态
560.0

AdamW:一阶矩 m + 二阶矩 v · 估算假设:混合精度训练(BF16 权重副本 + 梯度),数值为近似值,忽略分片元数据与对齐开销。

一个常被低估的事实:AdamW 的优化器状态是参数量的 8 字节(两个 FP32 矩),加上 FP32 主权重、BF16 副本和梯度,每参数约 16~18 字节——训练 70B 模型,光状态就吃掉 1.1TB+。这就是 Adafactor(低秩分解二阶矩)、8-bit Adam(量化状态)、以及 Muon(只留一个动量)轮番登场的现实动因。

学习率不是常数,而是一个时间表:

  • Warmup:开头几百到几千步线性爬升。参数还是随机噪声,大学习率会直接掀桌
  • 主体段:保持峰值,或按 cosine 缓慢下降
  • 收尾段:降下去,让参数「 settling」到局部低点

GPT-3 时代流行 cosine(全程平滑衰减到接近零)。但 cosine 有个工程缺点:衰减节奏和训练总长死死绑在一起,想续训就得改调度重来。

WSD(Warmup–Stable–Decay) 把中段改成恒定学习率平台,只在最后约 20% 做衰减。实践发现:续训灵活、随时可分叉、衰减段短反而效果不掉。MiniCPM 把它发扬光大,Kimi K2 在 15.5T tokens 的预训练里用的也是 WSD(Muon 优化器 + 恒定段 LR 2e-4,衰减到 2e-5)。

混合精度:BF16 是底线,FP8 是前沿

Section titled “混合精度:BF16 是底线,FP8 是前沿”
  • BF16 训练:权重副本和计算用 BF16(动态范围和 FP32 一样,不会下溢),主权重和优化器状态保持 FP32。不需要损失缩放,LLM 默认
  • FP16 训练:精度更高但动态范围窄,需要动态损失缩放(梯度乘一个大系数防下溢),现在主要用于推理
  • FP8 训练:DeepSeek-V3 首次在 671B 模型上全程验证。关键是细粒度量化:按 128×128 块量化权重、按 1×128 分组量化激活,累加用高精度。代价是 softmax、归一化等敏感算子仍留在 BF16。训练吞吐再提升约一倍,已是 2025-2026 大集群的标配方向

大模型训练中 loss 曲线突然蹿升(loss spike)是家常。标准应对三件套:

  1. QK-归一化 / logit 软封顶:限制注意力 logits 的量级,从结构上防爆(Gemma-2 的 soft-capping、PaLM 的 z-loss 同属此族)
  2. 全局梯度裁剪:把超过阈值的更新整体等比缩回(阈值一般 1.0)
  3. 熔断与回滚:跳过 spike 的 batch;若持续恶化,回滚到最近稳定 checkpoint 再继续

Kimi K2 的 MuonClip 是这条线的最新成员:在 Muon 更新公式里把 QK-clip(attention logits 前瞻性地超过 100 就提前裁剪)耦合进去,1T 参数训练全程零 loss spike、零回滚——把稳定性从「事后救火」做到了「事前免疫」。

Muon 的更新分三步:累积动量 → 对动量矩阵做正交化(Newton-Schulz 迭代近似 U·Vᵀ,即动量矩阵 SVD 的正交因子)→ 应用更新。直觉是:把「原始梯度矩阵」换成「最接近它的正交矩阵」,让每个奇异方向的更新幅度一致。

Jeremy Bernstein 等人给出的解释是:这等价于在谱范数(spectral norm)单位球内做最速下降。Adam 相当于逐元素(ℓ∞ 型)最速下降,会偏向少数坐标;谱范数约束让更新在整个矩阵层面均匀,天然适合权重矩阵这种「所有方向都应该被平等探索」的对象。MoE 路由、embedding 这类非矩阵参数仍交给 AdamW——Muon 不是替代,而是分工。

  • 规模验证:Moonlight(Moonshot)补上权重衰减与按形状缩放(×0.2·√max(m,n))后,在 16B MoE / 5.7T tokens 上拿到约 2 倍于 AdamW 的 token 效率;Kimi K2 推到 1T 参数零 spike;DeepSeek V4(2026)也把大部分模块迁到 Muon
  • 变体爆发:AdaMuon、AdaGO、NorMuon、NAMO、Muon2、CacheMuon 等围绕「怎么省二次动量、怎么跨卡复用统计」持续迭代
  • 未解的理论:Muon 的收敛理论仍不完整;在什么数据/架构条件下它明显优于 AdamW、什么时候反而退化,还没有可操作的判据

🔬 开放研究问题

该领域的关键问题与研究方向:

  1. 谱范数最速下降的解释,能否推出 Muon 在 MoE / 多模态 / RL 训练上的适用边界?
  2. 优化器状态的通信与显存开销(8 字节/param 的 AdamW 矩)是否还有数量级压缩空间?FP4 时代优化器要长什么样?
  3. WSD 的衰减段最短可以到多少而不损失最终质量?「稳定段随时可分叉」能否改变继续预训练(continual pretraining)的产品形态?
  4. MuonClip 式的事前稳定化(QK-clip)能否推广成通用的「架构-优化器协同防爆」设计原则?

本文引用论文

  • Adam: A Method for Stochastic Optimization — Diederik P. Kingma et al. (2015)

    提出 Adam:为梯度一阶矩和二阶矩各维护一个指数移动平均,用二阶矩的平方根缩放每个参数的学习率。收敛快、对超参稳健,统治深度学习训练近十年;LLM 时代它的解耦变体 AdamW 至今仍是默认优化器。

  • Decoupled Weight Decay Regularization — Ilya Loshchilov et al. (2017)

    指出 Adam 里传统的 L2 正则会被自适应分母重新缩放、导致权重衰减强度随梯度尺度漂移,提出把权重衰减从梯度中解耦出来的 AdamW。如今几乎所有 LLM 预训练都使用 AdamW 加约 0.1 权重衰减的配置。

  • Adafactor: Adaptive Learning Rates with Sublinear Memory Cost — Noam Shazeer et al. (2018)

    把 Adam 的二阶动量矩阵做低秩分解,优化器状态从 O(mn) 降到 O(m+n),几乎不损失收敛质量。T5 用它训练;是显存紧张场景下替代 Adam 的经典方案,也预示了「优化器状态必须为大模型而瘦身」这条线。

  • Mixed Precision Training — Paulius Micikevicius et al. (2018)

    系统论证了混合精度训练 recipe:FP16 存储与计算、FP32 主权重与累加、动态损失缩放防止梯度下溢。吞吐接近翻倍且精度无损,是大模型训练的效率基石;后来 BF16 免去损失缩放成为 LLM 标配,FP8 又在此基础上把吞吐再翻一倍。

  • Symbolic Discovery of Optimization Algorithms — Xiangning Chen et al. (2023)

    用 AutoML 程序搜索自动发现优化器,产出 Lion:只取动量的符号与梯度符号比较生成更新,更新幅值恒定、不需要二阶动量、显存更省,在视觉和语言任务上匹配或超过 AdamW。证明了「优化器可以被搜出来」,启发了后续一系列符号化更新规则。

  • MiniCPM: Unveiling the Potential of Small Language Models with Scalable Training Strategies — Shengding Hu et al. (2024)

    在小模型上系统验证了 WSD(Warmup-Stable-Decay)学习率调度:中段保持恒定学习率便于随时续训与灵活实验,末尾短程衰减即可恢复到 cosine 调度的效果。该 recipe 被 MiniCPM 系列与 Kimi K2 等大模型沿用,成为长程训练的主流调度之一。

  • Muon: An Optimizer for Hidden Layers — Keller Jordan et al. (2024)

    提出 Muon:对动量做正交化(Newton-Schulz 迭代近似 UV^T)后再更新隐藏层矩阵,可理解为谱范数意义下的最速下降,让每层的更新「谱」大小一致。在 NanoGPT speedrun 上比调优后的 AdamW 快约 1.35 倍以上,成本仅为一次动量正交化,成为后 Adam 时代最受关注的优化器。

  • Muon is Scalable for LLM Training — Moonshot AI (2025)

    Moonlight 工程报告:给 Muon 补上权重衰减并按矩阵维度做 RMS 匹配(乘 0.2*sqrt(max(m,n))),使其学习率可与 AdamW 配方复用。在 16B MoE、5.7T tokens 的真实规模上验证 Muon 稳定且达到约 2 倍于 AdamW 的 token 效率,证明 Muon 可以从速通赛道走向生产预训练。

  • Kimi K2: Open Agentic Intelligence — Kimi Team (2025)

    Kimi K2 技术报告:1T 总参 / 32B 激活的 MoE,15.5T tokens 预训练。优化系统上把 Muon 推到万亿规模并给出 MuonClip(QK-clip:当注意力 logits 前瞻性地超过阈值 100 时提前裁剪),配合 WSD 学习率调度,全程零 loss spike、零训练回滚;报告同时开源权重与详细 infra 细节。