Nucleus Sampling
Top-p(누클리어스) 샘플링은 확률 질량이 p에 도달하는 가장 작은 집합에서 각 토큰을 추출하므로, top-k와 달리 모델의 확신도에 따라 후보 집합이 달라집니다.
top-p 샘플링이라고도 하는 nucleus 샘플링은 누적 확률이 임계값 p에 도달하는 가장 작은 후보 집합에서 다음 토큰을 선택한 다음, 해당 집합에서 샘플링하는 디코딩 방법입니다. 워싱턴 대학교와 Allen Institute for AI의 Ari Holtzman과 동료들은 2019년에 The Curious Case of Neural Text Degeneration에서 이 방법을 소개했습니다. GPT-2 Large를 사용한 연구에서 이들은 탐욕적 디코딩과 빔 서치가 언어 모델을 단조롭고 반복적인 루프에 빠뜨리는 반면, 전체 분포에서 샘플링하면 일관성 없는 텍스트가 생성된다는 점을 보였습니다. 또한 분포에서 신뢰하기 어려운 꼬리 부분을 잘라 내면 퍼플렉서티와 다양성이 인간의 글쓰기에 가장 가까운 텍스트를 생성할 수 있음을 밝혔습니다. 이제 top-p는 거의 모든 대규모 언어 모델의 텍스트 생성 API에서 표준 설정으로 사용됩니다.
뉴클리어스 선택 방법#
각 단계에서 언어 모델은 어휘의 모든 토큰에 점수를 매기고, 소프트맥스는 이 점수를 확률로 변환합니다. 그런 다음 nucleus 샘플링은 토큰을 가능성이 높은 순서대로 정렬하고, 누적 확률이 p에 도달할 때까지 순서대로 확률을 합산한 뒤, 해당 집합에 포함되지 않는 항목을 버리고, 남은 항목의 확률 합이 1이 되도록 재정규화한 후 토큰 하나를 샘플링합니다.
확률이 각각 0.50, 0.25, 0.15, 0.10인 후보 네 개를 놓고 p를 0.8로 설정한다고 가정해 보겠습니다. 처음 두 후보의 확률 합은 0.75로 임계값보다 작으므로 세 번째 후보를 추가하면 뉴클리어스의 확률 합은 0.90이 됩니다. 네 번째 토큰은 제거되며, 재정규화 후 살아남은 세 토큰은 대략 0.56, 0.28, 0.17의 확률로 추출됩니다.
뉴클리어스의 정의적 특징은 각 단계에서 크기가 다시 정해진다는 점입니다. "프랑스의 수도는" 다음에는 거의 모든 확률이 하나의 토큰에 집중되므로 뉴클리어스는 단어 하나로 줄어듭니다. 이야기의 시작 부분에서는 수백 개의 그럴듯한 단어에 확률이 분산되므로 뉴클리어스가 넓어져 해당 단어들을 포함합니다. 후보 수를 고정하면 이렇게 적응할 수 없습니다.
6개 토큰 어휘에 대해 디코딩 단계 하나를 수행하는 동일한 절차를 PyTorch로 구현하면 다음과 같습니다.
import torch
# 6개 토큰 어휘의 다음 토큰 확률
probs = torch.tensor([0.10, 0.40, 0.04, 0.25, 0.06, 0.15])
top_p = 0.75
# 정렬한 다음 누적 확률이 top_p에 도달할 때까지 토큰 유지
sorted_probs, order = probs.sort(descending=True)
cumulative = sorted_probs.cumsum(dim=0)
keep = cumulative - sorted_probs < top_p # top_p를 넘기는 토큰도 유지됩니다
# 뉴클리어스의 확률을 재정규화하고 다음 토큰 ID 샘플링
nucleus = sorted_probs * keep
next_token = order[torch.multinomial(nucleus / nucleus.sum(), num_samples=1)]
print(order[keep].tolist(), next_token.item())출력에는 뉴클리어스를 구성하는 토큰 ID 1, 3, 5가 표시되며, 이 토큰들은 합쳐서 확률 0.80을 차지합니다. 그 뒤에 샘플링된 ID가 이어집니다. 이 단계에서는 토큰 0, 2, 4를 선택할 수 없으며, 스크립트를 다시 실행하면 살아남은 세 토큰 중에서 각 토큰의 확률에 비례해 하나를 선택합니다.
top-p와 탐욕적 디코딩, top-k 및 temperature 비교#
- 탐욕적 디코딩은 항상 가능성이 가장 높은 토큰 하나를 선택합니다. 결정론적이며 짧은 사실 확인 답변에 적합하지만, 긴 출력은 반복되는 경향이 있습니다.
- top-k 샘플링은 후보 수를 고정합니다. k를 50으로 설정하면 확신도가 높은 단계에서도 말이 되지 않는 토큰을 포함한 50개 토큰 중에서 샘플링하며, 불확실한 단계에서는 합리적인 선택지를 잘라낼 수 있습니다. top-p는 고정된 후보 수 대신 고정된 확률 비율을 사용합니다.
- temperature는 소프트맥스를 적용하기 전에 모델의 점수를 나눕니다. 1보다 작은 값은 분포를 상위 선택지 쪽으로 뾰족하게 만들고, 1보다 큰 값은 분포를 평탄하게 만듭니다. top-p는 temperature 적용 후에 계산되므로 temperature를 높이면 뉴클리어스도 넓어집니다.
- Min-p 샘플링은 확률이 가장 높은 토큰 확률의 설정된 비율 이상인 모든 토큰을 유지하므로, 컷오프 기준도 모델의 확신도에 맞춰 변합니다. Hugging Face Transformers, vLLM, llama.cpp는 top-p와 함께 이 기능을 제공합니다.
온도와 top-p는 모두 무작위성을 조절하므로, 일반적으로 두 설정을 동시에 조정하기보다는 둘 중 하나를 조정하는 것이 권장됩니다. 많은 추론 엔진에서는 top-k와 top-p를 함께 사용할 수도 있으며, 이 경우 top-k가 후보 수의 상한으로 작동합니다.
top-p 값 선택#
top-p를 1.0으로 설정하면 필터가 비활성화되며, 일반적인 기본값은 0.9~1.0입니다. top-p는 모델 자체의 확률만 재구성하므로, 사실 정확도는 프롬프트에 근거를 제공하는 데서 비롯됩니다. 예를 들어 검색 증강 생성은 모델에 필요한 사실 정보를 제공하여 환각을 줄입니다. 값을 높이면 브레인스토밍, 챗봇 대화, 창작 글쓰기에서 다양성이 커집니다. 0.5와 같이 낮은 값을 사용하면 출력이 더 예측 가능하고 반복적이어서 데이터 추출, 분류 프롬프트, 코드 생성에 적합합니다. 제약 디코딩은 필수 형식을 깨뜨리는 모든 토큰을 마스킹하여 이를 한층 더 엄격하게 적용합니다.
같은 설정은 비전 파이프라인의 언어 출력도 제어합니다. Ultralytics YOLO26 탐지 결과가 장면 설명을 위한 비전-언어 모델을 호출하면, Ultralytics LLM 인터페이스는 top_p와 같은 요청 인수를 제공업체의 API에 그대로 전달합니다. 따라서 0.5와 같이 낮은 값을 설정하면 비슷한 프레임에 대한 설명의 표현이 서로 비슷하게 유지됩니다.










