Muon 优化器:2024 年兴起的新 optimizer,用矩阵正交化替代自适应学习率

你有没有想过,为什么深度学习优化器里,Adam 一直是默认选择?因为它给每个参数分配了一个独立的自适应学习率:梯度大的参数步子迈小,梯度小的参数步子迈大。这个设计在五年前是对的,但在 2024 年,一个叫 Muon 的新优化器开始出现在 LLM 训练社区里,它的核心操作完全相反——不做逐参数缩放,而是对整个权重矩阵做一次 正交化

AI technology illustration

先别急着划走。我最早看到 Muon 的更新规则时,第一反应是“这怕不是 SVD 用来刷论文的”。但当我真正把它跑在小型 GPT-2 上,发现收敛速度确实比 AdamW 快。为了搞明白为什么,我把这两个优化器翻来覆去地对比了很久。

Adam 的更新公式长这样(省略一阶矩和偏差校正):param -= lr * m / (sqrt(v) + eps)。这个操作里,分母的 sqrt(v) 是按元素计算的,也就是说,它把每一个权重当作独立的坐标来缩放。对于嵌入层或偏置这种一维参数,这没问题;但对于一个 权重矩阵,事情就变得微妙了。

一个线性层做的是 y = Wx,矩阵 W 的奇异值决定了输入空间每个方向被拉伸的幅度。逐元素缩放 W,等于在改变这个线性变换的奇异性。如果某个元素被缩小,整个矩阵的奇异值分布可能会变得极其不均匀。Adam 在训练后期经常出现 loss 震荡,很多时候就是这种“各向异性”缩放造成的。

Muon 的做法是:先把梯度累积到一个动量矩阵 M 里,然后对 M 做一次 极分解。极分解可以写成 M = U * S * V^T,其中 U 和 V 是正交矩阵,S 是对角矩阵。Muon 只取 U * V^T 作为更新方向。如果你熟悉 SVD,就会发现这一步就是去掉奇异值,只保留旋转部分。代码实现简单得惊人:

def muon_step(weight, grad, momentum, lr, beta=0.95):
    momentum = beta * momentum + grad          # 动量
    U, _, Vt = torch.linalg.svd(momentum)      # SVD 分解
    update = U @ Vt                             # 正交化后的方向
    weight.add_(update, alpha=-lr)              # 更新权重

关键在于,U * V^T 是一个正交矩阵,它的谱范数(最大奇异值)永远是 1。也就是说,无论梯度有多大,实际更新时,权重矩阵的变化量在所有方向上的最大放大倍数都被限制为 1。这相当于给更新方向加了一个“全局保险丝”。Adam 的逐元素归一化不能保证这一点,因为它只约束每个坐标轴的大小,却管不了矩阵整体在任意方向上的放大倍数。

换个角度理解:Adam 把每个参数的学习率单独调,但参数之间是有耦合的——一个矩阵的行、列构成一个几何结构。Muon 直接在矩阵空间做归一化,避免了逐元素缩放带来的扭曲。

对比维度 Adam Muon
核心机制 一阶矩 + 二阶矩自适应 动量 + SVD / 极分解
更新粒度 逐参数 整个权重矩阵
更新方向 按梯度均方根缩放后的向量 与动量矩阵距离最近的正交矩阵
谱范数控制 恒定为 1
适用参数 所有参数 二维权重矩阵

Muon 的作者在 GitHub 仓库 里放出了训练曲线:在相同步数下,Muon 在小型 GPT-2 上达到的 loss 低于 AdamW,在 ResNet 上也有类似优势。另有第三方复现实验发现,Muon 在大模型微调中表现稳定,尤其对学习率不敏感。但需要说明的是,目前这些验证集中在百亿参数以内,还没有在千亿规模上被广泛证实。

我最早对 Muon 的怀疑来自 SVD 的计算成本。每次更新都做 SVD,这得多慢?但作者提供了更快的实现:用 Newton-Schmidt 迭代来近似极分解,复杂度接近普通矩阵乘法。而更让我意外的是,去掉奇异值反而让训练更稳。后来我想通了:随机梯度下降本身就是噪声很大的过程,奇异值所代表的“幅度”在每一步里波动剧烈,根本不值得信任;只有方向信息才是相对稳定的。Adam 用二阶矩来归一化方向,本质上也想要这个效果,但它是在每个坐标上独立做的,不如 Muon 在整个矩阵上做得干净。

Muon 当然不是银弹。它对一维参数(bias、LayerNorm 的 scale)没有意义,因为一维向量做 SVD 只有奇异值没有旋转。所以在实践中,通常只对二维权重矩阵用 Muon,其他参数仍用 AdamW 或 SGD。另外,对于极浅层网络或非均匀形状的矩阵,Muon 的效果未必好。一个更实际的问题是:如果矩阵非常巨大(如输出层),SVD 的内存开销可能会成为瓶颈。

Muon 和正交初始化是一回事吗?

不是。正交初始化只在开始时给权重一个正交矩阵,训练过程中这个性质会被梯度更新破坏。Muon 在整个训练过程中持续使用正交化的更新方向,相当于不断把权重矩阵“拉回”到良态的区域。

Muon 为什么不用自适应学习率?

自适应学习率的核心是去掉梯度尺度。Adam 逐元素去做,Muon 则通过正交化一次性去掉所有奇异值尺度。后者保持了矩阵的旋转结构,更符合隐藏层的几何特性。

我该在自己的模型上换用 Muon 吗?

如果你的模型以 Transformer 或卷积为主,且你愿意多付一点计算开销,可以试试。对于常用框架,Muon 的参考实现只有几十行,很容易集成。但建议从零开始训练时验证,微调任务上它的优势不一定明显。

Muon 的兴起让我意识到,优化器的设计空间远未探索干净。Adam 统治了这么久,不是因为它的每个细节都不可替代,而是因为大家都在用。Muon 用数学上更优雅的方式解决了学习率缩放的问题,它未必会取代 AdamW,但它证明了:在优化器这件事上,我们也许还停留在手工作坊时代。下次当你觉得训练不收敛时,除了换模型结构,不妨想想:是不是该给权重矩阵转个方向了。

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/354.html

(0)
上一篇 2026年8月28日 下午5:50
下一篇 2026年8月28日 下午6:02

相关推荐