TT Lab
블로그

한국어 English 日本語 中文

시작하기
블로그

블로그

작은 GPT 로 재 본 AdamW 대 Muon 대 MUON+

상태: 초안 (2026-10-31), 실측. 모든 학습은 필자가 8GB 노트북 GPU 한 장에서 직접 돌렸습니다. 조건·학습률 후보·판정 기준은 첫 실행 전에 적어 두었고(사전 등록), 실행은 그 규칙대로 자동으로 이어졌습니다. 논문 수치는 1편과 같은 원문 확인본입니다. 작성 규칙: 실측 데이터가 기본이고, 못 잰 것은 「미실측」, 확인하지 못한 것은 「미확인」으로 표시합니다.

목차

1. 무엇을 확인하나

1편에서 본 논문들의 주장을 세 가지 질문으로 줄였습니다.

  1. 같은 모델·데이터·토큰에서 옵티마이저만 바꾸면, 학습률을 옵티마이저마다 따로 맞춘 뒤에도 Muon 이 AdamW 보다 낮은 손실에 닿는가?
  2. MUON+ 의 「직교화 뒤 정규화 한 단계」는 이 크기에서도 차이를 만드는가?
  3. 배치를 키우면 AdamW 와 Muon 의 격차가 벌어지는가(2505.02222, 2608.25990 의 주장)?

규모는 논문보다 훨씬 작습니다. 3,400만 파라미터 모델에 토큰 1억 개입니다. 그래서 이 글의 결론은 「이 크기에서는 이랬다」이지 논문을 확인하거나 반박하는 것이 아닙니다.

2. 실험 설계

모델과 데이터

같게 묶은 것

데이터 순서(고정 순열, 모든 실행이 같은 시퀀스를 같은 순서로 봄), 토큰 예산, 배치, 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(정규화 이득은 decay 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 안팎)와 스무 배쯤 달라서, λ 를 똑같이 0.1 로 두면 실제 감쇠가 스무 배 차이 납니다(1편 4절).

MUON+ 는 논문 의사코드와 두 군데가 다릅니다. 논문은 네스테로프를 쓰지 않고 크기 보정이 sqrt(행/열)인데, 여기서는 Muon 과 똑같이 두고 정규화 한 단계만 더했습니다. 논문이 「바꾼 것은 이 한 단계」라고 말하므로 차이를 그 단계로 좁히려는 선택이고, 크기 차이는 학습률 탐색이 흡수합니다.

학습률 탐색과 본 실행(미리 정한 규칙)

  1. 탐색: 토큰 5천만, 배치 64 시퀀스(32,768 토큰, 1,525 걸음), 시드 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억(3,051 걸음), 배치 64 시퀀스, 각 최적 학습률, 시드 0·1·2.
  3. 큰 배치: 토큰 1억, 배치 256 시퀀스(131,072 토큰, 762 걸음), AdamW 와 Muon, 학습률은 배치 64 최적값의 1배와 2배. 나은 쪽을 시드 하나 더.
  4. 판정: 최종 손실 차이가 두 옵티마이저 시드 표준편차의 합보다 크면 「낫다」, 작으면 「구별 못 함」.

이 순서는 진행 스크립트가 규칙대로 자동으로 이었습니다. 결과를 보고 끼어들 자리를 없애려는 것입니다.

환경

8GB 노트북 GPU 한 장, PyTorch 2.9(CUDA 12.8), 쿠버네티스 위의 학습 작업(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 토큰) 고른 값
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억, 시드 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

판정(미리 정한 기준: 차이 > 두 표준편차의 합)

같은 손실에 토큰이 얼마나 드나

곡선 가운데 일정 학습률 구간(2M–80M 토큰)은 두 옵티마이저가 같은 스케줄 위에 있으므로, 같은 손실에 처음 닿는 토큰을 비교할 수 있습니다. 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)에 9,020만 토큰에서 닿았습니다(시드 셋 모두). 다만 감소 구간에서는 손실이 스케줄 모양을 따라 급히 떨어지므로, 이 「약 10% 절약」은 하한으로만 읽어야 합니다. 9,000만 토큰 예산으로 처음부터 Muon 을 돌리면 그 시점에 이미 감소가 끝나 더 낮았을 것이기 때문입니다(그 실행은 미실측).

논문의 「같은 손실에 토큰 10–15% 적게」(2505.02222, 수억–수십억 파라미터, Chinchilla 의 몇 배 토큰)보다 이 실험의 이점이 훨씬 큽니다. 모델이 작고(3,400만), 토큰이 파라미터의 약 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 는 걸음마다 한 번이라 걸음 수가 줄면 몫도 줄어듭니다.

6. 사후 점검: 결과를 본 뒤 생긴 의문 셋

아래 다섯 실행은 위 결과를 본 뒤에 정했습니다. 그래서 위의 판정을 바꾸지 않고, 「그 판정을 얼마나 믿을 수 있나」를 보는 데만 씁니다. 모두 시드 하나입니다.

의문 실행 결과 비교 대상
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. 한계

원자료

로그인하면 좋아요를 누를 수 있습니다

댓글

아직 댓글이 없습니다.

로그인하면 댓글을 쓸 수 있습니다