검색
← 모듈 로드맵

언어 모델의 기본: 다음 토큰 예측 · 퍼플렉서티 · 샘플링

강의 · 입문자 · KAITABASE 정리

원제 · Language Models (D2L 9.3 참고)

다음 토큰 예측 · n-gram · 소프트맥스 · 퍼플렉서티 · 디코딩을 손계산으로 익히는 수업

먼저 알아야 할 것

토큰과 토크나이저소프트맥스교차 엔트로피 · 로그조건부 확률

다루는 내용

LLM의 기본 원리인 언어 모델을 다룹니다. 연쇄 법칙으로 문장 확률을 다음 토큰 확률로 쪼개고, 셈으로 만드는 n-gram과 평활을 확인합니다. 로짓 → 소프트맥스, 교차 엔트로피와 퍼플렉서티, greedy · 온도 · top-k · top-p 디코딩을 작은 숫자로 계산합니다.

해설

언어 모델의 기본: 다음 토큰 예측 · 퍼플렉서티 · 샘플링

ChatGPT · Claude 같은 LLM이 하는 일은 결국 하나, "지금까지의 글 다음에 올 토큰의 확률 분포"를 계산하는 것 입니다. 이 수업에서는 문장 확률을 쪼개는 연쇄 법칙, 세어서 만드는 n-gram 모델, 신경망의 로짓 → 소프트맥스, 학습 손실(교차 엔트로피)과 퍼플렉서티, 그리고 글을 실제로 뽑는 디코딩 방법(greedy · 온도 · top-k · top-p)을 손으로 계산합니다.

항목내용
참고 출처Dive into Deep Learning 9.3절 「Language Models」 (d2l.ai)
트랙 · 수준NLP·트랜스포머 · 기초
이 수업이 다루는 범위연쇄 법칙, 마르코프 가정 · n-gram, 라플라스 평활, 로짓과 소프트맥스, 교차 엔트로피 · 퍼플렉서티, 디코딩 전략

들어가기 전에

한눈에 보기

  • 문장 전체의 확률을 '다음 토큰 확률의 곱'으로 쪼개는 이유와 방법을 압니다.
  • n-gram 모델을 세기만으로 만들고, 왜 0 확률 문제가 생기는지 확인합니다.
  • 신경망이 내놓은 로짓을 소프트맥스로 확률로 바꾸고, 온도가 분포를 어떻게 바꾸는지 계산합니다.
  • 퍼플렉서티가 "모델이 평균적으로 몇 개 중에서 고민하는가"라는 뜻임을 숫자로 확인합니다.
  • greedy · top-k · top-p 샘플링의 차이를 손으로 계산합니다.

1. 문장 확률을 다음 토큰 확률로 쪼개기

직관(해설용 비유). 끝말잇기처럼, 문장 하나를 "앞을 보고 다음 한 조각 고르기"의 연속으로 봅니다.

단계.

  1. 문장을 토큰 x1,…,xTx_1, \dots, x_T 로 나눕니다.
  2. 첫 토큰의 확률, 첫 토큰이 주어졌을 때 둘째 토큰의 확률, … 을 차례로 곱합니다.

D2L이 쓰는 확률의 연쇄 법칙(chain rule)은 다음과 같습니다.

P(x1,…,xT)=∏t=1TP(xt∣x1,…,xt−1)P(x_1, \dots, x_T) = \prod_{t=1}^{T} P(x_t \mid x_1, \dots, x_{t-1})
기호뜻
xtx_ttt번째 토큰
TT문장 길이(토큰 수)
P(xt∣x1,…,xt−1)P(x_t \mid x_1,\dots,x_{t-1})앞 토큰이 다 주어졌을 때 xtx_t 가 나올 조건부 확률
∏\prod전부 곱하기

이 식은 근사가 아니라 항상 성립하는 등식입니다. 그래서 "다음 토큰 확률만 잘 맞히면 문장 전체의 확률도 잘 맞힌다"가 됩니다. GPT 계열의 학습 목표가 이것이고, 강좌들은 이를 인과 언어 모델링(causal language modeling) 이라고 부릅니다.

2. 세어서 만드는 n-gram 모델

직관. 앞의 모든 토큰을 다 보기는 어려우니, 바로 앞 몇 개만 보고 다음을 맞힙니다(마르코프 가정).

바로 앞 하나만 보는 바이그램(bigram)은 이렇게 근사합니다.

P(x1,…,x4)≈P(x1) P(x2∣x1) P(x3∣x2) P(x4∣x3),P^(x′∣x)=n(x,x′)n(x)P(x_1,\dots,x_4) \approx P(x_1)\,P(x_2\mid x_1)\,P(x_3\mid x_2)\,P(x_4\mid x_3), \qquad \hat P(x' \mid x) = \frac{n(x, x')}{n(x)}
기호뜻
n(x)n(x)말뭉치에서 xx 가 나온 횟수
n(x,x′)n(x,x')xx 바로 뒤에 x′x' 가 나온 횟수
P^\hat P셈으로 추정한 확률

숫자로 해 보기(해설용 말뭉치). 세 문장 「나는 커피를 마신다」 「나는 차를 마신다」 「너는 커피를 마신다」가 있다고 합시다.

  • n(나는)=2n(\text{나는})=2, n(나는, 커피를)=1n(\text{나는, 커피를})=1 → P^(커피를∣나는)=1/2\hat P(\text{커피를}\mid\text{나는}) = 1/2
  • n(커피를)=2n(\text{커피를})=2, n(커피를, 마신다)=2n(\text{커피를, 마신다})=2 → P^(마신다∣커피를)=1\hat P(\text{마신다}\mid\text{커피를}) = 1
  • 문장 첫 단어가 '나는'일 확률 =2/3= 2/3

그래서 P(나는 커피를 마신다)≈23×12×1=13P(\text{나는 커피를 마신다}) \approx \frac23\times\frac12\times1 = \frac13 입니다.

그런데 「너는 차를 마신다」는 n(너는, 차를)=0n(\text{너는, 차를}) = 0 이라 확률이 0 이 됩니다. 말이 되는 문장인데도 말뭉치에 없다는 이유만으로 불가능 취급을 받습니다.

고치는 법: 라플라스 평활(Laplace smoothing). D2L은 모든 셈에 작은 상수를 더해 0을 피하는 방법을 소개합니다. 예를 들어 단어 확률은 P^(x)=n(x)+ϵ1/mn+ϵ1\hat P(x) = \frac{n(x)+\epsilon_1/m}{n+\epsilon_1} (nn: 전체 단어 수, mm: 서로 다른 단어 수) 처럼 고칩니다. ϵ1=0\epsilon_1=0 이면 평활이 없고, 클수록 균등 분포 1/m1/m 에 가까워집니다.

왜 신경망으로 넘어갔나. n-gram은 n을 키울수록 셈표가 폭발적으로 커지고 대부분 칸이 0이 됩니다. 또 '커피'와 '녹차'가 비슷하다는 것을 모릅니다. 신경망 언어 모델은 임베딩 으로 비슷한 토큰을 비슷하게 다루고, 긴 앞 문맥도 고정된 크기의 계산으로 요약합니다.

3. 신경망 언어 모델: 로짓 → 소프트맥스

단계.

  1. 앞 토큰들을 모델(RNN · 트랜스포머)에 넣습니다.
  2. 모델은 어휘의 토큰마다 점수 하나, 즉 로짓(logit) zjz_j 를 냅니다.
  3. 소프트맥스(softmax)로 점수를 확률로 바꿉니다.
P(xt=j∣x<t)=exp⁡(zj/τ)∑k=1Vexp⁡(zk/τ)P(x_t = j \mid x_{<t}) = \frac{\exp(z_j / \tau)}{\sum_{k=1}^{V}\exp(z_k/\tau)}
기호뜻
zjz_j토큰 jj 의 로짓(정규화 전 점수)
VV어휘 크기
τ\tau온도(temperature). 학습 때는 1, 생성할 때 조절
x<tx_{<t}tt 이전의 모든 토큰

숫자로 해 보기(해설용). "아침에는 ___" 다음 후보 4개의 로짓이 커피 2.0, 차 1.0, 물 0.1, 돌 −1.0 이라 합시다.

온도 τ\tau커피차물돌
10.6380.2350.0950.032
0.5 (낮춤)0.8620.1170.0190.002
2 (높임)0.4510.2740.1740.101

온도를 낮추면 1등에 몰리고(더 확실 · 덜 다양), 높이면 평평해집니다(더 다양 · 엉뚱한 답 위험). 로짓을 τ\tau 로 나누는 것뿐인데, 지수 함수 때문에 차이가 커지거나 작아집니다.

4. 학습 손실과 퍼플렉서티

직관. 정답 토큰에 높은 확률을 줄수록 좋은 모델입니다. 정답 확률이 낮으면 크게 벌점을 주려고 −log⁡-\log 를 씁니다.

L=−1n∑t=1nlog⁡P(xt∣x<t),PPL=exp⁡(L)\mathcal{L} = -\frac{1}{n}\sum_{t=1}^{n}\log P(x_t \mid x_{<t}), \qquad \mathrm{PPL} = \exp(\mathcal{L})
기호뜻
L\mathcal L토큰당 평균 교차 엔트로피 손실(자연로그)
nn평가한 토큰 수
PPL\mathrm{PPL}퍼플렉서티(perplexity) — 낮을수록 좋음

D2L은 퍼플렉서티를 "다음 토큰을 고를 때 실제로 고민하는 선택지 수의 기하 평균의 역수" 같은 것으로 해석하고, 세 기준점을 줍니다. 정답에 항상 확률 1을 주면 PPL = 1(최선), 정답에 확률 0을 주면 무한대(최악), 어휘 전체에 균등하게 주면 PPL = 어휘 크기 — 쓸모 있는 모델은 이 기준보다 낮아야 합니다.

숫자로 해 보기(해설용). 문장 세 토큰의 정답 확률이 0.5, 0.25, 0.8 이었다고 합시다.

  • −ln⁡0.5=0.693-\ln 0.5 = 0.693, −ln⁡0.25=1.386-\ln 0.25 = 1.386, −ln⁡0.8=0.223-\ln 0.8 = 0.223
  • 평균 손실 L=(0.693+1.386+0.223)/3≈0.768\mathcal L = (0.693+1.386+0.223)/3 \approx 0.768
  • PPL=e0.768≈2.15\mathrm{PPL} = e^{0.768} \approx 2.15

모델이 평균적으로 "약 2개 남짓의 후보 사이에서 고민한 정도"라는 뜻입니다. 확인: (0.5×0.25×0.8)−1/3=0.1−1/3≈2.15(0.5\times0.25\times0.8)^{-1/3} = 0.1^{-1/3} \approx 2.15 로 같습니다.

왜 이렇게 재나. 손실을 문장 길이로 나눠 평균을 내야 긴 문장과 짧은 문장을 공평하게 비교할 수 있습니다. 지수를 씌우면 '선택지 개수'라는 읽기 쉬운 단위가 됩니다. 단, 토크나이저가 다른 모델끼리는 토큰 단위가 달라 PPL을 바로 비교하면 안 됩니다.

5. 디코딩: 확률에서 글 뽑기

모델은 확률 분포만 줍니다. 실제 토큰을 고르는 규칙이 디코딩(decoding)입니다. 고른 토큰을 다시 입력 끝에 붙이고 반복하면 글이 길어집니다(자기 회귀 생성).

mermaid
flowchart LR
  A[프롬프트 토큰] --> B[모델]
  B --> C[로짓]
  C --> D[온도로 나누기]
  D --> E[소프트맥스 확률]
  E --> F{디코딩 규칙<br/>greedy · top-k · top-p}
  F --> G[다음 토큰 1개]
  G --> H{끝 토큰 또는<br/>최대 길이?}
  H -- 아니오 --> A
  H -- 예 --> I[완성된 글]

숫자로 해 보기(해설용, 온도 1의 분포: 커피 0.638 · 차 0.235 · 물 0.095 · 돌 0.032).

  • greedy(탐욕): 가장 큰 '커피'를 항상 고릅니다. 같은 입력엔 같은 답, 대신 반복 · 단조로움이 생기기 쉽습니다.
  • top-k (k=2): 상위 2개(커피 · 차)만 남기고 다시 정규화합니다. 0.638/(0.638+0.235)≈0.7310.638/(0.638+0.235) \approx 0.731, 차 ≈0.269\approx 0.269. '돌'은 아예 뽑힐 수 없습니다.
  • top-p (p=0.9, 뉴클리어스 샘플링): 큰 것부터 누적 확률이 0.9 이상이 될 때까지 남깁니다. 누적은 커피 0.638 → +차 0.873 → +물 0.968 이므로 세 개가 남습니다. 다시 정규화하면 커피 ≈ 0.659, 차 ≈ 0.243, 물 ≈ 0.098 입니다.

왜 top-p가 많이 쓰이나. top-k는 분포가 뾰족하든 평평하든 늘 k개를 남깁니다. top-p는 모델이 확신할 때는 후보를 적게, 헷갈릴 때는 많이 남겨 상황에 맞게 조절됩니다. 실무에서는 온도와 top-p를 함께 조절하는 경우가 많고, 정답이 하나인 작업(추출 · 분류 · 코드)은 온도를 낮게 두는 편이 안전합니다.

연습 문제

  1. 본문 말뭉치에서 P^(마신다∣차를)\hat P(\text{마신다}\mid\text{차를}) 와 P(나는 차를 마신다)P(\text{나는 차를 마신다}) (바이그램)는?
    • 풀이: n(차를)=1n(\text{차를})=1, n(차를, 마신다)=1n(\text{차를, 마신다})=1 → 1. 문장 확률 =23×12×1=13=\frac23\times\frac12\times1=\frac13 입니다.
  2. 어휘가 50,000개인 모델이 모든 토큰에 균등한 확률을 주면 PPL은?
    • 풀이: 정답 확률이 항상 1/500001/50000 이라 L=ln⁡50000\mathcal L = \ln 50000, PPL=50000\mathrm{PPL}=50000 입니다.
  3. 정답 확률이 모두 0.5인 문장의 PPL은?
    • 풀이: L=ln⁡2\mathcal L = \ln 2, PPL=2\mathrm{PPL} = 2 — 매번 "둘 중 하나"를 고민한 셈입니다.
  4. 로짓 (3, 1)인 두 토큰을 온도 1로 소프트맥스하면?
    • 풀이: e3/(e3+e1)=1/(1+e−2)≈0.881e^3/(e^3+e^1) = 1/(1+e^{-2}) \approx 0.881, 나머지 ≈0.119\approx 0.119 입니다.

스스로 점검

  1. 연쇄 법칙 분해는 근사인가요?
    • 답: 아닙니다. 항상 성립하는 등식입니다. 근사가 들어가는 것은 n-gram처럼 앞 문맥을 잘라낼 때입니다.
  2. 온도를 0에 가깝게 낮추면 샘플링은 무엇과 같아지나요?
    • 답: 가장 큰 로짓에 확률이 거의 다 몰려 greedy 디코딩과 같아집니다.
  3. 토크나이저가 다른 두 모델의 PPL을 바로 비교하면 안 되는 이유는?
    • 답: PPL은 '토큰당' 값인데, 같은 글이라도 토큰 수와 단위가 달라지기 때문입니다.

용어 정리

용어쉬운 뜻
언어 모델(language model)글의 확률, 특히 다음 토큰 확률을 계산하는 모델
연쇄 법칙(chain rule)결합 확률을 조건부 확률의 곱으로 쪼개는 규칙
마르코프 가정바로 앞 몇 개만 보면 충분하다고 보는 단순화
n-gram앞 n−1개 토큰으로 다음을 예측하는 셈 기반 모델
평활(smoothing)셈이 0인 경우에도 작은 확률을 주는 보정
로짓(logit)소프트맥스 전의 점수
소프트맥스(softmax)점수들을 합이 1인 확률로 바꾸는 함수
교차 엔트로피(cross-entropy)정답 토큰 확률의 −log⁡-\log 평균, 학습 손실
퍼플렉서티(perplexity)교차 엔트로피의 지수, 평균 고민 선택지 수
온도(temperature)분포를 뾰족하게 또는 평평하게 만드는 조절값
top-k / top-p상위 k개 / 누적 확률 p까지만 남기고 뽑는 방법

더 깊이 보려면

다음에 볼 것

라이선스

본문은 KAITABASE 자체 해설입니다. 참고 자료 Dive into Deep Learning은 CC BY-SA 4.0으로 공개되어 있습니다. 말뭉치 · 로짓 · 확률 숫자는 모두 이 수업을 위해 만든 해설용 예입니다.

출처

  • Dive into Deep Learning 9.3 Language Models: https://d2l.ai/chapter_recurrent-neural-networks/language-model.html

AI 원리부터 이해하기 · NLP·트랜스포머 모듈

NLP·트랜스포머 모듈 학습

이 글은 NLP·트랜스포머 모듈의 학습 자료입니다. 전체 23개 자료 중 4번째입니다.

AI 기초 과정은 현재 진도 저장을 지원하지 않습니다.

출처·원문

원문 보기

요약만

본문 자체 작성 · 참고 자료 D2L(CC BY-SA 4.0)