스케일링 법칙 · Kaplan et al. (2020) · arXiv:2001.08361

Scaling Laws — 학습하기 전에 loss를 계산한다

2020년 1월 OpenAI의 Kaplan 등은 크기가 768개부터 15억 개까지인 Transformer 언어 모델을 데이터와 연산을 바꿔 가며 학습시키고, 테스트 loss가 모델 크기 N, 데이터 D, 연산 C 각각에 대해 한 줄짜리 멱법칙을 따른다는 것을 보였습니다. 추세는 연산으로 여덟 자릿수, 모델 크기로 여섯 자릿수에 걸쳐 휘지 않았습니다. 이 논문이 투자의 근거가 된 이유는 “크면 좋다”가 아니라 “얼마나 좋아질지 미리 계산할 수 있다”는 데 있습니다. 이 페이지는 논문의 식과 표에 실린 숫자를 그대로 넣어 그 계산을 브라우저에서 해 보고, 2년 뒤 Chinchilla가 같은 계산의 결론을 어떻게 뒤집었는지까지 따라갑니다.

이 페이지의 축

loss는 규모(N, D, C)의 멱법칙이라 학습하기 전에 계산할 수 있다. 계산할 수 있으니 같은 예산을 N과 D에 어떻게 나눌지도 계산으로 정할 수 있다. 다만 그 답은 법칙을 어떻게 측정했느냐에 따라 달라졌다.

1. 로그-로그 그래프의 직선

멱법칙(power law)은 한 값이 다른 값의 거듭제곱에 비례하는 관계, 즉 \(y = a\,x^{k}\) 꼴입니다.

로그-로그 그래프는 가로축(x)과 세로축(y)을 모두 로그 눈금으로 그린 그래프입니다. 보통 그래프의 눈금은 1, 2, 3, 4…처럼 일정한 간격으로 늘어납니다. 로그 눈금은 1, 10, 100, 1000…처럼 같은 간격마다 10배씩 커집니다. 그래서 아주 작은 값과 아주 큰 값을 한 그래프에 함께 담을 수 있습니다. 가장 큰 쓸모는 거듭제곱 관계를 직선으로 바꿔 준다는 점입니다.

논문의 그래프는 거의 전부 로그-로그 그래프입니다. 이유는 멱법칙 \(L = (N_c/N)^{\alpha}\)에 로그를 씌우면 바로 보입니다.

$$\log L = \alpha \log N_c \;-\; \alpha \log N$$ log N에 대한 일차식입니다. 로그-로그 축에서 멱법칙은 기울기가 −α인 직선이 되고, 직선이면 몇 점만 찍어도 그 너머를 자로 그어 늘일 수 있습니다.

멱법칙의 성질은 “N을 몇 배 하면 loss가 몇 배가 되는가”로 읽는 것이 가장 쉽습니다. N을 k배 하면 loss는 \(k^{-\alpha}\)배가 됩니다. 시작점이 어디든 같은 비율입니다. 논문은 αN ≈ 0.076을 예로 들어 “파라미터를 두 배로 하면 loss는 \(2^{-0.076} = 0.95\)배”라고 적습니다(1.2절).

데모 1 · 같은 곡선, 다른 축

L(N) = 5 · (N / 10³)−α를 보통 축(왼쪽)과 로그-로그 축(오른쪽)에 그립니다. 주황 점은 N₀ = 10⁴와 그 k배입니다. α를 바꾸면 오른쪽 직선의 기울기만 바뀝니다.

보통 축
로그-로그 축

α = 0.076에서 보통 축의 곡선은 거의 처음부터 바닥에 붙어 “더 키워 봐야 소용없다”처럼 보입니다. 로그-로그 축에서는 끝까지 같은 기울기로 내려갑니다. 두 그림은 같은 사실을 말합니다. 개선은 곱셈으로 일어나서, loss를 일정 비율 줄이는 데 드는 규모는 매번 같은 배수입니다. 그 배수가 크다는 것이 함정입니다. α = 0.076이면 loss를 절반으로 만드는 데 N이 약 9,000배 필요합니다.

2. 세 개의 멱법칙: L(N), L(D), L(C)

세 글자는 모델을 키울 때 늘릴 수 있는 세 가지 자원입니다.

L은 Loss의 L입니다. L(N)은 “loss를 N의 함수로 본 것”이라는 뜻이고, L(D), L(C)도 같습니다.

논문은 WebText2(약 230억 토큰, BPE 어휘 50,257개)에서 디코더 Transformer를 학습시키고, 1,024토큰 문맥에서 평균한 교차 엔트로피(nats)1를 성능 지표로 씁니다. 세 요인 중 나머지 둘이 병목이 아닐 때 loss는 각각에 대해 멱법칙을 따릅니다.

$$L(N) = \left(\frac{N_c}{N}\right)^{\alpha_N},\quad \alpha_N \approx 0.076,\; N_c \approx 8.8\times10^{13}$$ $$L(D) = \left(\frac{D_c}{D}\right)^{\alpha_D},\quad \alpha_D \approx 0.095,\; D_c \approx 5.4\times10^{13}$$ $$L(C_{\min}) = \left(\frac{C_c^{\min}}{C_{\min}}\right)^{\alpha_C^{\min}},\quad \alpha_C^{\min} \approx 0.050,\; C_c^{\min} \approx 3.1\times10^{8}\ \text{PF-days}$$ 식 (1.1)~(1.3), 부록 표 5. N은 임베딩을 뺀 파라미터 수, D는 토큰 수, Cmin은 “충분히 작은 배치로 학습했다면 들었을” 최소 연산(5.1절)입니다. L(N)은 데이터가 충분할 때 수렴까지 학습한 값, L(D)는 큰 모델을 D토큰에서 조기 종료한 값, L(Cmin)은 예산마다 최적 크기의 모델을 고른 값입니다. Nc, Dc, Cc는 토크나이저에 따라 바뀌는 눈금이라 그 자체로 의미는 없습니다.

데모 2 · 세 법칙에 값 넣어 보기

실선은 논문이 실제로 측정한 범위, 점선은 그 바깥으로 늘인 외삽입니다. N은 768~15억(3절), D는 2,200만~230억 토큰(3절), Cmin은 그림 13 가로축 범위(약 10⁻⁸~10⁰ PF-days)입니다.

지수는 셋 다 0.05~0.1로 작습니다. 10배를 늘려도 loss는 10~20%밖에 줄지 않습니다. 그런데 이 작은 지수가 측정 범위 전체에서 흔들리지 않았다는 것, 그래서 점선 구간도 같은 식으로 계산할 수 있다는 것이 이 논문의 무게입니다. 1.1절 요약의 문장은 이렇습니다. “상단에서 이 추세가 꺾이는 징후는 보지 못했다. 다만 loss가 0에 닿기 전 언젠가는 평평해져야 한다.” 그 “언젠가”는 10절에서 다룹니다.

3. 작은 실험으로 큰 모델 맞히기

멱법칙이 실제로 쓸모 있는 장면은 이렇습니다. 작은 모델 여러 개를 싸게 학습시켜 loss를 찍고, 로그-로그 축에서 직선을 맞춘 다음, 그 직선을 수백 배 큰 모델까지 늘여 loss를 미리 읽습니다. 아래 데모는 이 과정을 그대로 돌립니다. “실험 결과”는 논문 식 (1.1)에 잡음을 더해 만들고, 직선은 log L을 log N에 대해 최소제곱으로 맞춥니다.

데모 3 · 직선을 맞추고 늘이기

파란 점 10개가 작은 모델들의 “측정값”, 주황 선이 맞춘 직선, 회색 선이 참 법칙입니다. 별표는 목표 크기에서 맞춘 직선이 예측한 loss입니다. 잡음은 한 번의 학습마다 생기는 loss 편차로, 논문은 시드에 따른 편차를 약 0.02(4.2절)로 추정합니다.

Kaplan 법칙을 참으로 두면, 10⁴~10⁷ 범위의 실험만으로 만 배 넘게 위인 1,750억 파라미터의 loss를 대개 2% 안쪽으로 맞힙니다(잡음 0.02에서 오차 중앙값 약 0.7%). 실험 범위를 좁히거나 잡음을 키우면 기울기 추정이 흔들리고, 외삽 거리가 멀수록 그 흔들림이 커집니다. 기울기가 0.005만 틀려도 네 자릿수를 건너면 loss는 \(10^{4\times0.005}\approx 1.05\)배, 5% 차이가 납니다.

두 번째 버튼은 참 법칙이 직선이 아닌 경우입니다. Chinchilla 논문이 맞춘 식 \(E + A/N^{0.34}\)(9절, 데이터 무한대 극한)를 참으로 두면 로그-로그 그래프가 위로 휘어 평평해집니다. 작은 범위에서 그은 직선은 이 휘어짐을 모르니 큰 모델의 loss를 실제보다 낮게 예측합니다. 외삽은 법칙의 꼴이 맞을 때만 믿을 수 있습니다.

4. 크기만 중요하고 모양은 거의 상관없다

같은 파라미터 수라도 층을 깊게 쌓을 수도, 넓게 펼칠 수도 있습니다. 논문은 N을 고정한 채 층 수, 폭, 헤드 수, FFN 비율을 하나씩 바꿔 보고 loss가 넓은 범위에서 몇 % 안쪽으로만 움직인다는 것을 보였습니다(논문 그림 5, 아래에 다시 그림). 층 수 대 폭의 비율이 40배 달라져도 영향이 작았고, (층, dmodel) = (6, 4288)인 모델이 GPT-2의 (48, 1600)과 loss 3% 안쪽으로 맞섰습니다.

$$N \approx 2\,d_{\text{model}}\,n_{\text{layer}}\,(2d_{\text{attn}} + d_{\text{ff}}) = 12\,n_{\text{layer}}\,d_{\text{model}}^2$$ 식 (2.1). dattn = dff/4 = dmodel인 표준 설정에서 편향과 LayerNorm 같은 작은 항은 뺍니다. 임베딩 (nvocab + nctx)·dmodel도 N에 넣지 않습니다.

논문 그림 5 다시 그리기 · N은 고정, 모양만 바꾸기

세로축은 같은 N에서 가장 좋았던 모양 대비 loss가 몇 % 나빠졌는지입니다. 점 값은 원문 그림을 눈으로 읽어 옮긴 근삿값입니다.

임베딩을 빼는 것이 이 논문의 작지만 결정적인 선택이었습니다. 그림 6 왼쪽처럼 임베딩까지 세면 층 수가 다른 모델들이 서로 다른 선 위에 흩어지고, 빼면 한 선으로 모입니다. 작은 모델일수록 임베딩이 전체의 대부분을 차지하기 때문입니다.

데모 4 · 같은 N, 다른 모양

N과 층 수를 정하면 식 (2.1)로 dmodel이 정해집니다. 그래프는 지금의 폭/깊이 비율을 유지한 채 N만 바꿀 때 전체 파라미터 중 임베딩(어휘 50,257 + 위치 1,024)의 비중입니다. 버튼은 논문에 나오는 실제 모양들입니다.

(2, 128) 모델은 N = 393,216개인데 임베딩은 660만 개가 넘어 전체의 94%입니다. 이런 모델을 전체 파라미터로 줄 세우면 층 수가 다른 모델끼리 비교가 틀어집니다. 아래 계산기는 그림 5의 주석 “1% loss 증가는 22%의 추가 연산으로 메울 수 있다”를 L(Cmin)의 지수 0.050으로 다시 계산한 것입니다. \(1.01^{1/0.050} = 1.22\)입니다. 모양을 조금 잘못 골라 생기는 손해는 예산을 조금 늘리면 사라지는 수준이고, 규모를 10배 늘리는 효과와는 비교가 되지 않습니다. 논문이 형태보다 규모를 앞세운 근거가 이것입니다.

5. N과 D를 함께: 과적합의 경계

L(N)은 데이터가 무한할 때, L(D)는 모델이 무한할 때의 이야기입니다. 실제로는 둘 다 유한합니다. 논문은 두 극한을 동시에 만족하는 식 하나를 제안합니다.

$$L(N, D) = \left[\left(\frac{N_c}{N}\right)^{\alpha_N/\alpha_D} + \frac{D_c}{D}\right]^{\alpha_D}$$ 식 (1.5) = (4.1). D → ∞이면 L(N), N → ∞이면 L(D)로 돌아갑니다. 10% dropout과 조기 종료로 학습한 결과에 맞춘 값은 αN = 0.076, αD = 0.103, Nc = 6.4 × 10¹³, Dc = 1.8 × 10¹³(표 2)입니다. 세 법칙을 따로 맞춘 값과 조금 다릅니다.

D를 고정하고 N을 키우면 처음에는 L(N)을 따라 내려가다가, 어느 순간부터 데이터가 모자라 L(D)라는 바닥에 걸립니다. 과적합 정도를 \(\delta L = L(N,D)/L(N,\infty) - 1\)로 정의하면 이것은 N과 D의 한 조합 \(N^{\alpha_N/\alpha_D}/D\)에만 의존합니다(식 4.3, 그림 9 오른쪽). 시드 편차 0.02 수준 안에서 과적합을 피하려면 대략 다음이 필요합니다.

$$D \gtrsim (5\times10^{3})\,N^{0.74}$$ 식 (4.4). 지수 0.74 = αN/αD. 모델을 8배 키우면 데이터는 \(8^{0.74} \approx 4.7\)배, 논문 요약의 표현으로 “대략 5배”만 늘리면 됩니다.

데모 5 · 데이터를 고정하고 모델을 키우면

그림 9 왼쪽을 표 2의 값으로 다시 그렸습니다. 옅은 선은 논문이 실험한 데이터 크기(2,100만~220억 토큰), 진한 선은 슬라이더로 고른 D, 점선은 D = ∞입니다. 세로 점선은 식 (4.4)의 경계입니다.

D = 3억 토큰이면 N이 300만을 넘으면서 과적합이 2%를 넘고, 1억을 넘으면 곡선이 거의 평평해집니다(1억 → 10억에서 loss 3.18 → 3.11). 데이터가 정한 바닥 L(D)에 걸린 것입니다. 경계식은 데이터가 모델보다 느리게(N0.74) 늘어도 된다고 말합니다. 230억 토큰의 WebText2로는 10억 파라미터 아래 모델까지 과적합 없이 학습할 수 있었고, 논문의 가장 큰 모델들은 약간의 과적합을 겪었습니다(4.2절). 마지막 칸의 조기 종료 하한은 식 (5.7)로, 과적합이 클수록 일찍 멈춰야 한다는 것을 숫자로 줍니다.

6. 큰 모델이 더 빨리 배운다

학습 시간도 같은 꼴의 법칙을 따릅니다. 데이터가 무한할 때 S 스텝 학습한 모델의 loss는 이렇게 맞춰집니다.

$$L(N, S_{\min}) = \left(\frac{N_c}{N}\right)^{\alpha_N} + \left(\frac{S_c}{S_{\min}}\right)^{\alpha_S}$$ 식 (1.6) = (5.6), 표 3: αN = 0.077, αS = 0.76, Nc = 6.5 × 10¹³, Sc = 2.1 × 10³. Smin은 배치가 충분히 클 때의 최소 스텝 수(식 5.4)입니다. 첫째 항은 모델 크기가 정하는 수렴값, 둘째 항은 덜 학습한 만큼의 손해입니다.

둘째 항은 N과 상관이 없습니다. 그래서 어느 시점에서든 큰 모델의 loss가 더 낮고, 같은 loss에 더 적은 스텝과 더 적은 토큰으로 도달합니다(그림 2). 논문은 이것을 “큰 모델이 더 샘플 효율적이다”라고 부릅니다. 그러면 목표 loss가 정해졌을 때 연산을 가장 적게 쓰는 모델은 어느 것일까요? 작은 모델은 수렴값이 목표에 가까워 끝없이 오래 돌려야 하고, 너무 큰 모델은 한 스텝이 비쌉니다.

데모 6 · 목표 loss에 가장 싸게 도달하는 모델

N = 10⁵~10¹⁰의 학습 곡선입니다(식 5.6, 표 3). 가로 점선이 목표 loss이고, 각 곡선과 만나는 점에서 필요한 스텝 수를 읽습니다. 연산은 Cmin = 6·N·Bcrit(L)·Smin(6.1절)로 셉니다. 임계 배치 Bcrit(L) = 2.1 × 10⁸ / L1/0.21 토큰(식 1.4, 표 5)입니다. 표에서 가장 싼 행이 강조됩니다.

N수렴 loss스텝토큰PF-days

목표를 어디에 두든 가장 싼 모델은 수렴값보다 약 10% 높은 곳에서 학습을 멈추는 모델입니다. 부록 B.2의 식 (B.5)가 이것을 정확히 줍니다. 최적점에서 \(L = (1 + \alpha_N/\alpha_S)\,L(N, \infty)\)이고 \(\alpha_N/\alpha_S = 0.077/0.76 \approx 0.10\)입니다. 반대로 흔히 하듯 수렴값의 2% 안까지 돌리면, 같은 loss를 위해 파라미터는 2.7배 적게 쓰지만 스텝은 7.7배 더 쓰고 연산은 약 1/0.35 ≈ 2.9배를 씁니다(식 B.12~B.14). 논문 요약의 한 줄이 이것입니다. “수렴은 비효율적이다.”

7. 연산량 세기: C ≈ 6ND

예산을 이야기하려면 연산을 셀 수 있어야 합니다. 순전파에서 파라미터 하나는 토큰 하나당 곱셈 한 번과 덧셈 한 번, 즉 2 FLOP를 씁니다(식 2.2의 2N). 역전파는 그 두 배쯤이라 합치면 토큰당 6N입니다.

$$C_{\text{forward}} \approx 2N + 2\,n_{\text{layer}}\,n_{\text{ctx}}\,d_{\text{model}},\qquad C \approx 6NBS = 6ND$$ 식 (2.2)와 1.3절. 두 번째 항(어텐션 점수 계산)은 dmodel > nctx/12이면 작아서 논문은 뺍니다. 비율로는 nctx/(12dmodel)이라 GPT-2 크기(d = 1600, nctx = 1024)에서 약 5%입니다. 연산 단위 PF-day는 10¹⁵ × 24 × 3600 = 8.64 × 10¹⁹ FLOP입니다2.

데모 7 · 6ND 계산기

N과 D로 학습 연산을 셉니다. 아래는 GPU 대수와 실제 활용률(MFU, 이론 최대 대비 실제로 낸 비율)로 환산한 벽시계 시간입니다. GPU 이론치는 V100 125, A100 312, H100 989 TFLOPS(16비트 텐서 연산, 희소성 제외)입니다. 버튼은 Chinchilla 논문 표 1의 모델 크기와 학습 토큰입니다.

GPT-3(175B, 300B 토큰)은 6ND로 3.15 × 10²³ FLOP, 약 3,600 PF-days입니다. Chinchilla(70B, 1.4T 토큰)는 5.9 × 10²³으로 Gopher(280B, 300B 토큰)의 5.0 × 10²³과 같은 급입니다. 같은 예산을 한쪽은 큰 모델에, 한쪽은 많은 데이터에 쓴 셈이고, 9절의 이야기가 이 차이입니다. 참고로 Chinchilla 논문은 Gopher 예산을 5.76 × 10²³으로 적는데, 어텐션 등 6ND가 빼는 항까지 센 값(부록 F)이라 조금 큽니다.

8. 연산 예산을 어떻게 나눌까

이제 원래 질문입니다. 연산 C가 정해져 있을 때 모델을 키울까, 데이터를 더 볼까? 6절의 학습 곡선 식에 S = C/(6NB)를 넣고 N에 대해 최소화하면(부록 B.1) 예산이 늘 때 각 양이 어떻게 늘어야 하는지가 나옵니다. 논문이 실측으로 맞춘 값은 다음과 같습니다.

$$N_{\text{opt}} \propto C_{\min}^{0.73},\qquad B \propto C_{\min}^{0.24},\qquad S \propto C_{\min}^{0.03},\qquad D = B\cdot S \propto C_{\min}^{0.27}$$ 식 (1.7), (6.1), (6.2), 부록 표 6. 계수는 Ne = 1.3 × 10⁹, Be = 2.0 × 10⁶ 토큰, Se = 5.4 × 10³ 스텝, De = 2 × 10¹⁰ 토큰(Cmin을 PF-days로 쓸 때). 이론으로 예측한 지수는 \(\alpha_C^{\min}/\alpha_N \approx 0.71\)(식 6.5)이라 실측과 몇 % 안에서 맞습니다.

연산을 10배 늘리면 모델은 \(10^{0.73}\approx 5.4\)배, 배치는 1.7배, 스텝은 1.07배입니다. 늘어난 예산의 대부분이 모델 크기로 가고, 데이터는 약 1.9배만 늘며, 그나마 대부분은 배치를 키우는 데 쓰여 학습 시간(직렬 스텝)은 거의 그대로입니다(그림 3). 논문의 마지막 문장 “큰 모델이 큰 데이터보다 중요할 수 있다”가 여기서 나옵니다.

데모 8 · 예산과 최적 배분, 그리고 빗나간 크기의 비용

위 슬라이더는 예산 Cmin에서 표 6의 처방을 계산합니다. 그래프는 최적 크기 Neff의 몇 배 모델을 쓸 때 같은 loss에 드는 연산(식 B.16)과 스텝(식 B.17)의 비율입니다. 너무 작은 모델은 그 loss에 아예 닿지 못해 곡선이 위로 솟습니다.

필요 연산 비율 C / C(Neff)필요 스텝 비율 S / S(Neff)

최적 크기의 0.6배~2.2배 모델은 연산을 20%만 더 쓰면 같은 loss에 닿습니다(그림 12). 2.2배 큰 모델은 연산은 20% 더 들지만 스텝은 45% 적어서, 병렬 장비가 넉넉하면 더 빨리 끝납니다. 반대로 작은 쪽은 추론 비용이 싸다는 장점이 있습니다. 이 처방에서 데이터는 예산의 0.27제곱으로만 늘어납니다. Chinchilla 논문은 이후의 대형 모델 대부분이 이 처방과 GPT-3의 설정을 따라 모델은 키우고 학습 토큰은 300B 안팎에 두었다고 적습니다(표 1).

9. Chinchilla가 바꾼 배분

2022년 DeepMind의 Hoffmann 등은 같은 질문을 다시 물었습니다. 7천만~160억 파라미터 모델 400개 이상을 50억~5,000억 토큰으로 학습시키고 세 가지 방법으로 최적 배분을 추정했더니, 셋 모두 N과 D를 같은 비율로 늘려야 한다는 답을 냈습니다.

방법Nopt ∝ CaDopt ∝ Cb
1. 학습 곡선들의 최솟값 포락선0.500.50
2. IsoFLOP 단면(같은 연산에서 크기만 바꿈)0.490.51
3. 손실 함수 L(N, D)를 직접 맞춤0.460.54
Kaplan et al. (2020)0.730.27

Hoffmann et al. (2022) 표 2.

세 번째 방법은 Kaplan과 다른 꼴의 식을 씁니다. 자연어 자체의 엔트로피에 해당하는 상수 E를 따로 두고, 모델 크기와 데이터의 부족분을 더하는 꼴입니다.

$$\hat L(N, D) = E + \frac{A}{N^{\alpha}} + \frac{B}{D^{\beta}},\qquad E = 1.69,\ A = 406.4,\ B = 410.7,\ \alpha = 0.34,\ \beta = 0.28$$ Hoffmann et al. 식 (2), (10). 데이터셋(MassiveText)과 토크나이저가 다르므로 loss 값을 Kaplan의 WebText2 loss와 직접 비교할 수는 없습니다. 6ND 제약 아래 최소화하면 \(N_{\text{opt}} = G\,(C/6)^{\beta/(\alpha+\beta)}\), \(G = (\alpha A/\beta B)^{1/(\alpha+\beta)}\)(식 4)입니다.

데모 9 · 같은 연산, 다른 배분

“IsoFLOP 단면”은 연산 C를 고정하고 N을 바꿀 때(D = C/6N) 식 (10)의 loss입니다. 파란 점이 그 최솟값, 주황 점이 Kaplan 처방(N = 1.3 × 10⁹ · C0.73, C를 PF-days로), 회색 점이 토큰을 300B로 고정했을 때입니다. “최적 크기 대 연산”은 예산별 최적 N과 실제 모델들(C = 6ND)을 나란히 놓습니다.

Gopher 예산(5.76 × 10²³ FLOP)에서 방법 1은 67B 파라미터와 1.5T 토큰을 권합니다(Chinchilla 표 3). 저자들은 70B 모델을 1.4T 토큰으로 학습시켜 Chinchilla라 이름 붙였고, 같은 연산을 쓴 280B Gopher를 거의 모든 평가에서 앞섰습니다. MMLU 5-shot 평균은 Gopher 60.0%에서 67.6%로 올랐습니다(표 6). 모델이 4배 작으니 추론과 미세조정 비용도 크게 줄었습니다. 표 3을 보면 최적 배분에서 토큰 수는 파라미터의 약 20배이고(1B → 20.2B, 10B → 205.1B), 이것이 흔히 말하는 “파라미터당 20토큰”입니다.

데모의 식 (10)으로 계산하면 Gopher 예산의 최적점은 약 32B로, 논문 그림 4가 같은 식으로 적은 40B와 다릅니다. 논문에 반올림되어 실린 계수로는 원래 결과가 재현되지 않기 때문인데, Besiroglu 외(2024)는 방법 3의 보고값이 방법 1·2와 맞지 않는다는 것을 재현 실험으로 지적했습니다. 그래서 위 표의 방법 1·2가 더 자주 인용됩니다. 어느 쪽이든 “Kaplan 처방보다 훨씬 작은 모델에 훨씬 많은 데이터”라는 방향은 같습니다.

왜 결론이 달라졌나

Chinchilla 논문 2절은 차이의 원인을 두 가지로 꼽습니다. 첫째, Kaplan은 모든 모델을 같은 학습률 스케줄과 같은 토큰 수(2.5 × 10⁵ 스텝 × 512 × 1024 ≈ 1,300억 토큰, 2.2절)로 학습시키고 중간 지점의 loss를 짧은 학습의 결과로 썼습니다. 코사인 스케줄은 끝까지 가야 학습률이 다 내려가므로, 중간 loss는 “그만큼만 학습하도록 스케줄을 짠 모델”의 loss보다 높습니다. 이 때문에 적은 데이터로 학습하는 효과가 과소평가되었고, 결과적으로 “데이터보다 모델을 빨리 키워라”가 나왔다는 것입니다. Kaplan 논문도 부록 C에서 짧은 학습에는 더 큰 학습률을 쓸 수 있는데 실험하지 않았다고 적어 두었습니다. 둘째, Kaplan의 실험은 대부분 1억 파라미터 아래였고, Chinchilla는 5억 이상 모델이 대부분이었습니다. 연산-loss 경계가 조금 휘어 있어서 작은 모델에서 맞춘 기울기가 큰 쪽으로 그대로 이어지지 않습니다.

결국 멱법칙이라는 틀은 살아남았고, 지수는 바뀌었습니다. 3절의 교훈 그대로입니다. 외삽은 측정 방식과 범위가 맞을 때만 믿을 수 있습니다.

10. 멱법칙은 어디서 멈추는가

Kaplan의 식에는 바닥이 없습니다. N이나 C를 무한히 키우면 loss는 0으로 갑니다. 하지만 자연어에는 줄일 수 없는 불확실성(엔트로피)이 있으니 언젠가는 평평해져야 합니다. 논문 6.3절은 자기 식 안에서 이 모순을 직접 찾아냅니다. 연산 최적 학습은 데이터를 C0.26으로만 늘리는데(식 6.7), 그만큼의 데이터로 도달할 수 있는 loss L(D)는 C−0.03으로만 내려갑니다. L(Cmin)은 C−0.050으로 내려가니 두 직선은 언젠가 만나고, 그 너머에서 L(Cmin)은 데이터가 허락하는 것보다 낮은 loss를 예측하게 됩니다.

데모 10 · 두 직선의 교차점

그림 15를 다시 그립니다. 파란 선은 L(Cmin) = (3.1 × 10⁸ / Cmin)αC, 주황 선은 연산 최적 학습이 쓰는 데이터 D(Cmin) = 4 × 10¹⁰ · Cmin0.26(식 6.7)을 L(D) = (5.4 × 10¹³ / D)αD에 넣은 선입니다. 빈 원은 논문 본문이 적은 교차점(식 6.8)입니다. 지수를 조금씩 바꿔 보세요.

부록 표 5의 값을 그대로 넣으면 교차점은 C* ≈ 10⁵ PF-days, L* ≈ 1.5입니다. 본문 식 (6.8)은 C* ~ 10⁴ PF-days, N* ~ 10¹² 파라미터, D* ~ 10¹² 토큰, L* ~ 1.7 nats/token으로 적었습니다. 한 자릿수가 다르지만, 논문 스스로 “지수의 정확한 값에 따라 어느 방향으로든 한 자릿수씩 움직인다”고 밝혀 두었습니다. 지수를 0.005만 바꿔도 교차점이 수십 배 움직이는 것을 데모에서 볼 수 있습니다. 저자들은 법칙이 이 지점 전에 깨질 것이라고 보면서, 이 지점이 자연어에서 뽑아낼 수 있는 정보가 바닥나는 곳, 즉 L*가 토큰당 엔트로피의 대략적인 추정일 수 있다는 추측도 덧붙였습니다. Chinchilla 식의 E = 1.69가 바로 그 바닥을 명시적으로 넣은 항입니다(데이터셋이 달라 수치를 직접 비교할 수는 없습니다).

멱법칙의 한계는 이것 말고도 있습니다.

그래도 이 논문 이후로 대형 모델 학습은 “일단 크게 만들어 보자”에서 “작게 여러 번 재고, 직선을 긋고, 그 직선이 가리키는 크기에 예산을 건다”로 바뀌었습니다. 무엇을 키울지에 대한 답은 바뀌었지만, 계산해서 정한다는 방식은 그대로 남았습니다.

11. 확인 퀴즈

각주

  1. nats와 퍼플렉시티. 교차 엔트로피 loss는 정답 토큰에 모델이 준 확률 p의 −log p를 평균한 값입니다. 자연로그를 쓰면 단위가 nats, 밑이 2면 bits입니다(1 nat ≈ 1.44 bits). loss L의 지수 eL을 퍼플렉시티라고 부르는데, “모델이 매 토큰 몇 개의 후보 사이에서 고르는 것처럼 헷갈리는가”로 읽을 수 있습니다. L = 2.3이면 e2.3 ≈ 10, 대략 열 개 중 하나를 고르는 정도의 불확실성입니다. loss 값은 토크나이저에 따라 달라지므로 서로 다른 토크나이저를 쓰는 모델끼리 직접 비교하면 안 됩니다. ↩

  2. FLOP와 FLOPS, PF-day. FLOP는 부동소수점 연산 한 번(학습 전체의 연산량), FLOPS는 초당 연산 수(장비의 속도)입니다. 1 PF-day는 초당 10¹⁵회(1 petaFLOPS)로 하루 동안 돌린 양, 8.64 × 10¹⁹ FLOP입니다. 논문은 큰 수를 다루기 쉽게 이 단위를 씁니다. GPT-3의 3.15 × 10²³ FLOP는 약 3,640 PF-days입니다. ↩