权重更新与优化器:参数如何动起来
一次更新到底发生了什么
Section titled “一次更新到底发生了什么”训练循环的每一步,模型都要做一次「体检 → 开药」:
- 前向传播:输入数据,算出预测和损失(错得有多离谱)
- 反向传播:用链式法则算出每个参数对损失的贡献(梯度)
- 优化器更新:根据梯度决定每个参数往哪个方向、挪多大一步
第三步就是本页的主角。它听起来简单——「梯度反方向走一步」——但魔鬼全在细节里:这一步该多大?所有参数走一样的步长吗?走快了震荡怎么办?噪声太大怎么平滑?显存不够怎么省?
优化器简史:从「一刀切」到「量体裁衣」
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 算出来的方向不代表全局。优化器的全部工作,就是在「相信当前梯度」和「参考历史惯性」之间做权衡,顺便决定每个参数该用多大步长。
AdamW:十年默认答案
Section titled “AdamW:十年默认答案”Adam 维护两个量:
- 一阶动量 m:梯度的指数滑动平均(“最近平均往哪走”)
- 二阶动量 v:梯度平方的指数滑动平均(“这个参数平时有多吵”)
更新规则:参数变化量 ≈ m / √v。吵闹的参数(v 大)被自动缩小步长,稳定的参数放大步长。再加上 AdamW 的解耦权重衰减——每步直接乘 (1 − lr·λ) 把权重往零拉一点点,起到正则化效果。
LLM 训练的标准配置已经相当固化:
| 配置项 | 常见取值 | 说明 |
|---|---|---|
| β₁ / β₂ | 0.9 / 0.95 | β₂ 用 0.95 而非默认 0.999:LLM 数据分布漂移快,二阶矩要「忘」得快 |
| 学习率 | 1e-5 ~ 3e-4 | 模型越大,学习率越小 |
| 权重衰减 λ | 0.1 | AdamW 的解耦衰减 |
| 梯度裁剪 | global norm 1.0 | 防单步爆炸 |
| 预热(warmup) | 前 0.1%~2% 步 | 线性爬升到峰值学习率 |
优化器状态内存计算器
内存构成(GB / 卡)
AdamW:一阶矩 m + 二阶矩 v · 估算假设:混合精度训练(BF16 权重副本 + 梯度),数值为近似值,忽略分片元数据与对齐开销。
一个常被低估的事实:AdamW 的优化器状态是参数量的 8 字节(两个 FP32 矩),加上 FP32 主权重、BF16 副本和梯度,每参数约 16~18 字节——训练 70B 模型,光状态就吃掉 1.1TB+。这就是 Adafactor(低秩分解二阶矩)、8-bit Adam(量化状态)、以及 Muon(只留一个动量)轮番登场的现实动因。
学习率调度:WSD 正在取代 cosine
Section titled “学习率调度:WSD 正在取代 cosine”学习率不是常数,而是一个时间表:
- 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 spike 工程
Section titled “梯度裁剪与 loss spike 工程”大模型训练中 loss 曲线突然蹿升(loss spike)是家常。标准应对三件套:
- QK-归一化 / logit 软封顶:限制注意力 logits 的量级,从结构上防爆(Gemma-2 的 soft-capping、PaLM 的 z-loss 同属此族)
- 全局梯度裁剪:把超过阈值的更新整体等比缩回(阈值一般 1.0)
- 熔断与回滚:跳过 spike 的 batch;若持续恶化,回滚到最近稳定 checkpoint 再继续
Kimi K2 的 MuonClip 是这条线的最新成员:在 Muon 更新公式里把 QK-clip(attention logits 前瞻性地超过 100 就提前裁剪)耦合进去,1T 参数训练全程零 loss spike、零回滚——把稳定性从「事后救火」做到了「事前免疫」。
Muon 为什么有效:谱范数视角
Section titled “Muon 为什么有效:谱范数视角”Muon 的更新分三步:累积动量 → 对动量矩阵做正交化(Newton-Schulz 迭代近似 U·Vᵀ,即动量矩阵 SVD 的正交因子)→ 应用更新。直觉是:把「原始梯度矩阵」换成「最接近它的正交矩阵」,让每个奇异方向的更新幅度一致。
Jeremy Bernstein 等人给出的解释是:这等价于在谱范数(spectral norm)单位球内做最速下降。Adam 相当于逐元素(ℓ∞ 型)最速下降,会偏向少数坐标;谱范数约束让更新在整个矩阵层面均匀,天然适合权重矩阵这种「所有方向都应该被平等探索」的对象。MoE 路由、embedding 这类非矩阵参数仍交给 AdamW——Muon 不是替代,而是分工。
2025-2026 的优化器格局
Section titled “2025-2026 的优化器格局”- 规模验证: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、什么时候反而退化,还没有可操作的判据
🔬 开放研究问题
该领域的关键问题与研究方向:
- 谱范数最速下降的解释,能否推出 Muon 在 MoE / 多模态 / RL 训练上的适用边界?
- 优化器状态的通信与显存开销(8 字节/param 的 AdamW 矩)是否还有数量级压缩空间?FP4 时代优化器要长什么样?
- WSD 的衰减段最短可以到多少而不损失最终质量?「稳定段随时可分叉」能否改变继续预训练(continual pretraining)的产品形态?
- MuonClip 式的事前稳定化(QK-clip)能否推广成通用的「架构-优化器协同防爆」设计原则?
本文引用论文
- Adam: A Method for Stochastic Optimization
提出 Adam:为梯度一阶矩和二阶矩各维护一个指数移动平均,用二阶矩的平方根缩放每个参数的学习率。收敛快、对超参稳健,统治深度学习训练近十年;LLM 时代它的解耦变体 AdamW 至今仍是默认优化器。
- Decoupled Weight Decay Regularization
指出 Adam 里传统的 L2 正则会被自适应分母重新缩放、导致权重衰减强度随梯度尺度漂移,提出把权重衰减从梯度中解耦出来的 AdamW。如今几乎所有 LLM 预训练都使用 AdamW 加约 0.1 权重衰减的配置。
- Adafactor: Adaptive Learning Rates with Sublinear Memory Cost
把 Adam 的二阶动量矩阵做低秩分解,优化器状态从 O(mn) 降到 O(m+n),几乎不损失收敛质量。T5 用它训练;是显存紧张场景下替代 Adam 的经典方案,也预示了「优化器状态必须为大模型而瘦身」这条线。
- Mixed Precision Training
系统论证了混合精度训练 recipe:FP16 存储与计算、FP32 主权重与累加、动态损失缩放防止梯度下溢。吞吐接近翻倍且精度无损,是大模型训练的效率基石;后来 BF16 免去损失缩放成为 LLM 标配,FP8 又在此基础上把吞吐再翻一倍。
- Symbolic Discovery of Optimization Algorithms
用 AutoML 程序搜索自动发现优化器,产出 Lion:只取动量的符号与梯度符号比较生成更新,更新幅值恒定、不需要二阶动量、显存更省,在视觉和语言任务上匹配或超过 AdamW。证明了「优化器可以被搜出来」,启发了后续一系列符号化更新规则。
- MiniCPM: Unveiling the Potential of Small Language Models with Scalable Training Strategies
在小模型上系统验证了 WSD(Warmup-Stable-Decay)学习率调度:中段保持恒定学习率便于随时续训与灵活实验,末尾短程衰减即可恢复到 cosine 调度的效果。该 recipe 被 MiniCPM 系列与 Kimi K2 等大模型沿用,成为长程训练的主流调度之一。
- Muon: An Optimizer for Hidden Layers
提出 Muon:对动量做正交化(Newton-Schulz 迭代近似 UV^T)后再更新隐藏层矩阵,可理解为谱范数意义下的最速下降,让每层的更新「谱」大小一致。在 NanoGPT speedrun 上比调优后的 AdamW 快约 1.35 倍以上,成本仅为一次动量正交化,成为后 Adam 时代最受关注的优化器。
- Muon is Scalable for LLM Training
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 K2 技术报告:1T 总参 / 32B 激活的 MoE,15.5T tokens 预训练。优化系统上把 Muon 推到万亿规模并给出 MuonClip(QK-clip:当注意力 logits 前瞻性地超过阈值 100 时提前裁剪),配合 WSD 学习率调度,全程零 loss spike、零训练回滚;报告同时开源权重与详细 infra 细节。