深度解读 📅 2026-10-08 ✍️ MagicNetWorld 编辑部

Kimi K2 的 MuonClip:把 Muon 的正交化更新与 QK-Clip 一步步推导清楚

Kimi K2 用一套叫 MuonClip 的优化器,在总量约 1.04 万亿参数(激活约 320 亿)的 MoE 上预训练了 15.5 万亿 token 且没有一次 loss 尖峰。本文把它的两半拆开推导:一半是 Muon —— 把 SGD-动量的更新矩阵正交化(取极分解的酉因子 U Vᵀ),让它在「谱范数下的最速下降」这个意义下成立,再用五次 Newton-Schulz 迭代在 bfloat16 里逼近它,最后乘上 0.2·sqrt(max(m,n)) 把条目更新 RMS 对齐到 AdamW 的约 0.2;另一半是 QK-Clip —— 因为纯 Muon 在一个 90 亿激活、530 亿总参数的 MoE 上会把最大注意力 logit 顶到 1000 以上,K2 改为每一步后按头把 Wq、Wk 缩放 γ_h=min(1, τ/S_max^h),阈值 τ=100。注意「万亿级参数」与「15.5 万亿 token」是两个不同量纲的口径,正文会逐处区分。

优化器Muon大模型训练数学推导

2024 年以来,训练大模型的优化器版图里多了一个新名字:Muon。就在所有人默认「大模型预训练 = AdamW」的这些年,Muon 一路从 NanoGPT 的小实验爬到万亿参数规模——迄今公开过的最有分量的证据,是 Moonshot AI 的 Kimi K2:一个总量约 1.04 万亿参数、每个 token 只激活约 320 亿参数的 MoE 模型,用一套叫 MuonClip 的优化器在 15.5 万亿 token 上完成了预训练,且报告声称没有出现一次 loss 尖峰(zero loss spike)(Kimi K2 技术报告,arXiv:2507.20534)。

这套优化器名字里的两个词泄露了它的全部秘密:Muon(MomentUm Orthogonalized by Newton-Schulz)+ Clip(QK-Clip)。前者是「把动量的更新矩阵正交化」这个算法本身,后者是 K2 为了在万亿规模上摁住一类特定故障而加的安全阀。本文不满足于说「K2 用了 Muon」,而是要把这两半都从第一性原理推一遍:Muon 为什么是「谱范数下的最速下降」?那个 Ortho(G)=UV⊤\mathrm{Ortho}(G)=UV^\top 是怎么出来的?五次 Newton-Schulz 迭代凭什么不需要 SVD?乘的那个 0.2max⁡(m,n)0.2\sqrt{\max(m,n)} 到底在匹配什么?以及——纯 Muon 在 K2 的规模上究竟撞了什么墙,QK-Clip 又是如何用一个逐头缩放因子把它摁下去的。

按惯例,凡是引用他人结论处一律标注出处(报告名 + 章节/公式);凡是本文自己算出来的数字,在文末「本文自行推导」一节单列,与官方数字分列。尤其要提醒的一点口径:K2 的「1.04 万亿」是参数量,「15.5 万亿」是训练 token 数,两者单位都带「万亿」但量纲完全不同,请勿混读。

一、直觉:AdamW 管坐标,Muon 管方向

在进入公式之前,先把两种优化器的直觉摆在一起。

AdamW 是**逐坐标(per-coordinate)**自适应的:它为权重矩阵的每一个元素各自维护一阶、二阶动量,更新量近似是 mt/vtm_t/\sqrt{v_t},在正则化掉历史信息后就是 sign(gt)\mathrm{sign}(g_t)——每个元素的步长彼此独立,且大小都被压到同一量级。换句话说,AdamW 关心的是「每个权重自己走多快」,它对矩阵整体的几何结构没有意见。

Muon 的想法完全不同:它只针对二维权重矩阵(隐藏层的线性变换),不再逐元素看,而是把整个更新矩阵当作一个对象,要求这个矩阵「走」的方向具有某种整体性质。它借用的几何是谱范数(也叫声范数、算子二范数,即矩阵最大的奇异值)。在谱范数这把尺子下,最速下降的那个更新恰好是把梯度矩阵正交化:保留它的奇异向量,把奇异值全部替换成 1。用一句话概括——

  • AdamW 让每个坐标的更新大小一致(等坐标);
  • Muon 让每个方向的更新幅度一致(等方向)。

前者是「坐标几何」,后者是「方向几何」。这两句话将在第四节被写成一个精确的优化问题。也正因为 Muon 只处理矩阵,它不用于 embedding 层、输出层和任何一维参数(如 RMSNorm 的缩放),这些仍交给 AdamW(Keller Jordan 的 Muon 实现文档;GLM-4.5 技术报告也明确「word embedding、bias、RMSNorm 权重除外」)。

如果只想先记住一句:AdamW 标准化「每个坐标的步长」,Muon 标准化「每个方向的步长」;前者是逐元素的,后者是逐矩阵的。而「方向」这个词的严格含义,正是下一节要建立的——把一个矩阵的更新「正交化」。

二、符号约定与术语表

后面所有推导都用这套记号,尽量与 Keller Jordan 的 Muon 文档和 Moonlight 报告保持一致。

记号含义说明
W∈Rm×nW\in\mathbb{R}^{m\times n}某个二维权重矩阵m=m= 输出维(fan-out),n=n= 输入维(fan-in),PyTorch 布局
GtG_t第 tt 步的梯度矩阵∇WL\nabla_W\mathcal{L}
MtM_t动量缓冲Mt=μMt−1+GtM_t=\mu M_{t-1}+G_t
μ\mu动量系数Muon 默认 0.95
η\eta学习率同一套 η\eta 也给 AdamW 的那组参数用
UΣV⊤U\Sigma V^\topGG 的奇异值分解(SVD)U,VU,V 列正交,Σ\Sigma 对角非负
σi\sigma_i奇异值Σ\Sigma 的对角元,降序排列
Ortho(G)\mathrm{Ortho}(G)正交化 / 极分解酉因子即 UV⊤UV^\top
∥⋅∥F\|\cdot\|_FFrobenius 范数所有元素平方和的平方根
∥⋅∥2\|\cdot\|_2谱范数最大奇异值 σmax⁡\sigma_{\max}
∥⋅∥∗\|\cdot\|_*核范数奇异值之和 tr Σ\mathrm{tr}\,\Sigma,是谱范数的对偶
RMS(A)\mathrm{RMS}(A)条目均方根1mn∑ijAij2=∥A∥F/mn\sqrt{\tfrac{1}{mn}\sum_{ij}A_{ij}^2}=\|A\|_F/\sqrt{mn}
(a,b,c)(a,b,c)Newton-Schulz 五次系数本文取 (3.4445,−4.7750,2.0315)(3.4445,-4.7750,2.0315)
XtX_tNewton-Schulz 迭代矩阵从归一化后的更新出发迭代
SijhS_{ij}^h第 hh 头、第 ii 与第 jj 个 token 的注意力 logitqih⋅kjhq_i^h\cdot k_j^h
Smax⁡hS_{\max}^h第 hh 头的最大 logitmax⁡i,jSijh\max_{i,j}S_{ij}^h
τ\tauQK-Clip 阈值K2 取 100
γh\gamma_hQK-Clip 逐头缩放因子min⁡(1,τ/Smax⁡h)\min(1,\tau/S_{\max}^h)
术语一句话解释
最速下降(steepest descent)在给定范数下、单位步长内让线性化损失下降最多的方向
极分解酉因子与矩阵「最接近」的半正交矩阵,arg⁡min⁡半正交∥O−G∥F\arg\min_{\text{半正交}}\|O-G\|_F
Newton-Schulz 迭代用奇次矩阵多项式反复逼近正交化的方法,可全程 bfloat16
RMS 匹配让 Muon 的条目更新 RMS 与 AdamW 一致,从而共用学习率
注意力 logitsoftmax 之前的注意力打分,即未归一化的 q⋅kq\cdot k 点积;本文的 SijhS_{ij}^h 即此
QK-Clip训练中按头缩放 Wq,WkW_q,W_k、把注意力 logit 压回阈值内的机制
MoE混合专家,每个 token 只激活部分专家的稀疏结构

三、Muon 的形式化:正交化的是动量

先把算法本身写清楚。给定一个二维权重 WW,Muon 的一步是:

Mt=μMt−1+Gt,M_t=\mu M_{t-1}+G_t, Wt+1=Wt−η Ortho(G~t),G~t=Gt+μMt,W_{t+1}=W_t-\eta\,\mathrm{Ortho}\big(\widetilde{G}_t\big),\qquad \widetilde{G}_t=G_t+\mu M_t,

其中 G~t\widetilde{G}_t 是标准的 Nesterov 混合(若不用 Nesterov 则直接取 MtM_t)——此后 G~t\widetilde{G}_t 与动量 MtM_t 是两个不同的量,勿混。注意函数 Ortho\mathrm{Ortho} 里的关键:被正交化的是动量(或 Nesterov 混合后的更新),不是原始梯度。这一点与历史上一些先正交化、再套动量的做法相反;Keller Jordan 明确说把动量放在正交化之前「经验上更好」(Muon 博客)。正交化的定义是

Ortho(G)=arg⁡min⁡O { ∥O−G∥F : O⊤O=I 或 OO⊤=I }.\mathrm{Ortho}(G)=\arg\min_{O}\ \big\{\,\|O-G\|_F\ :\ O^\top O=I\ \text{或}\ OO^\top=I\,\big\}.

下一条定理告诉我们:这个 arg⁡min⁡\arg\min 有闭式解,就是极分解的酉因子。

命题(极分解酉因子) 设 G=UΣV⊤G=U\Sigma V^\top 是(瘦)SVD,则

arg⁡min⁡O⊤O=I∥O−G∥F=UV⊤.\arg\min_{O^\top O=I}\|O-G\|_F=UV^\top.

证明要点:∥O−G∥F2=∥O∥F2−2⟨O,G⟩+∥G∥F2\|O-G\|_F^2=\|O\|_F^2-2\langle O,G\rangle+\|G\|_F^2,而半正交矩阵满足 ∥O∥F2=min⁡(m,n)\|O\|_F^2=\min(m,n) 为常数,故最小化距离等价于最大化 ⟨O,G⟩\langle O,G\rangle。把 G=∑iσiuivi⊤G=\sum_i\sigma_i u_i v_i^\top 代入,⟨O,G⟩=∑iσi ui⊤Ovi≤∑iσi\langle O,G\rangle=\sum_i\sigma_i\,u_i^\top O v_i\le\sum_i\sigma_i(因为对单位向量有 u⊤Ov≤1u^\top O v\le1),等号在 O=∑iuivi⊤=UV⊤O=\sum_i u_i v_i^\top=UV^\top 处取得。

于是 Muon 的一步可以等价地写成「把 Nesterov 更新替换成它最近的半正交矩阵,再按学习率下降」。但这里有个工程上的坎:精确算 UV⊤UV^\top 需要 SVD,代价过高。第五、六节分别解决「怎么便宜地算出正交化」与「算完之后乘什么尺度」。

四、为什么是正交化:谱范数下的最速下降

第三步留下的问题是:凭什么用 Ortho\mathrm{Ortho} 而不是别的?答案来自一个把优化器放回「范数几何」的统一视角(Bernstein & Newhouse, Old Optimizer, New Norm: An Anthology, arXiv:2409.20325)。

考虑线性化的损失:

L(W+ΔW)≈L(W)+⟨G,ΔW⟩.\mathcal{L}(W+\Delta W)\approx \mathcal{L}(W)+\langle G,\Delta W\rangle .

「最速下降」被定义为一个带约束的线性规划:在单位范数球内,选 ΔW\Delta W 让 ⟨G,ΔW⟩\langle G,\Delta W\rangle 下降最多:

ΔW⋆=arg⁡min⁡∥ΔW∥≤η ⟨G,ΔW⟩.\Delta W^\star=\arg\min_{\|\Delta W\|\le\eta}\ \langle G,\Delta W\rangle .

关键就在这个范数 ∥⋅∥\|\cdot\| 上——换个范数,解就换个方向。下面把四种常见的范数摆在一起:

范数含义最速下降解 ΔW⋆\Delta W^\star
Frobenius ∥W∥F\|W\|_F元素平方和−η G/∥G∥F-\eta\,G/\|G\|_F
谱范数 ∥W∥2\|W\|_2最大奇异值−η UV⊤-\eta\,UV^\top
RMS→RMS 算子范数输入输出 RMS 之比−ηfan-out/fan-in  UV⊤-\eta\sqrt{\text{fan-out}/\text{fan-in}}\;UV^\top
无穷范数(向量 ℓ∞\ell_\infty)最大元素−η sign(G)-\eta\,\mathrm{sign}(G)

先看谱范数这一行为什么解是 UV⊤UV^\top。给定 GG,我们要在 ∥ΔW∥2≤η\|\Delta W\|_2\le\eta 的球上让 ⟨G,ΔW⟩\langle G,\Delta W\rangle 最小。谱范数的对偶范数是核范数,而对偶范数的定义恰好给出

∥G∥∗:=max⁡∥T∥2≤1⟨G,T⟩=tr Σ,\|G\|_*:=\max_{\|T\|_2\le1}\langle G,T\rangle=\mathrm{tr}\,\Sigma,

且这个最大值在 T=UV⊤T=UV^\top 处取得(此时 ⟨G,UV⊤⟩=tr(VΣU⊤UV⊤)=tr Σ\langle G,UV^\top\rangle=\mathrm{tr}(V\Sigma U^\top UV^\top)=\mathrm{tr}\,\Sigma)。于是

ΔW⋆=−η UV⊤.\Delta W^\star=-\eta\,UV^\top .

用大白话说:在谱范数这把尺子下,最速下降会把梯度的所有非零奇异值统统换成 1,只留下奇异向量。它不再关心某些方向梯度的「大小」差异,而是强制所有方向以相同幅度前进——这就是第一节那句「等方向」的精确含义。顺带一个漂亮的旁证:Shampoo 优化器在关掉累加后写出的更新 (GG⊤)−1/4G(G⊤G)−1/4(GG^\top)^{-1/4}G(G^\top G)^{-1/4} 化简之后也正好等于 UV⊤UV^\top(同一份 Anthology,Story II);也就是说 Muon 与 Shampoo 在这一点上殊途同归,区别只在「怎么便宜地算出这个酉因子」。

为了让推导可核,本文在「本文自行推导」一节对核范数恒等式做了一次完整复算(D1)。

「等方向」还有一个常被忽略的好处:它让学习率能跨宽度迁移。Bernstein 在推导 Muon 时指出,若把更新按 RMS→RMS 算子范数缩放(对应乘 fan-out/fan-in\sqrt{\text{fan-out}/\text{fan-in}}),则当层加宽、宽度放大若干倍时,同一学习率仍然合适——这一性质来自他与 Yang、Simon 关于「特征学习谱条件」的工作(Deriving Muon)。这正是第四、六节那两套尺度约定可能同时存在的根源:一套从「学率可迁移」出发,一套从「与 AdamW 共享超参」出发,两者在某些形状上数值接近、但在层级缩小时会分道扬镳。

4.1 顺带一提:AdamW 的「等坐标」同样是某种范数下的最速下降

同一份 Anthology 的第一篇故事(Story I)给出了 AdamW 的对应解释:把 Adam 的指数滑动平均关掉(β1=β2=0\beta_1=\beta_2=0)后,更新退化为符号下降

wt+1=wt−η sign(gt),w_{t+1}=w_t-\eta\,\mathrm{sign}(g_t),

而符号下降正是无穷范数(ℓ∞\ell_\infty)下的最速下降——因为 max⁡∥t∥∞≤1g⊤t=g⊤sign(g)=∥g∥1\max_{\|t\|_\infty\le1}g^\top t=g^\top\mathrm{sign}(g)=\|g\|_1。注意这里的「无穷范数」是把权重矩阵拍平成一个长向量之后取的:它约束的是「单次更新里最大的那个元素」,因此每个坐标分到的步长上限都相同。

这就把第一节的直觉写实了:

  • AdamW 走的是 ℓ∞\ell_\infty(更精确地说,是「max-of-max」诱导范数),约束最大元素,等效于「等坐标」;
  • Muon 走谱范数,约束最大方向,等效于「等方向」。

两者都是最速下降,差别只在选哪把尺子。Muon 的「新」不在于发明了更新方向,而在于第一次认真地给二维权重矩阵选了一把矩阵范数,而不是沿用元素级的几何。

五、Newton-Schulz:不靠 SVD 拿到 UV⊤UV^\top

正交化虽好,但每步对每个权重做一次 SVD 太贵。Muon 的取巧之处,是注意到奇次矩阵多项式与 SVD 可交换:若

p(X)=aX+b XX⊤X+c (XX⊤)2X+⋯ ,p(X)=aX+b\,XX^\top X+c\,(XX^\top)^2X+\cdots,

则对 X=UΣV⊤X=U\Sigma V^\top 有

p(X)=U p(Σ) V⊤,p(σ)=aσ+bσ3+cσ5+⋯p(X)=U\,p(\Sigma)\,V^\top,\qquad p(\sigma)=a\sigma+b\sigma^3+c\sigma^5+\cdots

证明很短:把 X=UΣV⊤X=U\Sigma V^\top 代入,XX⊤=UΣ2U⊤XX^\top=U\Sigma^2U^\top,于是每一项都变成 U(关于Σ的多项式)V⊤U(\text{关于}\Sigma\text{的多项式})V^\top。这条性质意味着我们可以只对奇异值做标量运算,却从不动奇异向量——于是「把奇异值压成 1」这件事,就变成了「找一个奇多项式,反复迭代后能把 (0,1](0,1] 内的标量映射到 1」。

下面的图说明了这条流水线:整个正交化被降维成「迭代一个标量多项式」。

flowchart TD
    A["输入更新矩阵 X"] --> B["SVD 分解 X = U Sigma V^T"]
    B --> C["奇次多项式 p 与 SVD 交换"]
    C --> D["p(X) = U 乘 p(Sigma) 乘 V^T"]
    D --> E["只需把标量多项式迭代到 1"]
    E --> F["迭代 N 次后 Sigma 的谱逼近全 1"]
    F --> G["输出近似酉因子 U V^T"]

这张图说明了什么:真正难的部分(找到正交化的奇异向量)被完全避开——多项式迭代只作用在奇异值这一维标量上,所有矩阵乘法都在原空间里完成,因此可以全程跑在 bfloat16 上。这也解释了为什么 Muon 的更新能高效地在 GPU 上算出来。

具体怎么做?Newton-Schulz 用的是一个五次迭代,每次

Xt+1=aXt+b XtXt⊤Xt+c (XtXt⊤)2Xt,X_{t+1}=aX_t+b\,X_tX_t^\top X_t+c\,(X_tX_t^\top)^2X_t,

在奇异值上等价于 σ←aσ+bσ3+cσ5\sigma\leftarrow a\sigma+b\sigma^3+c\sigma^5。若想让它收敛到 1,只需把初始矩阵按范数归一化,让所有奇异值落在 [0,1][0,1] 内:

X0=G/∥G∥F.X_0=G/\|G\|_F .

Muon 采用的系数是 (a,b,c)=(3.4445, −4.7750, 2.0315)(a,b,c)=(3.4445,\,-4.7750,\,2.0315)。这里有一个反直觉的细节值得点出:这三个系数并不满足 p(1)=1p(1)=1(实际上 3.4445−4.7750+2.0315=0.7013.4445-4.7750+2.0315=0.701),也就是说单步映射在 11 处会「回落」。作者选择的是一种「陡上加陡」的策略——把零点处的斜率(3.4445)推得尽可能大,哪怕牺牲「处处收敛到 1」的严格性。Keller Jordan 自己写得很直白:这个迭代产出的并不是精确的 UV⊤UV^\top,而是形如 US′V⊤US'V^\top 的东西,其中 Sii′S'_{ii} 大致在 (0.5,1.5)(0.5,1.5) 之间均匀分布,而这对模型效果并无损害(Muon 博客 / 实现注释)。换言之,第四节的「等方向」在这里被近似地执行,而不是精确执行——这是一个工程折中,不是理论漏洞。

5.1 迭代为什么会收敛

要保证 Xt→UV⊤X_t\to UV^\top,等价于要求标量序列 σt+1=p(σt)\sigma_{t+1}=p(\sigma_t) 把所有奇异值都推向 1。最朴素的版本是 1970 年的三次迭代

σ←32σ−12σ3,\sigma\leftarrow \tfrac{3}{2}\sigma-\tfrac{1}{2}\sigma^3,

它要求初始奇异值满足 σ<3\sigma<\sqrt{3} 才会收敛(这是经典的 Newton-Schulz 收敛条件,见 Anthology 附录)。Muon 用五次多项式把「收敛盆地」与「收敛速度」重新做了权衡:更高的零点斜率意味着更少的迭代次数就能把谱压到 1 附近,代价是收敛的严格性被放弃。这正是「5 步足够、且允许 bfloat16」背后的原因——它换来的不是精确的 UV⊤UV^\top,而是一个统计意义上足够正交的更新。

5.2 为什么必须是 bfloat16 也跑得动

这里还有一层工程上的讲究。要做正交化,除了 Newton-Schulz,更「正统」的路线是直接对更新矩阵做 SVD,或用迭代法求逆四次根(后者对应关掉累加后的 Shampoo,其更新同样等于 UV⊤UV^\top,见第四节的旁注)。但 Keller Jordan 明确记下了取舍:这类方法在低精度下不稳定,而 Newton-Schulz 迭代可以在 bfloat16 里稳定运行,因此被选为正交化的首选方案(Muon 博客)。

原因不难理解:Newton-Schulz 的每一步都只是矩阵乘法(XX⊤XX^\top、(XX⊤)2(XX^\top)^2 与几次线性组合),没有特征分解那类对条件数敏感的操作,误差在 bf16 下是可控的;而 SVD 的迭代求解在 bf16 下容易发散。所以「用多项式迭代而不是 SVD」这个选择,一半是为了省算力,另一半是为了在低精度张量核上也能跑——后者在万亿参数规模上同样关键,因为全 fp32 的优化器状态会显著抬高显存与通信开销。

六、尺度匹配:为什么乘 0.2max⁡(m,n)0.2\sqrt{\max(m,n)}

正交化算出来了,还剩最后一个问题:它该乘多大的系数。这一步常常被略过,但它恰恰是 Muon 能「开箱即用」的关键,也是 Moonlight 报告自认的两大贡献之一(另一项是权重衰减)。

先把事实算清楚。设权重矩阵形状为 m×nm\times n,则 UV⊤UV^\top 有 r=min⁡(m,n)r=\min(m,n) 个非零奇异值、且都等于 1,于是

∥UV⊤∥F2=tr(VU⊤UV⊤)=tr(VV⊤)=r=min⁡(m,n),\|UV^\top\|_F^2=\mathrm{tr}\big(VU^\top UV^\top\big)=\mathrm{tr}(VV^\top)=r=\min(m,n),

代入 RMS 定义:

RMS(UV⊤)=min⁡(m,n)mn=1max⁡(m,n).\mathrm{RMS}(UV^\top)=\frac{\sqrt{\min(m,n)}}{\sqrt{mn}}=\frac{1}{\sqrt{\max(m,n)}} .

这个式子说明了一个麻烦:正交化更新的条目 RMS 会随矩阵变宽而变小。对一个宽大的 MLP 层乘同一个学习率,实际更新幅度就偏小;对一个小矩阵(比如某个注意力头),更新幅度又偏大。Moonlight 报告把这称为「更新幅度不一致」,并给出修法:每个更新再乘一个 max⁡(m,n)\sqrt{\max(m,n)},正好抵消上式里的那一项。再进一步,把整体条目 RMS 对齐到 AdamW 的典型区间,Moonlight 选定的目标是 0.2(报告给 AdamW 更新 RMS 的典型范围是 0.2–0.4),于是最终系数是

scale=0.2max⁡(m,n),RMS(ΔW)=0.2 η.\text{scale}=0.2\sqrt{\max(m,n)},\qquad \mathrm{RMS}(\Delta W)=0.2\,\eta .

这一步的意义要说清楚:它把 Muon 的更新「校准」到与 AdamW 同尺度的记号里,从而可以让 Muon 那一组参数与 AdamW 那一组参数共用同一个 η\eta——不必为 Muon 单独调一套学习率。这就是「开箱即用(out-of-the-box)」的确切含义。

值得注意的是,这里存在两种不同的尺度约定,不要混用:

  • Bernstein 约定:乘 fan-out/fan-in\sqrt{\text{fan-out}/\text{fan-in}},它保持的是「RMS→RMS 位移 = η\eta」,好处是跨宽度可迁移学习率;
  • Moonlight/K2 约定:乘 0.2max⁡(m,n)0.2\sqrt{\max(m,n)},它保持的是单条目 RMS≈0.2,好处是与 AdamW 共用超参。

Keller Jordan 最早的实现用的是前一种思路的一个变体(0.02max⁡(1,m/n)0.02\sqrt{\max(1,m/n)}),Moonlight 换成了后者。两者不是对错之分,而是「对齐什么」的不同取舍——这一点在工程选型时会直接决定你抄谁的超参。

6.1 把数字代进去

举个具体形状:设某权重为 m×n=4096×1024m\times n=4096\times1024。裸 UV⊤UV^\top 的条目 RMS 是 1/max⁡(m,n)=1/4096=1/64≈0.01561/\sqrt{\max(m,n)}=1/\sqrt{4096}=1/64\approx0.0156——比 AdamW 的约 0.2 小了十几倍,若共用一个 η\eta,这一层的有效步长会被严重饿死。乘上系数后:

0.2max⁡(m,n)=0.2×64=12.8,12.8×0.0156≈0.2.0.2\sqrt{\max(m,n)}=0.2\times64=12.8,\qquad 12.8\times0.0156\approx0.2 .

反过来若矩阵是 64×6464\times64 的注意力头投影,max⁡(m,n)=8\sqrt{\max(m,n)}=8、系数 1.61.6、裸 RMS 为 1/8=0.1251/8=0.125,两者相乘同样落回约 0.2。这就是「一个 η\eta 走遍所有形状」的来源:系数随形状以 max⁡(m,n)\sqrt{\max(m,n)} 伸缩,恰好抵消裸正交化 RMS 随宽度收缩的那一项,使每个矩阵的条目更新幅度都被钉在同一尺度上。(以上为本文按公式代入的算术校核,见文末 D2。)

七、从 Muon 到 MuonClip:K2 撞上的 logit 爆炸

算法到这里已经完整。但把它端到万亿参数规模,Moonshot 撞上了一堵具体的墙。

先说 K2 的体量,把口径摆清楚:总参数量约 1.04 万亿、每个 token 激活约 320 亿,MoE 用了 384 个专家(每 token 选 8 个 + 1 个共享专家),注意力机制是 MLA(多头潜在注意力),隐层维度 7168、专家隐层 2048、64 个注意力头、词表 16 万、上下文 12.8 万,共 61 层(1 层稠密);预训练量是 15.5 万亿 token(Kimi K2 技术报告与官方仓库)。

Moonshot 选择 Muon 的理由是它更好的 token 效率。这里要把「约 2 倍计算效率」的口径讲清楚:Moonlight 报告的原文口径是「在 compute-optimal 训练下约 2 倍于 AdamW 的计算效率」,其准确含义是——在同一条缩放律曲线上、按 compute-optimal 的最优数据量配比,Muon 达到与 AdamW 相同损失所需的算力约为后者的一半(Moonlight 报告)。这是一个仅在 compute-optimal 配比下成立的等效算力结论,不能外推成「任何情况下训练量都砍半」。但报告同时记下一个现象:在 Muon 下,注意力 logit 爆炸(exploding attention logits)比在 AdamW 下更频繁,这带来了 loss 尖峰乃至训练发散的风险。报告用一个中型实验把问题量化得清清楚楚:在一个 90 亿激活、530 亿总参数 的 MoE 上跑原版 Muon,最大注意力 logit 会迅速冲到 1000 以上;而在 K2 主训练里,这个数被 QK-Clip 稳稳压住。

已有的工具都救不了场:报告评估了 **logit 软截断(soft-capping)**与 Query-Key 归一化(QK-Norm),发现它们「不够用」;更麻烦的是 QK-Norm 对 MLA 根本不适用——因为 MLA 的 Key 矩阵在推理时并非完整物化,没有可归一化的显式 KK。这解释了为什么 Moonshot 必须另起炉灶。

这里要强调一点对口:logit 的「1000 以上」与阈值「100」是两个不同实验、指称不同运行的数字——前者是「原版 Muon 在 9B/53B 中型实验里会涨到的量级」,后者是「K2 主训练为 QK-Clip 设定的目标上限」。两者同为 logit 量纲,但不要当成同一次训练里的前后对比。

7.1 为什么已有的两种方案都不够用

报告里有一句很关键的判断:logit 软截断与 QK-Norm「被发现不足以解决问题」。把三者摆在一起,差异一目了然:

方案作用于什么是否改动当步前向对 MLA 是否可用
logit 软截断(soft-capping)注意力 logit 的数值是(改变 logit 本身)可用但不充分
QK-Norm归一化后的 q、k 向量是不可用(K 未完整物化)
QK-Clip更新后的 Wq、Wk 权重否(事后缩放)可用(仅裁未共享分量)

三者最本质的区别在第三列:soft-capping 与 QK-Norm 都直接介入当步的前向计算,而 QK-Clip 是事后对权重做缩放——报告强调它「不改变当前步的前向/反向」(第八节会展开),这使它可以限制权重的长期增长而不干扰梯度流。而对 MLA 来说,QK-Norm 直接出局,这正是「已有方案不够用」的核心原因。⚠️ 上表第四列的「可用 / 不可用」是报告结论;第一、二列的机制描述为本文按各方案定义所作的归纳;第三列 QK-Clip 一格(否,事后缩放)的结论亦来自报告。全表仅用于对比。

八、QK-Clip:按头把 WqW_q、WkW_k 缩回去

MuonClip 的第二半,就是这个新炉灶。它做的事一句话可概括:每一步参数更新之后,检查每一头的最大注意力 logit,若超过阈值 τ\tau,就把这一头的 WqW_q、WkW_k 成比例缩小。

定义第 hh 头、在训练样本 X\mathbf{X} 上的注意力 logit 为

Sijh=qih⋅kjh=(xiWqh)(xjWkh)⊤  (为简洁略去报告中的 1/d 常数因子,不影响结论),S_{ij}^h=q_i^h\cdot k_j^h=(x_iW_q^h)(x_jW_k^h)^\top\ \ (\text{为简洁略去报告中的 }1/\sqrt{d}\text{ 常数因子,不影响结论}),

取该头在样本上的最大值 Smax⁡h=max⁡i,jSijhS_{\max}^h=\max_{i,j}S_{ij}^h,并定义逐头缩放因子

γh=min⁡ ⁣(1, τSmax⁡h)∈(0,1].\gamma_h=\min\!\Big(1,\ \frac{\tau}{S_{\max}^h}\Big)\in(0,1].

当 Smax⁡h≤τS_{\max}^h\le\tau 时 γh=1\gamma_h=1(不动);一旦超过阈值,γh<1\gamma_h<1 把最大 logit 拉回 τ\tau。缩放怎么施加在权重上?把因子在 WqW_q 与 WkW_k 之间拆开:

Wqh←γhα Wqh,Wkh←γh1−α Wkh,W_q^h\leftarrow \gamma_h^{\alpha}\,W_q^h,\qquad W_k^h\leftarrow \gamma_h^{1-\alpha}\,W_k^h,

其中 α\alpha 是平衡超参。代回 logit 立刻得到「logit 整体乘 γh\gamma_h」:

(γhαqih)⋅(γh1−αkjh)=γhα+1−α qih⋅kjh=γh (qih⋅kjh).(\gamma_h^{\alpha}q_i^h)\cdot(\gamma_h^{1-\alpha}k_j^h)=\gamma_h^{\alpha+1-\alpha}\,q_i^h\cdot k_j^h=\gamma_h\,(q_i^h\cdot k_j^h).

当取 α=12\alpha=\tfrac12 时,qq 与 kk 各缩 γh\sqrt{\gamma_h}。下面的图给出了这条闭环:注意它只读最大 logit 作为信号,并不改写当前步的前向/反向。

flowchart LR
    A["W_q, W_k 经 Muon 更新后"] --> B["算出每头最大 logit S_max"]
    B --> C{"S_max 是否超过 tau"}
    C -->|"超过"| D["gamma = tau / S_max"]
    C -->|"未超过"| E["gamma = 1"]
    D --> F["按头缩放 W_q, W_k"]
    E --> F
    F --> G["进入下一步训练"]
    G --> A

这张图说明了什么:QK-Clip 是一个事后(post-update)的反馈控制——它把「最大 logit」当成一个可观测的被控量,把 Wq,WkW_q,W_k 的缩放当成执行器,目标是把被控量钉在阈值附近。报告特别强调,这个操作不改变当前步的前向与反向计算,最大 logit 只是一个「引导信号」,用来决定权重增长的强度(arXiv:2507.20534)。

三个设计细节值得记牢:

  1. 逐头、而非逐层或全局。 报告观察到,实践中只有一小部分头会出现 logit 爆炸;如果对所有头一刀切地缩放,会无谓地干预正常头。因此 K2 采用逐头因子 γh\gamma_h,把干预面缩到最小。
  2. MLA 上只裁剪「非共享」部分。 对 MLA,报告只在未共享的注意力头分量上做裁剪(每个头各自的 qq 上投影与从潜向量到 kk 的上投影),而不动被各头共享的潜空间下投影。原因和第六节 QK-Norm 失效同源——MLA 的共享潜向量一旦被逐头缩放,就破坏了它「共享」的语义。
  3. 阈值 τ=100\tau=100。 K2 全训练用 τ=100\tau=100,并全程监控最大 logit:训练早期 logit 一直贴着上限 100(说明早期裁剪持续在生效——报告附录给出前 70000 步有约 12.7% 的头至少触发过一次),直到约 训练进度的 30% 之后才衰减回稳定区间(报告 Figure 2 右与附录)。

最终结果是报告最关键的一句:K2 用 MuonClip 在 15.5 万亿 token 上预训练,零 loss 尖峰,且下游任务表现不受损。

8.1 一个可手算的例子

为了把 QK-Clip 的量感做实,取一组虚构但自洽的数:设某头 Smax⁡h=250S_{\max}^h=250、阈值 τ=100\tau=100。则

γh=min⁡ ⁣(1, 100250)=0.4,α=12 ⇒ Wqh←0.4 Wqh,Wkh←0.4 Wkh.\gamma_h=\min\!\Big(1,\ \tfrac{100}{250}\Big)=0.4,\qquad \alpha=\tfrac12\ \Rightarrow\ W_q^h\leftarrow\sqrt{0.4}\,W_q^h,\quad W_k^h\leftarrow\sqrt{0.4}\,W_k^h .

因为 0.4≈0.632\sqrt{0.4}\approx0.632,两边各缩约 36.8%,logit 整体乘 γh=0.4\gamma_h=0.4,最大 logit 由 250 精确回落到

γh⋅Smax⁡h=0.4×250=100=τ.\gamma_h\cdot S_{\max}^h=0.4\times250=100=\tau .

也就是说,超阈值的部分被「按比例」抹平,而不是被强行截断——这正是「clip」一词在这里的准确含义:它不是把 logit 一刀切到 100,而是把这个头的权重整体缩小、使新 logit 恰好落在 100 附近。若某头本来就没超阈值(Smax⁡h≤τS_{\max}^h\le\tau),γh=1\gamma_h=1,权重原封不动,干预面因此被压到最小。(该例为本文自造,仅用于说明机制,见文末 D5。)

九、工程含义与横向对照

把 Muon 家族摆成一张对照表,能看出这条路线在过去一年多里(从 2024 年末 Keller Jordan 的原始实现,到 2025 年的 Moonlight / K2 / GLM-4.5,再到 2026 年初的 GLM-5)是如何被一次次校准的:

工作参数规模(总/激活)训练量优化器更新尺度约定稳定化手段
AdamW(基线)通用通用Adam + 解耦权重衰减条目 RMS ≈ 0.2–0.4无需特设
Muon(原版)小规模实验NanoGPT 等SGD-动量 + Newton-Schulz0.02max⁡(1,m/n)0.02\sqrt{\max(1,m/n)}无
Moonlight160 亿 / 30 亿5.7 万亿 tokenMuon0.2max⁡(m,n)0.2\sqrt{\max(m,n)}权重衰减 + RMS 匹配
Kimi K21.04 万亿 / 320 亿15.5 万亿 tokenMuonClipRMS 匹配(0.2 约定)上述 + QK-Clip(τ=100\tau=100)
GLM-4.53550 亿 / 320 亿23 万亿 tokenMuon条目 RMS 0.2、N=5N=5、μ=0.95\mu=0.95权重衰减 + QK-Norm(GQA 架构)

数据来源:Moonlight 报告(arXiv:2502.16982)与官方仓库、Kimi K2 技术报告(arXiv:2507.20534)、GLM-4.5 技术报告(arXiv:2508.06471)、Keller Jordan 的 Muon 文档与实现。⚠️ 表中「参数规模」列是参数量、「训练量」列是 token 数,两者量纲不同;「更新尺度约定」指的是单条目 RMS 的对齐目标,不是参数量。⚠️ 另注意两个视觉近似但语义不同的常数:Keller 原版用的是 0.02(乘 max⁡(1,m/n)\sqrt{\max(1,m/n)} 的学习率尺度),而 Moonlight / K2 / GLM 用的是 0.2(条目 RMS 目标),二者不可互相代入。GLM-5 未入表,因为它的贡献(Muon Split)是「逐头更新尺度」而非「与 AdamW 对齐的 RMS 约定」,本文放在正文 §9 讨论。

这张表里藏着两条工程判断:

第一,尺度约定可以跨实验室迁移,但稳定化手段各有各的招。 Moonlight 与 K2 同出 Moonshot,从 5.7 万亿一路放大到 15.5 万亿 token,尺度约定(0.2 条目 RMS)一脉相承;而独立实验室 GLM-4.5 也独立地选了同样的 0.2——这是一个值得注意的收敛证据:不同团队在没有共享作者的情况下对「Muon 条目 RMS 该对齐到多少」给出了同一答案。

第二,MLA + Muon 的「逐头」需求,被两个实验室从不同方向各自撞到。 K2 用 QK-Clip 逐头缩放 Wq,WkW_q,W_k;GLM-5 技术报告(arXiv:2602.15763)则记录了另一条相关经验:在其实验中,采用 Muon 时 MLA 的表现一度不如 GQA,于是他们提出 Muon Split——让不同注意力头的投影权重以不同尺度更新,从而把 MLA 的表现拉回与 GQA 相当。两家的具体机制不同(一个动 logit、一个动更新尺度),但都指向同一个事实:把「逐头差异」纳入优化器设计,是 MLA 配 Muon 时绕不开的一环。

9.1「token 效率」为什么值得反复强调

把这张表里各家的「更新尺度约定」并列看,会引出一个问题:为什么大家愿意花这么大力气去校准一个优化器?答案藏在那句「约 2 倍计算效率」里。预训练的成本在很大程度上由总训练量决定(token 数 × 每 token 算力),优化器若能让「同样的损失用更少的算力达到」,就等于把训练预算砍掉一大块。这也解释了为什么 K2 宁愿在 15.5 万亿 token 的规模上额外引入一个逐头裁剪机制来保住 Muon 的稳定性——代价是一层额外的工程复杂度,收益是可以沿用 Muon 那条更省算力的缩放曲线。

对自研训练的团队来说,这个权衡是否划算取决于规模:在几十亿参数的实验里,AdamW 的成熟度往往更省心;而到了 K2 这个量级,算力预算的绝对值足够大,约 2 倍效率的诱惑就压过了引入新机制的复杂度。这也提示了一条审慎的经验——Muon 的收益与「规模」强相关,小规模上看到的相对优劣未必能外推到万亿参数。

在更靠前沿的方向上,正交化本身也还在被优化:Tri Dao 的博客提出 Gram Newton-Schulz,通过换用 Gram 矩阵形式来降低正交化步骤的墙钟开销(称该步骤运行时下降约 40%–50%,见其 2026 年博文)。也就是说,Muon 这条线目前仍是活跃的工程研究领域,而不是一个定型方案。

对做工程的人还有一条直接可用的推论:Muon 与 AdamW 是可以混用的。因为 0.2 的条目 RMS 匹配把两者校准到同一尺度,你完全可以在同一套超参下,把隐藏层的二维矩阵交给 Muon、把 embedding / 输出层 / 一维参数交给 AdamW——这正是 K2、Moonlight、GLM-4.5 三者共同采用的分工。这也是「换优化器」在当前最现实的落点:不必推倒重来,只需替换注意力与 MLP 里那些矩阵参数。

十、边界、未解与小结

按惯例,把这篇能证明的、不能证明的与仍未解决的问题逐条列清楚。

  1. 命名边界:MuonClip 是「Muon + 权重衰减 + RMS 匹配 + QK-Clip」的组合体(报告原文),不是单一新算法。把它当成「Muon 的替代品」会读错——它是 Muon 的加固版。
  2. QK-Clip 不改变当前步的前向/反向,只是一个事后缩放(报告明确)。因此它不能防止某一步内因 logit 已经过大而产生的数值问题,只能在后续步把权重增长压回去;它管的是「跨步的漂移」,不是「单步的爆炸」。
  3. τ=100\tau=100 是经验阈值,不是推导结果。 报告未给出该阈值的选取准则,只报告了「早期只有少数头反复触发(附录:前 70000 步约 12.7% 的头至少触发过一次)、约 30% 进度后回落」的观测。换模型、换数据后是否仍取 100,需要重新标定。
  4. 「零 loss 尖峰」是报告的自述口径,本刊未独立复现,也不掌握其内部 loss 曲线原始数据。它精确的含义是「未记录到 loss spike 事件」,不等于「训练全程无任何数值波动」。
  5. 本文的数学推导只作量级与逻辑一致性检查(第四节对核范数恒等式、第六节对 UV⊤UV^\top 的 RMS 都做了复算),τ\tau、0.2 这些具体取值均来自报告原文,本文未也难以独立复现其训练实验。
  6. 尺度约定的两套记法容易混用(fan-out/fan-in\sqrt{\text{fan-out}/\text{fan-in}} 与 0.2max⁡(m,n)0.2\sqrt{\max(m,n)})。它们不可互换:前者对齐「RMS→RMS 位移」,后者对齐「单条目 RMS」。抄超参前务必先确认对方用的是哪一套。
  7. K2 与 GLM-4.5 的数字口径不可直接并置:前者 1.04 万亿参数 / 15.5 万亿 token,后者 3550 亿参数 / 23 万亿 token——参数量与 token 数是两条轴,把「谁训练得更久」与「谁更大」混在一句话里会得出错误结论。
  8. 一个仅作直觉的机制猜想(非报告结论、本文推测):注意力 logit 是 q⋅kq\cdot k 的内积,而 Muon 的正交化更新把每个方向的更新幅度拉平(第四节),这可能让某些方向上逐步累积的 logit 更少被「差异化压制」;Muon 比 AdamW 更频繁地出现 logit 爆炸,或许与此有关。报告本身没有给出根因分析,此猜测仅用于帮读者建立直觉,不作为事实陈述;真正的根因仍是开放问题。
  9. α\alpha 的取值、MoE 与逐头裁剪的耦合尚无公开数据。 报告给出了 α\alpha 这一平衡因子,但未展开它对 q/kq/k 分配的影响;K2 每 token 选 8 个专家,注意力与专家路由都会随训练漂移,QK-Clip 只作用于注意力侧,对专家侧稳定性的间接影响报告未涉及。
  10. 所有规模与阈值都必须带着「哪个模型、哪次实验」一起读。 「1000 以上」来自 9B/53B 的中型实验,「100」来自 K2 的设定;把它们并列却不标出处,是这类文章最常见的误读源。
  11. 本文未做任何训练实验。 全文的推导是纸面复算与一手报告的重述;MuonClip 在具体硬件上的实际加速、以及 QK-Clip 触发频率的量化曲线,都需要读者在自有负载上验证。

小结:Muon 与 MuonClip 其实可以各用一句干净的话记住。Muon 是「谱范数下的最速下降」——在谱范数这把尺子下,最优更新就是把动量的奇异值全部压成 1(即正交化 UV⊤UV^\top),再用 Newton-Schulz 以廉价、可 bfloat16 的方式逼近它,最后乘 0.2max⁡(m,n)0.2\sqrt{\max(m,n)} 把条目 RMS 对齐到 AdamW 的尺度、从而共享学习率。MuonClip 则是「给 Muon 装了一个逐头的 feedback 控制器」——因为纯 Muon 会在 9B/53B 的中型实验里把最大注意力 logit 推到 1000 量级,K2 改为每步按头缩放 Wq,WkW_q,W_k,γh=min⁡(1,τ/Smax⁡h)\gamma_h=\min(1,\tau/S_{\max}^h)、τ=100\tau=100,在 15.5 万亿 token 上换来零 loss 尖峰。把「等方向」和「控 logit」这两件事分开看,比记住「K2 用了新优化器」这个结论有用得多。

📋 来源与核验记录

一手论文与官方材料(均于 2026-10-08 实访对应官方/arXiv 页面;论文版本以各自 arXiv 页 Submission history 为准):

  1. Kimi Team(Moonshot AI),Kimi K2: Open Agentic Intelligence,arXiv:2507.20534,v1 2025-07-28。含摘要、MuonClip / QK-Clip 小节(γh=min⁡(1,τ/Smax⁡h)\gamma_h=\min(1,\tau/S_{\max}^h)、τ=100\tau=100、MLA 仅裁剪未共享分量、α\alpha 平衡因子)、K2 架构表(1.04 万亿总 / 320 亿激活、384 专家、64 头、MLA)、9B 激活/53B 总参数的中型实验(原版 Muon 最大 logit > 1000)、Figure 2(logit 被钉在 100、约 30% 进度后回落)、15.5 万亿 token 零 loss 尖峰;其 Algorithm 1(MuonClip)第 5 行逐字给出 Ot=NewtonSchulz(Mt)⋅max⁡(n,m)⋅0.2O_t=\mathrm{NewtonSchulz}(M_t)\cdot\sqrt{\max(n,m)}\cdot0.2 并注「Match Adam RMS」,即 K2 报告本身即印出了 0.2 这一常数;附录记「前 70000 步有约 12.7% 的注意力头至少触发过一次 QK-Clip(把 Smax⁡S_{\max} 压到 100),此后各头 Smax⁡S_{\max} 陆续降到 100 以下、QK-Clip 自行失效」。https://arxiv.org/abs/2507.20534
  2. Moonshot AI,Kimi K2 官方项目页(含 MuonClip、qk-clip 的公式与「15.5T tokens、zero loss spike」表述)。https://moonshotai.github.io/Kimi-K2/
  3. Moonshot AI,Kimi-K2 官方仓库(模型卡:1T 总 / 32B 激活、61 层、隐层 7168、专家隐层 2048、64 头、384 专家、每 token 选 8 + 1 共享、词表 160K、上下文 128K、MLA、SwiGLU)。https://github.com/MoonshotAI/Kimi-K2
  4. Jingyuan Liu, Jianlin Su, Xingcheng Yao 等(Moonshot AI),Muon is Scalable for LLM Training,arXiv:2502.16982,v1 2025-02-24。含两项关键技巧(权重衰减、逐参数更新尺度)、更新 RMS 与 1/max⁡(A,B)\sqrt{1/\max(A,B)} 的分析、0.2–0.4 的 AdamW 对齐目标、约 2 倍计算效率、Moonlight 3B/16B 模型 5.7T token。https://arxiv.org/abs/2502.16982
  5. Moonshot AI,Moonlight 官方仓库(Muon 可扩展性说明与实现)。https://github.com/MoonshotAI/Moonlight
  6. Keller Jordan,Muon: An optimizer for hidden layers in neural networks,2024-12-08(正交化定义、NS 迭代与 SVD 交换的推导、五次系数、G/∥G∥FG/\|G\|_F 归一化、US′V⊤US'V^\top 的近似说明、embedding/输出层除外)。https://kellerjordan.github.io/posts/muon/
  7. Keller Jordan,Muon 参考实现仓库(zeropower_via_newtonschulz5、系数 (3.4445, -4.7750, 2.0315)、ns_steps=5、momentum=0.95、max(1, fan_out/fan_in)**0.5 尺度)。https://github.com/KellerJordan/Muon
  8. Jeremy Bernstein,Deriving Muon(谱范数/RMS→RMS 算子范数下的最速下降、fan-out/fan-in\sqrt{\text{fan-out}/\text{fan-in}} 与核范数对偶的推导)。https://jeremybernste.in/writing/deriving-muon
  9. Jeremy Bernstein, Laker Newhouse,Old Optimizer, New Norm: An Anthology,arXiv:2409.20325,v2 2024-12-06(Proposition 1 最速下降、Proposition 5 Shampoo = 谱范数最速下降、核范数恒等式 max⁡∥T∥2≤1⟨G,T⟩=tr Σ\max_{\|T\|_2\le1}\langle G,T\rangle=\mathrm{tr}\,\Sigma、Table 1 四种范数对照)。https://arxiv.org/abs/2409.20325
  10. GLM Team(Zhipu AI / 清华),GLM-4.5: Agentic, Reasoning, and Coding (ARC) Foundation Models,arXiv:2508.06471,v1 2025-08-08。含「除 word embedding、bias、RMSNorm 外用 Muon」「Newton-Schulz 步数 N=5N=5、动量 μ=0.95\mu=0.95、更新 RMS 缩放到 0.2」、355B 总 / 32B 激活、23T token。https://arxiv.org/abs/2508.06471
  11. GLM Team(Zhipu AI / 清华),GLM-5: from Vibe Coding to Agentic Engineering,arXiv:2602.15763,v2 2026-02-24(Muon 下 MLA 一度不如 GQA、以及 Muon Split 让不同注意力头的投影权重以不同尺度更新)。https://arxiv.org/abs/2602.15763

第三方分析与工程博客:

  1. Jack Zhang, Noah Amsel, Berlin Chen, Tri Dao,A Fast, Hardware-Aware Newton-Schulz Algorithm for Muon(Gram Newton-Schulz 与 GramMuon,正交化步骤运行时间下降约 40%–50%;2026-03-30 博文,发布于 Tri Dao 站点)。https://tridao.me/blog/2026/gram-newton-schulz/
  2. Ki-Ung Song,About Muon: Muon At Scale(把 Bernstein 与 Moonlight 两种乘子约定并排对比;其同系列另一篇 Why Not Adam? 另给出 Jordan 的 0.02 约定;第三方个人博客,2026-09-21)。⚠️ 该文曾称「K2 报告描述了优化器但未印出该常数」,本刊逐字核对 K2 报告 Algorithm 1 后确认此说不成立(报告已印出 0.2,见来源 1),故正文口径以一手报告为准。https://kiungsong.github.io/2026/09/21/About_Muon_Muon_At_Scale.html

本文自行推导(仅作量级一致性检查,不得作为官方数值引用):

  • D1|核范数恒等式 max⁡∥T∥2≤1⟨G,T⟩=tr Σ\max_{\|T\|_2\le1}\langle G,T\rangle=\mathrm{tr}\,\Sigma:由 G=UΣV⊤G=U\Sigma V^\top 与 ⟨G,T⟩=tr(G⊤T)=∑iσi ui⊤Tvi≤∑iσi\langle G,T\rangle=\mathrm{tr}(G^\top T)=\sum_i\sigma_i\,u_i^\top Tv_i\le\sum_i\sigma_i,等号在 T=UV⊤T=UV^\top 处取得(第四节)。
  • D2|RMS(UV⊤)=1/max⁡(m,n)\mathrm{RMS}(UV^\top)=1/\sqrt{\max(m,n)}:由 tr(VV⊤)=min⁡(m,n)\mathrm{tr}(VV^\top)=\min(m,n) 得 Frobenius 范数平方为 min⁡(m,n)\min(m,n),除以 mn\sqrt{mn} 即得;据此反推「乘 0.2max⁡(m,n)0.2\sqrt{\max(m,n)} 后条目 RMS≈0.2」,并代入 4096×10244096\times1024(裸 RMS≈0.0156、系数 12.8)与 64×6464\times64(裸 RMS 0.125、系数 1.6)两组形状做算术校核(第六节)。
  • D3|QK-Clip 的 logit 缩放:把 Wq,WkW_q,W_k 分别乘 γhα\gamma_h^{\alpha} 与 γh1−α\gamma_h^{1-\alpha} 后,logit 恰乘 γh\gamma_h(指数相加),故 γh=min⁡(1,τ/Smax⁡h)\gamma_h=\min(1,\tau/S_{\max}^h) 等价于把最大 logit 压到不超过 τ\tau(第八节)。
  • D4|系数算术:3.4445−4.7750+2.0315=0.7013.4445-4.7750+2.0315=0.701,用于说明该五次映射在 11 处并未取到 11(第五节的「近似而非精确」论点)。
  • D5|8.1 节的手算例:设 Smax⁡h=250S_{\max}^h=250、τ=100\tau=100,则 γh=0.4\gamma_h=0.4、0.4≈0.632\sqrt{0.4}\approx0.632、两边各缩约 36.8%(1−0.4≈0.3681-\sqrt{0.4}\approx0.368)、0.4×250=100=τ0.4\times250=100=\tau;该例为本文自造,仅用于说明机制,不对应任何真实训练数据(第八节)。
  • 另:第五节「奇多项式与 SVD 交换」的推导(XX⊤=UΣ2U⊤⇒p(X)=Up(Σ)V⊤XX^\top=U\Sigma^2U^\top\Rightarrow p(X)=Up(\Sigma)V^\top)为对 Keller Jordan 博文的重述性复算,不计入本文自行推导。

数据截至 2026-10-08。文中各项模型规模、token 数、更新尺度与阈值均为对应技术报告/官方仓库的报告值,本刊未做独立复现;「零 loss 尖峰」为 Moonshot 报告自述口径,理论推导与实测值的边界已在第五、十节标明。本文由 AI 辅助整理,一手来源与推导步骤已如实标注,供读者自行核验。