3P by GN⁺ | ★ favorite | 댓글 1개
  • 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만큼 줄어듦
    • 같은 토큰이 반복될수록 다시 선택될 가능성이 점진적으로 낮아짐
  • 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 상황에서는 더 관대한 컷오프가 적용됨
    • 임계값은 etasqrt(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을 유지하도록 동적으로 조정하는 피드백 방식임
    • 현재 mu threshold로 너무 놀라운 토큰을 걸러냄
    • 토큰 선택 뒤 실제 surprisal을 계산하고 목표값 tau와 비교함
    • etamu를 얼마나 빠르게 조정할지 결정하는 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 같은 패널티는 더 짧고 의미가 덜 분명한 시퀀스를 추적해야 함
  • 같은 문구도 토크나이저에 따라 다르게 쪼개짐
    • "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보다 중간에 벗어날 가능성이 커짐

댓글과 토론

Hacker News 의견들
  • 이와 관련해, 우리 min_p 논문은 ICLR 제출 12,000편 중 18위에 올랐고 구두 발표로 선정됨
    https://iclr.cc/virtual/2025/oral/31888
    포스터도 인기가 많았음: https://iclr.cc/media/PosterPDFs/ICLR%202025/30358.png?t=174...
    구두 발표는 여기서 볼 수 있음. 이 주제로 Yoshua Bengio를 까는 장면이 있고, 그가 첫 질문자가 됨. 두 번째 발표자가 19:30쯤 시작하며 발표 슬라이드도 같이 있고 꽤 웃김: https://iclr.cc/virtual/2025/session/31936
    논문: https://arxiv.org/abs/2407.01082
    min_p 저자 중 한 명으로서, 현재 범용 샘플러는 Top N sigma가 압도적으로 최고라고 확인할 수 있음. 또한 temperature는 지금보다 훨씬 높게 조정해도 되고 그래야 함. min_p나 top N sigma 같은 기법을 쓰면 temperature 100도 완전히 괜찮음
    또 하나, 논문 말미에서 저자들이 권하지 않는 top_k = 2와 초고온 temperature 조합도 그 자체로 매우 흥미로움. 약 10단어마다 철자 오류가 나지만, 동시에 꽤 흥미로운 창의성이 생기는 듯함

    • 사실상 탐욕적이지 않은 샘플러가 있는지 궁금함. 즉 실제로 트리 탐색을 하는 방식 말임
      분기 수가 말도 안 되게 크고 노드 확장 비용도 비싸다는 건 알지만, 실제로 탐색을 하지 않는다는 점이 늘 이상하게 느껴졌음
  • 여기서 빠진 한 가지는, 샘플러가 모델의 내부 상태에 접근할 수 없다는 점임. 샘플러는 출력 분포에 기본 수학을 적용할 뿐이고, 그 분포가 기술적으로 의미론을 조금 담고 있긴 하지만 모델만큼 똑똑하지 않으면 해독할 수 없음
    여기서 설명된 반복 패널티나 DRY 같은 샘플러도 마찬가지임. 모델은 무수히 다양한 방식으로 자기 반복을 할 수 있고, 그걸 모두 막는 유일한 방법은 더 나은 학습이지 n-그램 검색이나 고전 자연어 처리 방식이 아님. 손가락으로 모든 구멍을 막으려는 셈인데, 손가락이 몇 개나 있나?
    자동회귀 과정을 해킹하면 Min-P 같은 낮게 매달린 과일로 개선이나 재치 있는 트릭은 가능하지만, 나쁜 모델을 좋은 모델로 바꾸려는 목적이라면 방향이 틀렸음

    • 아니, 목적은 창의적이지 않은 모델을 창의적인 모델로 바꾸는 것임. 샘플링이 중요하지 않다거나 bitter lesson을 어기는 것이라는 생각 때문에, ICLR 구두 발표에서 이 분야 전체가 이런 연구에 거대한 사각지대를 갖고 있다고 콕 집어 말해야 했음
      Top n sigma는 2024년 중반부터, min_p는 2023년부터 있었는데도 아직 오픈소스 바깥, 즉 HF/vllm 밖에서는 이런 혁신이 통합되길 기다리고 있음. API 제공자들이 일부러 천천히 하는 이유는 모델이 너무 창의적이 되는 위험을 감당하기 싫어서이고, 높은 temperature가 워터마킹을 깨뜨릴 가능성도 큼
      또 하나, 모델이 자기 샘플링 설정을 알게 만드는 건 아주 쉬움. 매 토큰이나 생성마다 그 설정을 모델에 다시 넣어주면 됨. 예를 들어 구조화 생성으로 가능함. 모델은 자기 샘플링 설정을 제어할 수 있고, 아주 약간의 추가 프로그래밍만으로 “내부 상태에 접근”할 수 있음. 이제 그 코드는 모델이 대신 써줄 수도 있음
    • 이 가이드에서의 핵심 관심사는 효율성과 복잡도 폭발 방지로 보임
  • 최근에 Ollama/llama.cpp용 샘플링 가이드도 조금 써봤고, 피드백이나 수정 제안 환영함: https://smcleod.net/2025/04/comprehensive-guide-to-llm-sampl...

  • 전체가 잘 정리되고 쉽게 설명돼 있어서 새로운 시도를 어디서 효과적으로 할 수 있을지 열어준다는 점이 좋음
    예를 들어 왜 단어 전체를 토큰으로 쓰지 않을까? 제한된 “로봇 방언”을 가진 “로봇”을 만들 수 있음. 새 단어나 희귀 단어를 다룰 능력은 없겠지만, 학습 데이터와 입력 데이터를 수정해 그런 단어들을 기존 어휘로 번역할 수 있음. 그러면 훨씬 작은 매핑이 생기고, 문자 그대로 로봇답기도 하며 사용자는 C-3PO처럼 이 로봇이 어떤 답을 잘할지 기대치를 갖게 됨

    • 단어 전용 토크나이저는 RNN/LSTM 시절에 사람들이 하던 방식임. BPE나 WordPiece/SentencePiece 같은 토큰화 방식보다 기능적으로 나아지는 게 없고, 구두점 같은 의미 있는 의미 힌트를 쓰기 어려워져 품질도 더 나빠짐
  • LLM이 단순히 “다음 토큰”이 아니라 아이디어를 출력하게 하려는 시도라면, 로짓 벡터 위에서 선택하는 과정이 그 원래 아이디어를 깨뜨릴 것 같음. 아이디어가 완성돼 있다면 로짓에 대한 샘플링을 쓸 필요가 없어야 함
    이 틀에서 샘플링은 출력에 가까운 수준, 즉 “다음에 말할 단어가 무엇인가”에서 일어나면 안 됨

    • LLM은 “아이디어”가 아니라 다음 토큰을 맞힐 확률을 최대화하도록 학습됨. 아이디어를 학습 손실 목표로 정의할 수는 없음
  • 몇 주 전에 관련 주제인 제약 샘플링을 다룬 인터랙티브 글을 만들었음. 이 글이 훨씬 더 철저하긴 함
    http://michaelgiba.com/grammar-based/index.html

  • LLM 모델이 토큰화를 암묵적으로 할 수 있을까? 별도 토크나이저를 만들지 않고 임의의 문자열을 허용한 다음, 신경망이 그것을 토큰으로 변환하게 하고 그 네트워크의 가중치를 나머지 LLM과 함께 학습하는 방식 말임

    • 이미 그렇게 하고 있음. 신경망은 토큰을 직접 다룰 수 없고, 실수 벡터와 미분 가능한 입력만 받을 수 있음[0]. 그래서 토큰 123, 456을 그대로 주는 게 아니라 각 토큰을 원-핫 인코딩 벡터로 바꿔야 함. 토큰 ID가 가리키는 위치만 1이고 나머지는 모두 0인 벡터임
      이 원-핫 벡터들은 선형 계층을 통과해 모델의 은닉 상태 크기로 압축됨. 예를 들어 토큰 어휘는 1만~10만 개일 수 있지만 은닉 상태 크기는 500~2,000 정도일 수 있음. 모델의 나머지 부분은 모두 은닉 상태 공간[1]에서 동작하며, 그 안에는 여러 고수준 개념이 들어 있음
      토큰화를 제거하면 인코더가 우리가 익숙한 은닉 상태 공간에 도달하기 위해 더 많은 일을 해야 함. 짝지어지지 않은 바이트에서 은닉 공간으로 더 효율적인 인코딩을 찾을 수도 있겠지만, 대부분 모델의 토큰화가 이미 학습 세트의 통계적 속성에 기반한다는 점을 보면 가능성은 낮아 보임. “anti”나 “ism”을 모델에 넘기기 전에 단일 토큰으로 자동 결합하지 않으면, 모델의 낮은 층 어텐션 헤드가 같은 일을 해야 함
      예전에는 문자 시퀀스로 모델을 학습하다가 효율 때문에 토큰화로 옮겨왔으니, 이 절충은 아마 가치가 없을 가능성이 큼
      [0] 토큰 ID 목록을 그냥 줄 수는 없음. 토큰 123.25에는 수학적 의미가 없고, 토큰 ID를 증가시키거나 감소시키는 것도 의미가 없음
      [1] 성능은 좋아지지만 해석 가능성은 더 어려워짐. 특히 은닉 공간의 기저 벡터는 단어나 개념과 직접 대응하지 않고, 모든 개념은 일종의 N차원 고리 위에 존재함
  • 불과 몇 년 전에 발명된 기술을 쓰도록 기법을 업데이트한 걸 현대적이라고 부르는 건 거의 문해력 문제에 가까움. 현대적이라면 무엇과 대비되는 건가, 고전적 LLM 샘플링인가?

    • 그런 비판을 하려면 먼저 사전을 확인하는 편이 좋음
      modern, adj. designed and made using the most recent ideas and methods
      https://dictionary.cambridge.org/us/dictionary/english/moder...
      이 글이 설명하는 내용이 정확히 그 정의에 해당함. 지난 7년 정도 동안 이 영역에는 많은 발전이 있었고, 예컨대 GPT 1, 2, 3은 지금 기준으로 확실히 매우 낡았으며 위 정의의 의미에서는 현대적이지 않음
    • 이 알고리즘 중 상당수는 2019년쯤, 예를 들어 TFS에 발명됐거나 temperature처럼 더 오래된 것도 있음
    • LLM은 훨씬 오래됐음. 관련 노벨상도 수십 년 전 돌파구들이 어떻게 만들어졌는지를 보여줌
      ChatGPT가 대중적 돌파구였을 뿐임. 그보다도 스마트폰 키보드는 10년 전부터 LLM을 써왔음
  • 정말 유용한 문서임. 설명이 매우 명확하고 다루는 범위도 넓음
    누가 썼는지 아는 사람 있나? 저자가 표시돼 있지 않고 무료 Markdown pastebin에 올라와 있음
    DRY 반복 패널티 부분이 흥미로웠음. 나는 LLM이 입력을 의도적으로 정확히 복사해 출력하길 바랄 때가 많음. 예를 들어 긴 대화를 요약할 때는 논점을 가장 잘 보여주는 정확한 인용문을 달라고 하는 편임. 나중에 원문에서 검색해 사실 확인하기 쉽기 때문임
    DRY 패널티는 그런 목표와는 반대로 작동할 것 같음

    • 저자 표시가 없는 줄 몰랐음. @AlpinDale이 쓴 글임