TT Lab
ブログ

한국어 English 日本語 中文

はじめる
ブログ

ブログ

小さめのGPTで測定したAdamW対Muon対MUON+

ステータス: ドラフト(2026-10-31)、実測値。 すべての学習は筆者が8GBのノートPC用GPU1基で直接実行しました。条件・学習率の候補・判定基準は初回実行前に書き留めておき(事前登録)、実行はそのルールに従って自動的に継続されました。論文の数値は 第1編と同じ原文の確認済みバージョンです。 作成ルール: 実測データを基本とし、測定できなかったものは「未測定」、確認できなかったものは「未確認」と表示します。

目次

1. 何を確認するか

第1編で見た論文の主張を3つの質問に絞り込みました。

  1. 同じモデル・データ・トークンでオプティマイザのみを変更した場合、 学習率をオプティマイザごとに個別に調整した後でも、 MuonはAdamWよりも低いロスに到達するか?
  2. MUON+の「直交化後の正規化1ステップ」はこの規模でも違いを生み出すか?
  3. バッチサイズを大きくするとAdamWとMuonの格差が広がるか(2505.02222、2608.25990の主張)?

規模は論文よりもはるかに小さいです。3400万パラメータのモデルに1億トークンです。そのため、この記事の結論は「この規模ではこうだった」であり、論文の検証や反駁ではありません。

2. 実験設計

モデルとデータ

同一に揃えた条件

データの順序(固定された順列、すべての実行で同じシーケンスを同じ順序で処理)、トークンの予算、バッチサイズ、bf16自動混合精度、torch.compile、勾配ノルムクリッピング1.0、学習率スケジュール(WSD:最初の2%は線形ウォームアップ、一定区間、最後の20%を0まで線形減少)、評価セット。シードは初期化のみを変更します。

3つのオプティマイザ

隠れ層の行列(q・k・v・o、MLP 2つ) 埋め込み層・出力層・正規化層の利得
AdamW AdamW β=(0.9, 0.95)、ウェイト減衰 0.1 同一のAdamW(正規化層の利得は減衰0)
Muon ネステロフモメンタム 0.95 → Newton–Schulz 5回(bf16) → sqrt(max(1, 行/列)) による補正 補助AdamW、学習率 = AdamW探索の最適値
MUON+ Muonと同じだが、直交化結果を列ノルム → 行ノルムでさらに割る 同上

2つの点を意図的に一致させました。第1に、Muon実行における補助AdamWの学習率をAdamW実行の最適値に固定し、2つの実行の違いが「隠れ層の行列のオプティマイザ」の1つだけになるようにしました。第2に、ウェイト減衰は1ステップあたりに重みが減少する割合(学習率 × λ)をAdamWと同一にしました。Muonの学習率の規約(0.02前後)はAdamW(1e-3前後)と約20倍異なるため、λを同じく0.1に設定すると実際の減衰に20倍の差が生じるためです(第1編第4節)。

MUON+は論文の疑似コードと2箇所異なります。論文ではネステロフを使用せず、サイズ補正がsqrt(行/列)であるのに対し、ここではMuonと全く同じに設定し、正規化ステップを1つ追加しただけです。論文が「変更したのはこの1ステップである」と述べているため、違いをそのステップに絞り込むための選択であり、サイズの差は学習率の探索が吸収します。

学習率の探索と本実行(事前定義ルール)

  1. 探索: 5000万トークン、バッチサイズ64シーケンス(32,768トークン、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}。最も低い最後の検証ロスを選択し、それがグリッドの端にある場合はその方向にさらに1点実行します(1回のみ)。
  2. 本実行: 1億トークン(3051ステップ)、バッチサイズ64シーケンス、各最適学習率、シード0・1・2。
  3. 大きなバッチ: 1億トークン、バッチサイズ256シーケンス(131,072トークン、762ステップ)、AdamWとMuon、学習率はバッチ64の最適値の1倍および2倍。優れた方のシードをもう1つ追加。
  4. 判定: 最終ロスの差が2つのオプティマイザのシード標準偏差の合計より大きい場合は「優れている」、小さい場合は「区別不能」。

この順序は実行スクリプトによってルール通りに自動的に進められました。結果を見てから介入する余地をなくすためです。

環境

8GBのノートPC用GPU1基、PyTorch 2.9(CUDA 12.8)、Kubernetes上の学習ジョブ(Kubeflow Trainer)を使用して実行しました。1つの実行が終了するたびに、検証ロス曲線(約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トークン) 選択された値
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

3つのことがわかります。

4. 本実行: 1億トークン、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
図: 検証ロス曲線
オプティマイザ 学習率 最後の検証ロス(平均 ± 標準偏差) シード別 スループット(トークン/秒) 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

判定(事前定義基準: 差 > 2つの標準偏差の合計)

同じロスにどれだけのトークンがかかるか

曲線の中の一定の学習率区間(2M~80Mトークン)では、2つのオプティマイザが同じスケジュール上にあるため、同じロスに最初に到達するまでのトークン数を比較できます。2505.02222のトークン比率 R = T(AdamW) / T(Muon) と同じ定義です。

目標ロス AdamWが消費したトークン Muonが消費したトークン 比率
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倍のトークンを消費し、学習が進むにつれて比率は少しずつ減少しました。最後の減少区間まで含めると、MuonはAdamWの最終ロス(3.490)に9020万トークンで到達しました(すべてのシードのセットにおいて)。ただし、減少区間ではロスがスケジュールの形状に沿って急激に低下するため、この「約10%の節約」は下限としてのみ解釈すべきです。9000万トークンの予算で最初からMuonを実行した場合、その時点ですでに減少が終了しており、さらに低くなっていたはずであるためです(その実行は未測定)。

論文の「同じロスに対して10~15%少ないトークン」(2505.02222、数億~数十億パラメータ、Chinchillaの数倍のトークン)よりも、この実験の優位性ははるかに大きいです。モデルが小さく(3400万)、トークンがパラメータの約3倍と非常に短い学習であるためだと考えられます。上記の表でも、学習が長期化するにつれて比率が減少しました。

時間とメモリ

5. 大きなバッチ: 格差が広がった

バッチを4倍(131,072トークン)に増やし、同じ1億トークンを762ステップで学習しました。学習率はバッチ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トークン(3,051ステップ) 3.490(シード3) 3.409(シード3) 0.081
131,072トークン(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)

同じトークンを4分の1のステップで消費すると、どちらも損失が悪化しますが、悪化の度合いが異なります。AdamWは0.24悪化し、Muonは0.10悪化しました。差は0.081から0.219へと2.7倍になりました。一定学習率区間のトークンの比率も同じ傾向です。損失4.2に達するトークンの比率が、バッチ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トークン/秒)。Newton–Schulzはステップごとに1回実行されるため、ステップ数が減ればその分のコストも減少します。

6. 事後検証:結果を見た後に浮かんだ3つの疑問

以下の5つの実行は上記の結果を見た後に決定しました。そのため、上記の判定を覆すものではなく、「その判定をどれほど信用できるか」を確認するためだけに用います。すべて単一のシードです。

疑問 実行 結果 比較対象
MUON+の学習率がグリッドの端だった MUON+ 0.005、50Mトークン 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. 制限

一次データ

ログインするといいねできます

コメント

まだコメントはありません。

ログインするとコメントできます