ChatGPT나 Claude와 같은 LLM(대규모 언어 모델)을 사용하면서, "답변이 너무 진지해서 재미가 없다", "코드를 출력하게 하고 싶은데 매번 다른 방식으로 작성해서 곤란하다", "온도(Temperature)를 너무 높여서 지리멸렬한 답변이 되었다"와 같은 경험을 해본 적이 없으신가요?
LLM의 출력 품질이나 성격은 프롬프트의 기교뿐만 아니라, 추론 시에 지정하는 **샘플링 파라미터(Sampling Parameter: Temperature, Top-K, Top-P)**의 조참(Tuning)에 의해 극적으로 변화합니다.
이 기사에서는 LLM이 다음 토큰(Token)을 선택하는 수리적 메커니즘부터 각 파라미터의 역할, 그리고 유스케이스별 최적의 조합 가이드까지 알기 쉽게 해설합니다.
LLM은 문장을 생성할 때, 한 번에 완성된 문장을 출력하는 것이 아닙니다. "지금까지의 문맥에 이어지는, 가장 자연스러운 다음 단어(토큰)"를 하나씩 확률 계산하여 생성하는 처리를 반복하고 있습니다.
샘플링 파라미터는 이 "확률 계산으로부터 최종적인 하나의 토큰을 선택하는 과정"을 컨트롤하는 그래픽 카드의 이퀄라이저와 같은 존재입니다.
[ 입력 텍스트 (Prompt) ]
↓
[ Transformer Decoder ]
...
만약 모델이 "항상 가장 확률이 높은 토큰"만을 계속 선택한다면(Greedy Decoding), 출력은 매우 견실해지는 반면, 같은 구절을 반복하거나 지루하고 기계적인 문장이 되기 쉽습니다.
그렇기 때문에 생성에 "적절한 랜덤성(여유)"을 부여하기 위해 Temperature, Top-K, Top-P 등의 파라미터가 필요합니다.
Top-K는 "확률이 높은 상위 K개의 토큰만을 남기고, 그 외의 낮은 확률을 가진 토큰을 선택지에서 완전히 제외하는" 파라미터입니다.
비유하자면, **"시험의 선택지를 상위 몇 개까지 남길 것인가?"**라는 필터링입니다.
예를 들어, "고양이가 ___ 위에서 자고 있다"라는 문장의 다음에 올 단어의 확률 스코어가 다음과 같다고 가정해 봅시다:
| 후보 토큰 | 확률 | Top-K = 3인 경우 |
|---|
| 코타츠 | 55% | ⭕ 유지 |
| ... | | |
LLM의 어휘 수(Vocabulary Size)는 통상 32,000 ~ 128,000개 이상입니다.
롱테일(Long Tail, 말단)에는 문맥에 전혀 맞지 않는 무관한 단어가 극히 낮은 확률로 대량 존재합니다.
만약 Top-K를 지정하지 않으면, 10만 분의 1의 확률을 우연히 뽑게 되어 **할루시네이션(Hallucination, 거짓말이나 맥락 없는 발언)**이 발생하는 원인이 됩니다.
작음 (예: K=1 ~ 10): 확실성이 높고 무의미한 단어를 선택하지 않음 (견실·안전).
큼 (예: K=40 ~ 100): 어휘의 폭이 넓어져 다양한 표현이 가능해짐.
**Temperature($T$)**는 후보 토큰 간의 확률 격차를 조정하는 파라미터입니다.
수학적으로는 Softmax 함수에 통과시키기 전의 스코어(Logit $z_i$)를 Temperature $T$로 나눕니다.
$$\text{Probability}(i) = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)}$$
이 나눗셈에 의해 확률 분포의 형태가 급변합니다:
【저온도 (T = 0.2)】 【표준 (T = 0.7)】 【고온도 (T = 1.5)】
▲ ▲ ▲
│ █ │ █ │
...
- 스코어의 차이가 증폭되어 최고 확률의 토큰이 더욱 압도적이 됩니다.
특징: 답변이 결정론적(Deterministic)이 되어 매번 거의 동일한 출력을 반환합니다.
적합한 태스크: 프로그래밍 코드 생성, JSON/XML 등의 구조화된 데이터 추출, 수학 계산, 사실에 기반한 FAQ 답변.
- 스코어의 차이가 줄어들어 확률 분포가 플랫(Flat, 평탄)해집니다. 평소에 선택되기 어려운 희귀한 단어도 선택되게 됩니다.
특징: 창의성이나 다양성이 늘어나는 반면, 너무 높으면 문법이 붕괴하거나 할루시네이션이 증가합니다.
적합한 태스크: 네이밍 안 브레인스토밍, 소설·시 작성, 캐치프레이즈 제작.
**Top-P (Nucleus Sampling)**는 고정된 개수(K개)로 자르는 것이 아니라, **"확률이 높은 순서대로 누적하여 합계 확률이 P(예: 0.9 = 90%)에 도달할 때까지의 토큰 집합"**을 동적으로 선택하는 수법입니다.
- Top-K: 문맥이 확실하든 모호하든, 항상 '상위 K개'를 선택합니다 (고정 길이).
- Top-P: 문맥에 따라 '선택할 토큰의 수'가 자동으로 변화합니다 (가변 길이).
【상황 A: 문맥이 매우 명확한 경우】
"일본의 수도는 ___ 이다"
→ "도쿄" (92%) 단 하나만으로 누적 확률 90%를 초과하므로, 선택지는 【1개】로 자동 축소!
...
이러한 "확신도에 따른 동적인 선택 창의 신축"이 가능하기 때문에, 현재 많은 LLM API (OpenAI나 Anthropic 등)에서는 Top-K보다 Top-P가 표준 파라미터로서 권장되고 있습니다.
실제 개발이나 프롬프트 조정 시 고민된다면, 다음의 파라미터 설정을 참고하십시오.
| 유스케이스 | Temperature | Top-P / Top-K | 목적·출력 경향 |
|---|
| 코드 생성 / 디버깅 | 0.1 〜 0.2 | Top-P: 0.1 | 결정론적이고 버그 없는 정확한 구문 (Syntax) 출력 |
| JSON/데이터 추출 (RAG) | 0.0 〜 0.3 | Top-P: 0.2 | 사실에만 기반하여 불필요한 창작 (Hallucination) 방지 |
| 기술 해설 / 기사 집필 | 0.5 〜 0.7 | Top-P: 0.85 | 논리적 일관성을 유지하면서 읽기 쉬운 자연스러운 문장 표현 |
| 브레인스토밍 | 0.8 〜 1.0 | Top-P: 0.95 | 다양한 관점이나 참신한 아이디어를 다수 출력 |
| 이야기·시·크리에이티브 | 1.0 〜 1.2 | Top-P: 0.95 | 의외성 있는 단어 선택으로 표현력을 극대화 |
먼저 안전문을 통과시키기 (Top-K / Top-P) - 우선 Top-P = 0.9나 Top-K = 40을 설정하여, 노이즈가 되는 극단적인 저확률 토큰을 배제합니다.
목적별로 Temperature를 미세 조정하기 - 정확성을 원한다면 Temperature를 낮춥니다 (0.2 부근). 재미나 다양성을 원한다면 Temperature를 높입니다 (0.8 부근).
이중 조정에 따른 과도한 억제 주의하기 - OpenAI의 공식 문서에서는 "Temperature와 Top-P를 동시에 크게 변경하는 것은 권장하지 않으며, 둘 중 하나를 주로 조정할 것"이라고 명시되어 있습니다 (예기치 않은 동작을 방지하기 위함).
LLM의 추론 파라미터를 이해하는 것은, AI라는 강력한 엔진의 액셀러레이터와 브레이크 조절법을 익히는 것과 같습니다.
- Top-K / Top-P: 저확률 노이즈나 폭주를 차단하는 "안전 브레이크"
- Temperature: 결정론적인 딱딱함과 창조적인 부드러움을 무단계로 전환하는 "감도 다이얼"
태스크의 성격(확정적인 답을 원하는지, 유연한 발상을 원하는지)에 맞춰 이 다이얼들을 올바르게 돌림으로써, LLM의 잠재력을 최대한으로 끌어올릴 수 있습니다.
꼭 여러분의 프로젝트나 프롬프트 개발에서 이 파라미터들을 조정하며 효과를 시험해 보시기 바랍니다!