[LLM sampling] token prediction

-·2025년 1월 20일
0

LLM

목록 보기
16/16

LLM(대규모 언어 모델)에서 마지막 토큰의 출력을 생성할 때, 다양한 샘플링 기법이 사용됩니다. 이러한 기법은 모델의 출력을 제어하여 보다 자연스럽거나 특정한 특징을 가지는 텍스트를 생성하도록 돕습니다. 아래는 주요 샘플링 기법과 그 예시에 대한 구체적인 설명입니다.


1. Greedy Search (탐욕적 탐색)

  • 설명: 확률이 가장 높은 토큰을 반복적으로 선택하는 방법입니다.

  • 특징: 단순하고 빠르지만, 항상 동일한 결과를 생성하고 다양성이 부족할 수 있습니다. 로컬 최적화로 인해 비문법적이거나 의미가 없는 문장이 나올 가능성도 있습니다.

  • 예시:

    logits = [0.1, 0.3, 0.6]  # 토큰 확률
    selected_token = argmax(logits)  # 확률이 가장 높은 토큰 선택 (2번째 토큰)
    • 토큰 3((0.6))이 선택됩니다.

  • 설명: 여러 개의 후보 시퀀스(빔)를 유지하며 확장하는 방법입니다. 각 단계에서 가장 높은 확률을 가진 ( k )개의 시퀀스를 선택하여 다음 단계로 이어갑니다.

  • 특징: 보다 최적화된 시퀀스를 생성하지만, 다양성이 부족하고 계산 비용이 큽니다.

  • 예시:

    • ( k = 2 ) (빔 크기 2)
    • 단계 1: "The cat" (( P = 0.7 )), "The dog" (( P = 0.6 ))
    • 단계 2: "The cat sat" (( P = 0.7 \times 0.8 )), "The cat jumped" (( P = 0.7 \times 0.5 )) 등

3. Top-k 샘플링

  • 설명: 확률이 상위 ( k )개에 해당하는 토큰만 고려하고, 나머지는 확률을 0으로 만들어 샘플링합니다.

  • 특징: 낮은 확률 토큰을 제거하여 비문법적인 출력을 줄이고, 높은 확률 토큰 내에서 무작위성을 유지합니다.

  • 예시:

    logits = [0.1, 0.3, 0.6]  # 토큰 확률
    k = 2
    top_k_logits = [0.0, 0.3, 0.6]  # 상위 2개의 확률만 남김
    selected_token = sample(top_k_logits)
    • 토큰 2((0.3)) 또는 3((0.6))이 선택될 수 있음.

4. Top-p 샘플링 (Nucleus Sampling)

  • 설명: 누적 확률이 ( p ) (예: 0.9)를 넘을 때까지의 토큰만 고려합니다. 즉, 가장 중요한 확률 질량을 유지하며 나머지는 제거합니다.

  • 특징: 동적으로 토큰을 선택하므로, 텍스트의 다양성과 품질 간 균형을 맞출 수 있습니다.

  • 예시:

    logits = [0.1, 0.2, 0.3, 0.4]  # 토큰 확률
    p = 0.8
    sorted_logits = [0.4, 0.3, 0.2, 0.1]
    cumulative_probs = [0.4, 0.7, 0.9, 1.0]
    selected_tokens = [0.4, 0.3]  # 누적 확률 0.8 이하인 토큰만 선택
    • 토큰 4((0.4)) 또는 3((0.3))이 선택될 수 있음.

5. Temperature 샘플링

  • 설명: 확률 분포를 조정하여 출력을 더 창의적이거나 더 결정적으로 만듭니다. 온도 ( T )를 사용하여 확률 분포를 다음과 같이 변환합니다:
    [
    P_i = \frac{\exp\left(\frac{\log P_i}{T}\right)}{\sum_j \exp\left(\frac{\log P_j}{T}\right)}
    ]

    • ( T > 1 ): 확률 분포가 평탄해져 무작위성이 증가합니다.
    • ( T < 1 ): 확률 분포가 뾰족해져 탐욕적 선택에 가까워집니다.
  • 특징: 모델의 출력 스타일을 제어할 수 있습니다.

  • 예시:

    logits = [0.1, 0.3, 0.6]  # 토큰 확률
    T = 0.5
    adjusted_logits = [0.1**(1/0.5), 0.3**(1/0.5), 0.6**(1/0.5)]
    selected_token = sample(adjusted_logits)
    • ( T ) 값에 따라 높은 확률 토큰이 더 자주 선택됨.

6. 혼합 기법

현대의 LLM에서는 Top-k, Top-p, Temperature 등을 결합하여 최적의 출력을 생성합니다.

  • 예시:
    • Top-p로 중요한 확률 질량을 제한한 후, Temperature를 조정하여 무작위성을 추가.
    logits = [0.1, 0.3, 0.6]  # 원래 확률
    p = 0.8
    T = 0.7
    filtered_logits = apply_top_p(logits, p)
    adjusted_logits = adjust_temperature(filtered_logits, T)
    selected_token = sample(adjusted_logits)

샘플링 기법 선택 기준

  1. 창의적 응답: Top-p + Temperature 샘플링
  2. 결정적 응답: Greedy 또는 Beam Search
  3. 다양성 확보: Top-k 또는 Nucleus Sampling

이런 다양한 기법은 모델의 목적, 응용 사례, 요구 사항에 따라 유연하게 선택됩니다.

profile
거인의 어깨에 올라서서 더 넓은 세상을 바라보라 - 아이작 뉴턴

0개의 댓글

관련 채용 정보