LLM 샘플링의 모든 것: 더미를 위한 현대적 가이드
(rentry.co)- 대형 언어 모델(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 패널티는 이 목표와 상충될 수 있음
-
초기 소프트맥스 온도 선택 이후에 많은 조작이 이루어지고 있음을 깨닫지 못했음