본문으로 건너뛰기

샘플링과 디코딩 (기술 심화)

:::note 전제 어텐션 문서의 마지막 단계에서 모델은 logits → softmax → 다음 토큰 확률분포를 만듭니다. 이 문서는 그 분포에서 실제로 토큰을 어떻게 고르는가(디코딩 전략)를 다룹니다. :::

1. 출발점 — 확률분포​

모델은 매 스텝 어휘집 전체에 대한 확률을 출력합니다.

logits (원점수) → softmax(logits / T) → P(토큰)
예: 서울 0.60 · 부산 0.15 · 평양 0.10 · 대전 0.05 · ...

이 분포에서 하나를 고르는 방식이 디코딩 전략이며, 답변의 창의성·일관성·반복을 좌우합니다.

2. Temperature (T) — 분포의 날카로움​

softmax에 온도 T를 나눠 분포 모양을 바꿉니다.

P_i = exp(logit_i / T) / Σ exp(logit_j / T)
T효과
T → 0분포가 뾰족해짐 → 1등만 선택(greedy에 수렴), 일관·보수적
T = 1원래 분포 그대로
T > 1분포가 평평해짐 → 다양·창의적, 대신 엉뚱해질 위험
logits=[2.0, 1.0, 0.1]
T=0.5 → [0.87, 0.12, 0.01] (뾰족)
T=1.0 → [0.66, 0.24, 0.10]
T=2.0 → [0.51, 0.31, 0.18] (평평)

3. Greedy / Beam Search — 결정적 방식​

Greedy : 매 스텝 확률 1등만 선택. 빠르지만 단조·국소최적에 갇힘
Beam : 상위 b개 후보 경로를 동시에 유지하며 전체 확률이 높은 문장 탐색
→ 번역·요약처럼 "정답에 가까운" 출력에 유리, 대화엔 단조로울 수 있음

4. Top-k 샘플링 — 후보 제한​

확률 상위 k개 토큰만 남기고 나머지는 버린 뒤, 그 안에서 (재정규화해) 샘플링.

k=3 → {서울0.60, 부산0.15, 평양0.10} 만 남기고 재정규화 후 추출
  • 장점: 말도 안 되는 꼬리(long tail) 토큰 차단
  • 단점: k가 고정이라 상황(분포가 뾰족/평평)에 유연하지 못함

5. Top-p (Nucleus) 샘플링 — 누적확률 제한​

확률을 높은 순으로 더해 누적합이 p(예: 0.9) 가 될 때까지의 토큰만 후보로.

p=0.9 → 누적 0.60 → 0.75 → 0.85 → 0.90 도달
→ 그 지점까지의 토큰만 남기고 재정규화 후 샘플링
  • 분포가 뾰족하면 후보가 적고, 평평하면 많아짐 → 상황 적응적이라 top-k보다 널리 쓰임
  • 보통 temperature + top-p를 함께 사용

6. 반복 억제​

LLM은 같은 구절을 반복하는 경향이 있어 보정합니다.

기법방식
repetition penalty이미 나온 토큰의 logit을 낮춤
frequency penalty많이 나온 토큰일수록 더 페널티
presence penalty한 번이라도 나오면 페널티(새 주제 유도)
no-repeat n-gram같은 n-gram 재등장 금지

7. 전형적인 설정 예​

용도설정(예)
사실 QA·코드T 0~0.3, top-p 1.0 (결정적·일관)
일반 대화T 0.7, top-p 0.9
창작·브레인스토밍T 0.9~1.2, top-p 0.95

:::info 왜 같은 질문에 답이 매번 다를까 temperature>0 + 샘플링이면 확률적으로 토큰을 뽑기 때문입니다. 완전히 재현하려면 T=0(greedy) 또는 seed 고정이 필요합니다. :::

8. 요약​

logits → (/T) softmax → [top-k / top-p 로 후보 제한] → [반복 페널티] → 샘플링
손잡이무엇을 바꾸나
temperature분포의 날카로움(창의성 ↔ 일관성)
top-k후보를 상위 k개로 고정
top-p후보를 누적확률 p까지(적응적)
penalties반복 억제