{
"title": "Top-p sampling",
"sections": [
{
"heading": "## 기법",
"content": "top-p 샘플링은 핵 샘플링(nucleus sampling)이라고도 하며, 자기회귀 확률 모델에서 시퀀스를 생성하는 데 사용되는 확률적 디코딩 전략입니다. 특히 자연어 생성 분야에서 두드러지게 사용됩니다. 이 기법은 2019년에 Ari Holtzman, Yejin Choi와 동료들이 제안하여, 빔 서치(beam search)와 같은 결정론적 디코딩 방법이 생성하는 반복적이고 무의미한 텍스트 문제를 해결하고자 했습니다. 이후 이 기법은 단백질 공학 및 지구물리학과 같은 다른 과학 분야에도 적용되었습니다."
},
{
"heading": "## 기법",
"content": "top-p 샘플링에서는 확률 임계값 p가 설정됩니다. 그런 다음, 누적 확률이 p를 초과하는 가장 작은 고확률 후보 집합에서만 다음 항목을 샘플링합니다. 이 방법은 모델의 확신도에 따라 후보 풀의 크기를 조정하므로, 고정된 수의 후보에서 샘플링하는 top-k 샘플링보다 더 유연합니다. 이러한 효과성 덕분에 top-p 샘플링은 많은 대규모 언어 모델 애플리케이션에서 널리 사용됩니다."
},
{
"heading": "## 기법",
"content": "텍스트 생성의 각 단계에서 언어 모델은 전체 어휘에 대한 다음 토큰의 확률 분포를 계산합니다. 가장 높은 확률의 토큰만 선택하는 탐욕 검색(greedy search)이나 제한된 고확률 시퀀스만 고려하는 빔 서치(beam search) 같은 결정론적 방법은 종종 단조롭고 반복적이며 무의미한 텍스트를 생성합니다. top-p 샘플링은 무작위성을 도입하여 이러한 문제를 피하면서도 생성 품질을 유지합니다."
},
{
"heading": "## 기법",
"content": "핵심 아이디어는 각 단계에서 '핵(nucleus)'이라고 불리는 더 작고 신뢰할 수 있는 토큰 집합에서 샘플링하는 것입니다. 이 핵은 결합 확률(누적 확률)이 임계값 p를 막 넘는 가장 가능성 높은 다음 토큰들을 포함합니다. 이렇게 동적으로 크기가 조정되는 집합에서만 샘플링함으로써, 모델은 다양한 상황에 적응할 수 있습니다. 예를 들어, 모델이 다음 토큰에 대해 매우 확신하는 경우(즉, 특정 토큰의 확률이 매우 높은 경우) 핵의 크기는 작아집니다. 반대로 모델이 불확실한 경우(확률이 여러 토큰에 고르게 분포된 경우) 핵의 크기는 커져 더 다양한 출력을 생성할 수 있습니다."
},
{
"heading": "## 기법",
"content": "각 단계에서의 프로세스는 다음과 같습니다.\n\n1. 모델은 가능한 모든 다음 토큰에 대한 확률을 계산합니다.\n2. 토큰들은 확률의 내림차순으로 정렬됩니다.\n3. 누적 확률이 미리 정의된 임계값 p를 초과할 때까지 상위 토큰들을 선택하여 핵을 형성합니다.\n4. 선택된 핵 내부의 토큰 확률은 합이 1이 되도록 재조정(정규화)됩니다. 핵 외부의 토큰들은 모두 버려집니다(확률 0 할당).\n5. 마지막으로, 이렇게 새로 만들어진 더 작은 확률 분포에서 다음 토큰이 무작위로 샘플링됩니다."
},
{
"heading": "## 공식적 정의",
"content": "공식적으로, 핵 \\(V^{(p)} \\subseteq V\\)는 다음 조건을 만족하는 가장 작은 토큰 집합으로 정의됩니다.\n\n\\[\\sum_{x \\in V^{(p)}} P(x|x_1, \\dots, x_{t-1}) \\geq p\\]\n\n여기서 \\(P(x|x_1, \\dots, x_{t-1})\\)는 주어진 이전 토큰들 \\(x_1, \\dots, x_{t-1}\\) 다음에 토큰 \\(x\\)가 올 확률을 나타냅니다."
},
{
"heading": "### 예시",
"content": "특정 단계에서 언어 모델의 어휘가 다섯 단어, [the, a, cat, dog, eats]이고 각각의 확률이 다음과 같다고 가정해 보겠습니다.\n\n- the: 0.5\n- a: 0.2\n- cat: 0.1\n- dog: 0.1\n- eats: 0.1\n\n임계값 \\(p = 0.8\\)로 설정하면:\n\n1. 토큰들은 확률에 따라 정렬됩니다: [the, a, cat, dog, eats].\n2. 누적 확률이 계산됩니다:\n - the: 0.5\n - the + a: 0.5 + 0.2 = 0.7\n - the + a + cat: 0.7 + 0.1 = 0.8\n3. 누적 확률이 0.8 이상인 가장 작은 집합은 \\(V^{(0.8)} = \\{\\text{the, a, cat}\\}\\)입니다.\n4. 이 집합의 확률은 합이 1이 되도록 재조정됩니다:\n - P(the) = 0.5 / 0.8 = 0.625\n - P(a) = 0.2 / 0.8 = 0.25\n - P(cat) = 0.1 / 0.8 = 0.125\n5. 이제 이 새로운 분포에서 다음 토큰이 샘플링됩니다. 즉, dog와 eats는 선택될 확률이 0이 됩니다."
},
{
"heading": "### top-k 샘플링과의 비교",
"content": "top-k 샘플링은 유사한 기법으로, 후보 토큰 풀을 가장 가능성 높은 k개의 토큰으로 제한합니다. top-p 샘플링의 주요 장점은 적응성에 있습니다. 모델이 다음 토큰에 대해 매우 확신하는 경우(확률 분포가 뾰족한 경우), 핵 \\(V^{(p)}\\)는 매우 작아질 수 있습니다. 반대로 모델이 불확실한 경우(확률 분포가 평평한 경우), 핵은 훨씬 커져 더 다양한 출력을 허용합니다. 이와 대조적으로 top-k 샘플링은 항상 고정된 수의 토큰에서 샘플링하므로, 상황에 따라 너무 제한적이거나 너무 광범위할 수 있습니다."
},
{
"heading": "## 응용 분야",
"content": "top-p 샘플링은 주로 대규모 언어 모델의 디코딩 전략으로 널리 알려져 있지만, 그 유용성은 자연어 처리 분야를 넘어 확장됩니다. 확률적 시퀀스 생성을 필요로 하는 다른 과학적 영역에서도 성공적으로 적용되고 있습니다."
},
{
"heading": "### 자연어 생성",
"content": "원래 개발된 분야인 자연어 생성에서 top-p 샘플링은 결정론적 방법에 비해 더 다양하고 일관성 있는 텍스트를 생성하는 데 가치가 있습니다. 예를 들어, 자동 질문 생성과 같은 작업에서 샘플 다양성은 효과적인 훈련 데이터를 만드는 데 중요하며, top-p 샘플링이 이러한 다양성을 제공하는 데 유용한 것으로 나타났습니다."
},
{
"heading": "### 약물 및 단백질 설계",
"content": "계산 생물학 분야에서 top-p 샘플링은 단백질 및 화학 분자 서열을 생성하는 데 사용됩니다. 예를 들어, 신약 설계에서 분자 구조로 훈련된 화학 언어 모델은 top-p 샘플링을 사용하여 새롭고 유효한 약물 후보 물질의 라이브러리를 생성할 수 있습니다. 마찬가지로, 단백질 언어 모델은 원하는 특성을 가진 새로운 단백질 서열을 제안하기 위해 이 기법을 활용하며, 이는 단백질 공학에 도움이 됩니다."
},
{
"heading": "### 지구물리학",
"content": "지구물리학에서는 지진이나 지하 구조와 같은 지질학적 사건의 시퀀스를 생성하거나 모델링하는 데 top-p 샘플링이 적용되었습니다. 예를 들어, 지하 특성을 예측하는 확률적 모델에서 top-p 샘플링을 사용하여 지질학적 해석의 불확실성을 정량화하는 데 도움이 되는 다양한 가능한 시나리오를 샘플링할 수 있습니다."
},
{
"heading": "## 구현 및 사용법",
"content": "실제로 top-p 샘플링은 종종 온도 스케일링(temperature scaling)과 같은 다른 디코딩 전략과 결합되어 생성 텍스트의 무작위성과 품질을 미세하게 조정합니다. 온도 스케일링은 top-p 샘플링을 적용하기 전에 확률 분포의 '날카로움'을 조정하여 출력의 다양성을 더욱 제어할 수 있게 합니다. 많은 머신 러닝 프레임워크와 라이브러리에서 top-p 샘플링을 기본적으로 지원하므로 기존 파이프라인에 쉽게 통합할 수 있습니다."
},
{
"heading": "## 구현 및 사용법",
"content": "top-p 샘플링은 주요 AI 기업들의 API에서 표준 기능으로 자리 잡았습니다. OpenAI, Anthropic, Google DeepMind와 같은 회사들은 생성 모델 API에서 이 기능을 제공합니다. 또한 Hugging Face의 Transformers 라이브러리와 같은 오픈소스 생태계에서도 널리 구현되어 있습니다. 일반적으로 텍스트 생성 함수에서 top_p라는 매개변수로 지정되며, 균형 잡힌 출력을 위해 0.9에서 0.95 사이의 값이 자주 사용됩니다."
},
{
"heading": "## 구현 및 사용법",
"content": "p 값의 선택은 생성 결과에 큰 영향을 미칩니다. 낮은 p 값(예: 0.5)은 모델을 더 보수적으로 만들어 높은 확률의 토큰에 집중하게 하여 더 안전하고 일관된 출력을 생성합니다. 반대로 높은 p 값(예: 0.99)은 더 다양한 토큰을 허용하여 창의성을 높이지만, 무의미하거나 일관성 없는 텍스트가 생성될 위험을 증가시킵니다. 연구자와 개발자는 특정 작업과 원하는 출력 특성에 따라 p 값을 조정합니다."
},
{
"heading": "## 같이 보기",
"content": "- Top-k 샘플링\n- 온도 샘플링\n- 빔 서치\n- 탐욕 디코딩"
}
]
}