技术博客

Muon 优化器:动量的矩阵正交化与 Newton-Schulz 迭代

第 130 / 147 篇 · 2025-08-25 · ai · 优化器Muon训练工程

2024 年 Keller Jordan 在 modded-nanogpt speedrun 里拿掉 Adam 换上 Muon 后,NanoGPT 训练到同精度的时间再砍一半,这个优化器从此进了大众视野,之后被 Kimi K2、若干 Llama 系复现采用。它只用在二维以上的权重(attention/FFN 的线性层),embedding 和输出头仍用 Adam。更新式短得惊人:

$$ G_t = \beta G_{t-1} + (1-\beta) \nabla_\theta L, \qquad \theta_{t+1} = \theta_t - \eta \cdot \underbrace{\mathrm{NS}_5(G_t)}_{\text{正交化后的动量}}, $$

NS 是 Newton-Schulz 迭代。没有一阶矩二阶矩的分工,没有逐坐标归一,它动的是另一个几何结构:矩阵的奇异值。

从信赖域到正交化:动机推导

把权重更新 $\Delta$ 看作矩阵,Adam 做的是逐元素归一(Frobenius 视角的均衡),Muon 想做的是让 $\Delta$ 的奇异值均衡——更新在谱的意义上是"各向同性的"。形式化:在更新幅度约束 $\|\Delta\|_F \le r$ 下最小化一阶近似下降 $-\langle G, \Delta\rangle_F$,但把约束从 Frobenius 范数换成谱范数(信赖域的形状从球改成"谱球"):

$$ \Delta^* = \arg\min_{\|\Delta\|_2 \le r}\ -\langle G, \Delta\rangle_F \;=\; -r\, U V^\top, $$

其中 $G = U\Sigma V^\top$ 是 SVD。解是负的"正交因子" $-UV^\top$——即把 $G$ 的所有奇异值替换为 1 后的矩阵,也叫矩阵符号函数 $\mathrm{sign}(G)$(在矩阵意义下,正交因子正是 sign 函数在 SVD 谱上的逐值应用)。这就是 Muon 名字的出处:MomentUm Orthogonalized by Newton-schulz,动量矩阵的正交化。

和 Adam 的 $\varepsilon \to 0$ 符号极限(逐坐标 sign,Hadamard 意义)对比,Muon 是矩阵 sign(谱意义)。逐坐标 sign 会摧毁矩阵的列空间结构——同一列里两个坐标可能本来就该同涨同落,逐元素截断把它们独立化了;谱 sign 保留左右奇异向量、只重标奇异值,列间的相对几何不变。Moonshot(Kimi K2 技术报告)给出的解释也沿这条线:隐层权重矩阵的条件数直接影响信号前向传播的均衡性,正交化的更新让各奇异方向的改进速度一致,避免大奇异方向早已收敛、小奇异方向还在爬行的时间浪费。

同一动量矩阵 G 的两种归一:逐坐标 sign vs 谱正交化(奇异值重标示意) 输入:动量 G = UΣV⊤,奇异值 σ = {5.0, 1.2, 0.3, 0.05} Adam(逐坐标 sign) 每个元素独立取 ±1 列结构被破坏,列间不再正交 Muon(谱 sign):σ → {1, 1, 1, 1} 奇异向量 U、V 全部保留 更新半正交,条件数 = 1 谱范数信赖域:||Δ||₂ ≤ r,最优解 Δ* = −r·UV⊤ 谱范数约束下,一步改进量 ΔL ≈ r·tr(Σ) 在所有方向均分

Newton-Schulz:不用 SVD 的正交化

直接做 SVD 太贵($O(d^3)$ 且 GPU 上不好批),Muon 用 Newton-Schulz 迭代近似矩阵 sign 函数。迭代式是截断的级数展开,经典系数(Keller Jordan 版本,quintic):

$$ X_{k+1} = a X_k + b\,(X_k X_k^\top) X_k + c\,(X_k X_k^\top)^2 X_k, \qquad (a, b, c) = (3.4445,\ -4.7750,\ 2.0315), $$

每步只做 4 次矩阵乘(两次 $X_k X_k^\top$ 型乘积可复用),$5$ 次迭代共约 20 次矩阵乘,就把奇异值压到 $[1-\delta, 1+\delta]$ 附近。使用前先做归一化:$X_0 = G / \|G\|_F$(也有实现用 $\|G\|_2$ 估计),把谱半径压进迭代的收敛域。为什么 5 步就够:迭代对 $\sigma \in (0, 1]$ 按 $\sigma \mapsto \sigma(a + b\sigma^2 + c\sigma^4)$ 逐奇异值作用,该五次多项式在 $[0,1]$ 上有不动点 1 且在 $(0,1)$ 内把值快速推向 1——奇异值 0.1 一步就被拉到 0.9 以上。迭代不精确也无妨:残留的奇异值分布(≈1±0.1)对优化是良性的噪声。

一个实现细节常被忽视:$X X^\top$ 的维度选择。对 $m \times n$ 矩阵且 $m < n$,应迭代 $(X X^\top)$ 的 $m$ 维版本再乘回 $X^\top$,把平方开销从 $O(\max^3)$ 降到 $O(m^2 n)$;宽矩阵(FFN 上投影)反过来用 $X^\top X$。Muon 官方仓库的 zeropower_via_newtonschulz5 就是按短边选择的。

RMS 对齐:和 Adam 混搭的关键

正交化后的更新,其 RMS(每元素均方根)约为 $\sqrt{\max(m,n)}^{-1}$ 量级——比 Adam 的典型更新 RMS(约 $0.2\sim0.4$)小得多。直接共用一个学习率会隐层欠训,所以 Muon 惯例给更新乘一个缩放:

$$ \eta_{\text{eff}} = \eta \cdot 0.2 \cdot \sqrt{\max(m, n)} \;(\text{Kimi K2 报告}) \quad\text{或}\quad \sqrt{m+n}\ \text{(modded-nanogpt 早期)}. $$

不同系数在经验上都工作,但必须显式选定并与 embedding/头的 Adam 学习率解耦扫参——混用两种优化器的训练里,超参表上最要紧的一项就是这个比例。Kimi K2 的做法是 Muon 隐层 + Adam 头/embedding,并报告 Muon 让这代 1T 参数模型的训练相比 AdamW 方案显著更稳、超参敏感度更低。

边界与现状

Muon's 假设是"权重值得被当矩阵对待":二维线性层的几何确实最受益。对一维参数(bias、norm 增益)、embedding(行列语义不对称且更新极度稀疏)和输出头,正交化没有几何意义或反而有害——所以 Muon 的标准用法是混合栈。另外谱归一抹平了梯度幅度的信息,遇到 loss landscape 中有意利用幅度信号的场景(如梯度裁剪依赖全局范数统计)需要重新校准监控口径。截至目前的共识:在从零预训练里 Muon 已是强基线,微调场景的收益证据还薄——它的加速来自训练动态的整形,动态已经成熟的微调过程吃不回这份收益。