#从 SGD 到 Muon:大模型训练中优化器的演化逻辑、方法细节与未来展望
这条演化线,如果只看“公式变复杂了”,很容易看不懂;但如果抓住背后的训练痛点如何变化,逻辑其实非常清楚:
- 最开始,大家只需要一个能下降 loss 的方法,于是有了 SGD。
- 后来发现梯度噪声大、方向抖、狭长谷底里前进很慢,于是有了 Momentum / Nesterov。
- 再后来发现不同参数、不同维度的梯度尺度差异太大,统一学习率很难调,于是有了 AdaGrad / RMSProp / Adam 这类自适应学习率方法。
- 再后来,深度学习尤其是大模型训练发现:Adam 虽然好用,但泛化、权重衰减解释、显存占用、吞吐和超大 batch 场景下的稳定性都有问题,于是有了 AdamW、LAMB、Adafactor、Shampoo、Sophia 等针对特定瓶颈的改进。
- 再往后,随着 Transformer / LLM 训练规模极大化,问题不再只是“能不能训起来”,而是:能否在极大 batch、极大宽度、强并行、低精度、长时间训练下,仍然高效地利用参数空间的几何结构? 这就把大家重新带回了一个老主题:优化器能否比逐坐标缩放更好地利用矩阵/子空间结构? Muon 就是在这个脉络下出现的。
所以,从 SGD 到 Muon,不是简单的“版本升级”,而是一个不断回答下列问题的历史:
- 梯度太噪怎么办?
- 不同方向曲率差别太大怎么办?
- 不同参数尺度差异太大怎么办?
- 显存、通信、吞吐、稳定性怎么办?
- 在大模型里,参数本身是矩阵而不是独立标量,优化器能不能尊重这种结构?
下面按这条线展开。
#一、起点:最普通的随机梯度下降(SGD)
#1.1 基本形式
我们要最小化目标函数
min_theta f(theta)
全批量梯度下降是:
theta_{t+1} = theta_t - eta * ∇f(theta_t)
但深度学习数据量巨大,通常只用一个 mini-batch 估计梯度:
g_t = ∇_theta L_B(theta_t)
theta_{t+1} = theta_t - eta * g_t
这就是 SGD。
#1.2 为什么它是起点?
因为它抓住了最核心的一件事:沿着负梯度方向走一小步,局部上就能下降。它的优点是:
- 简单;
- 每步开销小;
- 不需要额外状态;
- 在大规模训练里很稳健;
- 与很多理论分析兼容。
#1.3 SGD 的根本问题
但它很快暴露出几个痛点:
#(1)梯度噪声大
mini-batch 只是全数据梯度的采样估计,方向会抖。
#(2)各方向曲率差异大
在参数空间中,loss surface 往往像“狭长山谷”:
- 某些方向曲率很大,稍微走快就震荡;
- 某些方向曲率很小,走得又太慢。
单一学习率 eta 很难同时兼顾所有方向。
#(3)参数尺度不同
有些层梯度很大,有些层梯度很小;同一层中不同维度也可能相差几个数量级。
#(4)训练效率差
尤其在深网络、病态 Hessian、鞍点较多时,纯 SGD 容易来回摆动,前进速度慢。
动因总结:SGD 的问题不是“方向错了”,而是方向太噪、各向异性太强、统一步长不合适。
#二、第一波改进:Momentum 与 Nesterov
#2.1 Momentum:给优化加“惯性”
最经典的动机是物理直觉:如果一个方向连续多步梯度都类似,那说明这个方向大概率值得继续前进;如果只是单步噪声,不应立即大幅改变方向。
更新写成:
v_t = beta * v_{t-1} + g_t
theta_{t+1} = theta_t - eta * v_t
也常见写成:
v_t = beta * v_{t-1} - eta * g_t
theta_{t+1} = theta_t + v_t
其中:
v_t是速度;beta通常取 0.9 左右;- 本质上是对历史梯度做指数滑动平均。
#2.2 它解决了什么?
Momentum 主要解决两个问题:
#(1)降低梯度噪声的影响
当前 batch 的偶然抖动不会立刻完全改变方向。
#(2)在一致方向上加速
如果某个方向连续多步都朝同一边,速度会积累,走得更快。
这在“长谷底”里特别有用:
- 横向高曲率方向:梯度符号频繁翻转,动量相互抵消;
- 纵向低曲率方向:梯度长期同向,动量逐渐累积。
所以它天然有一种“抑制震荡、沿谷底加速”的效果。
#2.3 Nesterov Accelerated Gradient(NAG)
Nesterov 的核心想法是:不要站在当前位置看梯度,而是先按当前速度“预看一眼”未来位置,再在那里算梯度。
形式上可写为:
g_t = ∇f(theta_t - eta * beta * v_{t-1})
v_t = beta * v_{t-1} + g_t
theta_{t+1} = theta_t - eta * v_t
直觉上,它比普通 Momentum 多了一点“纠偏”能力:
- Momentum 容易因为惯性太大冲过头;
- Nesterov 提前看一眼前方的梯度,因此修正更及时。
#2.4 这一阶段的意义
这一步演化说明:
大家开始意识到,优化不是“每一步只看当前梯度”,而应该利用时间上的历史结构。
但 Momentum 仍然有一个根本限制:所有参数共享同一个学习率尺度。如果不同维度梯度量级差异很大,它还是不好调。
#三、第二波改进:按坐标自适应步长——AdaGrad
#3.1 为什么会想到自适应学习率?
在很多任务里,不同参数维度的梯度统计性质差异巨大:
- 稀疏特征:某些维度很少出现,但一出现就很重要;
- 深网络不同层:梯度尺度差别大;
- embedding 参数:频繁更新和罕见更新差异显著。
如果还用统一学习率,就会出现:
- 频繁更新的维度步子太大;
- 稀有维度步子太小,学不动。
#3.2 AdaGrad 的公式
AdaGrad 为每个参数维度维护历史平方梯度累积:
s_t = s_{t-1} + g_t^2
theta_{t+1} = theta_t - eta * g_t / (sqrt(s_t) + epsilon)
这里的平方、除法、开方都是逐元素的。
#3.3 它解决了什么?
如果某个维度过去梯度经常很大,那么 s_t 会越来越大,该维度后续有效学习率会变小;反之,如果某个维度很少被更新,则其学习率衰减更慢。
它的好处是:
- 自动按坐标缩放;
- 对稀疏场景特别有效;
- 减少手工调参难度。
#3.4 它为什么后来不够用了?
致命问题是:平方梯度是累加不忘的。
s_t = Σ_{i=1..t} g_i^2
这样训练越久,s_t 越大,有效学习率就会持续下降,最后几乎走不动。
所以 AdaGrad 很适合一些稀疏、凸优化或中短期训练问题,但在长时间深度网络训练里常常衰减过头。
动因总结:AdaGrad 引入了一个新思想——不同维度应该有不同步长,但它的“永久记忆”太强。
#四、RMSProp:只记最近一段历史
#4.1 从 AdaGrad 到 RMSProp 的核心动机
大家很快意识到,问题不在“按坐标自适应”这个思想,而在于 AdaGrad 的历史累积无限增长。
所以自然的修正就是:
不要累计所有历史,只维护一个局部窗口近似,也就是平方梯度的指数滑动平均。
#4.2 RMSProp 公式
s_t = rho * s_{t-1} + (1-rho) * g_t^2
theta_{t+1} = theta_t - eta * g_t / (sqrt(s_t) + epsilon)
通常 rho 取 0.9、0.99 之类。
#4.3 它的本质
RMSProp 可以理解成:
- 对每个坐标估计最近梯度 RMS 大小;
- 用这个尺度对当前梯度进行归一化;
- 让每个维度都用相对合理的局部步长。
#4.4 为什么它比 AdaGrad 更适合深度学习?
因为深度学习训练是非平稳的:
- 模型前期和后期梯度统计完全不同;
- 不同训练阶段会进入不同 loss landscape;
- 数据分布和激活分布也在变化。
在这种情况下,旧得太久的统计反而是噪声。RMSProp 只记近期统计,因此更灵活。
不过,RMSProp 虽然解决了“每维学习率”,却没有显式利用一阶动量。因此大家自然想到:
能不能把 Momentum 和 RMSProp 合起来?
这就到了 Adam。
#五、Adam:一阶动量 + 二阶矩估计 的组合拳
#5.1 Adam 的核心设计
Adam = Adaptive Moment Estimation。
它同时维护:
- 一阶矩:梯度均值的指数滑动平均;
- 二阶矩:梯度平方的指数滑动平均。
公式:
m_t = beta1 * m_{t-1} + (1-beta1) * g_t
v_t = beta2 * v_{t-1} + (1-beta2) * g_t^2
由于初始化为 0,前期会有偏差,所以做 bias correction:
m_hat_t = m_t / (1 - beta1^t)
v_hat_t = v_t / (1 - beta2^t)
更新为:
theta_{t+1} = theta_t - eta * m_hat_t / (sqrt(v_hat_t) + epsilon)
#5.2 它到底在做什么?
可以这样理解:
m_t:告诉你“总体该往哪个方向走”,降低噪声;v_t:告诉你“这个坐标最近梯度尺度有多大”,做自适应缩放;- 两者相除:相当于用一个归一化后的、方向更稳定的梯度去更新。
#5.3 为什么 Adam 一度几乎统治训练实践?
因为它几乎精准命中了深度学习工程里的几个核心痛点:
#(1)少调参
默认超参数经常就能跑:
beta1 = 0.9beta2 = 0.999epsilon = 1e-8
#(2)前期收敛很快
在许多任务上,Adam 前期 loss 掉得非常快。
#(3)对梯度尺度不敏感
不同层、不同模块的梯度尺度不一致时,也常常比 SGD 更省心。
#(4)很适合 Transformer 早期训练生态
特别是配合 LayerNorm、残差结构、warmup 后,Adam 类方法在大部分 NLP 模型里都很顺手。
#5.4 Adam 的问题在哪里?
随着规模变大,大家慢慢发现 Adam 不是“完美答案”。
#(1)泛化有时不如 SGD / SGD+Momentum
在一些视觉和监督学习任务里,Adam 训练 loss 虽然下降快,但测试性能未必更好。
#(2)权重衰减与自适应缩放耦合
经典写法里把 L2 正则直接加进梯度,会和 Adam 的自适应缩放互相影响,使得“weight decay”的语义变得不干净。
#(3)状态占用大
Adam 要存:
- 参数本身
theta - 一阶状态
m - 二阶状态
v
大模型训练里这很贵。
#(4)逐坐标缩放可能忽略矩阵结构
Adam 看每个标量维度自己的统计,但一个线性层权重矩阵里,很多方向上的耦合结构并没有被利用。
这几个问题,会在后面的 AdamW、Adafactor、Shampoo、Muon 里逐渐显性化。
#六、AdamW:把权重衰减从 Adam 里“解耦”
#6.1 为什么 AdamW 出现几乎是必然的?
经典 L2 正则做法是把 lambda * theta 加进梯度:
g_t <- g_t + lambda * theta_t
对于普通 SGD,这和 weight decay 基本等价;但对 Adam 不一样,因为这个加进去的项还要经过 1/sqrt(v_t) 的逐坐标缩放。
结果是:
- 不同参数受到的衰减强度不一致;
- weight decay 不再是简单、统一的参数范数收缩。
这在大模型训练里会导致行为变得难解释、难调。
#6.2 AdamW 的核心做法
把参数衰减从梯度更新中拆出来:
theta_{t+1} = theta_t - eta * m_hat_t / (sqrt(v_hat_t)+epsilon) - eta * lambda * theta_t
或者写成先梯度更新再乘一个衰减因子:
theta_{t+1} = (1 - eta*lambda) * theta_t - eta * update_t
#6.3 它解决了什么?
- 让 weight decay 真正回到“参数衰减”的语义;
- 超参数更可解释;
- 大模型训练里更稳定、更标准;
- 与参数分组配合更自然:很多参数(如 LayerNorm、bias)不做 decay,而矩阵权重做 decay。
#6.4 在 LLM 训练中的地位
如果说 Adam 是深度学习工程的主力军,那么 AdamW 基本就是现代 Transformer / LLM 训练的默认基线。很多后续工作都是拿 AdamW 作为参照系来比较的。
#七、大模型训练把问题重新放大:为什么 AdamW 还不够?
到了 LLM 时代,优化器不再只是“loss 能不能降”的问题,而是要同时面对:
#7.1 显存/状态成本
AdamW 每个参数至少要多存两份状态,混精和 ZeRO 下还会牵涉更多副本和通信。
#7.2 超大 batch 训练稳定性
大模型为了吃满硬件,经常希望增大 batch;但 batch 变大后,优化动力学会变化,学习率缩放、噪声水平、泛化性质都不同。
#7.3 参数类型异质性极强
在 Transformer 里,不同参数其实不是一类东西:
- embedding 矩阵;
- attention / MLP 权重矩阵;
- bias;
- LayerNorm / RMSNorm 缩放参数;
- output head。
这些参数的几何结构完全不同。对所有参数都用同一种逐坐标 AdamW,并不一定最优。
#7.4 矩阵结构被忽略
一个 W ∈ R^{d_out × d_in} 的线性层权重,本质是一个矩阵。它的重要结构常常体现在:
- 行空间;
- 列空间;
- 奇异值分布;
- 某些低秩/近低秩结构。
AdamW 把它拆成许多独立标量坐标来对待,可能丢失了结构信息。
#7.5 低精度与数值稳定
在 bf16 / fp16 训练下,优化器状态和更新规则是否数值稳定,也是第一等公民。
于是出现了几条改进路线。
#八、几条重要分叉:LAMB、Adafactor、Shampoo、Sophia
这几条线不一定都直接通向 Muon,但它们定义了 Muon 出现前的“问题版图”。
#8.1 LAMB:为超大 batch 训练服务
LAMB(Layer-wise Adaptive Moments for Batch training)是在 Adam 类更新基础上,再加入层级/张量级 trust ratio:
r_t = ||theta_t|| / ||update_t||
theta_{t+1} = theta_t - eta * r_t * update_t
其中 update_t 通常来自 Adam 型归一化更新。
#核心动机
超大 batch 下,不同层参数范数和更新范数差异显著,统一步长容易让某些层更新过大或过小。
#本质
LAMB 不是只看逐坐标统计,还看整层的整体尺度关系。这说明大家已经开始从“坐标级”转向“张量级”结构。
#8.2 Adafactor:为省内存服务
Adafactor 的核心目标非常直接:Adam 太占内存了。
对于矩阵参数 W,Adam 要存同形状的二阶状态 V。Adafactor 则把它近似分解为行、列统计:
V ≈ r c^T
或者说只存:
- 每行的均方统计;
- 每列的均方统计。
这样内存从 O(mn) 降到 O(m+n)。
#动机
当模型参数达到数十亿、上百亿时,优化器状态直接决定能不能训。
#意义
这说明优化器设计开始不仅是数学问题,更是系统问题:显存、通信和硬件约束进入核心目标。
#8.3 Shampoo:利用矩阵几何的预条件器
Shampoo 是非常关键的一条线,因为它和 Muon 的精神距离很近。
对于矩阵梯度 G ∈ R^{m×n},Shampoo 不再只做逐元素缩放,而是估计:
- 左侧二阶统计:
L_t = Σ G_t G_t^T - 右侧二阶统计:
R_t = Σ G_t^T G_t
然后用矩阵逆幂根做预条件:
G'_t = L_t^{-1/4} G_t R_t^{-1/4}
这样更新就尊重了矩阵的行列结构。
#它解决了什么?
- 比逐坐标方法更接近真实曲率结构;
- 能利用矩阵方向之间的耦合信息;
- 对大型层参数更自然。
#它为什么没完全统治实践?
因为代价大:
- 要维护矩阵级统计;
- 要算矩阵逆幂根;
- 分布式实现、数值稳定、吞吐都更复杂。
但它非常重要,因为它清楚地提出一个方向:
对矩阵参数,真正合理的优化器不应只逐元素地缩放,而应做结构化预条件。
Muon 在某种意义上,就是把这条线进一步推向了一个更轻、更适合现代模型训练的版本。
#8.4 Sophia:近似二阶、关注 curvature 的低成本路线
Sophia 这类方法的代表性思想是:
- 一阶方法只看梯度,不看 curvature;
- 真正牛的二阶方法又太贵;
- 那能不能用 Hessian 对角近似、Gauss-Newton 近似或者 cheap curvature estimate,得到比 Adam 更有结构感、但比全二阶更便宜的更新?
它们反映出一个持续动机:
只靠梯度均值和平方均值,不足以刻画大模型训练的几何结构。
#九、为什么会走到 Muon:大模型时代的核心动因
Muon 的出现,不是偶然冒出来一个新公式,而是好几条历史趋势汇合:
#9.1 对 AdamW 的不满越来越具体
在大模型里,AdamW 很强,但问题也非常具体:
- 逐坐标自适应有时过于“局部”;
- 更新方向未必尊重矩阵层的整体结构;
- 状态成本高;
- 某些规模和 batch 区间下,不一定是吞吐/样本效率最优。
#9.2 大量关键参数其实是 2D 矩阵
Transformer 的主干 FLOPs 主要花在线性层上,而它们几乎都是大矩阵:
- Q, K, V, O 投影;
- MLP 上下投影;
- embedding / lm head。
既然参数是矩阵,梯度也是矩阵,那么优化器若完全忽略其谱结构、行列结构,就显得“有点粗糙”。
#9.3 工程上需要比 Shampoo 更轻的方法
Shampoo 指出了方向,但实现/代价偏重。大家自然会问:
有没有一种方法,能吃到一部分矩阵几何的红利,但不用承担完整二阶预条件器的高成本?
#9.4 正交化/白化类更新重新受到关注
在深网络里,人们逐渐意识到:很多训练困难和表示退化都和方向冗余、尺度耦合、谱形状不良有关。于是:
- 正交初始化长期有效;
- 归一化层长期有效;
- 某些更新若能让步子在矩阵空间里更“均匀”、更“各向同性”,常常能带来好处。
Muon 就是在这种背景下强调:
对矩阵更新,先做某种意义上的正交化/极分解式归一化,再更新参数,可能比逐元素 AdamW 更贴近适合大模型的优化几何。
#十、Muon 的核心方法:它到底在干什么?
先说明一下:Muon 目前最值得抓的是方法论本质,而不是死记某个实现细枝末节。不同实现版本可能在动量、缩放、分组和数值细节上略有差异,但核心思想相对稳定。
#10.1 一句话直觉
Muon 主要面向 2D 权重矩阵,把原始梯度更新变成一个“正交化后的矩阵方向”,使得更新更多由子空间方向决定,而不过分受奇异值尺度扭曲影响。
如果说:
- AdamW 是“逐坐标归一化”;
- Shampoo 是“矩阵二阶预条件”;
那么 Muon 更像是:
- 矩阵级方向净化 / 谱归一化 / 正交化更新。
#10.2 从梯度矩阵到正交化更新
设某个矩阵参数的梯度(或动量)是 G ∈ R^{m×n}。
对 SGD/AdamW 来说,通常直接用 G 或其逐元素缩放版本去更新。
但 Muon 会先把它变成一个“正交化”的矩阵 U。直观上,它保留 G 的主要作用子空间,却压平不同奇异方向上的尺度差异。
如果做 SVD:
G = P Σ Q^T
则一种理想化的正交化形式是:
orth(G) = P Q^T
也就是把奇异值 Σ 去掉,只保留左右奇异向量张成的方向结构。
这可以看成矩阵的极分解中的正交因子。
#10.3 为什么这样做有意义?
因为原始梯度矩阵的奇异值往往很不平衡:
- 某些方向特别大;
- 某些方向特别小;
- 这既可能反映真实重要性,也可能只是局部参数化尺度、激活统计、层间耦合导致的病态缩放。
如果你直接按 G 更新,那么步子会被这些尺度严重扭曲;而如果用 P Q^T 这样的正交化方向,更新更像是在说:
我相信这个梯度定义出来的“输入—输出子空间对应关系”,但不完全相信它当前的奇异值尺度。
这和很多现代训练经验是吻合的:
- 参数化会诱导很多不必要的尺度自由度;
- 方向信息常常比绝对尺度更稳健;
- 对矩阵层来说,子空间几何可能比逐坐标量级更重要。
#10.4 一个更操作性的描述
Muon 通常会:
- 先像 Momentum 一样维护矩阵级动量
M_t; - 取某个矩阵更新候选
H_t(可能就是M_t或其变体); - 对
H_t做正交化近似,得到U_t; - 用
U_t去更新参数矩阵; - 对非矩阵参数(如 bias、norm scale)通常仍用 AdamW 或其它常规优化器。
所以在真实大模型训练中,它往往不是“全参数统一用 Muon”,而是:
- 2D 大矩阵参数:Muon
- 标量/向量参数:AdamW 或类似方法
#10.5 正交化怎么高效实现?
真正算一次完整 SVD 很贵,所以工程实现一般不会每步都做精确 SVD,而会用:
- Newton-Schulz 迭代;
- 极分解近似;
- 一些低步数矩阵函数近似;
- 针对 bf16/fp32 混合精度的数值技巧。
Newton-Schulz 的思想可以概括为:
通过矩阵迭代,把一个矩阵逐渐推向其极分解中的正交因子。
这类迭代特别适合 GPU 上的矩阵乘法实现,因此在现代硬件上有吸引力。
#10.6 Muon 和 Shampoo 的差异
二者都尊重矩阵结构,但角度不同:
#Shampoo:
- 通过估计二阶统计矩阵来做预条件;
- 目标更接近曲率校正;
- 更像“结构化二阶方法”。
#Muon:
- 不显式估计完整 curvature;
- 更强调把更新变成“正交化的矩阵方向”;
- 更像“结构化方向归一化方法”。
所以 Muon 并不是“更便宜的 AdamW”,而是对优化几何有不同假设:
矩阵更新最重要的是子空间方向,而不是每个奇异方向原始幅值。
#10.7 Muon 的潜在优点
在大模型训练里,人们关注它通常是因为以下几点:
#(1)更适合矩阵主导的网络
Transformer 的核心计算都在矩阵乘法上,Muon 对这些参数形状天然匹配。
#(2)可能提升样本效率/训练速度
如果更新方向更“干净”,可能减少无效震荡,提高有效步长。
#(3)某些设置下吞吐/效果权衡更好
相比重型二阶方法,它可能更便宜;相比 AdamW,它可能更懂矩阵结构。
#(4)与大 batch 训练可能更契合
当噪声较小、梯度更稳定时,矩阵级几何归一化的收益可能更明显。
#10.8 Muon 的边界与风险
它也不是银弹。
#(1)并非所有参数都适合
对 bias、norm scale、embedding 的某些部分,矩阵正交化未必合适。
#(2)可能过度抹平有意义的谱信息
梯度奇异值不平衡有时确实反映“某些方向更该大步走”。如果一刀切把奇异值全部抹掉,可能损失信息。
#(3)数值与实现细节很关键
正交化近似、精度、截断、缩放系数、更新频率,都可能极大影响效果。
#(4)结果依赖具体模型族与训练配方
优化器从来不是脱离系统的:
- 初始化;
- normalization;
- batch size;
- LR schedule;
- weight decay;
- precision;
- parallelism。
这些都决定 Muon 到底有多香。
#十一、把整条演化线串起来:每一步到底解决了前一步什么问题?
这里做一个压缩总结。
#11.1 SGD
想解决的问题:最基本地利用梯度下降。
不足:
- 梯度噪声大;
- 狭长谷底震荡;
- 统一学习率不合适。
#11.2 Momentum / Nesterov
相对 SGD 想解决的问题:
- 利用时间历史,减小噪声影响;
- 沿稳定方向加速;
- 减少震荡。
仍不足:
- 没有坐标级自适应;
- 对不同维度尺度差异无能为力。
#11.3 AdaGrad
相对 Momentum/SGD 想解决的问题:
- 不同维度学习率应该不同;
- 稀疏维度应该得到更大有效步长。
仍不足:
- 学习率单调衰减,后期走不动。
#11.4 RMSProp
相对 AdaGrad 想解决的问题:
- 只记近期统计,适应非平稳训练过程。
仍不足:
- 没有完整结合动量方向稳定性。
#11.5 Adam
相对 RMSProp + Momentum 想解决的问题:
- 兼顾方向稳定与自适应缩放;
- 让训练更省心、更快启动。
仍不足:
- 状态成本高;
- 泛化未必最佳;
- 权重衰减语义不清;
- 忽略矩阵结构。
#11.6 AdamW
相对 Adam 想解决的问题:
- 解耦 weight decay,让正则更合理。
仍不足:
- 仍然是逐坐标方法;
- 仍有较高状态成本;
- 仍未利用矩阵级几何。
#11.7 LAMB / Adafactor / Shampoo / Sophia
相对 AdamW 想解决的问题:
- LAMB:超大 batch 层间尺度不匹配;
- Adafactor:状态内存太贵;
- Shampoo:逐坐标太粗糙,需要矩阵级预条件;
- Sophia:想吃 curvature 红利但不想付完整二阶代价。
#11.8 Muon
相对 AdamW / Shampoo 这条线想解决的问题:
- 逐坐标方法没有尊重矩阵参数结构;
- 重型矩阵预条件方法又太贵;
- 需要一种更贴近矩阵几何、但工程上仍可行的更新方式。
#十二、在大模型训练领域,为什么这条演化尤其重要?
大模型训练把优化器问题变得更“尖锐”,主要因为它同时放大了三个维度。
#12.1 规模放大:小缺陷会积累成大代价
几亿步训练里,一个优化器哪怕只多 2% 样本效率,差别都很大;哪怕只多 10% 状态内存,也可能决定能不能放下更大 batch。
#12.2 架构统一:大量重复矩阵层让结构型优化更有意义
Transformer 中大量层是同构的矩阵运算,这意味着:
- 如果一种矩阵优化几何有效,它可以在很多层重复受益;
- 这比在异构网络中更容易形成稳定收益。
#12.3 工程约束极强:优化器必须兼顾理论、硬件与系统
在 LLM 训练里,一个优化器是否可用,取决于:
- 能否混精;
- 能否张量并行/数据并行;
- 额外状态是否可承受;
- 核函数是否高效;
- 是否容易调参;
- 是否兼容已有训练配方。
因此,大模型优化器的演化,本质上是三股力量博弈:
- 数学几何:更新是否合理;
- 统计学习:是否样本效率高、泛化好;
- 系统工程:是否跑得动、跑得省、跑得稳。
Muon 受关注,正因为它试图处在三者的一个新平衡点上。
#十三、未来会怎么演化?我对大模型优化器的判断
我觉得未来不会是“某一个优化器永久统一天下”,而是会出现几条并行趋势。
#13.1 趋势一:混合优化器将成为常态
不同参数类型用不同优化器,会越来越自然:
- 大型 2D 权重矩阵:结构化方法(Muon / Shampoo-like / 新型矩阵优化器);
- 向量/标量参数:AdamW 或更便宜替代;
- embedding/head:可能单独设计;
- 甚至 MoE 路由器、状态空间模型中的特殊参数,也可能有专门更新规则。
这和现在大家按参数组设定不同 weight decay,本质是一条路线的继续深化。
#13.2 趋势二:从逐坐标自适应走向结构化预条件
AdamW 的核心假设是“每个坐标各管各的”,但大模型主力参数其实高度结构化。未来更可能看到:
- block-wise;
- matrix-wise;
- low-rank;
- Kronecker-factored;
- subspace-aware;
- spectral-aware。
也就是说,优化器会越来越像在做“结构化几何校正”,而不只是简单 EMA。
#13.3 趋势三:优化器与参数化共同设计
未来不只是换优化器,而是:
- 参数化方式;
- normalization 方式;
- 初始化;
- activation scaling;
- optimizer
会一起 co-design。
如果一种参数化天生让梯度谱更健康,那 Muon 这类方法可能收益更大;反之也可能不明显。优化器不会再被视为一个完全独立模块。
#13.4 趋势四:优化器会更贴近硬件原语
谁能主要依赖:
- 矩阵乘;
- 低精度稳定算子;
- 少同步通信;
- 小状态;
谁就更有机会成为工业主流。
这也是为什么 Newton-Schulz 这类“矩阵乘友好”的近似会有吸引力。
#13.5 趋势五:预训练与后训练可能分化
预训练关注:
- 长程稳定;
- 吞吐;
- 样本效率;
- 大 batch 可扩展性。
后训练/对齐/RL 关注:
- 非平稳目标;
- 更高噪声;
- 稀疏反馈;
- 多阶段分布迁移。
这两类场景对优化器的最优选择未必相同。Muon 也许在预训练里更强,但未必直接等价于后训练最好。
#13.6 趋势六:真正大的突破可能来自“优化器 + 数据/课程 + 模型内部状态”的联动
从更长远看,单纯参数空间的一阶/二阶更新也许不是终点。未来可能出现:
- 利用模型内部表征统计的优化器;
- 基于激活子空间而非仅参数梯度的更新;
- 与 curriculum / data scheduling 联动的自适应优化;
- 更接近 model-based training dynamics control 的方法。
如果说 AdamW 还停留在“参数梯度统计学”,那未来可能走向“表示-参数-数据三者耦合的训练控制器”。
#十四、我对 Muon 的整体判断
如果要一句话评价:
Muon 不是对 AdamW 的小修小补,而是一次很重要的“视角切换”:从逐坐标优化,转向矩阵几何优化。
它的重要性不一定体现在“从此以后所有模型都只用 Muon”,而更可能体现在:
- 它让大家更认真地面对一个事实:LLM 主体参数是矩阵,不是独立标量;
- 它推动优化器从 EMA 技巧堆叠,走向更结构化的几何设计;
- 它可能成为一批新型矩阵优化器的起点,而不是终点。
如果未来回头看,我猜真正留下来的不一定是 Muon 的某个具体实现细节,而是它代表的原则:
- 更新要尊重参数张量结构;
- 子空间方向信息比逐元素幅值更重要;
- 优化器设计要同时考虑几何、系统和大规模训练现实。
#十五、最后给一个最短总结
如果把这条历史压成最短一句话:
- SGD:先学会往负梯度走;
- Momentum:别只看当下,要利用历史方向;
- AdaGrad/RMSProp/Adam:不同维度应该有不同步长;
- AdamW:把正则语义理顺,成为大模型默认基线;
- Shampoo/Sophia 等:逐坐标太粗,要更多几何信息;
- Muon:对矩阵参数,更新不该只逐元素缩放,而该先变成更“干净”的矩阵方向。
所以从 SGD 演化到 Muon,背后真正的主线不是“公式越来越花”,而是:
人们越来越不满足于把参数看成一串彼此独立的标量,而开始把优化看成一个与参数结构、模型几何和大规模系统约束共同耦合的问题。
这就是它在大模型训练时代最核心的意义。