디코딩 전략: 탐욕 · 빔 · 온도 · top-k · top-p
탐욕 · 빔 · 온도 · top-k · top-p · 반복 벌점을 한 분포로 손계산하며 비교하는 수업
먼저 알아야 할 것
다루는 내용
언어 모델의 확률 분포에서 실제 토큰을 고르는 디코딩 전략을 다룹니다. 토큰 5개 분포로 온도 · top-k · top-p · min-p를 계산하고, 두 단계 예로 탐욕과 빔 탐색의 차이를 확인하며, 핵 샘플링 · CTRL 논문 근거와 상황별 출발 설정을 정리합니다.
해설
디코딩 전략: 탐욕 · 빔 · 온도 · top-k · top-p
언어 모델이 내놓는 것은 글이 아니라 다음 토큰의 확률 분포 입니다. 그 분포에서 실제로 어떤 토큰을 고를지 정하는 규칙이 디코딩 전략이고, 같은 모델이라도 이 규칙에 따라 답이 단조로워지기도, 엉뚱해지기도 합니다. 이 수업에서는 토큰 5개짜리 분포 하나로 탐욕 · 빔 탐색 · 온도 · top-k · top-p(핵 샘플링) · min-p · 반복 벌점을 모두 손으로 계산해 보고, 상황별로 어떤 설정을 고르는지 정리합니다.
| 항목 | 내용 |
|---|---|
| 참고 출처 | Hugging Face Transformers 「Generation strategies」 · GenerationConfig 문서 · 핵 샘플링(arXiv 1904.09751) · Fan 외 2018(arXiv 1805.04833) · CTRL(arXiv 1909.05858) |
| 트랙 · 수준 | NLP·트랜스포머 · 중급 |
| 이 수업이 다루는 범위 | 자기회귀 생성 루프, 탐욕 디코딩, 빔 탐색 · 길이 벌점, 온도, top-k, top-p, min-p, 반복 벌점, 상황별 설정 |
들어가기 전에
- 언어 모델의 기본: 다음 토큰 예측 · 퍼플렉서티 · 샘플링 — 소프트맥스와 확률적 샘플링의 기초.
- 인코더 · 디코더 · 인코더-디코더 — 디코더가 한 토큰씩 생성한다는 것.
한눈에 보기
- 생성이 "확률 계산 → 토큰 하나 고르기 → 이어 붙이기"의 반복임을 압니다.
- 탐욕 디코딩이 왜 전체로 보면 덜 그럴듯한 문장을 고를 수 있는지 빔 탐색과 비교해 계산합니다.
- 온도가 분포를 뾰족하게 · 평평하게 만드는 것을 숫자로 봅니다.
- top-k와 top-p가 후보를 자르는 방식의 차이를 같은 분포로 비교합니다.
- 사실 답변 · 코드 · 창작 등 상황별로 출발점이 되는 설정을 고를 수 있습니다.
1. 생성 루프
단계.
- 지금까지의 글(프롬프트 + 이미 만든 토큰)을 모델에 넣습니다.
- 마지막 위치에서 어휘 전체에 대한 점수(로짓, logit)를 얻습니다.
- 디코딩 규칙으로 토큰 하나를 고릅니다. ← 이 수업의 주제
- 고른 토큰을 글 끝에 붙이고 1로 돌아갑니다. 끝 토큰이 나오거나 최대 길이에 닿으면 멈춥니다.
flowchart LR
P[프롬프트 + 지금까지 만든 토큰] --> M[언어 모델]
M --> L[로짓]
L --> T[온도로 나누기]
T --> F[후보 자르기<br/>top-k · top-p · min-p]
F --> S{고르기}
S -->|가장 큰 것| G[탐욕]
S -->|확률대로| R[샘플링]
G --> A[토큰 붙이기]
R --> A
A -->|끝 토큰 전까지 반복| P이 수업의 예(해설용). "내일 오전에 ___"의 다음 토큰 후보 5개와 로짓입니다.
| 토큰 | 회의 | 점심 | 커피 | 보고서 | 고양이 |
|---|---|---|---|---|---|
| 로짓 | 2.0 | 1.5 | 1.0 | 0.5 | −1.0 |
| 확률 (온도 1) | 0.445 | 0.270 | 0.164 | 0.099 | 0.022 |
2. 탐욕 디코딩과 빔 탐색
탐욕(greedy). 매번 확률이 가장 큰 토큰을 고릅니다. 위 표에서는 항상 '회의'입니다. 빠르고 결과가 늘 같습니다(결정적). Hugging Face에서는 샘플링을 끄고(do_sample=False) 빔을 1로 두면 탐욕입니다.
문제: 지금 최선이 전체 최선은 아니다. 문장 확률은 토큰 확률의 곱입니다.
숫자로 해 보기(해설용, 두 단계). 첫 토큰 확률이 A 0.5, B 0.4, C 0.1이고, 두 번째 토큰 확률이 A 뒤에서는 (x 0.40, y 0.35, z 0.25), B 뒤에서는 (x 0.90, y 0.05, z 0.05)라 합시다.
- 탐욕: A(0.5) → x(0.40) → 문장 확률
- 빔 크기 2: 첫 단계에서 A · B 두 갈래를 유지 → 후보 Ax 0.20, Ay 0.175, Az 0.125, Bx 0.36, … → 상위는 Bx
- 빔 탐색이 확률 0.36짜리 문장을 찾았습니다. 첫 단계에서 2등이던 B가 두 번째 단계에서 확실한 이어짐을 가졌기 때문입니다.
빔 탐색(beam search). 매 단계 상위 개 부분 문장(빔)만 남기고 넓혀 갑니다. 번역 · 요약처럼 "정답에 가까운 한 문장"이 있는 일에서 자주 씁니다. 로그 확률 합은 문장이 길수록 작아지므로 짧은 문장을 편애합니다. 그래서 길이로 나눠 보정하는 길이 벌점(length penalty) 을 함께 씁니다. Hugging Face 문서는 이 값을 시퀀스 길이에 지수로 적용해 점수를 나눈다고 설명합니다.
왜 열린 생성에는 잘 안 맞나. Holtzman 외(2019)는 빔 탐색처럼 확률이 높은 출력을 찾는 방법이 밋밋하고 같은 말을 반복하는 글(퇴화, degeneration)을 만든다고 보고했습니다. 사람이 쓴 글은 매 토큰이 늘 가장 그럴듯한 선택은 아니기 때문입니다. 그래서 대화 · 창작에는 샘플링을 씁니다.
3. 온도
직관. 온도는 분포의 '뾰족함 조절 손잡이'입니다. 낮추면 1등이 더 강해지고, 높이면 고르게 퍼집니다.
| 기호 | 뜻 |
|---|---|
| 토큰 의 로짓 | |
| 온도(양수). 이 원래 분포 | |
| 조정된 확률 |
숫자로 해 보기(위 표, 파이썬으로 검산).
| 온도 | 회의 | 점심 | 커피 | 보고서 | 고양이 |
|---|---|---|---|---|---|
| 0.5 | 0.643 | 0.237 | 0.087 | 0.032 | 0.002 |
| 1.0 | 0.445 | 0.270 | 0.164 | 0.099 | 0.022 |
| 2.0 | 0.325 | 0.253 | 0.197 | 0.153 | 0.072 |
온도 2에서는 '고양이'가 7%로 올라옵니다. 온도가 0에 가까워지면 탐욕과 같아집니다. 핵 샘플링 논문도 온도를 낮추면 품질은 오르지만 다양성이 줄어든다는 선행 분석을 인용합니다.
4. top-k 샘플링
방식. 확률 상위 개만 남기고, 그 안에서 합이 1이 되게 다시 나눈 뒤(재정규화) 샘플링합니다. Fan 외(2018)는 이야기 생성에서 상위 개 후보에서 무작위로 뽑는 방식을 썼습니다.
숫자로 해 보기(). 회의 0.445, 점심 0.270 → 합 0.715 → 재정규화 . 나머지 세 토큰은 절대 나오지 않습니다.
약점. 가 고정입니다. 핵 샘플링 논문은 분포가 평평한 문맥(그럴듯한 후보가 수십 개)에서는 작은 가 글을 밋밋하게 만들고, 뾰족한 문맥(정답이 거의 하나)에서는 큰 가 엉뚱한 후보까지 끌어들인다고 지적합니다.
5. top-p (핵 샘플링)
방식. 확률이 큰 순서로 쌓아 누적 합이 이상이 되는 가장 작은 집합 만 남깁니다(핵, nucleus). 후보 수가 분포 모양에 따라 저절로 늘고 줄어듭니다.
| 기호 | 뜻 |
|---|---|
| 누적 확률이 처음으로 이상이 되는 최소 상위 집합 | |
| 문턱(예: 0.9, 0.95) |
숫자로 해 보기. 누적 합은 0.445 → 0.715 → 0.879 → 0.978 → 1.0 입니다.
- : 2개(회의 · 점심)
- : 3개(+커피)
- : 4개(+보고서) → 재정규화 . '고양이'만 잘립니다.
분포가 뾰족한 문맥이었다면 같은 에서도 1~2개만 남았을 것입니다. 이것이 top-k와의 차이입니다. 논문의 실험 비교에는 설정이 쓰였습니다.
min-p(참고). 가장 큰 확률에 비례한 문턱을 둡니다. Hugging Face 문서는 1등 확률에 min_p 를 곱한 값보다 작은 토큰을 버린다고 설명합니다. 위 예에서 min_p=0.1 이면 문턱 → '고양이'(0.022)만 빠집니다.
6. 반복 벌점
문제. 샘플링을 해도 같은 구절이 되풀이될 수 있습니다.
CTRL의 벌점 샘플링. 이미 생성한 토큰의 점수를 로 나눠(낮춰) 다시 나오기 어렵게 합니다. 논문은 탐욕 디코딩에 가 사실성과 반복 억제 사이의 균형이 좋았다고 보고했습니다. Hugging Face의 repetition_penalty 가 이 방식을 따르며 1.0이 벌점 없음입니다. 너무 크게 주면 꼭 필요한 반복(사람 이름, 변수 이름)까지 막는다는 점에 주의합니다.
7. 상황별 출발점
Hugging Face 문서 기준 기본값은 온도 1.0, top-k 50, top-p 1.0(끔)이며, 모델의 generation_config.json 이 따로 정하면 그 값을 씁니다. 아래 표는 출발점으로 삼을 경향 이지 정답이 아닙니다. 모델마다 권장값이 다르니 모델 카드를 먼저 확인합니다.
| 상황 | 경향 | 이유 |
|---|---|---|
| 사실 질의 · 추출 · 분류 | 탐욕 또는 낮은 온도 | 정답이 하나에 가깝고, 다양성이 오히려 오류 |
| 코드 생성 | 낮은 온도 | 문법이 엄격해 엉뚱한 토큰 하나가 치명적 |
| 번역 · 요약 | 빔 탐색 또는 낮은 온도 | 입력에 충실한 한 문장을 찾는 일 |
| 대화 · 창작 · 아이디어 | 온도 높게 + top-p | 밋밋함과 반복을 피하고 다양성 확보 |
| 여러 번 뽑아 투표(자기 일관성) | 샘플링 | 답이 달라야 투표가 의미 있음(자기 일관성) |
자주 하는 실수. 온도 · top-k · top-p를 한꺼번에 많이 바꾸면 무엇이 효과를 냈는지 알 수 없습니다. 하나씩 바꿔 비교합니다. 직접 비교해 보는 실습은 작은 언어 모델로 디코딩 전략 비교하기에 있습니다.
연습 문제
- 위 표의 로짓에서 온도를 0.1로 하면 대략 어떤 분포가 되나요?
- 풀이: 로짓 차이가 10배로 커져( = 20, 15, 10, …) '회의'가 이 됩니다. 사실상 탐욕입니다.
- top-k=3으로 자르면 '커피'의 최종 확률은?
- 풀이: 상위 3개 합 , '커피' 입니다.
- 2절 빔 예에서 빔 크기를 1로 하면 결과는?
- 풀이: 빔 1은 탐욕과 같아 Ax(0.20)가 나옵니다.
- 분포가 (0.97, 0.01, 0.01, 0.01)일 때 top-p=0.9와 top-k=3은 각각 후보 몇 개를 남기나요?
- 풀이: top-p는 첫 토큰만으로 0.97 ≥ 0.9이므로 1개, top-k는 무조건 3개입니다. 뾰족한 분포에서 top-k가 불필요한 후보를 남기는 예입니다.
스스로 점검
- 탐욕 디코딩이 문장 확률을 최대로 만들지 못하는 이유는?
- 답: 매 단계 지역 최선만 고르기 때문에, 지금은 2등이지만 뒤가 훨씬 확실한 갈래를 놓칠 수 있습니다.
- top-p가 top-k보다 문맥에 잘 적응하는 이유는?
- 답: 후보 수를 고정하지 않고 누적 확률로 정하므로, 분포가 평평하면 많이, 뾰족하면 적게 남기기 때문입니다.
- 온도를 높이면 생기는 이득과 위험은?
- 답: 다양하고 덜 반복적인 글이 나오지만, 확률이 낮은 엉뚱한 토큰이 뽑힐 가능성도 커져 사실 오류나 횡설수설이 늘 수 있습니다.
용어 정리
| 용어 | 쉬운 뜻 |
|---|---|
| 디코딩 전략 | 확률 분포에서 실제 토큰을 고르는 규칙 |
| 로짓(logit) | 소프트맥스 전의 원점수 |
| 탐욕 디코딩 | 매번 가장 확률 높은 토큰을 고르기 |
| 빔 탐색 | 상위 개 부분 문장을 유지하며 넓혀 가는 탐색 |
| 길이 벌점 | 빔 탐색이 짧은 문장을 편애하지 않게 길이로 점수를 보정 |
| 온도 | 로짓을 나눠 분포의 뾰족함을 조절하는 값 |
| top-k | 상위 개만 남기고 샘플링 |
| top-p(핵 샘플링) | 누적 확률 를 채우는 최소 집합에서 샘플링 |
| 재정규화 | 남긴 후보들의 확률 합을 다시 1로 맞추는 것 |
| 퇴화(degeneration) | 생성 글이 밋밋해지거나 반복에 빠지는 현상 |
더 깊이 보려면
- 핵 샘플링 원문 https://arxiv.org/abs/1904.09751 — 빔 탐색 · top-k · 온도의 한계를 체계적으로 비교
- 자기 일관성으로 생각의 사슬 추론 높이기 — 샘플링 여러 번 + 다수결
- 추측 디코딩으로 트랜스포머 추론 빠르게 하기 — 결과 분포를 바꾸지 않고 생성 속도만 높이는 방법
다음에 볼 것
- 직접 해 보기: 작은 언어 모델로 디코딩 전략 비교하기 — 오늘 배운 전략을 코드로 돌려 반복률 · 다양성 비교
- 언어 모델은 비지도 멀티태스크 학습자다 (GPT-2) — 샘플링으로 긴 글을 생성해 보인 모델
라이선스
본문은 KAITABASE 자체 해설입니다. 참고 자료 Hugging Face Transformers 문서는 Apache 2.0으로 공개되어 있습니다. 토큰 · 로짓 · 확률 예는 이 수업을 위해 만든 해설용 예이며 파이썬으로 검산했습니다.
출처
- Hugging Face, Text generation strategies: https://huggingface.co/docs/transformers/generation_strategies
- Hugging Face, GenerationConfig: https://huggingface.co/docs/transformers/main_classes/text_generation
- Holtzman 외, The Curious Case of Neural Text Degeneration (2019): https://arxiv.org/abs/1904.09751
- Fan 외, Hierarchical Neural Story Generation (2018): https://arxiv.org/abs/1805.04833
- Keskar 외, CTRL: A Conditional Transformer Language Model for Controllable Generation (2019): https://arxiv.org/abs/1909.05858
AI 원리부터 이해하기 · NLP·트랜스포머 모듈
NLP·트랜스포머 모듈 학습
이 글은 NLP·트랜스포머 모듈의 학습 자료입니다. 전체 23개 자료 중 17번째입니다.
출처·원문
원문 보기요약만