
좋은 아침입니다.
Temperature는 모델이 다음 토큰을 선택할 때 확률 분포를 얼마나 날카롭게 또는 부드럽게 만들지 조절하는 값이었습니다.
Temperature가 낮으면 안정적인 답변이 나오고,
Temperature가 높으면 더 다양한 답변이 나올 가능성이 커집니다.
하지만 Temperature만으로는 부족한 경우가 있습니다.
확률이 낮은 이상한 토큰까지 선택 후보에 포함될 수 있기 때문입니다.
이번 글에서는 이런 문제를 줄이기 위해 사용되는 Top-k Sampling과 Top-p Sampling에 대해 알아보겠습니다.
LLM은 다음 토큰을 예측할 때 여러 후보 토큰에 확률을 부여합니다.
예를 들어 다음 문장을 생성하고 있다고 가정해 보겠습니다.
파이썬은
모델은 다음에 올 수 있는 토큰들에 대해 확률을 계산합니다.
프로그래밍 : 45%
배우기 : 20%
언어 : 15%
뱀 : 8%
쉽고 : 5%
음식 : 1%
자동차 : 0.5%
...
Sampling을 사용하면 이 확률에 따라 다음 토큰을 선택합니다.
문제는 확률이 매우 낮은 토큰도 선택될 가능성이 있다는 점입니다.
물론 확률이 낮기 때문에 자주 선택되지는 않지만,
Temperature가 높거나 생성 길이가 길어지면 문맥과 맞지 않는 토큰이 끼어들 수 있습니다.
그래서 다음 토큰 후보를 어느 정도 제한하는 방법이 필요합니다.
그 방법이 Top-k Sampling과 Top-p Sampling입니다.
Top-k Sampling은 확률이 높은 토큰 k개만 후보로 남기고, 그 안에서 Sampling을 수행하는 방법입니다.
예를 들어 k=3이라고 가정해 보겠습니다.
프로그래밍 : 45%
배우기 : 20%
언어 : 15%
뱀 : 8%
쉽고 : 5%
음식 : 1%
Top-k Sampling에서는 확률이 높은 상위 3개만 남깁니다.
프로그래밍 : 45%
배우기 : 20%
언어 : 15%
나머지 토큰은 선택 후보에서 제외됩니다.
뱀
쉽고
음식
이렇게 하면 너무 낮은 확률의 토큰이 선택되는 것을 막을 수 있습니다.
이후 남은 토큰들의 확률을 다시 정규화한 뒤, 그 안에서 Sampling을 수행합니다.
Top-k 값이 작으면 선택 후보가 줄어듭니다.
예를 들어 k=1이면 가장 확률이 높은 토큰 하나만 선택됩니다.
Top-k = 1
→ 가장 높은 확률의 토큰만 선택
→ Greedy Search와 거의 비슷함
k가 작을수록 답변은 안정적이고 예측 가능해집니다.
하지만 후보가 너무 적으면 답변이 단조로워질 수 있습니다.
Top-k 값이 크면 더 많은 토큰이 후보에 포함됩니다.
Top-k = 50
→ 확률 상위 50개의 토큰 중에서 선택
후보가 많아지기 때문에 답변은 더 다양해질 수 있습니다.
하지만 너무 많은 후보를 허용하면 문맥과 맞지 않는 토큰이 선택될 가능성도 커집니다.
그래서 Top-k는 너무 작아도, 너무 커도 문제가 될 수 있습니다.
Top-p Sampling은 확률이 높은 토큰부터 더해가면서, 누적 확률이 p 이상이 될 때까지 후보를 남기는 방법입니다.
Top-k가 개수 기준이라면,
Top-p는 확률 합 기준입니다.
예를 들어 p=0.9라고 가정해 보겠습니다.
프로그래밍 : 45%
배우기 : 20%
언어 : 15%
쉽고 : 7%
강력한 : 4%
뱀 : 3%
음식 : 1%
확률이 높은 순서대로 더해봅니다.
프로그래밍 : 45% → 누적 45%
배우기 : 20% → 누적 65%
언어 : 15% → 누적 80%
쉽고 : 7% → 누적 87%
강력한 : 4% → 누적 91%
p=0.9를 넘었으므로 여기까지를 후보로 남깁니다.
프로그래밍
배우기
언어
쉽고
강력한
그 이후의 토큰은 제외됩니다.
이 방식은 Nucleus Sampling이라고도 부릅니다.
Top-p는 상황에 따라 후보 개수가 달라집니다.
어떤 상황에서는 확률이 몇 개의 토큰에 몰려 있을 수 있습니다.
프로그래밍 : 80%
언어 : 10%
배우기 : 5%
...
이 경우 p=0.9라면 후보가 몇 개만 남습니다.
반대로 확률이 여러 토큰에 넓게 퍼져 있을 수도 있습니다.
좋은 : 15%
쉬운 : 12%
강력한 : 10%
유용한 : 9%
인기 있는 : 8%
...
이 경우 p=0.9를 채우려면 더 많은 후보가 필요합니다.
이처럼 Top-p는 고정된 개수가 아니라, 확률 분포에 따라 후보 수를 유동적으로 조절합니다.
Top-k와 Top-p의 차이는 기준이 다르다는 점입니다.
| 방식 | 기준 | 특징 |
|---|---|---|
| Top-k | 상위 k개 토큰 | 후보 개수가 고정됨 |
| Top-p | 누적 확률 p | 후보 개수가 상황에 따라 달라짐 |
Top-k는 단순합니다.
항상 상위 k개의 토큰만 남깁니다.
Top-p는 더 유연합니다.
확률이 특정 토큰에 몰려 있으면 후보를 적게 남기고,
확률이 넓게 퍼져 있으면 후보를 더 많이 남깁니다.
그래서 실제 LLM에서는 Top-p Sampling이 자주 사용됩니다.
Top-k와 Top-p는 보통 Temperature와 함께 사용됩니다.
각 설정의 역할은 조금 다릅니다.
Temperature
→ 확률 분포의 모양을 조절
Top-k / Top-p
→ 선택 후보의 범위를 제한
예를 들어 Temperature를 높게 설정하면 낮은 확률의 토큰도 선택될 가능성이 커집니다.
이때 Top-p를 함께 사용하면 너무 이상한 토큰은 후보에서 제외할 수 있습니다.
Temperature = 0.8
Top-p = 0.9
이런 식으로 설정하면 어느 정도 다양성을 유지하면서도 너무 낮은 확률의 토큰은 제외할 수 있습니다.
정확하고 안정적인 답변이 필요한 경우에는 후보를 좁게 잡는 것이 좋습니다.
예를 들어
같은 작업에서는 낮은 Temperature와 작은 후보 범위가 유리할 수 있습니다.
반대로 다양한 아이디어가 필요한 경우에는 후보를 조금 넓게 잡을 수 있습니다.
예를 들어
같은 작업에서는 높은 Temperature와 넓은 Top-p 설정이 도움이 될 수 있습니다.
다만 값이 너무 높으면 답변이 산만해질 수 있습니다.
LLM의 답변은 모델만으로 결정되지 않습니다.
같은 모델이라도 Decoding 설정에 따라 답변이 달라질 수 있습니다.
Temperature는 답변의 다양성을 조절하고,
Top-k와 Top-p는 선택 가능한 토큰 후보의 범위를 제한합니다.
이 설정들을 어떻게 조합하느냐에 따라 모델의 답변은 더 안정적일 수도 있고, 더 다양해질 수도 있습니다.
이번 글에서는 Top-k Sampling과 Top-p Sampling에 대해 알아보았습니다.
핵심 내용을 정리하면 다음과 같습니다.
다음 글에서는 LLM Inference 속도를 크게 향상시키는 KV Cache에 대해 알아보겠습니다.
LLM이 토큰을 하나씩 생성할 때 왜 이전 계산을 다시 하지 않아도 되는지, 그리고 KV Cache가 어떻게 추론 속도를 높이는지 정리해보겠습니다.
부족한 글 읽어주셔서 감사합니다.
틀린 내용이나 피드백은 댓글로 남겨주시면 감사하겠습니다.
감사합니다.