Muon和AdamW优化器的区别(DeepSeek V4为什么用Muon?)
一、 AdamW 基础回顾:微观层面的“各管各的”
AdamW 是目前深度学习中最常用的基线优化器,它的核心标签是逐元素(Element-wise)和自适应学习率。
想象你的模型中有一个权重矩阵 WWW。AdamW 会把这个矩阵里的每一个参数当成完全独立的个体,逐个进行更新。为了决定每个参数更新的“步子”迈多大,它会记录两个历史信息:
- 一阶动量(动量):简单来说,就是这个参数在过去几次迭代中梯度的“加权平均”。它决定了参数更新的总体大方向,带有惯性。
- 二阶动量(方差):这是过去梯度平方的“加权平均”。它用来感知这个参数在历史中更新得有多剧烈。
核心动作:在每次更新时,AdamW 会用一阶动量除以二阶动量的平方根。
直观效果是:对于历史上变化极其剧烈、梯度很大的参数,AdamW 会压低它的学习率,让它稍微稳一点;对于历史上变化平缓、梯度很小的参数,它会放大其学习率,推着它往前走。最后,再独立加上一个权重衰减(Weight Decay),把参数按比例往 0 的方向拉一拉,防止过拟合。
局限性:AdamW 只盯着单个参数看,完全忽略了这些参数实际上是组成一个矩阵的整体。它无法感知矩阵的行与列之间固有的结构和关联。
二、 Muon 的核心机制:宏观层面的“方阵列队”
Muon(Momentum Orthogonalized by Newton-schulz)的底层思维与 AdamW 完全不同,它的核心标签是矩阵级别(Matrix-wise)和正交化。
在大模型中,全连接层或注意力机制的权重通常是巨大的二维矩阵 W∈Rn×mW \in \mathbb{R}^{n \times m}W∈Rn×m。Muon 不再把矩阵拆成一个个孤立的数字,而是把它当成一个统一的几何对象来优化。
核心动作:
- 算梯度与动量:和传统方法类似,先计算当前梯度并累加一阶动量,得到一个完整的更新矩阵 MMM。
- 正交化(魔法所在):这是 Muon 替代 AdamW 中“除以二阶动量”这一步的关键。Muon 对这个更新矩阵 MMM 施加“混合牛顿-舒尔茨迭代(Newton-Schulz Iteration)”。在数学上,这个操作通过几次矩阵乘法,强行将更新矩阵的奇异值拉近到 1。
- 缩放与更新:经过正交化梳理后的矩阵,既保留了原始梯度的重要方向信息,其内部结构又变得极其规整。最后,按统一比例缩放后,直接加到原来的权重矩阵上。
三、 核心区别对比
为了更直观地对比,我们可以看下表:
| 维度 | AdamW | Muon |
|---|---|---|
| 优化视角 | 逐元素(单个标量) | 矩阵整体(二维张量) |
| 归一化方式 | 标量除法(除以历史梯度平方根) | 矩阵正交化(牛顿-舒尔茨迭代) |
| 结构感知 | 无,忽略矩阵内部的几何特性 | 有,保留并利用矩阵特征 |
| 计算开销 | 极小(仅需标量加减乘除) | 较大(需额外的矩阵乘法计算) |
总结来说,AdamW 像是在微观层面挨个指挥每一个士兵(单个参数),根据每个士兵的体力调整步伐;而 Muon 是在宏观层面直接指挥整个方阵(权重矩阵),通过牛顿-舒尔茨迭代确保方阵在前进时阵型不乱(保持正交性),这在处理百亿、千亿参数的高维空间时,能带来更快的收敛速度和更高的稳定性。
把奇异值拉近到 1的好处
1. 算梯度与动量:积累“历史速度”
在这一步,我们计算当前的梯度 GtG_tGt。为了避免每次更新都像无头苍蝇一样乱撞,我们会引入“动量”(Momentum),把历史的更新方向按比例保留下来 :
Mt=μMt−1+GtM_t = \mu M_{t-1} + G_tMt=μMt−1+Gt
这里的 MtM_tMt 就是我们要处理的更新矩阵。你可以把它想象成一股累积了历史惯性的“风”,正准备把权重矩阵吹向下一个位置。
2. 正交化与奇异值(魔法所在):为什么非要等于 1?
这是理解 Muon 的绝对核心。
在线性代数中,任何一个矩阵都可以通过奇异值分解(SVD)拆解成三个部分的乘积:M=UΣVTM = U \Sigma V^TM=UΣVT 。
- UUU 和 VTV^TVT 是正交矩阵,它们代表的是纯粹的空间旋转。
- Σ\SigmaΣ 是一个对角矩阵,对角线上的值就是奇异值。奇异值代表的是在这个变换中,空间在各个方向上被拉伸或压缩的倍数。
如果一个矩阵的奇异值有大有小(比如最大的是 100,最小的是 0.1),这意味着它在某个方向上拼命拉伸,而在另一个方向上极度压缩。
把奇异值强行拉近到 1(即让 Σ\SigmaΣ 变成单位矩阵 III),相当于让更新矩阵变成了 M′=UVTM' = U V^TM′=UVT 。这究竟有什么巨大的好处?
好处一:消除“木桶效应”,保证各个特征方向均衡更新
在深度学习中,如果更新矩阵的奇异值差异巨大(这在数学上叫“条件数过大”),模型就会陷入“病态”的优化地形中——在陡峭的方向上疯狂震荡,在平缓的方向上慢如蜗牛。
把奇异值全部拉平到 1,相当于做了一次完美的预处理(Preconditioning)。它强制剥离了各个方向上不合理的“拉伸力度”,只保留了最纯粹的“方向信息”(也就是 UVTU V^TUVT)。这样,模型在更新时,不管是重要特征还是冷门特征,都能得到公平、平稳的推进,大大加快了收敛速度。
好处二:防止“维度坍塌”(Rank Collapse)
神经网络很“懒”。在训练大模型时,权重矩阵经常会倾向于只依赖少数几个主导特征,导致整个矩阵的有效信息维度变少,这被称为秩坍塌(Rank Collapse)。
把更新矩阵的奇异值设为 1,它在数学上就变成了一个正交矩阵。正交矩阵的每一列/行都是线性无关且等长的。用它去更新权重,就是在强迫模型:“不要只盯着那几个特征看,你要把整个高维空间的容量都利用起来!” 这使得模型能学到更丰富、更具多样性的特征。
好处三:保持真实的全局几何方向(降维打击 AdamW)
AdamW 是怎么控制步长的?它是把矩阵拆成一个个孤立的数字,然后每个数字除以自己历史梯度的平方根(二阶动量)。这种逐个除以不同数字的做法,实际上扭曲了整个矩阵原本的更新方向。
Muon 的做法则高级得多:它不改变原矩阵 MMM 的旋转方向(完全保留了 UUU 和 VTV^TVT),仅仅是把长短不一的拉伸量统一归一化到了 1。这是一种真正的“全局自适应学习率”,它在控制了更新步长的同时,完美保真了梯度的几何方向。
💡 Newton-Schulz 迭代的作用:
既然 SVD 分解这么好,为什么以前不用?因为在 GPU 上对巨大的矩阵算 SVD 极度缓慢,算力根本吃不消。Muon 的聪明之处在于,它使用了 Newton-Schulz 迭代。这是一种近似算法,只需要做几次简单的矩阵乘法,就能极快地逼近 UVTU V^TUVT 的结果(也就是把奇异值推向 1) 。在 DeepSeek-V4 中,他们通过混合系数迭代,精确地将奇异值稳定在 1 。
3. 缩放与更新:平稳落地
经过上述魔法操作,我们得到了一个奇异值全为 1 的正交化更新矩阵 Ot′O'_tOt′。
此时,这个矩阵的内部结构已经极度规整(各向同性,方向纯粹)。接下来只需要做两件事:
-
统一缩放:根据矩阵的尺寸重新缩放它的均方根(RMS),然后乘以你设定的学习率 η\etaη 。因为它的形状已经被修整得很好,我们不再需要像 AdamW 那样给每个参数单独设置步长,给一个统一的号令即可。
-
权重衰减与相加:执行标准的权重衰减(防止权重过大),然后把这个规整的矩阵直接减到原本的模型参数 Wt−1W_{t-1}Wt−1 上,完成这一步的进化 。
牛顿-舒尔茨迭代(Newton-Schulz Iteration)绝对不去计算奇异值分解(SVD),它恰恰是为了“逃避”计算 SVD 而发明的极速平替方案。
之前的例子里提到把 Σ\SigmaΣ 强行变成单位矩阵,那是为了在数学概念上让你直观理解正交化在做什么。但在真正的代码和 GPU 硬件里,计算 SVD 的代价是极其昂贵的。SVD 包含大量的非线性操作和特征值计算,对 GPU 非常不友好,如果每次更新成千上万个参数矩阵都要算一次 SVD,训练速度会慢到让人崩溃。
既然我们要的是去除了拉伸量 Σ\SigmaΣ 之后的纯方向矩阵 UVTUV^TUVT ,数学家们就想出了一个极其聪明的办法:用纯粹的矩阵乘法和加法,硬生生地把原矩阵“揉捏”成 UVTUV^TUVT 的样子。
这就是牛顿-舒尔茨迭代的本质。下面是 DeepSeek-V4 论文中实际执行这个“魔法”的详细步骤:
1. 预处理:限制最大值(归一化)
在施加魔法之前,为了防止数值爆炸,算法会先给矩阵“卸力”。
首先,将当前的矩阵 MMM 除以它的弗罗贝尼乌斯范数(可以理解为矩阵里所有元素的平方和开根号),得到初始矩阵 M0M_0M0 。
M0=M/∣∣M∣∣FM_0 = M / ||M||_FM0=M/∣∣M∣∣F
这一步的目的是确保矩阵的最大奇异值绝对不会超过 1 。这就像是把所有乱七八糟的拉伸力度都压缩到了 0 到 1 的安全范围内,为后续的迭代打好基础。
2. 疯狂多项式:牛顿-舒尔茨迭代
这一步是 GPU 最擅长的操作——纯粹的矩阵乘法。算法会反复套用下面这个公式:
Mk=aMk−1+b(Mk−1Mk−1T)Mk−1+c(Mk−1Mk−1T)2Mk−1M_k = aM_{k-1} + b(M_{k-1}M_{k-1}^T)M_{k-1} + c(M_{k-1}M_{k-1}^T)^2M_{k-1}Mk=aMk−1+b(Mk−1Mk−1T)Mk−1+c(Mk−1Mk−1T)2Mk−1
这个公式到底在干什么?
你可以把它想象成一个只针对“奇异值”的塑形机器。如果矩阵的某个奇异值 xxx 较小,经过这个多项式计算后,新的奇异值会变大一点;如果它接近 1,它就会稳稳地停在 1 附近。
虽然我们在对整个矩阵做乘法,但在线性代数的底层法则中,这等价于同时对矩阵隐式包含的所有奇异值进行了一次多项式拉伸,而完全不破坏矩阵原有的旋转方向(即完美保留了 UUU 和 VTV^TVT)。
3. DeepSeek-V4 的“混合”调参绝技
传统的牛顿-舒尔茨迭代可能需要跑很多次才能收敛。为了追求极致的速度,DeepSeek-V4 采用了一种“混合”(Hybrid)策略,总共只跑 10 次迭代 :
-
阶段一:狂飙突进(前 8 次迭代)
使用系数 (a,b,c)=(3.445,−4.7750,2.0315)(a, b, c) = (3.445, -4.7750, 2.0315)(a,b,c)=(3.445,−4.7750,2.0315) 。
这组激进的系数能够驱动奇异值快速收敛,迅速把那些小得可怜的奇异值“拔高”到接近 1 的位置 。 -
阶段二:精准落地(最后 2 次迭代)
切换为经典系数 (a,b,c)=(2,−1.5,0.5)(a, b, c) = (2, -1.5, 0.5)(a,b,c)=(2,−1.5,0.5) 。
这组温和的系数负责最后微调,将所有的奇异值精确且稳定地锁定在 1 上 。
经过这短短 10 次的纯矩阵乘法迭代,原本“偏科”严重的 M0M_0M0,就在没有经历任何复杂 SVD 计算的情况下,蜕变成了一个奇异值全为 1 的完美正交矩阵(即高度逼近 UVTUV^TUVT)。GPU 疯狂地做着它最爱的乘法和加法,极其高效地完成了方向的提纯。
UVTU V^TUVT 绝对是一个正交矩阵。
在奇异值分解(SVD)公式 M=UΣVTM = U \Sigma V^TM=UΣVT 中,线性代数法则规定了 UUU 和 VVV 本身就必须是正交矩阵。而数学中有一个定理:两个正交矩阵的乘积依然是正交矩阵。因此,当我们把代表拉伸的 Σ\SigmaΣ 剔除,或者把它强行变成单位矩阵 III 后,剩下的 UVTU V^TUVT 就是一个纯粹的正交矩阵。
为了让你把这块拼图完美拼上,我们来拆解一下正交矩阵的核心特点以及它在深度学习(尤其是 Muon 优化器)中带来的巨大好处。
一、 正交矩阵的核心特点:极致的“规整”
正交矩阵(我们把它记作 OOO)在数学上有着极其优美的性质,可以用三个词来概括:
1. 转置即逆(计算极简)
这是正交矩阵最标志性的代数定义:它的转置矩阵 OTO^TOT 直接等于它的逆矩阵 O−1O^{-1}O−1。
OTO=OOT=IO^T O = O O^T = IOTO=OOT=I
在计算机里算一个大矩阵的逆是非常耗时的,但如果它是正交矩阵,只需要把行列互换(转置)一下就得到了逆,计算成本几乎为零。
2. 保长性(不改变大小)
如果你用一个正交矩阵去乘以一个向量(比如空间中的一个箭头),这个箭头的长度绝对不会发生任何改变。它既不会被拉长,也不会被缩短。
3. 保角性(不改变形状)
如果你有两个向量,它们之间有一个夹角(比如 90 度)。经过正交矩阵变换后,这两个向量的夹角依然是 90 度。这意味着正交矩阵绝对不会把一个正方形“挤扁”成平行四边形(也就是没有剪切形变)。
💡 几何总结:
结合保长和保角,正交矩阵在三维或高维空间中的物理意义非常明确——它代表了纯粹的旋转(或者镜像翻转)。它就像一个完美的魔方,无论你怎么转,它的体积和内部格子的大小都不会变。
二、 正交矩阵在深度学习中的巨大好处
为什么 Muon 优化器费尽心思,甚至用牛顿-舒尔茨迭代,也要把更新矩阵提纯成正交矩阵 UVTU V^TUVT?因为这种“纯粹的旋转”能解决大模型训练中的几个致命痛点:
1. 根除梯度爆炸与梯度消失
在深度神经网络中,信号(前向传播的激活值,或者反向传播的梯度)需要经过一层又一层的矩阵相乘。
- 如果矩阵像我们之前举例的 Σ\SigmaΣ 那样,有大于 1 的拉伸量,乘了几十层之后,数值会指数级爆炸(梯度爆炸)。
- 如果有小于 1 的压缩量,乘了几十层之后,数值会变成 0(梯度消失)。
好处: 正交矩阵具有“保长性”。信号穿过正交矩阵时,能量不会放大也不会衰减,这让训练过程稳如泰山。
2. 条件数为 1:完美的数值稳定性
“条件数”衡量的是矩阵在不同方向上拉伸比例的最大差距(最大奇异值除以最小奇异值)。条件数越大,矩阵越“病态”,优化起来越困难。
好处: 正交矩阵的所有奇异值都是 1,所以它的条件数是完美的 1。这意味着它在任何方向上的受力都是绝对均匀的。模型在更新参数时,不会在某个特征方向上步子太大扯到蛋,也不会在另一个方向上原地踏步。
3. 保持特征的独立性(防坍塌)
如果不用正交矩阵,多次矩阵连乘很容易导致空间向着最大的那个奇异值方向“坍缩”(Rank Collapse),原本丰富的多维特征最后全挤在了一条线上,模型变“笨”了。
好处: 正交矩阵具有“保角性”,原本正交(独立)的特征,更新后依然是独立的。它强迫模型去探索和利用整个高维空间的所有容量,学到更丰富、更细腻的知识。
一句话总结:
UVTU V^TUVT 这个正交矩阵,就是剔除了所有“拉伸、压缩、挤压”杂质后,提炼出来的一枚纯粹的“方向指南针”。它让模型的参数更新走得既准(方向对)又稳(不扭曲变形)。
训练中哪些模块使用 Muon?
论文中指出,在 DeepSeek-V4 系列的大多数模块中采用 Muon 优化器,主要是因为它能带来更快的收敛速度和更高的训练稳定性。
但是模型并没有在所有模块上都使用 Muon,而是采取了一种混合优化的策略:
- 保留 AdamW 的模块:嵌入模块(embedding module)、预测头模块(prediction head module)、mHC 模块的静态偏置和门控因子,以及所有 RMSNorm 模块的权重,依然使用 AdamW 优化器进行更新。 嵌入模块(embedding module)、预测头模块(prediction head module)的梯度存在极度稀疏性所以不会。对于这些一维的或者非方阵的参数,DeepSeek-V4 依然让 AdamW 来负责更新,因为对一维向量做矩阵正交化没有意义 。
- 使用 Muon 的模块:除了上述明确提到的模块之外,模型中的所有其他模块均使用 Muon 进行更新。
Embedding和Head为什么不用?
嵌入模块(Embedding Module)和预测头模块(Prediction Head Module)确实是庞大的二维矩阵。它们的形状通常是 Vocabulary_Size×Hidden_SizeVocabulary\_Size \times Hidden\_SizeVocabulary_Size×Hidden_Size(例如 128K×7168128K \times 7168128K×7168 )。
DeepSeek-V4 不在这两个巨大的二维矩阵上使用 Muon,其实是基于它们特殊的物理意义和计算特性。具体原因可以归结为以下三个核心痛点:
1. 梯度的极度稀疏性(最致命的原因)
想象一下模型正在训练一个批次(Batch)的数据。这一批文本里可能只出现了 5000 个不重复的单词。
- 对于 Embedding 层:整个 128K×7168128K \times 7168128K×7168 的矩阵中,只有这 5000 个单词对应的行是有梯度的,其余 12 万多行的梯度全是 0。
- 如果用 Muon:Muon 会把这个 99% 都是 0 的梯度矩阵拿去做牛顿-舒尔茨迭代、算正交化。这在数学上是非常灾难的。强行对大量包含 0 的矩阵做全局的正交化,不仅无法收敛,甚至会把那些根本没出现在当前文本里的单词的向量给“连坐”修改掉。
- AdamW 的优势:AdamW 是逐元素(逐行)更新的,只有出现过的单词才会被更新,没出现的单词安静地待在原地,互不干扰。
2. 物理意义的不同:它们是“字典”而不是“空间变换”
- 隐藏层(用 Muon):像 Wq,Wk,WvW_q, W_k, W_vWq,Wk,Wv 或者全连接层的权重,它们的作用是对特征空间进行统一的几何旋转和拉伸。把它们当成一个整体做正交化是非常合理的。
- 嵌入层/预测头(用 AdamW):它们本质上是一个查找表(Lookup Table)。每一行代表一个独立的概念(比如“苹果”、“宇宙”、“的”)。我们希望“苹果”的向量和“宇宙”的向量根据各自在语料里的表现独立更新,而不希望强制它们在更新时保持某种全局的几何正交关系。强制对字典做矩阵级别的正交化,反而破坏了词汇之间自由学习相似度的空间。
3. 极端的长宽比与计算崩溃
Muon 的牛顿-舒尔茨迭代中,有一步关键计算是 MMTM M^TMMT。
- 如果矩阵是 128K×7K128K \times 7K128K×7K。
- MMTM M^TMMT 会生成一个 128,000×128,000128,000 \times 128,000128,000×128,000 的巨型方阵。在 GPU 上对这么大的矩阵做乘法迭代,会瞬间把显存撑爆(OOM),计算成本甚至远超注意力机制本身。
所以,Muon 优化器的提出者和 DeepSeek-V4 的作者们都非常明智地划定了界限 :
- Muon 负责“内功”:管理所有隐藏层的特征空间变换(方阵或比例适中的二维矩阵),追求极致的几何稳定性。
- AdamW 负责“外接口”:管理与外部世界对接的词表查找(极大、极稀疏的二维矩阵)以及各种一维的归一化参数,保留其更新的独立性。
更多推荐


所有评论(0)