대규모 언어 모델
ChatGPT, Claude, Llama 같은 대규모 언어 모델(LLM)은 놀랍도록 단순한 목표 하나로 학습된다. "지금까지의 글을 보고 다음 토큰을 맞혀라." 이 장에서는 그 목표를 확률로 정확히 적고, 글자 수를 세는 n-gram 모델에서 출발해 브라우저 안에서 작은 신경망 언어 모델을 직접 학습시켜 본다. 그다음 수천억 파라미터·수조 토큰 규모로 키울 때 필요한 계산량, 모델 크기와 데이터의 최적 배분을 알려 주는 스케일링 법칙, 그리고 '글을 이어 쓰는 기계'를 '말을 알아듣는 조수'로 바꾸는 SFT·RLHF·DPO까지 따라간다.
- 언어 모델을 조건부 확률 \(P(x_t \mid x_{\lt t})\)의 곱으로 정의하고, 교차 엔트로피와 퍼플렉시티를 계산할 수 있다.
- n-gram 모델의 카운트 추정, 희소성 문제, 스무딩과 백오프를 설명할 수 있다.
- 임베딩 → 은닉층 → 소프트맥스로 이루어진 신경망 언어 모델을 역전파와 Adam으로 학습시키는 과정을 이해하고, 과적합을 손실 곡선에서 읽는다.
- 학습 계산량 \(C \approx 6ND\)로 GPU-시간과 학습 일수를 추정할 수 있다.
- Chinchilla 스케일링 법칙에서 계산 최적 배분과 '과학습(overtraining)' 경향의 이유를 설명할 수 있다.
- 사전학습 → SFT → 선호 학습(RLHF/PPO, DPO) 파이프라인과 DPO 손실의 의미를 안다.
- 인컨텍스트 학습, chain-of-thought, 추론 모델, 환각과 보정이 무엇인지 설명할 수 있다.
언어 모델이란: 다음 토큰의 확률 분포
언어 모델(language model)은 토큰 열에 확률을 매기는 모델이다. 4장에서 본 것처럼 텍스트는 먼저 토큰 \(x_1, x_2, \dots, x_T\)로 쪼개진다. 문장 전체의 확률 \(P(x_1,\dots,x_T)\)를 직접 모델링하기는 어렵지만, 확률의 연쇄법칙(chain rule)을 쓰면 이것을 "앞의 토큰들이 주어졌을 때 다음 토큰의 확률"들의 곱으로 정확히 분해할 수 있다.
그래서 오늘날의 LLM은 모두 한 가지 일만 한다. 문맥 \(x_{\lt t}\)를 받아 어휘 전체(Llama 3 기준 128,256개 토큰)에 대한 확률 분포 \(P_\theta(\cdot \mid x_{\lt t})\)를 출력한다. 생성할 때는 이 분포에서 토큰 하나를 고르고, 그것을 문맥 끝에 붙여 다시 모델에 넣는다. 이런 방식을 자기회귀(autoregressive) 생성이라고 한다. 디코딩 전략(온도·top-k·top-p)과 KV 캐시는 8장에서 자세히 다룬다.
교차 엔트로피와 퍼플렉시티
학습 목표는 실제 텍스트에 높은 확률을 주는 것이다. 곱은 다루기 불편하므로 로그를 취하고 부호를 뒤집어 평균을 낸다. 이것이 3장에서 본 교차 엔트로피 손실(cross-entropy)이며, 토큰마다 "정답 토큰에 준 확률의 −log"를 평균한 값이다.
손실 1 nat 차이는 PPL로 \(e \approx 2.7\)배 차이다. LLM 논문에서 손실이 2.0에서 1.9로 "겨우" 0.1 줄어든 것은 PPL이 약 10% 줄었다는 뜻이고, 모든 토큰에서 평균적으로 그만큼 덜 놀란다는 뜻이다. 아래 시뮬레이터에서 토큰별 확률을 직접 끌어 올리고 내리며 감을 잡아 보자.
확률의 연쇄법칙과 퍼플렉시티
n-gram 모델: 세어서 만드는 언어 모델
가장 오래된 언어 모델은 신경망 없이 세기만 한다. 문맥 전체 \(x_{\lt t}\)를 다 보는 대신 바로 앞 \(n-1\)개 토큰만 본다고 가정하면(마르코프 가정(Markov assumption)), 조건부 확률은 코퍼스의 출현 횟수 비율로 추정된다.
n을 키우면 문맥을 더 많이 보니 예측이 날카로워진다. 하지만 문맥의 가짓수는 \(V^{n-1}\)으로 폭발하고, 코퍼스는 유한하다. 한국어 음절만 해도 자주 쓰는 것이 2,000개를 넘으니 3글자 문맥은 수십억 가지인데, 대부분은 코퍼스에 한 번도 나오지 않는다. 처음 보는 문맥에서 MLE는 0/0이 되고, 처음 보는 조합에는 확률 0을 준다. 확률 0이 하나라도 끼면 문장 확률 전체가 0, 퍼플렉시티는 무한대가 된다. 이것이 희소성 문제(sparsity)다. 스무딩은 0을 피하게 해 주고, 백오프(backoff)는 본 적 없는 문맥이면 더 짧은 문맥으로 물러나 추정한다. 2010년대 초까지 음성 인식과 기계 번역은 수십억 단어로 센 5-gram 모델과 Kneser–Ney 스무딩을 썼다.
아래 시뮬레이터에는 교육용으로 직접 작성한 짧은 한국어 문장 수십 개가 들어 있다. 문자(음절과 공백) 단위로 n-gram을 세고, 다음 글자 분포를 보여 준다. 코퍼스는 자유롭게 고칠 수 있다.
문자 단위 n-gram 언어 모델
문맥 (막대를 누르면 그 글자를 덧붙인다)
평가 문장 (퍼플렉시티 계산)
학습 코퍼스 편집 (한 줄 = 한 문장)
신경망 언어 모델: 통계를 공유하는 임베딩
n-gram 모델에서 "고양이가 잔다"와 "강아지가 잔다"는 아무 관계가 없는 별개의 카운트다. 하나를 많이 봐도 다른 쪽 확률은 오르지 않는다. Bengio 등(2003)의 신경 확률 언어 모델(Neural Probabilistic Language Model)은 이 문제를 두 단계로 풀었다. 첫째, 각 토큰을 학습 가능한 밀집 벡터 \(\mathbf{e}\in\mathbb{R}^d\), 즉 4장의 임베딩으로 바꾼다. 둘째, 문맥 임베딩들을 이어 붙여 MLP(2장)에 넣고 다음 토큰의 로짓을 출력한다. 비슷한 문맥에서 쓰이는 토큰은 학습 중에 비슷한 벡터를 갖게 되고, 그래서 한 문맥에서 배운 것이 비슷한 문맥으로 일반화된다.
아래가 이 장의 대표 시뮬레이터다. 위 구조를 JavaScript로 그대로 구현했다. 순전파, 손실, 역전파(기울기를 수치 미분과 대조해 검증함), Adam 업데이트를 모두 Float32Array 위에서 직접 계산하며, 화면이 갱신될 때마다 미니배치 64개로 몇 스텝씩 학습한다. 학습 데이터는 교육용으로 직접 쓴 약 2,800자짜리 짧은 영어 이야기다(영어 소문자 26자·공백·마침표·쉼표, V = 28). 한국어 음절은 어휘가 수백~수천 개라 이 작은 모델과 데이터로는 학습이 느려서 영어를 골랐다.
브라우저에서 학습하는 문자 단위 MLP 언어 모델
학습 중 샘플 (온도 0.8, "the " 다음부터)
글자 임베딩 지도 (PCA 2D, 학습하며 갱신)
직접 생성해 보기
학습 텍스트 보기 (교육용으로 작성한 약 2,800자, 앞 90% 학습 / 뒤 10% 검증)
구조의 뼈대(임베딩 → 비선형 변환 → 어휘 소프트맥스, 교차 엔트로피, 역전파, Adam)는 GPT와 같다. 다른 점은 ① 문맥이 고정 길이 K(여기선 4글자)라는 것, ② 문맥 위치마다 다른 가중치 블록을 써서 위치 간 정보 공유가 없다는 것, ③ 규모(약 104 파라미터 vs 109~1012), 그리고 ④ 데이터(2.8천 글자 vs 1013 토큰)다. 이 시뮬레이터에서 본 과적합은 데이터가 모델보다 훨씬 작아서 생긴다. 실제 LLM 사전학습에서는 대개 데이터를 한 번(1 에폭) 정도만 보므로 학습 손실과 검증 손실이 거의 붙어서 함께 내려간다.
왜 Transformer로 바뀌었나
고정 길이 문맥의 한계를 넘기 위해 2010년대에는 순환 신경망(RNN, LSTM)이 쓰였다. 은닉 상태 \(\mathbf{h}_t = f(\mathbf{h}_{t-1}, x_t)\)를 한 토큰씩 갱신하므로 이론상 문맥 길이에 제한이 없다. 하지만 두 가지 근본 문제가 있었다.
- 긴 거리 정보 손실: 1,000 토큰 앞의 정보는 1,000번의 비선형 변환을 거쳐야 현재에 도달한다. 그동안 고정 크기 벡터에 압축되고, 기울기는 그만큼 곱해지며 소실·폭주한다(3장).
- 병렬화 불가: \(\mathbf{h}_t\)는 \(\mathbf{h}_{t-1}\)이 끝나야 계산할 수 있다. 문장 길이 T만큼의 순차 단계가 필요하므로, 수천 개의 코어가 행렬곱을 동시에 하는 GPU의 힘을 쓰지 못한다.
2017년의 Transformer(5장, 6장)는 순환을 없앴다. 셀프 어텐션은 모든 위치가 모든 이전 위치를 한 단계에 직접 참조하고(경로 길이 1), 학습할 때는 인과 마스크만 씌우면 한 시퀀스의 T개 위치 손실을 큰 행렬곱 몇 번으로 동시에 계산할 수 있다. 계산량은 \(T^2\)로 늘지만 GPU에서는 순차 단계 T번보다 훨씬 빠르다. "규모를 키우면 좋아진다"는 스케일링을 실제로 밀어붙일 수 있게 된 결정적 이유가 이 병렬성이다.
현재의 LLM은 거의 모두 디코더 전용 Transformer(decoder-only)다. GPT 계열, Llama, Qwen, DeepSeek, Mistral 모두 같은 틀에 RoPE, RMSNorm, SwiGLU FFN, GQA 같은 개선을 얹은 형태다(6장). 학습 목표는 이 장의 처음과 똑같은 다음 토큰 교차 엔트로피다. 2024년 이후에는 Mamba 같은 상태공간 모델(SSM)이나 어텐션과 섞은 하이브리드도 연구되지만, 주류는 여전히 Transformer다.
사전학습: 데이터와 계산량
사전학습(pretraining)은 인터넷 문서, 책, 코드, 논문 등 거대한 텍스트에서 다음 토큰 예측을 학습하는 단계다. 데이터 규모는 해마다 커졌다. GPT-3(2020)는 약 3,000억(300B) 토큰, Chinchilla(2022)는 1.4조 토큰, Llama 2(2023)는 2조 토큰, Llama 3(2024)는 약 15조(15T) 토큰으로 학습했다. 원본 웹 크롤(Common Crawl 등)을 그대로 쓰지 않고, 중복 제거, 언어 식별, 품질 분류기 필터링, 개인정보·유해 콘텐츠 제거, 코드·수학 비중 조절 같은 정제를 거친다. 데이터 품질이 모델 품질을 크게 좌우한다는 것이 현장의 공통된 경험이다.
계산량 C ≈ 6ND
파라미터 \(N\)개짜리 Transformer가 토큰 하나를 처리하는 순전파에는 대략 \(2N\) FLOPs가 든다(가중치 하나당 곱셈 1 + 덧셈 1). 역전파는 활성값에 대한 기울기와 가중치에 대한 기울기를 모두 계산하므로 순전파의 약 2배인 \(4N\)이다. 따라서 토큰당 \(6N\), 전체 \(D\)개 토큰을 학습하면
예를 들어 Llama 3 8B를 15T 토큰으로 학습하면 \(C \approx 6 \times 8\times10^9 \times 15\times10^{12} = 7.2\times10^{23}\) FLOPs다. Meta는 Llama 3.1 405B의 사전학습 계산량을 약 \(3.8\times10^{25}\) FLOPs, H100 최대 16,000여 개, 약 3,084만 GPU-시간으로 보고했다(2024). 아래 계산기로 직접 확인해 보자.
학습 계산량 계산기
| 모델 (연도) | N | D (토큰) | D/N | C ≈ 6ND | 비고 |
|---|---|---|---|---|---|
| GPT-3 (2020) | 175B | 300B | 1.7 | 3.1×10²³ | V100 클러스터 |
| Chinchilla (2022) | 70B | 1.4T | 20 | 5.9×10²³ | 계산 최적 배분 |
| Llama 2 70B (2023) | 70B | 2T | 29 | 8.4×10²³ | A100, 약 172만 GPU-시간 |
| Llama 3 8B (2024) | 8B | 15T | ~1,900 | 7.2×10²³ | H100, 약 130만 GPU-시간 |
| Llama 3 70B (2024) | 70B | 15T | ~210 | 6.3×10²⁴ | H100, 약 640만 GPU-시간 |
| Llama 3.1 405B (2024) | 405B | 15.6T | ~39 | 3.8×10²⁵ | H100 최대 16K개 |
GPU-시간은 Meta 모델 카드의 보고치다. 학습에 필요한 메모리(가중치·기울기·Adam 상태로 파라미터당 약 16바이트)와 분산 학습은 3장과 11장에서 다룬다.
스케일링 법칙: 크기와 데이터의 최적 배분
Kaplan 등(OpenAI, 2020)은 언어 모델의 테스트 손실이 파라미터 수 N, 데이터 D, 계산량 C에 대해 수 자릿수에 걸쳐 매끄러운 거듭제곱 법칙(power law)을 따른다는 것을 보였다. 로그-로그 그래프에서 직선이라는 뜻이다. 이 관찰 덕분에 작은 모델 수십 개를 학습해 보고, 수백 배 큰 모델의 손실을 학습 전에 예측할 수 있게 되었다.
그렇다면 계산 예산 C가 정해졌을 때 N과 D를 어떻게 나눠야 할까? 큰 모델을 적은 데이터로? 작은 모델을 많은 데이터로? Hoffmann 등(DeepMind, 2022)은 400개 넘는 모델을 학습해 다음 형태를 적합했다.
논문의 핵심 결론은 "N과 D를 거의 같은 비율로 키워라", 구체적으로 파라미터당 약 20 토큰이었다. 같은 계산량(약 5.8×10²³ FLOPs)으로 Gopher 280B(300B 토큰)보다 Chinchilla 70B(1.4T 토큰)가 모든 평가에서 더 좋았다. GPT-3(175B, 300B 토큰, 파라미터당 1.7 토큰)는 이 기준으로 크게 데이터 부족이었던 셈이다.
위 수식의 계수(논문의 '접근법 3')를 그대로 최소화하면 최적 비율이 파라미터당 20이 아니라 계산량에 따라 30~150 토큰으로 나온다. 논문의 다른 두 접근법은 약 20을 줬다. Besiroglu 등(Epoch AI, 2024)은 원 데이터를 재구성해 다시 적합한 결과(E=1.82, A=482.0, B=2085.4, α=0.348, β=0.366)가 접근법 1·2와 일치하는 약 20 토큰/파라미터를 준다고 보고했다. 아래 시뮬레이터에서 두 계수 세트를 바꿔 볼 수 있다. 스케일링 법칙은 물리 법칙이 아니라 경험적 적합이며, 데이터 구성·토크나이저·아키텍처가 바뀌면 계수도 바뀐다는 점을 기억하자.
스케일링 법칙 탐색: N–D 평면의 손실 지형
Chinchilla 이후 업계는 두 방향으로 갈렸다. 최고 성능 하나만 노리는 경우에는 계산 최적 근처를, 널리 배포할 모델은 계산 최적보다 훨씬 많은 데이터로 학습하는 과학습(overtraining)을 택한다. Llama 3 8B의 파라미터당 약 1,900 토큰이 극단적인 예다. Meta는 8B와 70B 모두 15T 토큰까지도 손실이 로그-선형으로 계속 내려갔다고 보고했다. 학습은 한 번이지만 추론은 수조 번 일어나므로, 수명 전체의 계산을 최소화하는 기준이 달라지는 것이다. 또 다른 제약은 데이터 고갈이다. 고품질 공개 텍스트는 수십조 토큰 규모로 추정되어, 합성 데이터와 여러 에폭 반복이 활발히 연구되고 있다.
사전학습 이후: SFT와 선호 학습
사전학습만 마친 베이스 모델(base model)은 "인터넷 문서를 이어 쓰는 기계"다. "프랑스의 수도는?"이라고 넣으면 답 대신 "독일의 수도는? 이탈리아의 수도는?"처럼 퀴즈 목록을 이어 쓸 수도 있다. 이 모델을 사람의 지시를 따르고, 도움이 되며, 해로운 요청을 거절하는 조수로 바꾸는 과정을 사후 학습(post-training) 또는 정렬(alignment)이라 한다.
SFT와 채팅 템플릿
지도 미세조정(SFT, Supervised Fine-Tuning)은 사람이 쓴(또는 강한 모델이 생성하고 사람이 검수한) "지시 → 모범 답변" 쌍으로 같은 다음 토큰 손실을 계속 학습한다. 다만 손실은 답변 부분 토큰에만 건다. 대화는 역할을 구분하는 특수 토큰으로 감싼 채팅 템플릿으로 직렬화된다. 다음은 Llama 3 Instruct의 형식이다.
<|begin_of_text|><|start_header_id|>system<|end_header_id|> 너는 친절한 조수다.<|eot_id|><|start_header_id|>user<|end_header_id|> 프랑스의 수도는?<|eot_id|><|start_header_id|>assistant<|end_header_id|> 프랑스의 수도는 파리입니다.<|eot_id|> ← 이 부분에만 손실
특수 토큰은 어휘에 따로 예약된 ID를 가지며 일반 텍스트로는 만들어지지 않는다. 모델은 <|eot_id|>를 생성하는 것으로 "내 차례가 끝났다"를 표시하고, 서빙 시스템은 이 토큰을 만나면 생성을 멈춘다. 템플릿이 학습 때와 다르면 모델 품질이 눈에 띄게 떨어지므로, 추론 프레임워크는 모델과 함께 배포된 템플릿을 그대로 써야 한다.
RLHF와 DPO
SFT는 "모범 답을 흉내 내기"라서, 모범 답보다 나은 답을 배우기 어렵고 무엇이 더 나은지에 대한 신호가 없다. 사람에게 좋은 답을 직접 쓰게 하는 것보다 두 답 중 나은 쪽을 고르게 하는 것이 훨씬 쉽고 일관적이다. RLHF(Reinforcement Learning from Human Feedback)는 이 비교 데이터로 보상 모델 \(r_\phi\)를 학습하고(Bradley–Terry 모델: \(P(y_w \succ y_l) = \sigma(r_\phi(y_w) - r_\phi(y_l))\)), 정책 \(\pi_\theta\)가 보상을 최대화하되 SFT 모델 \(\pi_{ref}\)에서 너무 멀어지지 않도록 KL 페널티를 건 목표를 PPO로 최적화한다(InstructGPT, 2022).
이 목표의 최적해는 \(\pi^*(y\mid x) \propto \pi_{ref}(y\mid x)\exp(r(x,y)/\beta)\)로 닫힌 형태다. 이를 거꾸로 풀면 보상이 \(r = \beta\log\frac{\pi^*}{\pi_{ref}} + \text{상수}\)이므로, 보상 모델 없이 정책의 로그 확률비 자체를 "암묵적 보상"으로 쓸 수 있다. 이것을 Bradley–Terry 손실에 대입한 것이 DPO(Direct Preference Optimization, Rafailov 등 2023)다.
실제 LLM에서 \(\log\pi_\theta(y\mid x)\)는 응답 토큰들의 로그 확률 합이다. 아래 장난감에서는 한 프롬프트에 대한 응답 후보 5개만 있는 범주형 정책 \(\pi_\theta = \mathrm{softmax}(\boldsymbol\theta)\)로 단순화해, 같은 DPO 기울기를 정확히 계산한다. 이 경우 \(\partial\mathcal{L}/\partial\boldsymbol\theta = -\beta(1-\sigma(h))(\mathbf{e}_w - \mathbf{e}_l)\)로, 두 응답의 로짓만 움직인다.
선호 최적화(DPO) 장난감
DPO는 보상 모델과 강화학습 루프가 필요 없어 구현이 간단하고 안정적이라 2023년 이후 오픈 모델에서 널리 쓰였다. Llama 3도 SFT 후 DPO를 여러 라운드 반복했다. 반면 PPO류의 온라인 강화학습은 정책이 직접 생성한 새 응답으로 계속 학습할 수 있어, 정답 검증이 가능한 수학·코드 과제에서 다시 주목받았다(다음 절의 추론 모델). 사람 대신 AI가 원칙에 따라 비교 판단을 내리게 하는 RLAIF, Constitutional AI 같은 방법도 함께 쓰인다.
보상 모델은 사람 선호의 불완전한 근사다. 정책이 이를 과하게 최적화하면 길고 장황한 답, 확신에 찬 말투, 사용자의 의견에 무조건 동의하는 아첨(sycophancy) 같은 '보상은 높지만 실제로는 나쁜' 행동을 배운다. KL 페널티(β)는 이런 과최적화를 막는 장치이며, 위 시뮬레이터에서 β가 작을수록 정책이 참조에서 멀리 벗어나는 것이 바로 그 위험이다.
창발, 인컨텍스트 학습, 추론 모델
GPT-3 논문(2020)의 제목은 "Language Models are Few-Shot Learners"였다. 가중치를 전혀 바꾸지 않고, 프롬프트에 예시 몇 개를 넣는 것만으로 모델이 새 과제를 수행한다는 발견이다. 이를 인컨텍스트 학습(in-context learning, ICL)이라 한다.
영어 → 한국어 cheese → 치즈 sea otter → 해달 peppermint → 페퍼민트 plush giraffe → 봉제 기린 ← 모델이 패턴을 이어 씀 (few-shot, 예시 3개)
예시 없이 지시만 주면 zero-shot, 몇 개 주면 few-shot이다. 모델 입장에서는 이것도 그냥 "다음 토큰 예측"이다. 사전학습 데이터에 이런 패턴(목록, 표, 문답)이 무수히 있으므로, 문맥에서 과제를 추론하고 이어 쓰는 능력이 학습된다. 연구에 따르면 어텐션 헤드 중 일부가 "앞에서 A 다음에 B가 왔으면, 지금 A가 나왔을 때 B를 복사"하는 인덕션 헤드(induction head)로 발달하며, 이것이 ICL의 기본 회로 중 하나로 알려져 있다(5장).
창발 능력?
특정 규모를 넘으면 갑자기 나타나는 듯한 능력을 창발(emergent abilities)이라 부른다(Wei 등, 2022). 예를 들어 여러 자리 덧셈 정확도가 작은 모델에서는 0 근처이다가 어느 크기에서 급격히 오른다. 하지만 Schaeffer 등(2023)은 이 '급변'의 상당 부분이 평가 지표 때문이라고 지적했다. 정답 전체가 맞아야 1점인 정확도는 불연속적이지만, 토큰별 로그 확률 같은 연속 지표로 보면 손실과 함께 매끄럽게 좋아진다. 다음 토큰 손실의 매끄러운 감소(스케일링 법칙)가 사람이 보는 과제 성능에서는 문턱처럼 보일 수 있다는 뜻이다.
Chain-of-thought와 테스트타임 계산
"단계별로 생각해 보자"처럼 중간 추론을 글로 쓰게 하면 수학·논리 문제의 정확도가 크게 오른다. 이것이 chain-of-thought(CoT) 프롬프팅이다. 이유는 계산 구조에서 찾을 수 있다. Transformer는 토큰 하나를 만들 때 고정된 층 수만큼의 계산만 한다. 답을 곧바로 한 토큰으로 내야 하면 그 안에 모든 계산을 끝내야 하지만, 중간 단계를 토큰으로 써 내려가면 생성한 토큰 수만큼 계산을 더 쓰고, 써 둔 중간 결과를 다시 읽어 활용할 수 있다.
2024~2025년의 추론 모델(reasoning models)은 이것을 학습으로 끌어올렸다. OpenAI o1(2024), DeepSeek-R1(2025) 등은 답을 내기 전에 긴 사고 과정을 생성하도록 강화학습으로 훈련된다. 수학 정답이나 코드 테스트 통과처럼 자동으로 검증 가능한 보상을 주면, 모델은 스스로 검산하고, 막히면 다른 접근을 시도하는 긴 추론을 배운다. 이렇게 하면 모델 크기를 키우는 대신 추론 시점에 더 많은 토큰(계산)을 써서 성능을 올릴 수 있다. 이를 테스트타임 계산 스케일링(test-time compute)이라 부르며, 학습 계산량에 이은 두 번째 스케일링 축으로 여겨진다. 대가는 응답 지연과 토큰 비용이다(8장, 11장).
환각과 보정
LLM은 사실과 다른 내용을 그럴듯하게 만들어 내곤 한다. 존재하지 않는 논문을 인용하거나, 모르는 사람의 약력을 지어낸다. 이를 환각(hallucination)이라 한다. 다음 토큰 예측의 관점에서 보면 이상한 일이 아니다. 모델은 "그럴듯한 다음 토큰"을 내도록 학습되었고, 사전학습 데이터에서 질문 다음에는 거의 항상 답이 온다. "모르겠다"로 이어지는 문서는 드물다. 드물게 등장한 사실(롱테일 지식)일수록 모델이 정확히 기억하지 못하면서도 형식만은 자신 있게 채운다.
그렇다면 모델이 자기 답의 신뢰도를 알 수는 있을까? 이를 재는 개념이 보정(calibration)이다. 모델이 "확률 70%"라고 말한 답들을 모았을 때 실제로 70%가 맞으면 잘 보정된 것이다. GPT-4 기술 보고서(2023)는 사전학습만 한 모델이 객관식 문제에서 꽤 잘 보정되어 있지만, RLHF 후에는 보정이 나빠진다(과신하게 된다)는 그래프를 보여 줬다. 확신에 찬 답이 선호를 많이 받기 때문으로 해석된다.
환각을 줄이는 실용적 방법은 여러 층에서 쓰인다. 모르면 모른다고 답하는 예시를 SFT·선호 데이터에 넣고, 사실성 평가로 보상을 주며, 무엇보다 모델 기억에만 의존하지 않고 검색한 문서를 문맥에 넣어 근거를 대며 답하게 한다. 이것이 10장의 RAG다. 출처를 인용하게 하면 사용자가 직접 확인할 수 있다는 장점도 있다.
컨텍스트 길이와 모델 연표
모델이 한 번에 볼 수 있는 토큰 수인 컨텍스트 길이(context window)는 몇 년 사이 수백 배 늘었다. 어텐션 계산량은 길이의 제곱에 비례하고 KV 캐시 메모리는 길이에 비례하므로(8장), 이는 FlashAttention 같은 커널 최적화, RoPE 주파수 조정 같은 위치 인코딩 확장 기법(6장), 긴 문서로 하는 추가 학습이 함께 이룬 결과다.
| 모델 | 연도 | 파라미터 | 학습 토큰 | 컨텍스트 | 특징 |
|---|---|---|---|---|---|
| GPT-2 | 2019 | 1.5B | WebText 40 GB | 1,024 | "너무 위험해서" 단계적 공개, 어휘 50,257 |
| GPT-3 | 2020 | 175B | 300B | 2,048 | few-shot 인컨텍스트 학습 |
| Chinchilla | 2022 | 70B | 1.4T | 2,048 | 계산 최적 스케일링 |
| InstructGPT / ChatGPT | 2022 | 비공개 | — | — | SFT + RLHF(PPO)의 대중화 |
| GPT-4 | 2023 | 비공개 | 비공개 | 8K / 32K | 멀티모달 입력 |
| Llama 2 | 2023 | 7B / 13B / 70B | 2T | 4,096 | 상업 이용 가능한 공개 가중치 |
| Mixtral 8×7B | 2023 | 46.7B (활성 12.9B) | 비공개 | 32K | 희소 MoE (6장) |
| Llama 3 / 3.1 | 2024 | 8B / 70B / 405B | ~15T | 8K → 128K | 어휘 128,256, GQA, DPO |
| DeepSeek-V3 | 2024 | 671B (활성 37B) | 14.8T | 128K | MoE, FP8 학습 (9장) |
| OpenAI o1 | 2024 | 비공개 | 비공개 | 128K | 강화학습으로 훈련한 긴 추론 |
| DeepSeek-R1 | 2025 | 671B (활성 37B) | V3 기반 | 128K | 검증 가능한 보상 RL, 공개 가중치 추론 모델 |
비공개 모델의 파라미터 수와 데이터 규모는 공식 발표가 없으므로 표에 적지 않았다. 흐름을 요약하면 2019~2022년은 "더 크게", 2022~2024년은 "더 많은 데이터와 정렬", 2024년 이후는 "MoE로 효율적으로, 강화학습과 테스트타임 계산으로 더 깊게"라고 할 수 있다.
핵심 정리
- 언어 모델은 연쇄법칙 \(P(x_{1:T}) = \prod_t P(x_t\mid x_{\lt t})\)에 따라 다음 토큰 분포만 학습한다. 손실은 정답 토큰 확률의 −log 평균(교차 엔트로피), 퍼플렉시티는 그 지수다.
- n-gram은 카운트로 확률을 추정하지만 문맥 가짓수가 \(V^{n-1}\)로 폭발해 희소성 문제가 생긴다. 스무딩·백오프로 0 확률을 피한다.
- 신경망 언어 모델은 임베딩으로 비슷한 토큰끼리 통계를 공유해 일반화한다. 같은 역전파+Adam으로 학습하며, 데이터가 작으면 학습/검증 손실이 벌어지는 과적합이 나타난다.
- RNN의 순차 계산과 장거리 정보 손실을 Transformer가 병렬 어텐션으로 해결했고, 이 병렬성이 대규모 스케일링을 가능하게 했다.
- 학습 계산량은 \(C \approx 6ND\). GPU 수 × 최대 FLOPS × MFU로 나누면 학습 기간이 나온다. Llama 3.1 405B는 약 \(3.8\times10^{25}\) FLOPs였다.
- Chinchilla 스케일링 법칙 \(L = E + A/N^\alpha + B/D^\beta\)는 계산 최적이 대략 파라미터당 20 토큰임을 보였다. 추론 비용을 고려해 실제 배포 모델은 그보다 훨씬 많은 데이터로 과학습한다.
- 사전학습 → SFT(채팅 템플릿, 답변 토큰 손실) → 선호 학습(RLHF/PPO, DPO). DPO는 \(\beta\log(\pi/\pi_{ref})\)를 암묵적 보상으로 써서 비교 데이터에 직접 분류 손실을 건다.
- 인컨텍스트 학습, CoT, 추론 모델(테스트타임 계산)은 모두 "다음 토큰 예측"의 연장이다. 환각은 그럴듯함을 학습한 결과이며, 보정과 RAG가 대응책이다.
확인 퀴즈
1. 어떤 모델이 평가 텍스트의 모든 토큰에 평균적으로(기하평균) 확률 0.25를 줬다. 퍼플렉시티와 손실(nats)은?
2. MLE(스무딩 없는) 4-gram 모델로 평가 문장의 퍼플렉시티가 무한대가 나왔다. 가장 직접적인 원인은?
3. 70B 파라미터 모델을 2T 토큰으로 학습한다. H100(BF16 989 TFLOPS) 2,048개, MFU 40%라면 학습 기간은 대략?
4. Chinchilla 분석에 따르면 GPT-3(175B, 300B 토큰)는 같은 계산량에서 어떻게 했어야 손실이 더 낮았을까?
5. DPO 손실에서 β를 키우면 어떤 효과가 있는가?
6. Chain-of-thought가 어려운 문제의 정확도를 높이는 이유로 가장 적절한 것은?