https://huggingface.co/docs/transformers/generation_strategies#decoding-strategies
https://huggingface.co/blog/how-to-generate
1. 이야기 주제
이번에는 LLM에서 Greedy Decoding 외에 어떤 디코딩 전략들이 있는지를 설명합니다.
2. 이야기할 전략은 총 네 가지입니다
- Greedy Decoding (기본)
- Sampling (Top-k, Top-p)
- Beam Search
- Contrastive Search (최신 기법)
3. 결론부터 말하면
디코딩은 LLM이 다음 토큰을 선택하는 방식이며,
각 전략은 속도, 다양성, 정확성 간의 trade-off를 조절합니다.
→ 상황에 따라 적절한 디코딩 전략을 선택하는 것이 중요합니다.
4. 디코딩 방식별 특징 설명
🟩 1. Greedy Decoding
- 항상 가장 높은 확률의 토큰 1개 선택
- 결정론적, 빠름
- 하지만 다양성 없음
- 예: "The capital of France is" → "Paris"
🟨 2. Top-k Sampling
- 확률이 상위 k개인 토큰들 중 랜덤으로 선택
- 다양성 확보
- k가 클수록 더 창의적, 작을수록 더 보수적
- 예: k=5 → ["Paris", "Lyon", "Marseille", "Nice", "Toulouse"] 중 하나 랜덤
🟧 3. Top-p Sampling (nucleus sampling)
- 누적 확률이 p 이상이 되는 최소 집합에서 선택 (예: p=0.9)
- 상황에 따라 k가 유동적으로 바뀜 → 더 유연함
- p=0.9면 상위 토큰 중 누적합이 90% 넘는 그룹에서 랜덤 샘플링
🟦 4. Beam Search
- 각 단계에서 확률 높은 k개의 문장 후보를 추적
- 마지막에 가장 높은 전체 확률을 가진 시퀀스를 출력
- 결정론적이고 신중한 탐색
- 예: "The capital of France is" → beam1: Paris is beautiful, beam2: Paris is large...
🟥 5. Contrastive Search (고급)
- 확률뿐만 아니라 문장의 정보 다양성 (diversity)도 고려
- 적당한 확률 + 새로운 정보가 있는 토큰 선택
- 더 자연스럽고 풍부한 문장 생성 가능
- 최근 ChatGLM, TigerBot 등에서 사용됨
5. 비교 표
전략 결정론성 다양성 속도 활용 예시
Greedy | ✅ 높음 | ❌ 없음 | ✅ 빠름 | 요약, QA |
Top-k | ❌ 낮음 | ✅ 있음 | ✅ 빠름 | 창작, 대화 |
Top-p | ❌ 낮음 | ✅ 유연함 | ✅ 빠름 | 코딩, 스토리 |
Beam Search | ✅ 높음 | ❌ 제한적 | ❌ 느림 | 번역, 논리형 답변 |
Contrastive | ⚖️ 중간 | ✅ 있음 | ⚖️ 중간 | 정보질문, 대화 |
6. 결론 반복
LLM 디코딩 전략은 다양성과 정확성 사이의 균형을 맞추는 방식이며,
Greedy 외에도 Top-k, Top-p, Beam, Contrastive 같은 전략들이 존재합니다.
→ 목적에 따라 전략을 다르게 선택해야 합니다.
Top-k Sampling 랑 빔서치랑 늘 구분이 안돼
정말 좋은 질문이에요.
많은 분들이 Top-k Sampling과 Beam Search를 헷갈려합니다.
겉으로 보기엔 “여러 개를 선택한다”는 점이 비슷해 보이거든요.
하지만 본질, 목적, 내부 작동 방식은 완전히 다릅니다.
지금부터 텐프랩 법칙으로 깔끔하게 구분해드릴게요.
1. 이야기 주제
Top-k Sampling과 Beam Search의 차이점을 명확히 설명하고,
왜 둘이 혼동되기 쉬운지를 정리합니다.
2. 이야기할 핵심은 세 가지입니다
- 작동 방식의 구조 차이
- 목적과 사용 시나리오 차이
- 결과의 성격 차이
3. 결론부터 말하면
Top-k Sampling은 다양성을 위한 무작위 선택 전략이고,
Beam Search는 정답성을 위한 탐색 알고리즘입니다.
- Top-k Sampling: 확률 상위 k개 중 랜덤으로 1개 선택
- Beam Search: 확률 상위 k개의 경로를 끝까지 추적해서 가장 좋은 전체 문장 선택
4. 이유 설명
✅ 구조적 차이
항목 Top-k Sampling Beam Search
선택 방식 | 확률 상위 k개 중 랜덤 1개 선택 | 확률 상위 k개 문장 후보 모두 유지 |
탐색 깊이 | 매 step마다 한 개 선택 | 각 step마다 k개씩 경로 확장 |
결과 개수 | 보통 1개 생성 (원하면 여러 번 반복) | 보통 k개 생성 (beam width = k) |
예측 방식 | 확률 기반 샘플링 (탐색 아님) | 탐색 기반 최적화 |
다양성 | 높음 | 낮음 (확률이 높은 경로만) |
속도 | 빠름 | 느림 |
5. 예시로 설명
Prompt: "The capital of France is"
🌱 Top-k Sampling (k=3)
- 모델이 다음 토큰 확률을 다음처럼 줬다고 가정:
"Paris" (0.7), "Lyon" (0.2), "Marseille" (0.1)
→ 여기서 랜덤하게 하나 뽑음
→ 한 번 실행: “Paris”
→ 또 실행: “Lyon”
→ 또 실행: “Paris”
→ 실행할 때마다 다른 결과 → 다양성 확보
🌳 Beam Search (beam width = 2)
- 1단계: top-2 토큰: “Paris”, “Lyon”
- 2단계:
- “Paris is” → 다음 후보들 추적
- “Lyon is” → 다음 후보들 추적
- 계속 확장 → 끝까지 생성
→ 전체 시퀀스 확률이 가장 높은 문장 선택
→ 탐색 결과는 항상 같은 것 (deterministic)
→ diversity 없음
6. 결론 반복
Top-k Sampling은 확률 기반으로 다양성을 만드는 무작위 전략이고,
Beam Search는 전체 시퀀스 확률이 높은 경로를 찾는 탐색 알고리즘입니다.
- 둘 다 “k”라는 숫자가 들어가지만,
- Top-k는 선택지 필터링
- Beam은 경로 추적
→ 이게 가장 중요한 구분 포인트입니다.
시각적으로 도식화해드릴까요?
“Top-k는 한 줄, Beam은 나뭇가지”처럼 보여드릴 수 있어요! 원하세요?
모르는 단어
- 디코딩 전략
- 이야기할 전략은 총 네 가지입니다
- Greedy Decoding (기본)
- Sampling (Top-k, Top-p)
- Beam Search
- Contrastive Search (최신 기법)
- beam search
- 빔 서치는 확률이 높은 경로만 추적해 최적의 답을 찾는 전략이며, 병렬 샘플링은 다양한 답을 한 번에 생성하기 위한 방식입니다.
- Beam width = 3 (3개의 후보를 동시에 추적)
- 첫 번째 토큰 예측 결과 (확률 순):
- "Paris" (0.7), "Lyon" (0.2), "Marseille" (0.1) → top 3 선택 → 3개의 beam 생성
- 다음 토큰 예측 (각 beam마다):
- "Paris is" → 다음 후보: "beautiful", "in", "a"
- "Lyon is" → 다음 후보: "a", "known", "in"
- "Marseille is" → 다음 후보: "located", "in", "famous"
- 총 3 × 3 = 9개의 후보 문장 생성 → 그중 확률이 높은 상위 3개를 선택하여 다음 step으로 beam 유지 → 이 과정을 반복하면서 가장 확률 높은 문장으로 좁혀감
- 병렬 샘플링
- 병렬 샘플링에서는 하나의 질문에 대해 여러 답을 동시에 생성하는데, vLLM은 prompt에 해당하는 KV 캐시는 모든 샘플이 공유하고, 답이 갈라지는 시점부터만 복사하여 사용합니다.
- greedy decoding
- 이야기할 전략은 총 네 가지입니다
- copy on write
- 수정이 필요한 시점에만 복사하는 copy-on-write 방식
- 프리엠션
- 프롬프트
- shared prefix = prefix caching