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

Repetition penalty와 stop 조건

~8 min · repetition, stop-sequences

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

도움 없이 두면 생성 모델은 반복 루프로 흘러 — "I think that I think that I think that...". 모델이 일부 패턴이 흔한 텍스트로 학습됐고, 일단 고확률 연속 패턴에 맞는 조각 생성하면 자기 강화.

반복에 대한 세 접근

  • Repetition penalty (CTRL 스타일): 이미 생성된 토큰의 logit을 penalty 인자(예: 1.2)로 나눔. 다시 뽑힐 가능성 줄임. 많은 오픈소스 toolchain의 기본.
  • Frequency penalty (OpenAI): 이미 생성된 각 토큰 개수에 비례한 값 빼기. 여러 번 나타난 토큰일수록 강한 penalty.
  • Presence penalty (OpenAI): 토큰이 한 번이라도 나타났으면 flat 값 빼기(개수 무관). 새 어휘 장려.

Stop 조건

생성 중단 시점 — (1) 모델이 end-of-sequence 토큰(EOS) 생산, (2) stop 문자열 매칭(예: <|im_end|> 같은 특정 role 마커), (3) 최대 토큰 수 도달, (4) 커스텀 logit processor 정지. chat에선 모델별 stop 토큰이 핵심 — Llama 3의 <|eot_id|>, Mistral의 </s>, GPT의 <|im_end|>.

Code

Repetition penalty in PyTorch·python
def apply_repetition_penalty(logits, generated_ids, penalty=1.2):
    # logits: (B, vocab); generated_ids: (B, generated_so_far)
    for i in range(logits.size(0)):
        for tok_id in generated_ids[i].tolist():
            if logits[i, tok_id] > 0:
                logits[i, tok_id] /= penalty
            else:
                logits[i, tok_id] *= penalty
    return logits
# Hugging Face's `RepetitionPenaltyLogitsProcessor` does this efficiently.

External links

Exercise

작은 모델에서 100토큰 생성 — penalty 없이, repetition_penalty=1.1, 1.5 각각. 각 설정에서 distinct 토큰 수 세고 bigram 반복률 봐. sweet spot은? 어느 지점부터 penalty가 유창성을 해치기 시작하나?

Progress

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

댓글 0

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

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