검색
← 모듈 로드맵

디코딩 전략: 탐욕 · 빔 · 온도 · top-k · top-p

강의 · 준전문가 · KAITABASE 정리

원제 · Text Generation Strategies (HF Transformers 문서 참고)

탐욕 · 빔 · 온도 · 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. 생성 루프

단계.

  1. 지금까지의 글(프롬프트 + 이미 만든 토큰)을 모델에 넣습니다.
  2. 마지막 위치에서 어휘 전체에 대한 점수(로짓, logit)를 얻습니다.
  3. 디코딩 규칙으로 토큰 하나를 고릅니다. ← 이 수업의 주제
  4. 고른 토큰을 글 끝에 붙이고 1로 돌아갑니다. 끝 토큰이 나오거나 최대 길이에 닿으면 멈춥니다.
mermaid
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개와 로짓입니다.

토큰회의점심커피보고서고양이
로짓 uu2.01.51.00.5−1.0
확률 pp (온도 1)0.4450.2700.1640.0990.022

2. 탐욕 디코딩과 빔 탐색

탐욕(greedy). 매번 확률이 가장 큰 토큰을 고릅니다. 위 표에서는 항상 '회의'입니다. 빠르고 결과가 늘 같습니다(결정적). Hugging Face에서는 샘플링을 끄고(do_sample=False) 빔을 1로 두면 탐욕입니다.

문제: 지금 최선이 전체 최선은 아니다. 문장 확률은 토큰 확률의 곱입니다.

P(y1,…,yT)=∏t=1TP(yt∣y<t),log⁡P=∑tlog⁡P(yt∣y<t)P(y_1,\dots,y_T)=\prod_{t=1}^{T}P(y_t\mid y_{<t}),\qquad \log P=\sum_t \log P(y_t\mid y_{<t})

숫자로 해 보기(해설용, 두 단계). 첫 토큰 확률이 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) → 문장 확률 0.5×0.40=0.200.5\times0.40=0.20
  • 빔 크기 2: 첫 단계에서 A · B 두 갈래를 유지 → 후보 Ax 0.20, Ay 0.175, Az 0.125, Bx 0.36, … → 상위는 Bx
  • 빔 탐색이 확률 0.36짜리 문장을 찾았습니다. 첫 단계에서 2등이던 B가 두 번째 단계에서 확실한 이어짐을 가졌기 때문입니다.

빔 탐색(beam search). 매 단계 상위 bb 개 부분 문장(빔)만 남기고 넓혀 갑니다. 번역 · 요약처럼 "정답에 가까운 한 문장"이 있는 일에서 자주 씁니다. 로그 확률 합은 문장이 길수록 작아지므로 짧은 문장을 편애합니다. 그래서 길이로 나눠 보정하는 길이 벌점(length penalty) 을 함께 씁니다. Hugging Face 문서는 이 값을 시퀀스 길이에 지수로 적용해 점수를 나눈다고 설명합니다.

왜 열린 생성에는 잘 안 맞나. Holtzman 외(2019)는 빔 탐색처럼 확률이 높은 출력을 찾는 방법이 밋밋하고 같은 말을 반복하는 글(퇴화, degeneration)을 만든다고 보고했습니다. 사람이 쓴 글은 매 토큰이 늘 가장 그럴듯한 선택은 아니기 때문입니다. 그래서 대화 · 창작에는 샘플링을 씁니다.

3. 온도

직관. 온도는 분포의 '뾰족함 조절 손잡이'입니다. 낮추면 1등이 더 강해지고, 높이면 고르게 퍼집니다.

pi=exp⁡(ui/t)∑jexp⁡(uj/t)p_i=\frac{\exp(u_i/t)}{\sum_j \exp(u_j/t)}
기호뜻
uiu_i토큰 ii 의 로짓
tt온도(양수). t=1t=1 이 원래 분포
pip_i조정된 확률

숫자로 해 보기(위 표, 파이썬으로 검산).

온도회의점심커피보고서고양이
0.50.6430.2370.0870.0320.002
1.00.4450.2700.1640.0990.022
2.00.3250.2530.1970.1530.072

온도 2에서는 '고양이'가 7%로 올라옵니다. 온도가 0에 가까워지면 탐욕과 같아집니다. 핵 샘플링 논문도 온도를 낮추면 품질은 오르지만 다양성이 줄어든다는 선행 분석을 인용합니다.

4. top-k 샘플링

방식. 확률 상위 kk 개만 남기고, 그 안에서 합이 1이 되게 다시 나눈 뒤(재정규화) 샘플링합니다. Fan 외(2018)는 이야기 생성에서 상위 k=10k=10 개 후보에서 무작위로 뽑는 방식을 썼습니다.

숫자로 해 보기(k=2k=2). 회의 0.445, 점심 0.270 → 합 0.715 → 재정규화 (0.622, 0.378)(0.622,\ 0.378). 나머지 세 토큰은 절대 나오지 않습니다.

약점. kk 가 고정입니다. 핵 샘플링 논문은 분포가 평평한 문맥(그럴듯한 후보가 수십 개)에서는 작은 kk 가 글을 밋밋하게 만들고, 뾰족한 문맥(정답이 거의 하나)에서는 큰 kk 가 엉뚱한 후보까지 끌어들인다고 지적합니다.

5. top-p (핵 샘플링)

방식. 확률이 큰 순서로 쌓아 누적 합이 pp 이상이 되는 가장 작은 집합 만 남깁니다(핵, nucleus). 후보 수가 분포 모양에 따라 저절로 늘고 줄어듭니다.

∑x∈V(p)P(x∣x1:i−1) ≥ p\sum_{x\in V^{(p)}} P(x\mid x_{1:i-1})\ \ge\ p
기호뜻
V(p)V^{(p)}누적 확률이 처음으로 pp 이상이 되는 최소 상위 집합
pp문턱(예: 0.9, 0.95)

숫자로 해 보기. 누적 합은 0.445 → 0.715 → 0.879 → 0.978 → 1.0 입니다.

  • p=0.5p=0.5: 2개(회의 · 점심)
  • p=0.75p=0.75: 3개(+커피)
  • p=0.9p=0.9: 4개(+보고서) → 재정규화 (0.455, 0.276, 0.167, 0.102)(0.455,\ 0.276,\ 0.167,\ 0.102). '고양이'만 잘립니다.

분포가 뾰족한 문맥이었다면 같은 p=0.9p=0.9 에서도 1~2개만 남았을 것입니다. 이것이 top-k와의 차이입니다. 논문의 실험 비교에는 p=0.95p=0.95 설정이 쓰였습니다.

min-p(참고). 가장 큰 확률에 비례한 문턱을 둡니다. Hugging Face 문서는 1등 확률에 min_p 를 곱한 값보다 작은 토큰을 버린다고 설명합니다. 위 예에서 min_p=0.1 이면 문턱 0.04450.0445 → '고양이'(0.022)만 빠집니다.

6. 반복 벌점

문제. 샘플링을 해도 같은 구절이 되풀이될 수 있습니다.

CTRL의 벌점 샘플링. 이미 생성한 토큰의 점수를 θ\theta 로 나눠(낮춰) 다시 나오기 어렵게 합니다. 논문은 탐욕 디코딩에 θ≈1.2\theta\approx1.2 가 사실성과 반복 억제 사이의 균형이 좋았다고 보고했습니다. 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를 한꺼번에 많이 바꾸면 무엇이 효과를 냈는지 알 수 없습니다. 하나씩 바꿔 비교합니다. 직접 비교해 보는 실습은 작은 언어 모델로 디코딩 전략 비교하기에 있습니다.

연습 문제

  1. 위 표의 로짓에서 온도를 0.1로 하면 대략 어떤 분포가 되나요?
    • 풀이: 로짓 차이가 10배로 커져(u/tu/t = 20, 15, 10, …) '회의'가 1/(1+e−5+… )≈0.9931/(1+e^{-5}+\dots)\approx0.993 이 됩니다. 사실상 탐욕입니다.
  2. top-k=3으로 자르면 '커피'의 최종 확률은?
    • 풀이: 상위 3개 합 0.8790.879, '커피' 0.164/0.879≈0.1870.164/0.879\approx0.187 입니다.
  3. 2절 빔 예에서 빔 크기를 1로 하면 결과는?
    • 풀이: 빔 1은 탐욕과 같아 Ax(0.20)가 나옵니다.
  4. 분포가 (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가 불필요한 후보를 남기는 예입니다.

스스로 점검

  1. 탐욕 디코딩이 문장 확률을 최대로 만들지 못하는 이유는?
    • 답: 매 단계 지역 최선만 고르기 때문에, 지금은 2등이지만 뒤가 훨씬 확실한 갈래를 놓칠 수 있습니다.
  2. top-p가 top-k보다 문맥에 잘 적응하는 이유는?
    • 답: 후보 수를 고정하지 않고 누적 확률로 정하므로, 분포가 평평하면 많이, 뾰족하면 적게 남기기 때문입니다.
  3. 온도를 높이면 생기는 이득과 위험은?
    • 답: 다양하고 덜 반복적인 글이 나오지만, 확률이 낮은 엉뚱한 토큰이 뽑힐 가능성도 커져 사실 오류나 횡설수설이 늘 수 있습니다.

용어 정리

용어쉬운 뜻
디코딩 전략확률 분포에서 실제 토큰을 고르는 규칙
로짓(logit)소프트맥스 전의 원점수
탐욕 디코딩매번 가장 확률 높은 토큰을 고르기
빔 탐색상위 bb 개 부분 문장을 유지하며 넓혀 가는 탐색
길이 벌점빔 탐색이 짧은 문장을 편애하지 않게 길이로 점수를 보정
온도로짓을 나눠 분포의 뾰족함을 조절하는 값
top-k상위 kk 개만 남기고 샘플링
top-p(핵 샘플링)누적 확률 pp 를 채우는 최소 집합에서 샘플링
재정규화남긴 후보들의 확률 합을 다시 1로 맞추는 것
퇴화(degeneration)생성 글이 밋밋해지거나 반복에 빠지는 현상

더 깊이 보려면

다음에 볼 것

라이선스

본문은 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번째입니다.

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

출처·원문

원문 보기

요약만

본문 자체 작성 · 참고 자료 Hugging Face Transformers 문서(Apache 2.0) · arXiv 원 논문