C.W.K.
Stream
Lesson 08 of 12 · published

디코딩 전략 — greedy, beam, top-k, top-p

~12 min · decoding, sampling

Level 0Token
0 XP0/94 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

모델은 매 스텝마다 logit 생산. 디코딩이 그 logit을 선택된 다음 토큰으로 변환. 다섯 가지 흔한 전략, 각각 bias/variance trade-off 다름.

Greedy

항상 최고 확률 토큰 선택. 결정적, 빠름, 반복적. 분류나 답이 명확한 곳엔 좋고, 창의적 텍스트엔 나빠.

Beam search

매 스텝마다 k개의 부분 시퀀스("beam") 유지. 매 스텝에서 각 beam을 모든 가능한 다음 토큰으로 확장, 각 후보 점수 매김, top k 유지. 번역과 구조화된 출력에 greedy보다 좋지만 비쌈(k× 연산), open-ended task에선 너무 평이한 텍스트 생산 경향.

Top-k 샘플링

후보 집합을 k개 최고 확률 토큰으로 제한, 재정규화, 샘플. tail noise 필터링하면서 무작위성 추가. k=40이 흔해.

Top-p (nucleus) 샘플링

누적 확률이 p를 초과하는 가장 작은 토큰 집합으로 제한. 동적으로 적응 — 토큰 하나가 지배적이면 집합 작고, 불확실성 높으면 더 많은 토큰 진입. p=0.9가 전형적 기본.

Temperature

softmax 전에 logit을 1/T로 스케일. T=0이 greedy. T<1은 샤프닝, T>1은 평탄화. T=0.7이 chat의 흔한 기본. (다음 lesson에서 temperature 자세히.)

Code

Top-p sampling in 8 lines·python
def sample_top_p(logits, p=0.9, temperature=1.0):
    logits = logits / temperature
    sorted_logits, sorted_idx = logits.sort(descending=True)
    probs = F.softmax(sorted_logits, dim=-1)
    cumulative = probs.cumsum(dim=-1)
    cutoff = cumulative > p
    cutoff[..., 1:] = cutoff[..., :-1].clone()
    cutoff[..., 0] = False
    sorted_logits = sorted_logits.masked_fill(cutoff, float('-inf'))
    next_idx = sorted_idx.gather(
        -1, torch.multinomial(F.softmax(sorted_logits, dim=-1), 1)
    )
    return next_idx

External links

Exercise

같은 prompt에 대해 각 전략으로 완성 5개 생성 — greedy, beam search(k=4), top-k(k=40), top-p(p=0.9), 다 temperature=0.7. 읽어. chat 같은 prompt엔 어느 게 가장 자연스러운가? 사실 prompt? 코드 prompt?

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.