人工智能、大模型训练、优化算法·

Muon 和 Moonlight:优化算法的简单力量

用更少的算力训出更好的模型,Muon 和 Moonlight 的故事

技术进步的本质是找到更简单的方法去做复杂的事。大模型训练就是个例子:参数越来越多,数据量越来越大,算力像烧钱一样往里扔。但如果有个办法,能用一半的资源干出一样的活,甚至更好,这难道不是真正的聪明?Muon 优化器和 Moonlight 模型的故事,就是这么回事。

一、从老路到新路

训练大模型这几年成了体力活。几年前,几个亿参数的模型已经算大了,现在动不动就上千亿,token 按万亿算。优化算法得跟得上。Adam 和 AdamW 是老将,干活稳当,但有点慢,算力一多就显得吃力。每次跑完一个模型,看着账单,心想:有没有更省事的办法?

2024 年,K. Jordan 团队提出了 Muon。简单说,它不按老规矩逐个调参数,而是把权重看成矩阵,用一种叫 Newton-Schulz 迭代的方法,把更新方向“摆正”,避免走偏。小规模试了试,效果很好。但大模型是另一回事,参数多、数据多,能不能撑住,没人打包票。

Moonshot AI 的团队接手,试着把它用到大场景。他们发现,问题出在权重会失控,涨得太大,精度不够用。于是加了个权重衰减,再根据矩阵大小调调更新步子。结果,Muon 不用费劲调参数,也能跑得稳。接着,他们用 Muon 训了个叫 Moonlight 的模型,3B/16B 参数,5.7 万亿 token,结果比预期还好。

二、Muon 的简单逻辑

Muon 的核心其实不复杂。AdamW 是按元素调,靠动量和 RMSProp 自适应学习率,稳,但效率不高。Muon 换了个路子,分三步走:

  1. 把历史梯度和当前梯度混成一个动量矩阵。
  2. 用 Newton-Schulz 迭代,把这矩阵正交化,让更新方向更散。
  3. 按学习率把结果加到权重上。

这听起来有点学术,但想简单点,就是让模型别老盯着几个方向学,试着多探索。实验证明,这招管用。Muon 用一半的算力(FLOPs 只要 AdamW 的 52%),就能达到差不多的效果。规模法则实验里,不管模型多大,Muon 的损失曲线都压着 AdamW 走,尤其算力少时更明显。

当然,Muon 也有毛病。大规模跑时,权重和输出可能会疯涨,超了 bf16 的范围,影响结果。团队加了个权重衰减,又根据矩阵形状调了步子,用了个公式 (\sqrt{1 / \max(A, B)})(A、B 是矩阵维度),让更新大小一致。这么一改,效率还在,稳定性也上来了。

三、分布式:让 Muon 跑得更远

大模型得靠分布式算力,几十上百个 GPU 一起上。AdamW 的逐元素更新好分,Muon 要整个矩阵,得重新设计。团队搞了个分布式 Muon,思路是这样:

  • 先在数据并行组里分开算梯度,再聚成完整矩阵。
  • 每台机器跑正交化,只留本地需要的部分。
  • 内存用一半(比 AdamW 少一个缓冲区),通信开销多 50%,加起来是 150%。

跑下来效果不错。几百个 GPU 上,延迟只占总时间的 1%-3%,基本感觉不到慢。他们还说要开源到 Megatron-LM,让大家都能试试。

四、Moonlight:少花钱多办事

Muon 的实力在 Moonlight 上亮了相。这个 3B/16B 参数的混合专家模型,用 5.7 万亿 token 训出来,跟同级别的比,比出了差距。比如:

  • MMLU(语言理解):70.0,比 Qwen2.5-3B 的 65.6 高。
  • GSM8K(数学推理):77.4,跟 Qwen2.5-3B 的 79.1 差不多,但花的算力少。
  • HumanEval(代码生成):48.1,比 Llama3.2-3B 的 28.0 强不少。

关键是效率。Moonlight 用更少的 FLOPs,干出了更好的活,在性能-算力曲线上站到了最前面。这不光是省钱的事,是证明了好算法能顶多少硬件。

他们还分析了为什么。用了奇异值分解(SVD),发现 Muon 优化后的权重矩阵,方向更散,尤其在混合专家的路由器上,选专家更准。这是个小细节,但挺能说明问题。

五、从头用到尾?

Muon 不只预训练能用,微调也试了试。结果是,如果预训练和微调都用 Muon,效果最好。比如 Moonlight@1.2T 在 GSM8K 上拿了 68.0,比 AdamW 的 64.6 高。但要是预训练用 AdamW,微调换 Muon,就没啥优势。

他们还拿 Qwen2.5-7B 试了微调,Muon 跟 AdamW 差不多。这说明 Muon 在预训练上发力更猛,微调已有模型时,可能得再想想办法。

六、还能干啥

Muon 和 Moonlight 开了个头,但没到终点。未来可以试试:

  • 把所有参数都交给 Muon,现在只管矩阵,嵌入层还没搞定。
  • 从谱范数换到更广的 Schatten 范数,看能不能再挤点性能。
  • 弄明白预训练和微调为啥不搭,找个通吃的办法。

模型和代码都开源了,社区一起来,应该会有新东西出来。

七、结语

Muon 和 Moonlight 的故事值得关注,因为它让人想起技术的本质:不是堆资源,而是找聪明办法。Muon 用简单逻辑,干掉了复杂问题,Moonlight 证明了这办法真能行。大模型的路还长,但有了这样的思路,感觉离终点近了点。


© 2025 智人飞扬