优化器复兴:Muon 与同类
十年来,「用哪个优化器?」是那个没人会问第二遍的预训练问题。AdamW 可用,人人用它,话题关闭。后来 Keller Jordan 的 Muon 打破了 nanoGPT 与 CIFAR-10 的 speedrun 纪录,Moonshot 把它扩展到一个 1 万亿参数的生产模型,优化器重新变成一个训练策略决策。
为什么重要:在固定的数据预算与固定的算力预算下,优化器是决定每 FLOP 换来多少能力的杠杆。token 效率如今就是模型质量。Muon 这条工作线值得一次精读,而不是只看标题。
领域地图:从逐元素自适应到更新几何
经典框架把优化当作逐权重问题。AdamW 为每个参数维护两个动量缓冲区,逐元素地调整步长。它稳健、内存开销大,而且多年来它足够好用,以至于没人在意常数因子。
新框架把更新当作一个有几何结构的矩阵。Muon(MomentUm Orthogonalized by Newton-Schulz)对二维权重矩阵施加 SGD 动量,然后运行一次 Newton-Schulz 迭代,把更新映射到最近的半正交矩阵,即其 SVD 的 UV^T。原 writeup 的动机是经验性的:transformer 的二维更新条件数很高且几乎低秩,而正交化会重新缩放那些对学习要紧的稀有方向。
AdamW : two buffers (m, v), per-element adaptive steps
Muon : one momentum buffer, then orthogonalize the update matrix
W -= lr * NewtonSchulz(M) (2D params only)
其余一切都随之而来:一个动量缓冲区代替两个,Newton-Schulz 在 bfloat16 下稳定,以及一条辅助规则——标量、向量、嵌入和输出头留在 AdamW 上。
内存这笔账是真实的经济账。Adam 的两个缓冲区每参数花 8 字节,Muon 的单个动量缓冲区花 4 字节,而大约 90% 的 transformer 参数是二维隐藏权重,所以优化器状态内存下降约 45%(端到端的节省更小;PyTorch 博客在一次 3B 微调中测得 9% 的峰值内存节省)。到 2026 年中,Muon 支持已在 DeepSpeed 中落地,这说明它已经相当程度地走出了 speedrun 角落(Using Muon Optimizer with DeepSpeed)。
精读:原 writeup
Muon: An optimizer for hidden layers in neural networks(Keller Jordan 等人,December 2024)是首要来源。它的头版结果全部是 speedrun 风格、带可复现日志:CIFAR-10 在 2.6 A100-秒内达到 94% 准确率,此前为 3.3;在 FineWeb 上 3.28 验证损失的 nanoGPT speedrun 目标上取得 1.35x 改进;扩展到 774M 与 1.5B 参数;以及一个 1.5B transformer 在 10 8xH100-小时内达到 GPT-2 XL 水平的 HellaSwag,而 AdamW 需要 13.3。
有两点让这篇 writeup 值得当作文献来读。它通过 Bernstein 与 Newhouse 的分析把 Muon 接进 Shampoo 谱系,于是这个技巧被定位成更新几何研究,而不是一个 hack。并且它对证据标准很明确:论证是算力对齐、墙钟时间、可复现的,而且直白地说非矩阵参数应留在标准优化器上。这个分工就是配方,不是实现细节。
精读:Moonlight,即 3B/16B 上的 Muon
Muon is Scalable for LLM Training(Moonshot AI,February 2025)是把 Muon 从 speedrun 圈的新奇之物变成预训练配方的那篇论文。两项技术让它得以扩展:加权重衰减,以及仔细调整逐参数的更新尺度。有了这些,在算力最优训练下,Muon 相对 AdamW 取得约 2x 的计算效率。团队在 5.7T token 上训练了 Moonlight——一个 3B/16B 的 Mixture-of-Experts 模型——并开源了一个内存最优、通信高效的分布式 Muon 实现。
有意思的部分是哪些东西必须修。权重衰减和更新 RMS 恰恰是 speedrun 可以忽略、而 5.7T token 训练无法忽略的细节。论文点名了扩展下的失败模式,正是这让下一步成为可能。
精读:Kimi K2,即 1T 上的 Muon
Kimi K2 技术报告(Kimi Team,July 2025)是生产级论证。Moonshot 提出 MuonClip:带权重衰减、一致 RMS 匹配和 QK-Clip 的 Muon。QK-Clip 解决的问题是:规模化后 attention logits 可能爆炸冲过 1000,训练发散。修复是外科手术式的:逐 attention head,若最大 logit 超过阈值,就重缩放该 head 的 query 与 key 投影权重。
结果:一个 32B 激活、1T 总参数的 MoE,在 15.5T token 上预训练,零 loss spike,发布时在开源非思考模型中处于最优,最强分数在 agentic 与软件工程任务上。
我的判断:这条级联才是要害。一次优化器更换迫使了一个 attention 相邻的稳定性修复,这正是「用哪个优化器」如今成为带架构后果的训练配方决策、而非超参数的原因。
我的立场
我站在复兴这一边,但要加护栏。
在算力对齐的预算下比较优化器,而不是步数对齐。一个把到固定目标为止的 FLOPs 与墙钟时间汇报出来的 harness 才是正确的仪器;固定步数的 loss 曲线会误导你。
把分工配方当作默认:二维隐藏矩阵用 Muon,嵌入、输出头、norm 和一切一维参数用 AdamW。从 speedrun 到 K2,每一个严肃的 Muon 结果都是这么做的。
监控两个诊断量,并诚实交代它们的出处。最大 attention logit 是已被验证的遥测:K2 眼看着它爬过 1000,直到需要 QK-Clip。更新的条件数则不同。它是 Muon 原 writeup 中的动机,但没有人把它作为训练遥测发布,这正是我的 harness 会记录它、而不是把它当作业界实践照搬的原因:如果正交化是在更新病态时才有收益,这个数字应当在 loss 曲线之前就说出 Muon 何时物有所值。
我会收手的地方:微调和 RL 阶段的训练。强证据集中在预训练。PyTorch 博客对 Moonlight-16B-A3B 的微调显示,Muon 在四个 benchmark 中的三个(MBPP+、MMLU、GSM8K)上略胜 AdamW,而在 MBPP base 上略逊,所以这个论证可信但单薄。我会先测量再切换,而不是凭信仰切换。我自己的 VerifierForge 运行是 1.5B 模型上的 400 步 GRPO;在那个尺度上,优化器选择相对验证器质量是二阶的,所以我没有切换。能改变我看法的是在我的规模上 FLOP 对齐的微调 loss 曲线,而不是别人规模上的又一个预训练结果。
具体的构建是一个小型优化器 harness:在 FLOP 对齐的 Muon 与 AdamW 运行之间记录这两个诊断量,以 Muon 加 AdamW 的分工为起始配置,让我这个规模上的 Muon 对 AdamW 的决断不再是经验之谈。Muon 的故事提醒我们:训练栈里无聊的部分正是 2x 所在之处,而更广的配方地图是我在其余部分记账的地方(基础模型:一张领域地图)。
本文所引链接均已抓取并核验。