TT Lab
博客

한국어 English 日本語 中文

开始
博客

博客

小型 GPT 实测 AdamW 对比 Muon 对比 MUON+

状态:草稿(2026-10-31),实测。 所有训练均由笔者在单张 8GB 笔记本 GPU 上亲自运行。条件、学习率候选及判定标准在首次运行前均已记录(预注册),运行则严格按照该规则自动进行。论文数据为与 第 1 篇相同的原文核对版。 编写规则:以实测数据为基础,未能测得的标记为「未实测」,未确认的标记为「未确认」。

目录

1. 验证目标

第 1 篇中看到的论文观点归纳为三个问题。

  1. 在相同的模型、数据和 Token 下仅更换优化器, 即使为各个优化器分别调整了学习率, Muon 是否仍能达到比 AdamW 更低的损失?
  2. MUON+ 的「正交化后归一化的一步」在这种规模下是否也能拉开差距?
  3. 增大批大小是否会拉大 AdamW 与 Muon 之间的差距(2505.02222、2608.25990 的观点)?

规模比论文中要小得多,是一个 3400 万参数的模型和 1 亿个 Token。因此本文的结论是「在此规模下表现如此」,而非用于验证或反驳论文。

2. 实验设计

模型与数据

控制变量

数据顺序(固定排列,所有运行以相同顺序处理相同的序列)、Token 预算、批大小、bf16 自动混合精度、torch.compile、梯度范数裁剪 1.0、学习率调度(WSD:前 2% 线性预热,中间保持不变,最后 20% 线性衰减至 0)、评估集。随机种子仅改变初始化。

三种优化器

隐藏层矩阵(q·k·v·o,两个 MLP) 嵌入层·输出层·归一化层
AdamW AdamW β=(0.9, 0.95),weight decay 0.1 同 AdamW(归一化层衰减为 0)
Muon 涅斯捷罗夫动量 0.95 → Newton–Schulz 5次迭代(bf16) → sqrt(max(1, 行/列)) 校正 辅助 AdamW,学习率 = AdamW 搜索的最优值
MUON+ 与 Muon 相同,正交化结果再按列范数 → 行范数额外除以一次 同上

刻意匹配了两个方面。首先,将 Muon 运行中辅助 AdamW 的学习率固定为 AdamW 运行的最优值,从而确保两次运行的差异仅在于「隐藏层矩阵的优化器」这一个变量。其次,使 weight decay 在单步中权重缩减的比率(学习率 × λ)与 AdamW 保持一致。Muon 的学习率规范(大约 0.02)与 AdamW(大约 1e-3)相差约 20 倍,因此如果将 λ 同样设为 0.1,实际衰减幅度将相差 20 倍(第 1 篇第 4 节)。

MUON+ 与论文中的伪代码有两处不同。论文中没有使用涅斯捷罗夫动量,且大小校正为 sqrt(行/列),而此处保持与 Muon 完全相同,仅增加了一步归一化。由于论文提到「改变的只有这一步」,此选择旨在将差异缩小到该步骤,而大小差异则由学习率搜索来吸收。

学习率搜索与正式运行(预定规则)

  1. 搜索:5000 万 Token,批大小 64 个序列(32,768 个 Token,1525 步),随机种子 0。候选学习率:AdamW {1e-3, 2e-3, 4e-3, 8e-3},Muon {0.01, 0.02, 0.04, 0.08},MUON+ {0.02, 0.04, 0.08, 0.16}。挑选出产生最低最终验证损失的值,如果该值位于网格边界,则在该方向上再多跑一个点(仅限一次)。
  2. 正式运行:1 亿 Token(3051 步),批大小 64 个序列,采用各自的最优学习率,随机种子 0、1、2。
  3. 大批大小:1 亿 Token,批大小 256 个序列(131,072 个 Token,762 步),仅测 AdamW 与 Muon,学习率为批大小 64 最优值的 1 倍和 2 倍。表现较好的一方多测一个随机种子。
  4. 判定:如果最终损失差大于两个优化器种子标准差之和,则判定为「更优」,若小于则判定为「无显著差异」。

该顺序由执行脚本按规则自动串联,旨在杜绝查看结果后再进行人工干预的空间。

环境

单张 8GB 笔记本 GPU,PyTorch 2.9(CUDA 12.8),在 Kubernetes 上运行训练任务(Kubeflow Trainer)。每次运行结束时会保存验证损失曲线(约 40 个点)、吞吐量(排除前 11 步)以及 GPU 最大显存。

3. 学习率搜索:不同优化器的「理想区间」各不相同

학습률 탐색: 최적값 기준으로 몇 배인가 50M 토큰, 시드 0, 실측. 4.4 보다 큰 값(발산에 가까운 점)은 위 끝에 붙여 그림 3.6 3.8 4 4.2 4.4 -1 0 1 2 3 4 log2(학습률 / 그 옵티마이저의 최적값) 마지막 검증 손실 AdamW Muon MUON+
图:学习率搜索
优化器 学习率 → 最终验证损失(50M Token) 选取的值
AdamW 5e-4: 3.863 · 1e-3: 3.727 · 2e-3: 3.829 · 4e-3: 4.315 · 8e-3: 6.351 1e-3
Muon 0.005: 3.611 · 0.01: 3.602 · 0.02: 3.633 · 0.04: 3.973 · 0.08: 5.195 0.01
MUON+ 0.01: 3.612 · 0.02: 3.643 · 0.04: 4.105 · 0.08: 5.186 · 0.16: 6.463 0.01

可以看出三个特点。

4. 正式运行:1 亿 Token,3 个随机种子

검증 손실: 같은 토큰에서 비교(시드 3개 평균) 약 3,400만 파라미터 GPT, FineWeb-Edu, 배치 32,768 토큰, 8GB 노트북 GPU 실측 3.5 3.75 4 4.25 4.5 0 20 40 60 80 100 학습한 토큰(백만) 검증 손실 AdamW MUON+ Muon
图:验证损失曲线
优化器 学习率 最终验证损失(平均值 ± 标准差) 各种子表现 吞吐量(Token/秒) GPU 最大显存
AdamW 1e-3 3.4896 ± 0.0026 3.4902, 3.4867, 3.4918 99,583 3.24GB
Muon 0.01 3.4085 ± 0.0033 3.4087, 3.4117, 3.4052 94,170 3.15GB
MUON+ 0.01 3.4214 ± 0.0029 3.4181, 3.4227, 3.4236 93,610 3.15GB

判定(预定标准:差值 > 两个标准差之和)

达到相同损失所需 Token 数量

在曲线的中段固定学习率区间(2M–80M Token),两个优化器采用相同的调度策略,因此可以比较首次达到相同损失所需的 Token 数量。这与 2505.02222 中的 Token 比率 R = T(AdamW) / T(Muon) 定义相同。

目标损失 AdamW 使用的 Token Muon 使用的 Token 比率
4.2 27.4M 16.8M 1.63
4.0 37.4M 23.6M 1.59
3.8 58.9M 39.4M 1.50
3.7 78.1M 54.2M 1.44

在达到相同损失时,AdamW 比 Muon 多消耗了 1.4–1.6 倍的 Token,且随着训练的进行,该比例逐渐减小。如果将最后的衰减阶段也计算在内,Muon 在 9020 万 Token 处就达到了 AdamW 的最终损失(3.490)(所有随机种子均如此)。不过,由于在衰减阶段损失会沿着调度曲线急剧下降,这种「约 10% 的节省」只能作为下限来看待。因为如果以 9000 万 Token 的预算从头开始运行 Muon,由于此时已经结束了衰减,损失可能会更低(该运行未实测)。

这比论文中提到的「达到相同损失可少用 10–15% 的 Token」(2505.02222,数亿至数十亿参数,达到 Chinchilla 规定倍数的 Token)的优势要大得多。这可能是因为模型较小(3400 万),且 Token 数量仅为参数量的约 3 倍,属于非常短的训练。从上表也可以看出,随着训练时间的延长,该比例确实在不断下降。

时间和内存

5. 大批大小:差距拉大

我们将批大小扩大了4倍(131,072个token),并在762步中训练了相同的1亿个token。学习率在批大小为64的最佳值的1倍和2倍之间进行测试,并选择了较好的一方(两者都是1倍较好),然后用该值多跑了一个随机种子。

배치를 4배로 키우면 격차는? 100M 토큰, 각 배치에서 고른 학습률, 시드 평균, 실측 AdamW Muon 3.3 3.4 3.5 3.6 3.7 3.8 마지막 검증 손실 3.490 3.409 배치 32,768 토큰 3.727 3.508 배치 131,072 토큰
图:不同批大小下的最终损失
批大小 AdamW Muon AdamW − Muon
32,768个token(3,051步) 3.490(种子3) 3.409(种子3) 0.081
131,072个token(762步) 3.727(1e-3,种子2:3.726·3.729) 3.508(0.01,种子2:3.507·3.509) 0.219
大批大小的2倍学习率 3.936(2e-3) 3.515(0.02)

如果将相同的token以四分之一的步数使用,两者都会受损,但受损的幅度不同。AdamW恶化了0.24,Muon恶化了0.10。差距从0.081扩大到0.219,变成了2.7倍。固定学习率阶段的token比例也呈现相同的方向。在达到4.2损失时,token比在批大小64时为1.63,在批大小256时为1.78(在4.0时为1.59对1.76)。这与“在大批大小下,Muon的数据效率得以保持或增加”(2505.02222)以及“批大小越大,AdamW与Muon的差距越大”(2608.25990 表5:0.048 → 0.110)方向一致。

顺便一提,在大批大小下,Muon的吞吐量负担降到了1.5%(99,604对101,120 token/秒)。由于Newton–Schulz每步只运行一次,步数减少时其开销份额也会减少。

6. 事后检查:看到结果后产生的三个疑问

以下五个运行是在看到上述结果后决定的。因此,它们不用于改变上述判断,仅用于观察“该判断有多大可信度”。它们都只有一个随机种子。

疑问 运行 结果 对比对象
MUON+的学习率达到了网格的边缘 MUON+ 0.005,50M token 3.5953 MUON+ 0.01:3.6120,Muon最优 0.01:3.6018
AdamW是否因2%的预热(30步)而受损 AdamW 1e-3,预热10% 3.7723 预热2%:3.7270
〃 AdamW 2e-3,预热10% 3.7235 预热2%:3.8286
大批大小的差距是否是因为预热时间短(15步)造成的 AdamW 1e-3,批大小256,预热10% 3.7082 预热2%:3.7271
〃 Muon 0.01,批大小256,预热10% 3.5192 预热2%:3.5082

7. 解读

8. 局限性

原始数据

登录后即可点赞

评论

还没有评论。

登录后即可发表评论