- LLM은 다음 토큰 확률분포를 계산한 뒤 하나를 고르며, 샘플링은 greedy 방식에 제어된 무작위성을 더해 출력의 다양성을 조절함
- temperature, 반복 패널티, DRY, Top-K/Top-P/Min-P는 토큰 선택 전후의 logits나 확률분포를 바꿔 후보 범위와 상대 확률을 재구성함
- 샘플러마다 고정 개수, 누적 확률, 최고 확률 대비 비율, 엔트로피, n-gram 반복, surprisal 등 서로 다른 기준으로 토큰을 남기거나 제외함
- 실제 파이프라인에서는 필터링, 패널티, temperature, 분포 조정의 적용 순서가 결과를 크게 바꾸며, 조합에 따라 효과가 보완되거나 덮어써질 수 있음
- 토크나이저의 어휘 크기와 분할 방식은 모델이 확률을 부여하는 단위와 DRY 같은 n-gram 기반 샘플러가 감지하는 패턴을 바꿈
LLM 생성과 샘플링의 기본 구조
- LLM은 사용자 프롬프트 같은 텍스트를 입력받아 다음 단어에 해당하는 토큰을 계산함
- 모델은 유효한 토큰으로 구성된 어휘를 갖고, 학습과 추론에서 이 어휘를 참조함
- 학습 중에는 많은 텍스트를 보고 토큰의 내부 확률 지도를 만들며, 추론 중에는 학습된 확률을 바탕으로 다음 토큰을 결정함
- 생성 과정은 두 단계로 나뉨
- 예측: 각 위치에서 가능한 다음 토큰 전체에 대한 확률분포를 계산함
- 선택: 그 분포에서 하나의 토큰을 골라 출력에 추가함
- greedy 방식은 항상 가장 가능성 높은 토큰을 고르므로 반복적이고 결정적인 텍스트를 만들기 쉬움
- 샘플링은 선택 단계에 제어된 무작위성을 넣어 출력이 더 다양해지도록 함
왜 단어·문자가 아니라 토큰인가
- 문자 단위 토큰화는 같은 텍스트를 훨씬 긴 시퀀스로 만들며,
tokenization은 하위 단어 방식의 2~3토큰 대신 12토큰이 될 수 있음 - 긴 시퀀스는 self-attention에 더 많은 계산을 요구하고, 모델이
t-h-e같은 여러 위치의 정보를 하나의 개념으로 연결해야 함 - 단어 단위 토큰화는 영어 전체 단어와 여러 언어의 단어를 포함해야 해 임베딩 행렬이 매우 커지고 비싸짐
- 새 단어나 희귀 단어를 만나면 단어 단위 방식은 보통
"unknown"토큰으로 대체해 의미 정보를 잃음 - 하위 단어 토큰화는
grompuficious같은 새 단어를 기존 하위 단어 조합으로 표현할 수 있음 - 새 토크나이저를 쓰는 언어 모델은 학습 데이터의 대표 샘플에서 자주 나오는 하위 단어를 찾도록 토크나이저를 학습시키고, 어휘 크기를 미리 정함
샘플러가 다루는 핵심 값
- logits: 모델이 어휘의 각 토큰에 대해 출력하는 정규화 전 점수이며, 값이 높을수록 다음 토큰일 가능성이 높음
- softmax: logits를 0~1 사이 값으로 바꾸고 전체 합이 1이 되는 확률분포로 변환함
- entropy: 확률분포의 불확실성이나 무작위성을 나타내며, 높을수록 모델이 다음 토큰을 덜 확신함
- perplexity: 모델이 텍스트에 얼마나 놀라는지를 나타내며, 낮을수록 신뢰도가 높음
- n-gram: 연속된 n개 토큰의 시퀀스이며,
"once upon a"는 3-gram임 - context window: 프롬프트와 생성 출력을 포함해 LLM이 한 번에 처리할 수 있는 최대 토큰 수임
확률분포를 직접 조정하는 기본 샘플러
- Temperature는 LLM의 “창의성 손잡이”처럼 동작함
- 낮은 temperature는 가장 높은 점수의 토큰을 더 유력하게 만들어 예측 가능성을 높임
- 0.7~1.0 같은 높은 temperature는 3번째나 4번째 후보도 선택될 수 있게 해 다양성을 늘리지만 오류 가능성도 키움
- 1.0을 넘는 매우 높은 temperature는 Min-P 같은 다른 샘플링과 함께 쓰지 않으면 출력이 거칠고 예측하기 어려워질 수 있음
- 기술적으로는 logits를 temperature 값으로 나눈 뒤 softmax를 적용함
- Presence Penalty는 이미 한 번이라도 나온 토큰에 고정 패널티를 적용함
- 등장 횟수와 무관하게 이전에 사용된 토큰의 logits에서 패널티 값을 뺌
- 더 나은 패널티 전략이 있어 일반적으로 권장되지 않음
- Frequency Penalty는 토큰 등장 횟수에 비례해 패널티를 키움
- 어떤 토큰이 세 번 등장했다면 logits는
3 × frequency penalty만큼 줄어듦 - 같은 토큰이 반복될수록 다시 선택될 가능성이 점진적으로 낮아짐
- 어떤 토큰이 세 번 등장했다면 logits는
- Repetition Penalty는 프롬프트와 생성 출력에 모두 등장한 토큰을 대상으로 함
- 양수 logits는 패널티로 나누고, 음수 logits는 패널티를 곱해 더 음수로 만듦
- 반복 루프를 끊는 데 유용하지만 공격적인 값에서는 일관성 비용이 생김
반복 패턴을 막는 DRY
- DRY(Don't Repeat Yourself) 는 단순한 단어 반복보다 더 넓게 반복 패턴을 감지함
- 생성된 토큰 시퀀스에서 n-gram 반복을 찾고, 그 패턴을 계속 이어갈 토큰에 패널티를 줌
"the cat sat on the"같은 패턴이 이전에 등장했고 같은 흐름이 다시 시작되면, 이전에 그 뒤를 이었던 다음 토큰을 덜 선택하게 만듦- 긴 반복 패턴일수록 더 강한 패널티가 적용됨
- 주요 파라미터는 패널티 강도인 multiplier, n-gram 길이에 따른 증가율인 base, 최소·최대 n-gram 길이, sequence breaker, range limit 등임
- punctuation 같은 sequence breaker는 패턴 매칭을 초기화할 수 있으며, 효율을 위해 최근 텍스트만 고려하는 범위 제한도 있음
- 창작 글쓰기처럼 반복 문구가 부자연스러운 영역에서 특히 유용함
후보를 잘라내는 필터링 샘플러
- Top-K는 전체 어휘 대신 상위 K개 토큰만 남김
- K가 40이면 가장 가능성 높은 40개 후보에서만 선택함
- 나머지 logits는
-∞로 설정되어 softmax 이후 사실상 확률이 0이 됨
- Top-P(Nucleus) 는 고정 개수 대신 누적 확률이 임계값 P를 넘는 최소 후보 집합을 남김
- P가 0.9이면 상위 후보들의 누적 확률이 90%에 도달할 때까지 포함함
- 모델이 확신할 때는 후보가 적고, 불확실할 때는 더 많은 후보가 남음
- 최소 하나의 토큰은 항상 남도록 가장 높은 확률 토큰을 유지함
- Min-P는 최고 확률 토큰에 대한 비율로 품질 기준선을 설정함
- 최고 확률이 0.6이고 Min-P가 0.1이면 임계값은 0.06임
- 최고 후보 대비 너무 낮은 확률의 토큰은 제외됨
- 보통 높은 temperature 값인 1.0~1.2와 함께 쓰이고, Min-P 값은 매우 낮은 0.1 수준으로 쓰임
- Top-K나 Top-P처럼 전체 어휘 정렬이 필요하지 않아 더 효율적임
- Top-A는 최고 확률의 제곱에 비례하는 임계값을 사용함
- 모델이 확신할수록 제곱 효과로 임계값이 더 높아져 후보가 크게 줄어듦
- Min-P보다 먼저 나온 방식이며, 기술적으로는 Min-P가 선형인 반면 Top-A는 제곱 기반임
- Epsilon Cutoff는 고정 확률 임계값보다 낮은 토큰을 제거함
- 분포 특성과 무관하게 같은 기준을 적용함
- 단순하고 예측 가능하지만 Eta Cutoff처럼 적응적이지는 않음
분포 형태와 불확실성을 활용하는 샘플러
- Top-N-Sigma는 logits의 최대값과 표준편차를 이용해 통계적 임계값을 만듦
- 기준은
최대 logit - N × 표준편차임 - 분포의 절대값뿐 아니라 전체 점수 분포의 퍼짐을 반영함
- 기준은
- Tail-Free Sampling(TFS) 은 확률분포의 곡률을 보고 긴 꼬리가 시작되는 지점을 찾음
- logits를 내림차순 정렬하고 확률로 바꾼 뒤 2차 차분의 절댓값을 계산함
- 곡률의 누적분포가 임계값을 넘는 지점 이후 토큰을 제거함
- 절대 확률값보다 분포의 형태에 집중함
- Eta Cutoff는 개별 확률과 전체 엔트로피를 함께 사용함
- 모델이 확신하는 낮은 entropy 상황에서는 더 엄격한 컷오프가 적용됨
- 모델이 불확실한 높은 entropy 상황에서는 더 관대한 컷오프가 적용됨
- 임계값은
eta와sqrt(eta) * exp(neg_entropy)의 최솟값으로 정해짐
- Locally Typical Sampling은 확률 자체가 아니라 평균 surprisal에 얼마나 가까운지를 봄
- 너무 예측 가능한 토큰과 너무 놀라운 토큰을 모두 덜 “typical”하게 봄
- surprisal deviation이 작은 순서로 토큰을 정렬하고,
typical-p로 유지할 누적 확률량을 정함
- Quadratic Sampling은 필터링이 아니라 전체 logits 분포를 비선형 변환함
- 최고 점수 토큰을 기준으로 다른 logits와의 차이를 quadratic·cubic 항으로 조정함
- smoothing factor는 조정 강도를, smoothing curve는 변환 형태를 제어함
s가 양수이면 분포가 더 뾰족해지고,k가 양수이면 분포를 평탄하게 만드는 방향으로 작동함
예측 가능성과 다양성을 제어하는 고급 방식
- XTC(eXclude Top Choices) 는 확률적으로 활성화되며 가장 예측 가능한 선택지를 일부러 제외함
- 활성화 확률과 제외 임계값을 파라미터로 사용함
- 임계값을 넘는 상위 후보 중 가장 낮은 점수의 후보 하나를 제외하고 나머지 높은 확률 후보를 제거함
- 낮은 확률 후보를 잘라내는 일반 필터와 달리 가장 뻔한 선택지를 겨냥함
- Mirostat은 목표 surprisal을 유지하도록 동적으로 조정하는 피드백 방식임
- 현재
muthreshold로 너무 놀라운 토큰을 걸러냄 - 토큰 선택 뒤 실제 surprisal을 계산하고 목표값
tau와 비교함 eta는mu를 얼마나 빠르게 조정할지 결정하는 learning rate임- 업데이트 식은
mu_{t+1} = mu_t - η × (surprisal_t - τ)임 - 텍스트 생성의 perplexity를 일정하게 유지하려는 자기 조절 방식임
- 현재
- Dynamic Temperature Sampling은 현재 분포의 entropy에 따라 temperature를 바꿈
- 낮은 entropy에서는 더 높은 temperature로 다양성을 넣음
- 높은 entropy에서는 더 낮은 temperature로 출력을 집중시킴
- 사용자는 최소 temperature, 최대 temperature, exponent를 설정함
- 계산식은
temperature = min_temp + (max_temp - min_temp) * (normalized_entropy ^ exponent)임
Beam Search와 Contrastive Search
- Beam Search는 여러 후보 시퀀스를 병렬로 유지하며 전체 확률이 높은 경로를 찾음
- beam width만큼 후보 시퀀스를 유지하고, 각 decoding step에서 후보를 확장한 뒤 상위 후보만 남김
- 보통 각 단계에서
2k후보를 샘플링해 완료된 시퀀스 등을 제외한 뒤에도 충분한 후보가 남도록 함 - 점수는 시퀀스에 포함된 모든 토큰의 logprob 합임
- 같은 입력에 대해 결정적으로 같은 출력을 만들며, 비용이 크고 더 나은 샘플링 방식이 있어 요즘은 많이 쓰이지 않음
- Contrastive Search는 문맥에 맞는 높은 확률과 반복 패턴 회피를 함께 최적화함
- 먼저 Top-K 후보를 고름
- 기존 context와 후보 continuation의 hidden representation을 비교해 similarity 기반 degeneration penalty를 계산함
- 최종 점수는
score(x) = α * P(x) - (1-α) * sim(x, context)임 α는 가능성과 다양성 사이의 균형을 조절함- Beam Search와 비슷하게 널리 쓰이지 않는 방식임
샘플러 적용 순서가 결과를 바꾸는 방식
- 실제 LLM 구현에서는 샘플링 기법을 순서대로 적용하는 경우가 많으며, 일부 라이브러리는 요청별 순서 변경을 허용하지만 대부분은 그렇지 않음
- 일반적인 파이프라인은 다음 순서를 따름
- 모델이 raw logits를 생성함
- 고려하면 안 되는 토큰을 필터링하거나 금지함
- repetition, frequency, presence 패널티를 적용함
- DRY 같은 패턴 기반 기법을 적용함
- temperature scaling을 적용함
- Top-K, Top-P, Min-P 같은 분포 조정 기법을 적용함
- 최종 확률분포에서 토큰을 샘플링함
- Temperature는 구현에 따라 패널티와 post-softmax 샘플러 바깥에서 처음 또는 마지막에 적용됨
- 대부분 작업에서는 temperature가 먼저 적용됨
- 창작 글쓰기에서는 보통 마지막에 적용됨
- 각 샘플러는 다음 샘플러가 보게 될 확률 지형을 바꿈
- 패널티는 이미 사용한 토큰의 peak를 낮추고 다른 후보를 상대적으로 올림
- 낮은 temperature는 분포를 날카롭게 만들고, 높은 temperature는 평탄하게 만듦
- Top-K/P 같은 필터는 낮은 확률 토큰을 제거하고 남은 확률을 재정규화함
순서 의존 상호작용과 조합
- Temperature → Filtering 순서는 전체 분포를 먼저 재구성한 뒤 필터링함
- 낮은 temperature는 필터 전부터 확률 질량을 적은 토큰에 집중시킴
- 높은 temperature는 확률 질량을 더 넓게 퍼뜨린 뒤 필터링되게 함
- Filtering → Temperature 순서는 먼저 후보를 자르고, 남은 토큰들 사이의 상대 확률만 temperature가 조정함
- 높은 temperature를 쓰더라도 원래 필터에서 제거된 토큰은 돌아오지 않음
- Top-K 40과 temperature 1.5에서 필터를 먼저 적용하면 원래 상위 40개만 남음
- Penalties → Temperature는 반복 토큰의 확률을 먼저 낮춘 뒤 temperature가 그 조정을 키우거나 줄임
- 높은 temperature에서는 패널티 효과가 사실상 지워질 수 있음
- 낮은 temperature에서는 패널티가 과하게 증폭될 수 있음
- Temperature → Penalties는 temperature로 재구성된 분포 위에서 패널티가 작동해 더 균형 있고 예측 가능한 패널티 효과를 만들 수 있음
- DRY는 위치에 민감함
- 파이프라인 초반에 적용하면 반복 방지 효과가 강하지만, 이후 샘플러가 패널티를 받은 토큰을 다시 끌어올릴 수 있음
- 후반에 적용하면 앞선 샘플러가 이미 일부 후보를 제거한 뒤라 약해질 수 있지만, 토큰 선택 직전 반복에 대한 마지막 방어선이 됨
- 상호 보완 조합도 있음
- Top-K + Top-P: Top-K는 하드 제한을 제공하고 Top-P는 모델 확신도에 적응함
- Temperature + Min-P: 높은 temperature는 분포를 평탄하게 만들고 Min-P는 최고 후보 대비 품질 하한을 둠
- 충돌하는 조합도 있음
- High Temperature + Low Top-K: 낮은 Top-K가 후보를 강하게 제한해 temperature 효과를 많이 덮어씀
- 여러 필터링 방식 동시 사용: Top-K, Top-P, Min-P, TFS를 함께 쓰면 가장 제한적인 방식이 지배해 나머지가 중복될 수 있음
- XTC + Top-A: 둘 다 상위 선택지를 다른 방식으로 제외하려 해 샘플링 공간을 과도하게 좁힐 수 있음
토크나이저가 샘플링 공간을 만드는 방식
- 토크나이저는 모델이 무엇에 대해 확률을 예측하는지와 샘플러가 어떤 후보를 다루는지를 정함
- 하위 단어 알고리듬은 문자 단위의 긴 시퀀스 문제와 단어 단위의 거대한 어휘·unknown 문제 사이의 균형을 잡음
- BPE(Byte Pair Encoding) 는 문자나 byte 기반 어휘에서 시작해 학습 말뭉치의 가장 빈번한 인접 symbol 쌍을 반복적으로 병합함
- 원하는 어휘 크기까지 병합을 반복함
- 예시 어휘 크기로 32000 또는 128256 units가 제시됨
- 표준 BPE는 공백과 문장부호 기준 pre-tokenization이 필요할 수 있고, 구현마다 whitespace 처리가 일관되지 않을 수 있음
- SentencePiece는 텍스트를 사전 분할하지 않고 Unicode 문자 시퀀스로 직접 다룸
- 공백을 토큰의 일부로 인코딩할 수 있음
- raw Unicode에서 동작하므로 whitespace를
U+2581로 명시적으로 인코딩해 tokenization과 de-tokenization을 reversible하고 lossless하게 만들 수 있음 - 내부적으로 BPE나 unigram language model 방식을 구현할 수 있음
- 언어 비종속성과 가역성 때문에 현대 LLM에서 인기가 있음
어휘 크기·토큰 경계·희귀 단어의 영향
- 토크나이저는 고정된 어휘 크기를 가지며, 큰 어휘는 더 많은 전체 단어를 담고 작은 어휘는 하위 단어에 더 많이 의존함
"sampling"이나"probability"가 단일 토큰이면 모델은 전체 개념의 가능성을 한 번에 예측함- 흔한 구문에서는 더 직접적이고 예측 가능한 출력이 가능함
- 희귀 단어에는
<UNK>나 어색한 하위 단어 조합 문제가 생길 수 있음
"sampling"을sampl+ing처럼 나누면 모델은 더 세밀한 단계에서 예측함- temperature 같은 샘플러가 허용하면
sampling대신sampler로 바뀔 여지가 생김 - 희귀 단어를 조각으로 구성할 수 있음
- common sub-word prefix에 고착되면 덜 일관되거나 stuck된 출력이 생길 수 있음
- DRY 같은 패널티는 더 짧고 의미가 덜 분명한 시퀀스를 추적해야 함
- temperature 같은 샘플러가 허용하면
- 같은 문구도 토크나이저에 따라 다르게 쪼개짐
"State-of-the-art"는State+-+of+-+the+-+art가 될 수도 있고, SentencePiece 스타일로State+_of+_the+_art가 될 수도 있음- 자주 등장했다면 전체가 단일 토큰이 될 수도 있음
- 토큰 경계는 DRY 같은 n-gram 기반 샘플러에 직접 영향을 줌
"once upon a time"이 4개 토큰이면 DRY가 4-gram을 쉽게 감지함- 단일 토큰이면 출력을 rollback하지 않는 한 같은 방식으로 패널티를 주기 어려움
- 희귀하거나 새 단어는 BPE와 SentencePiece에서 알려진 조각으로 분해될 수 있음
<UNK>를 만들면 샘플러가 고려할 의미 있는 선택지가 하나 줄어듦- 하위 단어 방식은 조각을 창의적으로 조합할 수 있지만, 희귀 단어를 만드는 데 여러 샘플링 단계가 필요해 단일 known token보다 중간에 벗어날 가능성이 커짐