2P by GN⁺ 9시간전 | ★ favorite | 댓글 1개
  • 대형 언어 모델(LLM)의 샘플링 방식을 초보자도 이해할 수 있도록 설명한 종합 가이드
  • 토큰이란 무엇인지, 왜 단어 대신 사용하는지, 그리고 모델이 텍스트를 생성하는 과정이 상세하게 정리
  • 샘플링은 출력의 다양성과 자연스러움을 조절하는 과정이며, Temperature, Top-K, Top-P, DRY 같은 다양한 샘플링 알고리즘을 소개
  • 각 샘플링 기법은 개념적 설명과 함께 수학적·알고리즘적 동작 원리를 포함해 설명되며, 반복 방지, 창의성 향상, 일관성 조정 등의 효과를 비교
  • 샘플러 간 조합 순서, 상호작용, 충돌 사례까지 정리되어 있어, 생성 품질을 정교하게 제어하고 싶은 개발자에게 매우 유용한 자료

Intro Knowledge

Short Glossary

  • Logits는 각 토큰의 점수를 나타내는 미정규화된 값임
  • Softmax는 logits를 정규화된 확률 분포로 변환하는 함수임
  • Entropy는 예측 불확실성을 의미하며, 높을수록 다음 토큰에 대한 불확실성이 큼
  • Perplexity는 낮을수록 모델의 확신이 높다는 것을 의미하는 지표임
  • n-gram은 연속된 n개의 토큰 시퀀스를 의미함
  • Context window는 모델이 한 번에 처리할 수 있는 최대 토큰 수임

Why tokens?

Why not letters?

  • 글자 단위 토큰화는 시퀀스가 너무 길어져 연산 비용 증가 및 정보 연결 어려움이 발생함

Why not whole words?

  • 단어 기반은 어휘 크기 폭증, 신조어나 희귀 단어 표현 어려움 등의 문제가 있음
  • Sub-word 기반은 접두사, 어근, 접미사를 나눠 처리할 수 있어 형태소 이해와 다국어 전이 학습에 효과적

How are the sub-words chosen?

  • 학습 데이터의 대표 샘플을 통해 가장 빈번한 부분 단어(sub-word) 들을 찾는 방식으로 사전 구축함

How does the model generate text?

  • 학습 중에는 대량의 텍스트를 통해 다음 토큰의 확률 분포를 학습함
  • 추론 시에는 모든 가능한 토큰에 대해 확률을 계산하고, 샘플링 기법에 따라 다음 토큰을 선택함

From Tokens to Text

  • 예측 단계: 모든 후보 토큰에 대한 확률 분포 계산
  • 선택 단계: 특정 샘플링 전략에 따라 토큰을 선택
  • 단순히 가장 확률 높은 토큰을 고르는 것만으로는 지루하거나 반복적인 텍스트가 생성되므로 샘플링 기법이 중요

Sampling

Temperature

  • 낮은 값은 보수적이고 반복적이며, 높은 값은 창의적인 결과를 유도하지만 오류 가능성 증가
  • logits를 온도 값으로 나눠 확률 분포의 **샤프함(집중도)**을 조절함

Presence Penalty

  • 한 번이라도 등장한 토큰은 재등장 가능성 감소시킴
  • 사용된 여부만 판단하며, 등장 횟수는 고려하지 않음

Frequency Penalty

  • 등장 횟수에 비례하여 점수 감점
  • 자주 나온 단어일수록 더 큰 불이익을 받아 다양성을 높이는 데 기여

Repetition Penalty

  • 이전에 등장한 토큰에 대해 긍정/부정 logit에 비대칭 패널티 적용
  • 루프성 반복 방지에 효과적이지만 문맥의 일관성을 해칠 수 있음

DRY (Don't Repeat Yourself)

  • n-gram 패턴의 반복을 감지하여 반복을 예측하는 토큰의 확률을 감점
  • 길이가 길고 최근에 반복된 구절일수록 더 강하게 억제
  • 창작 텍스트에서 자연스러움을 유지하며 반복을 줄이는 데 탁월함

Top-K

  • 상위 K개의 후보만 남기고 나머지 토큰은 제외함
  • 극단적인 샘플을 제거하면서도 일정 수준의 무작위성을 확보함

Top-P (Nucleus Sampling)

  • 누적 확률이 P 이상이 될 때까지의 토큰만 남기고 나머지는 제거함
  • 모델 확신도에 따라 후보군 크기가 달라져 적응적임

Min-P

  • 가장 높은 확률의 토큰을 기준으로 최소한의 비율 이상을 갖는 토큰만 남김
  • 모델의 자신감에 따라 필터링이 동적으로 조정됨

Top-A

  • 가장 확률 높은 토큰의 확률 제곱에 비례한 임계값으로 후보 필터링
  • 확신이 높을수록 더 엄격한 필터링이 적용

XTC

  • 특정 확률로 가장 확률 높은 후보들을 의도적으로 제거하고 덜 확실한 선택을 하도록 유도
  • 비정형적이거나 창의적인 응답을 위한 기법

Top-N-Sigma

  • 확률 분포의 표준편차 기준으로 유효 토큰을 선별
  • 통계적 특징에 기반한 필터링으로 다양한 상황에 유연하게 대응함

Tail-Free Sampling (TFS)

  • 확률 기울기의 이차 변화량(곡률) 을 통해 유의미한 후보와 롱테일 후보를 구분함
  • 자연스러운 컷오프 지점을 찾아 필터링하는 방식

Eta Cutoff

  • 분포의 엔트로피(불확실성)에 따라 동적으로 필터 기준을 조정함
  • 확신이 높을수록 더 많은 토큰이 제거되고, 확신이 낮을수록 유연함

Epsilon Cutoff

  • 고정된 확률 임계값을 사용해 낮은 확률 토큰 제거
  • 단순하지만 예측 가능하고, 불필요한 롱테일 제거에 유용

Locally Typical Sampling

  • 예상 surprisal(예측값과의 차이) 이 평균에 가까운 토큰을 선호
  • 가장 가능성 높은 토큰이나 가장 이상한 토큰 대신 "전형적인" 선택을 유도함
Hacker News 의견
  • 샘플러는 모델의 내부 상태에 접근할 수 없음을 언급하지 않음

    • 출력 분포에 수학을 적용하는 것일 뿐, 모델만큼 똑똑하지 않으면 해독할 수 없음
    • 반복 패널티나 DRY 같은 샘플러는 모델이 스스로 반복하지 않도록 하는데, 이는 더 나은 훈련이 필요함
    • 자동 회귀 프로세스를 해킹하는 것은 Min-P 같은 간단한 개선을 가능하게 함
    • 나쁜 모델을 좋은 모델로 바꾸려는 시도는 잘못된 접근임
  • Ollama/llama.cpp에 대한 샘플링 가이드를 작성해 보았음

    • 피드백이나 수정 제안에 열려 있음
  • LLM이 "아이디어"를 출력하도록 시도할 때, 로짓 벡터 선택이 원래 아이디어를 깨뜨려야 함

    • 아이디어가 완전하다면 로짓에 대한 샘플링이 필요하지 않음
  • 모든 것이 간단하게 설명되어 있어 새로운 시도를 할 수 있는 기회를 열어줌

    • 예를 들어, 전체 단어를 토큰으로 사용하는 것은 어떨까?
    • 제한된 "로봇 방언"을 가진 "로봇"을 만들 수 있음
    • 새로운 단어나 희귀 단어의 용량은 없지만, 훈련 데이터와 입력 데이터를 수정하여 기존 어휘로 번역할 수 있음
    • 사용자에게 로봇이 잘 대답할 수 있는 답변의 기대치를 제공함
  • LLM 모델이 암묵적으로 토큰화를 수행할 수 있을까?

    • 별도의 토크나이저를 구축하는 대신, 문자 문자열을 사용하고 신경망이 이를 토큰으로 변환하도록 허용
    • 그 네트워크의 가중치는 나머지 LLM과 함께 훈련됨
  • 관련하여, 우리의 min_p 논문이 ICLR에서 12000개 제출 중 18위를 차지함

    • 포스터가 인기가 있었음
    • 구두 발표에서 Yoshua Bengio와의 토론이 있었음
    • Top N sigma가 현재 가장 일반적인 샘플러임을 확인할 수 있음
    • 온도는 현재보다 훨씬 높게 조정될 수 있음
    • top_k = 2와 초고온의 특별한 경우는 매우 흥미로움
  • 샘플링이 모델의 한계를 정말로 해결하는지, 아니면 더 깊은 문제를 덮는 것인지 궁금함

  • "샘플링"이 예상보다 훨씬 많은 것을 다룸

  • 매우 유용한 문서이며 설명이 명확하고 많은 내용을 다룸

    • 누가 작성했는지 아는 사람 있는지 궁금함
    • DRY - "반복 패널티" 섹션이 흥미로웠음
    • LLM이 입력의 정확한 복사본을 출력하도록 자주 원함
    • 긴 대화를 요약할 때, 가장 설명적인 정확한 인용문을 요청함
    • DRY 패널티는 이 목표와 상충될 수 있음
  • 초기 소프트맥스 온도 선택 이후에 많은 조작이 이루어지고 있음을 깨닫지 못했음