학습: 경사하강과 역전파
2장의 신경망은 가중치만 잘 정해 주면 거의 어떤 함수든 흉내 낼 수 있다. 문제는 그 "잘 정한 가중치"를 사람이 손으로 찾을 수 없다는 것이다. Llama 3 8B에는 숫자가 약 80억 개 있다. 이 장은 그 숫자들을 데이터로부터 자동으로 맞춰 가는 방법, 즉 학습을 다룬다. 오차를 하나의 숫자(손실)로 재고, 그 숫자를 줄이는 방향(기울기)을 연쇄법칙으로 계산하고, 조금씩 내려간다. 이 단순한 절차 하나가 손글씨 인식부터 GPT까지 모든 현대 신경망을 학습시킨다.
- MSE와 교차 엔트로피를 정의하고, 분류에서 교차 엔트로피가 확신에 찬 오답을 더 강하게 벌하는 이유를 기울기로 설명할 수 있다.
- 경사하강의 갱신식과 학습률의 역할, 너무 큰 학습률이 발산하는 조건(\(\eta > 2/\lambda_{\max}\))을 안다.
- 계산 그래프에서 순전파·역전파를 손으로 따라가며 연쇄법칙으로 기울기를 구하고, 수치 미분으로 검증할 수 있다.
- 미니배치 SGD, 에폭, 배치 크기와 기울기 노이즈의 관계를 이해한다.
- Momentum·RMSProp·Adam의 갱신식을 비교하고, warmup + cosine 학습률 스케줄을 설계할 수 있다.
- Muon이 행렬 업데이트를 Newton–Schulz 반복으로 직교화하는 원리와, 어떤 파라미터에 Muon/AdamW를 쓰는지 설명할 수 있다.
- 초기화가 깊은 망의 활성값·기울기 크기를 어떻게 좌우하는지, 과적합과 정규화가 무엇인지, LLM 학습이 실제로 어떤 규모인지 안다.
학습이란 무엇인가: 손실을 줄이는 탐색
신경망은 입력 \(x\)를 받아 예측 \(\hat y = f_\theta(x)\)를 내놓는 함수다. 여기서 \(\theta\)는 모든 가중치와 편향을 한 줄로 늘어놓은 거대한 벡터다. 학습(training)은 정답이 붙은 데이터 \(\{(x_i, y_i)\}\)를 보고 "예측이 정답과 얼마나 다른가"를 재는 함수, 곧 손실 함수(loss function) \(\mathcal L(\theta)\)를 가장 작게 만드는 \(\theta\)를 찾는 일이다.
파라미터가 2개라면 \(\mathcal L(\theta_1,\theta_2)\)를 지도 위의 고도처럼 그릴 수 있다. 이것을 손실 지형(loss landscape)이라 부른다. 파라미터가 80억 개면 80억 차원 지형이 되어 그림으로 그릴 수 없지만, 원리는 같다. 어디가 가장 낮은지 전체를 볼 수는 없으니, 현재 위치에서 발밑의 기울기만 보고 내리막으로 한 걸음씩 걷는다. 이것이 경사하강이다.
이 장의 순서는 이 루프를 그대로 따른다. 먼저 손실을 어떻게 정의할지(2절), 기울기 방향으로 얼마나 움직일지(3절), 기울기를 어떻게 효율적으로 구할지(4절)를 본 뒤, 데이터를 쪼개 쓰는 미니배치(5절), 더 똑똑한 옵티마이저(6·7절), 학습률 일정(8절), 그리고 깊은 망과 일반화에서 생기는 문제(9·10절)를 다룬다. 마지막으로 LLM 학습이 실제로 어떤 규모인지 숫자로 확인한다.
손실 함수: MSE와 교차 엔트로피
손실 함수는 "얼마나 틀렸는가"를 하나의 0 이상 숫자로 바꾸는 규칙이다. 어떤 규칙을 고르느냐에 따라 모델이 무엇을 중요하게 배울지가 달라진다. 가장 많이 쓰는 두 가지를 보자.
평균 제곱 오차 (회귀)
집값, 온도처럼 연속값을 맞추는 회귀(regression)에서는 차이의 제곱을 평균 낸 MSE(Mean Squared Error)를 쓴다.
교차 엔트로피 (분류)
분류에서는 모델이 클래스마다 점수(로짓(logit)) \(z_k\)를 내고, 소프트맥스로 확률 \(p_k = e^{z_k}/\sum_j e^{z_j}\)를 만든다. 정답 클래스가 \(c\)라면 손실은 정답에 준 확률의 음의 로그다. 이것이 교차 엔트로피(cross-entropy)이며, 7장에서 볼 LLM의 사전학습 손실도 정확히 이것이다(정답 = 실제 다음 토큰).
분류인데 MSE를 쓰면 안 될까? 쓸 수는 있지만 학습이 나빠진다. 시그모이드/소프트맥스 출력은 확률이 0이나 1 근처로 포화되면 기울기 \(p(1-p)\)가 0에 가까워진다. MSE는 이 포화 기울기를 그대로 곱하므로, 모델이 "정답일 확률 0.001"이라고 확신에 차서 틀린 상황에서 오히려 기울기가 거의 0이 되어 고쳐지지 않는다. 교차 엔트로피는 −log의 기울기 \(-1/p\)가 포화 항을 정확히 상쇄해서, 크게 틀릴수록 기울기가 −1에 가까운 최대값을 유지한다. 아래에서 직접 확인해 보자.
손실 함수 비교: MSE vs 교차 엔트로피
참 분포 \(q\)와 모델 분포 \(p\) 사이의 교차 엔트로피 \(H(q,p) = -\sum_k q_k \log p_k\)는 "\(p\)를 기준으로 만든 부호로 \(q\)에서 나온 사건을 적을 때 필요한 평균 비트(나트) 수"다. 정답이 원-핫이면 \(-\log p_c\)만 남는다. \(H(q,p) = H(q) + D_{\text{KL}}(q\,\|\,p)\)이므로 교차 엔트로피 최소화는 모델 분포를 데이터 분포에 KL 발산 의미로 가깝게 만드는 일이다. 언어 모델의 퍼플렉시티 \(e^{\mathcal L_{\text{CE}}}\)는 이 값을 "평균 몇 개 후보 중에서 헷갈리는가"로 바꾼 것이다(7장).
경사하강법과 학습률
다변수 함수 \(\mathcal L(\theta)\)의 기울기(gradient) \(\nabla_\theta \mathcal L = (\partial\mathcal L/\partial\theta_1, \dots, \partial\mathcal L/\partial\theta_n)\)는 현재 위치에서 함수가 가장 가파르게 증가하는 방향을 가리키는 벡터다(크기는 그 방향의 경사도). 그러니 반대 방향으로 조금 움직이면 손실이 줄어든다. 이것이 경사하강법(gradient descent)이다.
문제는 "충분히 작은"이 얼마냐다. 너무 작으면 영원히 걸리고, 너무 크면 골짜기를 건너뛰어 반대편 벽으로 튕겨 나간다. 가장 단순한 1차원 이차 함수 \(\mathcal L = \tfrac{\lambda}{2}\theta^2\)으로 정확히 계산할 수 있다. 기울기가 \(\lambda\theta\)이므로 갱신은 \(\theta_{t+1} = (1-\eta\lambda)\theta_t\)다. 곱해지는 인자 \(|1-\eta\lambda|\)가 1보다 작아야 수렴하므로
아래 시뮬레이터에서 네 가지 손실 지형 위에 공을 놓고 굴려 보자. 등고선이 촘촘한 곳이 가파른 곳이다. 협곡 지형은 한 방향 곡률이 다른 방향의 10배인 타원형 골짜기로, 실제 신경망 손실 지형에서 흔한 "조건수가 나쁜" 상황이다. 로젠브록은 휘어진 바나나 모양 골짜기, 다중 극소는 출발점에 따라 다른 웅덩이에 빠지는 지형이다.
손실 지형 위의 경사하강
2차원 그림 때문에 "나쁜 극소에 갇히는 것"이 가장 큰 위험처럼 보이지만, 수백만 차원에서는 사정이 다르다. 기울기가 0인 임계점에서 헤시안 고윳값이 모두 양수일 확률은 차원이 커질수록 급격히 작아져, 대부분의 임계점은 어떤 방향으로는 오르막, 다른 방향으로는 내리막인 안장점(saddle point)이다. 큰 신경망에서 찾아지는 극소들은 손실 값이 서로 비슷하다는 경험적·이론적 결과가 많다(Dauphin et al., 2014; Choromanska et al., 2015). 실제로 더 골치 아픈 것은 평평한 고원과 나쁜 조건수다.
역전파: 연쇄법칙으로 기울기 나르기
경사하강에는 모든 파라미터에 대한 \(\partial\mathcal L/\partial\theta_j\)가 필요하다. 파라미터마다 \(\theta_j\)를 살짝 바꿔 손실을 다시 재는 수치 미분은 파라미터가 \(n\)개면 순전파를 \(n\)번(중심 차분이면 \(2n\)번) 해야 한다. 80억 번은 불가능하다. 역전파(backpropagation)는 순전파 한 번 + 역전파 한 번, 대략 순전파 비용의 3배로 모든 기울기를 정확히 구한다(Rumelhart, Hinton & Williams, 1986). 비결은 미적분의 연쇄법칙과 중간값 재사용이다.
각 연산 노드는 자기 국소 기울기만 알면 된다. 곱셈 \(m = w\cdot x\)는 \(\partial m/\partial w = x\), \(\partial m/\partial x = w\) — 상대편 입력을 그대로 넘긴다. 덧셈은 기울기를 1배로 복사해 나눠 준다. 시그모이드는 \(\sigma'(z) = \sigma(z)(1-\sigma(z))\)로, 순전파에서 계산한 \(a\)를 재사용한다. 그래서 역전파는 순전파 때의 중간값을 메모리에 저장해야 하고, 이것이 학습이 추론보다 메모리를 훨씬 많이 쓰는 이유 중 하나다(11절의 활성값 메모리).
계산 그래프에서 순전파·역전파 따라가기
PyTorch의 loss.backward()와 JAX의 jax.grad(loss_fn)은 연산의 미분 규칙과 중간값을 이용해, 이 시뮬레이터처럼 출력에서 입력 쪽으로 기울기를 전파한다. PyTorch는 실행 중 동적 그래프를 만들고, JAX는 함수를 추적해 미분된 함수로 변환한다. 이것을 역방향 모드 자동 미분(reverse-mode autodiff)이라 한다. 출력이 스칼라(손실) 하나이고 입력(파라미터)이 수십억 개일 때 역방향 모드가 압도적으로 유리하다. 행렬 연산으로 보면 \(Y = XW\)의 역전파는 \(\partial L/\partial X = (\partial L/\partial Y)\,W^\top\), \(\partial L/\partial W = X^\top(\partial L/\partial Y)\)로, 순전파 행렬곱 1번에 역전파 행렬곱 2번이 필요하다. 학습 FLOPs가 "파라미터당 토큰당 6"(순전파 2 + 역전파 4)인 이유다(7장의 \(C \approx 6ND\)).
미니배치 SGD: 에폭, 배치, 노이즈
지금까지는 손실 \(\mathcal L(\theta)\)를 정확히 안다고 가정했다. 하지만 \(\mathcal L\)은 데이터 전체에 대한 평균이고, 데이터가 수조 토큰이면 기울기 한 번 구하는 데 전체를 다 볼 수는 없다. 그래서 무작위로 뽑은 작은 묶음, 미니배치(mini-batch) \(\mathcal B\)의 평균 기울기로 전체 기울기를 추정한다. 이것이 확률적 경사하강법(SGD, Stochastic Gradient Descent)이다.
노이즈는 단점만 있는 것이 아니다. 계산이 싸서 같은 시간에 훨씬 많은 스텝을 밟을 수 있고, 약간의 흔들림이 날카로운 극소에서 빠져나와 평평한(일반화가 잘 되는) 극소로 가게 돕는다는 관찰도 있다. 반면 배치가 작으면 바닥 근처에서 계속 떨려 정확히 수렴하지 못하므로, 학습률을 점점 줄여야 한다(8절). 아래는 점 데이터에 직선 \(\hat y = wx + b\)를 MSE로 피팅하는 가장 단순한 경우다. 파라미터가 \((w, b)\) 두 개뿐이라 오른쪽에 손실 지형 전체를 그릴 수 있다.
선형회귀를 미니배치 SGD로 학습
GPU는 행렬곱을 크게 묶을수록 효율이 좋아서, 실제로는 하드웨어가 허락하는 한 배치를 키운다. 배치를 \(k\)배 키우면 기울기 노이즈가 줄어드는 만큼 학습률도 키울 수 있다(SGD는 대략 선형, Adam은 대략 \(\sqrt k\)배 규칙이 경험적으로 알려져 있다). 다만 어느 임계 배치 크기(critical batch size)를 넘으면 배치를 늘려도 필요한 스텝 수가 더 줄지 않아 계산만 낭비된다(McCandlish et al., 2018). LLM 사전학습의 배치가 "수백만 토큰"인 것은 이 경계 근처를 노린 것이다.
옵티마이저: Momentum, RMSProp, Adam
3절의 협곡 지형에서 본 문제, 즉 가파른 방향 때문에 학습률을 낮춰야 하고 그 때문에 완만한 방향으로는 기어가는 문제를 고치는 두 가지 아이디어가 있다. 하나는 관성(지그재그 성분은 상쇄되고 일관된 방향 성분은 누적된다), 다른 하나는 좌표별 보폭 조절(기울기가 늘 큰 좌표는 보폭을 줄이고 작은 좌표는 키운다)이다.
| 옵티마이저 | 갱신식 (\(g_t = \nabla\mathcal L(\theta_t)\)) | 아이디어 |
|---|---|---|
| SGD | \(\theta \leftarrow \theta - \eta g_t\) | 기울기 방향으로 그대로 |
| Momentum | \(v \leftarrow \mu v + g_t,\;\; \theta \leftarrow \theta - \eta v\) | 속도를 누적(지수 이동 합). \(\mu = 0.9\)면 실효 보폭 약 10배 |
| RMSProp | \(s \leftarrow \rho s + (1-\rho) g_t^2,\;\; \theta \leftarrow \theta - \eta\, g_t / (\sqrt{s}+\epsilon)\) | 좌표별로 최근 기울기 크기(RMS)로 나눔 |
| Adam | \(m \leftarrow \beta_1 m + (1-\beta_1) g_t,\;\; v \leftarrow \beta_2 v + (1-\beta_2) g_t^2\) \(\hat m = m/(1-\beta_1^t),\; \hat v = v/(1-\beta_2^t),\;\; \theta \leftarrow \theta - \eta\, \hat m/(\sqrt{\hat v}+\epsilon)\) | Momentum + RMSProp + 초기 편향 보정 |
Adam(Adaptive Moment Estimation; Kingma & Ba, 2015)은 기울기의 1차 모멘트(평균, \(m\))와 2차 모멘트(제곱 평균, \(v\))를 지수 이동 평균으로 추적한다. \(\hat m/\sqrt{\hat v}\)는 기울기 부호가 일관되면 ±1 근처, 들쭉날쭉하면 0 근처가 되는 "신호 대 잡음비" 같은 양이라, 한 스텝의 크기가 대략 \(\eta\)로 제한된다. 기울기의 절대 크기에 둔감하다는 이 성질 덕분에, 층마다 기울기 스케일이 수십 배씩 다른 Transformer에서도 학습률 하나로 잘 돌아간다. 편향 보정은 \(m, v\)를 0으로 시작해 초반에 값이 작게 나오는 것을 \(1/(1-\beta^t)\)로 키워 주는 장치다. 기본값은 \(\beta_1 = 0.9\), \(\beta_2 = 0.999\)(LLM은 흔히 0.95), \(\epsilon = 10^{-8}\)이다.
옵티마이저 레이스
L2 정규화(10절)를 손실에 \(\tfrac{\lambda}{2}\|\theta\|^2\)로 더하면 그 기울기 \(\lambda\theta\)도 Adam의 \(\sqrt{\hat v}\)로 나뉘어, 기울기가 큰 파라미터일수록 정규화가 약해지는 이상한 효과가 생긴다. AdamW(Loshchilov & Hutter, 2019)는 감쇠를 갱신에서 따로 \(\theta \leftarrow \theta - \eta\big(\hat m/(\sqrt{\hat v}+\epsilon) + \lambda\theta\big)\)로 적용한다. GPT-3, Llama 계열 등 대부분의 LLM이 AdamW(\(\beta_2 = 0.95\), 가중치 감쇠 0.1 내외)로 학습된다.
Muon: 행렬 업데이트를 직교화하는 옵티마이저
Adam은 파라미터를 숫자 하나하나로 본다. 좌표마다 \(m\)과 \(v\)를 따로 추적하고 좌표마다 보폭을 정한다. 그런데 Transformer 파라미터의 대부분은 숫자의 나열이 아니라 행렬이다. 어텐션의 \(W_Q, W_K, W_V, W_O\), FFN의 \(W_1, W_2\)는 모두 입력 벡터를 출력 벡터로 보내는 선형 사상이다. 2024년 말 Keller Jordan 등이 제안한 Muon(MomentUm Orthogonalized by Newton–Schulz)은 이 구조를 직접 이용한다. 2025~2026년에는 Kimi K2, DeepSeek-V4 같은 1조 파라미터급 MoE 모델의 사전학습에 쓰이면서 AdamW의 가장 유력한 대안이 되었다.
왜 직교화하나
행렬 \(G\)(기울기 또는 그 모멘텀)를 특이값 분해하면 \(G = U\Sigma V^\top\)이다(1장). \(V\)의 열은 입력 공간의 방향, \(U\)의 열은 출력 공간의 방향, \(\Sigma\)는 방향마다의 세기다. 실제 LLM의 기울기 행렬은 특이값이 몹시 고르지 않아서, 소수의 방향이 거의 전부를 차지하고 나머지 수백~수천 방향은 아주 작다(낮은 유효 랭크). 이대로 \(W \leftarrow W - \eta G\)를 하면 갱신이 몇 개 방향에만 몰리고, 작지만 유용할 수 있는 방향은 거의 학습되지 않는다. Muon은 방향(\(U, V\))은 그대로 두고 세기(\(\Sigma\))만 모두 1로 바꾼 행렬로 갱신한다.
이 업데이트는 '가장 가파른 방향'을 다른 자로 잰 결과로도 해석된다. 일반 경사하강은 유클리드 노름(\(\|\Delta W\|_F\))이 일정한 범위에서 손실을 가장 많이 줄이는 방향이고, 직교화된 \(UV^\top\)는 스펙트럼 노름(\(\|\Delta W\|_2\), 최대 특이값)이 일정한 범위에서 손실을 가장 많이 줄이는 방향이다. 행렬이 입력 벡터를 얼마나 늘리는가는 스펙트럼 노름이 정하므로, 이 기준은 "갱신 후 층의 출력이 어느 방향으로든 일정 이상 변하지 않게" 하는 것과 같다.
Newton–Schulz 반복: SVD 없이 직교화하기
큰 행렬마다 매 스텝 SVD를 하면 너무 느리고 GPU에 잘 맞지 않는다. Muon은 행렬곱만으로 \(UV^\top\)에 가까이 가는 Newton–Schulz 반복을 쓴다. 먼저 \(X_0 = M/\|M\|_F\)로 정규화해 모든 특이값을 1 이하로 만든 뒤(Frobenius 노름은 최대 특이값 이상이므로) 다음을 5번 반복한다.
한 번의 반복은 \(m\times n\) 행렬(\(m \le n\)이 되게 필요하면 전치)에 대해 \(A = XX^\top\)(\(m\times m\)), \(A^2\), 그리고 \((bA + cA^2)X\)의 행렬곱 세 번이다. 5번 반복해도 순전파·역전파 계산에 비하면 작고(수 % 이하), BF16에서 안정적으로 돈다. 상태는 모멘텀 \(M\) 하나뿐이라 Adam의 \(m, v\) 두 개보다 파라미터당 4바이트를 아낀다.
직교화 업데이트: Newton–Schulz를 한 스텝씩
어떤 파라미터에 Muon을 쓰나
직교화는 '입력 공간 → 출력 공간'인 2차원 은닉층 행렬에만 의미가 있다. 그래서 실제로는 옵티마이저 두 개를 섞는다.
| 파라미터 | 옵티마이저 | 이유 |
|---|---|---|
| 어텐션 \(W_Q, W_K, W_V, W_O\), FFN \(W_1, W_2, W_3\), MoE 전문가 행렬 | Muon | 선형 사상. 행렬별(필요하면 헤드·전문가별)로 직교화 |
| 토큰 임베딩 표 | AdamW | 행은 토큰별 조회 테이블이라 '사상'이 아니다. 한 스텝에 나오는 토큰만 기울기를 받는다 |
| 출력층(LM head) | AdamW | 경험적으로 AdamW가 낫다고 보고됨 |
| RMSNorm 이득, 편향, 게이트 스칼라 | AdamW | 1차원 벡터. 벡터의 '직교화'는 단순한 정규화 \(g/\|g\|\)가 된다 |
마지막 줄이 위 옵티마이저 레이스에 Muon을 넣지 않은 이유이기도 하다. 그 시뮬레이터의 파라미터는 숫자 두 개, 즉 길이 2짜리 벡터(2×1 행렬)라서 특이값이 하나뿐이고, 직교화하면 \(g/\|g\|\)인 정규화 경사하강이 될 뿐이다. Muon의 효과는 여러 방향이 서로 다른 세기를 가진 큰 행렬에서만 드러난다.
대규모 결과: Moonlight, Kimi K2, DeepSeek-V4
Moonshot AI는 2025년 초 가중치 감쇠와 위의 RMS 맞춤을 더하면 Muon이 대형 모델에서도 잘 확장되며, 계산 최적 조건에서 AdamW 대비 약 2배의 계산 효율(같은 손실에 약 절반의 FLOPs)을 보인다고 보고했다(3B 활성/16B 총 MoE 'Moonlight', 5.7T 토큰). 이어서 Kimi K2(2025.7; 총 1.04T, 활성 32.6B, 전문가 384개 중 8개)를 15.5T 토큰 동안 Muon으로 학습했다.
규모를 키우자 문제가 하나 나타났다. 일부 어텐션 헤드의 로짓 \(q\cdot k\)가 수백~수천까지 커지며 학습이 불안정해지는 어텐션 로짓 폭주다. Kimi 팀의 MuonClip은 Muon에 QK-Clip을 더한 것이다. 매 스텝 헤드별 최대 로짓 \(S_{\max}^h\)를 재서 임계값 \(\tau = 100\)을 넘으면, \(\gamma = \tau/S_{\max}^h\)로 그 헤드의 \(W_Q\), \(W_K\)를 각각 \(\sqrt{\gamma}\)배 줄인다(로짓은 두 행렬의 곱이라 \(\gamma\)배가 된다). 이렇게 해서 K2는 15.5T 토큰 내내 손실 스파이크가 한 번도 없었다고 보고했다(Kimi K2 기술 보고서, 2025). 2026년 4월 공개된 DeepSeek-V4(V4-Pro 총 1.6T/활성 49B)도 기술 보고서에서 대부분의 모듈을 Muon으로 학습했고, 임베딩·예측 헤드·RMSNorm 가중치 등은 AdamW로 남겼다고 밝혔다.
아니다. 보고된 이득은 연구에 따라 1.1~2배 정도의 계산 효율로 편차가 크고, 학습률·감쇠·배치를 각 옵티마이저에 맞게 충분히 조정해 비교하면 차이가 더 작아진다는 연구(2025)도 있다. 또 AdamW로 사전학습한 모델을 Muon으로 미세조정하면(또는 그 반대) 이득이 작다는 보고가 있어, 사전학습과 미세조정의 옵티마이저를 맞추는 편이 좋다. 분산 학습에서는 행렬 전체가 있어야 직교화할 수 있어, ZeRO처럼 행렬을 조각내 저장하는 방식과 함께 쓰려면 별도의 통신 설계가 필요하다. 옵티마이저 연구는 지금도 빠르게 움직이는 분야다.
학습률 스케줄: warmup과 cosine decay
학습 내내 같은 학습률을 쓰는 경우는 드물다. 대형 모델 학습의 표준은 두 단계다. 처음 수백~수천 스텝 동안 0에서 최대값까지 선형으로 올리는 warmup, 그 뒤 코사인 곡선을 따라 최소값까지 내리는 cosine decay다.
학습률 스케줄 설계
초기화와 기울기 소실·폭주
역전파는 층마다 국소 기울기를 곱한다. 층이 \(L\)개면 입력 쪽 기울기는 \(L\)개 인자의 곱이다. 각 인자가 평균적으로 0.9면 50층 뒤 \(0.9^{50} \approx 0.005\), 1.1이면 \(1.1^{50} \approx 117\)이다. 곱셈의 사슬은 1에서 조금만 벗어나도 지수적으로 사라지거나(기울기 소실(vanishing gradient)) 터진다(기울기 폭주(exploding gradient)). 순전파의 활성값도 똑같다.
폭 \(n\)인 층 \(h' = \phi(Wh)\)에서 \(W\)의 원소가 분산 \(\sigma_w^2\)인 독립 난수라면, 선형 부분 \(u = Wh\)의 분산은 \(\operatorname{Var}[u] = n\,\sigma_w^2\,\mathbb E[h^2]\)다. 층을 지나도 크기가 유지되려면 \(n\sigma_w^2\)가 활성화 함수에 맞는 값이어야 한다.
아래 시뮬레이터는 폭 100인 완전연결층을 최대 50개 쌓고, 표준정규 입력 64개를 실제로 통과시킨 뒤(순전파), 출력 쪽에 무작위 기울기를 넣고 거꾸로 전파한다(역전파). 막대는 층별 활성값과 기울기의 표준편차를 로그 축에 그린 것이다.
깊은 망의 활성값·기울기 분포
초기화를 잘해도 학습 중 가끔 기울기가 튀는 일(loss spike)이 생긴다. 그래서 LLM 학습은 거의 항상 전체 기울기 벡터의 노름이 임계값(보통 1.0)을 넘으면 그 길이로 잘라 내는 기울기 클리핑(gradient clipping) \(g \leftarrow g\cdot\min(1, c/\|g\|)\)를 쓴다. 방향은 유지하고 보폭만 제한한다.
과적합과 일반화
학습 데이터의 손실을 줄이는 것은 수단일 뿐, 진짜 목표는 처음 보는 데이터에서 잘 맞히는 것, 곧 일반화(generalization)다. 모델이 너무 단순하면 데이터의 패턴을 못 잡고(과소적합(underfitting)), 너무 유연하면 패턴뿐 아니라 우연한 노이즈까지 외워 버린다(과적합(overfitting)). 그래서 데이터를 학습용과 검증용(validation)으로 나누고, 검증 손실을 보며 모델과 하이퍼파라미터를 고른다.
과적합을 막는 장치를 통틀어 정규화(regularization)라 한다.
- L2 정규화 / weight decay: 손실에 \(\lambda\|\theta\|^2\)를 더해 큰 가중치를 벌한다. 매끈한 함수를 선호하게 된다. 다항식에서는 출렁임이 바로 큰 계수에서 나오므로 효과가 극적이다.
- 드롭아웃(dropout; Srivastava et al., 2014): 학습 중 매 스텝 무작위로 뉴런의 일부(예: 10%)를 0으로 끈다. 특정 뉴런에 의존하지 못하게 해 여러 하위 망의 앙상블 같은 효과를 낸다. 추론 때는 끈다.
- 조기 종료(early stopping): 학습 손실은 계속 내려가도 검증 손실이 다시 오르기 시작하면 그때 멈추고 가장 좋았던 체크포인트를 쓴다.
- 데이터 늘리기: 가장 확실한 방법. 아래 시뮬레이터에서 점을 추가해 보면 같은 고차 다항식도 덜 출렁인다.
다항식 피팅: 차수, 정규화, 학습/검증 오차
고전적 통계는 "파라미터 수 > 데이터 수면 과적합"이라고 말하지만, 현대 신경망은 데이터보다 파라미터가 훨씬 많아도 잘 일반화한다. 파라미터가 데이터 수를 넘어서는 지점 이후 검증 오차가 다시 내려가는 이중 하강(double descent) 현상(Belkin et al., 2019)과 SGD의 암묵적 정규화가 부분적인 설명이다. 한편 LLM 사전학습은 데이터가 워낙 많아 대부분의 토큰을 한 번(1 에폭 이하)만 본다. 이 영역에서는 과적합보다 과소적합이 문제여서, 사전학습 LLM은 드롭아웃을 거의 쓰지 않는다. 학습 손실과 검증 손실이 거의 같이 내려간다.
실제 규모: LLM은 어떻게 학습하는가
지금까지의 모든 요소가 LLM 사전학습에 그대로 들어간다. 손실은 다음 토큰 교차 엔트로피, 옵티마이저는 AdamW(2025년부터는 Muon도, 앞의 Muon 절), 스케줄은 warmup + cosine(또는 WSD), 기울기 클리핑 1.0, 초기화는 작은 정규분포 + 잔차 경로 스케일링. 달라지는 것은 숫자의 크기다. Llama 3 405B 논문(Meta, 2024)이 공개한 값을 보자.
| 항목 | Llama 3 405B (2024) | 비고 |
|---|---|---|
| 학습 토큰 | 약 15.6T | 대부분 1 에폭 이하 |
| 옵티마이저 | AdamW | \(\beta_2 = 0.95\) 계열이 흔함 |
| 최대 / 최소 학습률 | 8×10⁻⁵ / 8×10⁻⁷ | cosine, 약 120만 스텝 |
| warmup | 8,000 스텝 | 전체의 1% 미만 |
| 배치 크기 | 4M → 8M → 16M 토큰 | 학습 중 단계적으로 키움 |
| 계산량 | 약 3.8×10²⁵ FLOPs | H100 최대 약 16,000개 |
배치 크기가 "토큰 수"로 적혀 있는 것에 주목하자. 길이 8,192 토큰 시퀀스 2,048개면 약 1,600만 토큰이다. 한 스텝의 기울기는 이 1,600만 개 다음-토큰 예측의 손실 평균에서 나온다. 이렇게 큰 배치를 GPU 수천 개에 나눠 계산하고(데이터 병렬), 기울기를 모아 평균을 낸 뒤 모두가 같은 갱신을 한다.
혼합 정밀도와 옵티마이저 상태 메모리
현대 학습은 혼합 정밀도(mixed precision)를 쓴다. 행렬곱은 BF16(16비트, 9장)으로 빠르게 하고, 작은 갱신이 반올림으로 사라지지 않도록 가중치의 마스터 사본과 Adam 상태는 FP32로 유지한다. 학습률 10⁻⁵ 수준의 갱신은 BF16 가중치(유효 숫자 약 3자리)에 더하면 그대로 묻혀 버리기 때문이다.
| 모델 | 파라미터 | BF16 가중치 (추론) | 학습 상태 16 B/param | H100 80 GB 최소 개수 (상태만) |
|---|---|---|---|---|
| GPT-2 small | 124M | 0.25 GB | 2.0 GB | 1 |
| Llama 3 8B | 8.03B | 16 GB | 128 GB | 2 |
| Llama 3 70B | 70.6B | 141 GB | 1.13 TB | 15 |
| Llama 3 405B | 405B | 810 GB | 6.5 TB | 81 |
8B 모델조차 학습 상태가 GPU 한 장(80 GB)에 들어가지 않는다. 그래서 가중치·기울기·옵티마이저 상태를 GPU들에 나눠 저장하는 ZeRO / FSDP(Rajbhandari et al., 2020), 층을 나누는 파이프라인 병렬, 행렬 하나를 쪼개는 텐서 병렬을 조합한다. 활성값 메모리는 역전파 때 일부 중간값을 다시 계산하는 활성값 재계산(activation checkpointing)으로 줄인다. 계산량과 토큰 수의 관계, 그리고 모델 크기와 데이터 양을 어떻게 나눌지에 대한 스케일링 법칙은 7장에서 이어진다.
2025~2026년의 대형 학습: MoE, 더 많은 토큰, 새 옵티마이저
Llama 3 405B는 모든 파라미터가 매 토큰 계산에 참여하는 밀집(dense) 모델이었다. 이후 대형 오픈 모델은 거의 모두 MoE(Mixture of Experts, 6장)로 넘어갔다. 총 파라미터는 조 단위지만 토큰마다 일부 전문가만 계산하므로, 학습 계산량은 \(C \approx 6 N_{\text{활성}} D\)로 활성 파라미터에 비례하고, 메모리(가중치·옵티마이저 상태)는 총 파라미터에 비례한다.
| 모델 (공개) | 총 / 활성 파라미터 | 학습 토큰 | 옵티마이저 · 스케줄 | 비고 |
|---|---|---|---|---|
| DeepSeek-V3 (2024.12) | 671B / 37B | 14.8T | AdamW · 상수 유지 후 cosine 감쇠(WSD형) | FP8 혼합 정밀도, H800 약 279만 GPU-시간 |
| Qwen3 (2025.4) | 235B / 22B 외 0.6B~32B | 약 36T | — | 0.6B 소형 모델까지 같은 36T 규모 데이터 |
| Kimi K2 (2025.7) | 1.04T / 32.6B | 15.5T | MuonClip · WSD | 전문가 384개 중 8개, 배치 약 67M 토큰, 손실 스파이크 없음 |
| DeepSeek-V4-Pro (2026.4) | 1.6T / 49B | 32T 이상 | Muon(대부분 모듈) + AdamW | 1M 컨텍스트, 하이브리드 압축 어텐션 |
스케줄에서는 WSD(warmup–stable–decay, 8절)가 대형 학습의 주류가 되었다. Kimi K2는 500스텝 warmup 뒤 학습률 2×10⁻⁴를 처음 10T 토큰 동안 그대로 유지하고, 남은 5.5T 토큰에서 cosine으로 2×10⁻⁵까지 내린 다음 마지막 어닐링에서 7×10⁻⁶까지 낮췄다(Kimi K2 기술 보고서, 2025). 긴 '평지' 구간의 체크포인트에서 언제든 감쇠를 시작할 수 있어, 데이터를 더 넣을지 학습 도중에 결정하기 쉽다. 감쇠 구간에는 흔히 수학·코드·고품질 문서 비율을 높인 데이터를 섞는다.
MoE 학습에는 밀집 모델에 없는 문제가 더 있다. 라우터가 소수 전문가에게만 토큰을 몰아 주면 나머지 전문가가 학습되지 않으므로 부하 균형이 필요하다. 예전에는 보조 손실을 더했지만, DeepSeek-V3는 전문가별 편향값을 부하에 따라 조금씩 조정하는 '보조 손실 없는' 방식을 썼다. 전문가는 여러 GPU에 흩어져 있어(전문가 병렬), 토큰을 전문가가 있는 GPU로 보내고 돌려받는 all-to-all 통신이 층마다 두 번 생긴다. 이 통신을 계산과 겹치는 것이 MoE 학습 효율의 핵심이다(12장).
저정밀 학습: BF16에서 FP8, FP4로
앞 절의 혼합 정밀도는 행렬곱을 BF16으로 했다. GPU의 텐서 코어는 비트 수가 절반이 될 때마다 처리량이 대략 2배가 되므로(H100의 FP8 dense 약 1,979 TFLOPS는 BF16의 2배, Blackwell은 FP4까지 지원), 학습 행렬곱 자체를 더 낮은 정밀도로 하려는 시도가 이어졌다. 핵심 어려움은 표현 범위다. 활성값과 기울기에는 드물지만 아주 큰 이상값이 섞여 있어, 비트가 적은 형식에 텐서 전체를 하나의 스케일로 담으면 작은 값이 0으로 뭉개진다. 해법은 9장의 양자화와 같다. 작은 블록마다 따로 스케일을 둔다.
| 형식 | 원소 비트 | 스케일 방식 | 학습 사례 |
|---|---|---|---|
| BF16 | 16 (E8M7) | 필요 없음(FP32와 같은 지수 범위) | 2020년대 표준. GPT-3 이후 대부분 |
| FP8 | 8 (E4M3 / E5M2) | 텐서 또는 블록 단위 스케일 | DeepSeek-V3(2024): 활성값 1×128, 가중치 128×128 블록 스케일, 누적은 높은 정밀도로 |
| MXFP4 | 4 (E2M1) | 32개 블록 + 2의 거듭제곱(E8M0) 스케일, 유효 4.25비트 | OCP 표준 형식 |
| NVFP4 | 4 (E2M1) | 16개 블록 + FP8(E4M3) 스케일 + 텐서별 FP32 스케일, 원소 N개에 대해 유효 4.5 + 32/N비트 | NVIDIA 12B 모델, 10T 토큰 사전학습(2025) |
NVIDIA는 2025년 하반기에 12B 하이브리드(Mamba–Transformer) 모델을 10T 토큰 동안 NVFP4로 사전학습해, 손실과 하류 과제 정확도가 FP8 기준선에 근접함을 보였다(arXiv 2509.25149). 4비트로 그냥 바꾼 것은 아니다. 이상값을 퍼뜨리는 무작위 Hadamard 변환, 순전파와 역전파에서 같은 양자화가 되도록 하는 가중치의 2차원 블록 스케일, 기울기 반올림 편향을 없애는 확률적 반올림, 그리고 민감한 일부 층은 높은 정밀도로 남기는 처리가 함께 들어갔다. 같은 보고에서 8B 실험으로 비교하면 MXFP4는 NVFP4와 같은 손실에 도달하는 데 약 36% 더 많은 토큰이 필요했다. 블록이 작고 스케일이 정밀한 쪽이 유리하다는 뜻이다.
낮아지는 것은 주로 행렬곱의 입력이다. 그림 3-6의 FP32 마스터 가중치와 옵티마이저 상태, 손실 계산, 정규화, 누적(accumulate)은 대개 높은 정밀도로 남는다. 그래서 FP8·FP4 학습의 이득은 메모리보다 속도(처리량)와 통신량 쪽이 크다. 학습한 형식 그대로 추론할 수 있다는 점도 장점이다. DeepSeek-V4 인스트럭트 모델은 MoE 전문가 가중치를 FP4, 나머지를 FP8로 배포했다(9장).
핵심 정리
- 학습은 손실 \(\mathcal L(\theta)\)를 최소화하는 최적화다. 회귀는 MSE, 분류와 언어 모델은 교차 엔트로피 \(-\log p_c\)를 쓰며, 소프트맥스+CE의 로짓 기울기는 \(p - y\)로 확신에 찬 오답에서도 사라지지 않는다.
- 양의 정부호 이차 손실에서 경사하강 \(\theta \leftarrow \theta - \eta\nabla\mathcal L\)은 \(0 < \eta < 2/\lambda_{\max}\)일 때 수렴한다. 일반 비볼록 신경망에는 이 조건만으로 전역 최솟값 수렴을 보장할 수 없다. 조건수 \(\lambda_{\max}/\lambda_{\min}\)가 크면 지그재그와 느린 수렴이 생긴다.
- 역전파는 계산 그래프를 거꾸로 훑으며 국소 기울기를 곱하는 연쇄법칙의 효율적 구현이다. 순전파 중간값을 저장해야 하며, 비용은 순전파의 약 2배(합쳐서 3배)다.
- 미니배치 SGD는 전체 기울기의 불편 추정을 쓰며 노이즈 분산은 배치 크기에 반비례한다. 1 에폭 = 데이터 한 바퀴.
- Momentum은 관성으로 진동을 상쇄하고, RMSProp은 좌표별로 보폭을 정규화하며, Adam(W)은 둘을 결합한다. LLM 학습은 AdamW + warmup + cosine decay + 기울기 클리핑이 표준이다.
- 깊은 망은 초기화 분산이 \(1/n\)(Xavier, tanh) 또는 \(2/n\)(He, ReLU)에서 벗어나면 활성값·기울기가 층마다 지수적으로 사라지거나 폭주한다. 잔차 연결과 정규화가 근본적인 해결책이다.
- 과적합은 검증 손실로 감지하고 L2/weight decay, 드롭아웃, 조기 종료, 데이터 확대로 막는다. LLM 사전학습은 1 에폭 이하라 과소적합 쪽에 가깝다.
- 혼합 정밀도 AdamW 학습은 파라미터당 약 16바이트가 필요해, 8B 모델도 GPU 여러 장에 상태를 나눠야 한다.
- Muon은 은닉층 행렬의 모멘텀 \(M = U\Sigma V^\top\)를 \(UV^\top\)로 직교화해 모든 방향을 같은 세기로 갱신한다. SVD 대신 5차 Newton–Schulz 반복 5번(행렬곱만)을 쓰며, 임베딩·출력층·norm 같은 나머지는 AdamW로 둔다. Kimi K2(MuonClip, 15.5T 토큰)와 DeepSeek-V4가 대규모로 사용했다.
- 2025~2026년 대형 학습은 MoE(계산 ∝ 활성 파라미터, 메모리 ∝ 총 파라미터), WSD 스케줄, 15T~36T 토큰이 일반적이다. 행렬곱 정밀도는 BF16 → FP8(DeepSeek-V3) → NVFP4(12B, 10T 토큰)로 내려가고 있으며, 블록별 스케일이 핵심이다.
확인 퀴즈
1. 이진 분류에서 정답이 y = 1인데 모델이 p = σ(z) = 0.001을 냈다. 로짓 z에 대한 기울기 크기를 비교하면?
2. 양의 정부호 이차 손실의 헤시안 고윳값이 0.5 ~ 40 사이에 있다. 일반 경사하강이 수렴하는 학습률의 경계 상한은?
3. 계산 그래프에서 덧셈 노드 z = m + b와 곱셈 노드 m = w·x가 역전파 때 하는 일로 옳은 것은?
4. 미니배치 크기를 16에서 64로 키웠다. 미니배치 기울기 노이즈의 표준편차는 대략 어떻게 변하는가?
5. 50층 ReLU 망을 Xavier(σ² = 1/n)로 초기화했다. 순전파 활성값 크기는 층을 지날수록 어떻게 되는가?
6. 70B 파라미터 모델을 혼합 정밀도 AdamW로 학습할 때, 활성값을 제외한 가중치·기울기·옵티마이저 상태 메모리는 대략?
7. 어떤 기울기 행렬의 특이값이 (5, 0.5, 0.05)다. Muon의 직교화 업데이트 O = Orth(G)의 특이값은 이상적으로 무엇이 되는가?
8. 총 1T, 활성 32B 파라미터인 MoE 모델을 15T 토큰으로 학습한다. C ≈ 6ND로 어림한 학습 계산량은?