0Pricing
AI Prompt Engineering · 강의

LLM에서 Temperature란 무엇인가요?

창의성을 조절하는 Temperature: 0은 결정적, 2는 혼란스러우며 그 사이의 모든 값도 살펴봅니다.

LLM에서 Temperature란 무엇인가요?은(는) CoddyKit의 무료 AI Prompt Engineering 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Prompt Engineering 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Prompt Engineering 강의에는 총 4개의 강의가 포함되어 있습니다.

LLM이 다음 토큰을 선택하는 방법

각 단계에서 LLM은 어휘에 있는 모든 토큰에 대한 확률 분포를 출력합니다(GPT의 경우 약 50,000개 토큰). 모델은 각 토큰에 로짓이라는 점수를 할당합니다. 로짓은 정규화되지 않은 원시 수치입니다. 로짓이 높을수록 해당 토큰이 선택될 가능성이 높습니다.

온도는 샘플링 전에 이러한 원시 로짓을 확률로 변환하는 방식을 제어하는 매개변수입니다.

Softmax 함수

로짓은 softmax 함수를 사용하여 확률로 변환됩니다. Softmax는 로짓 벡터를 받아 합이 1인 확률 분포를 출력합니다.

토큰이 4개인 작은 어휘를 예로 들어 보겠습니다:

import numpy as np

# Raw logits from the model
logits = np.array([2.0, 1.0, 0.5, -1.0])  # scores for 4 tokens

# Standard softmax (temperature = 1)
def softmax(logits, temperature=1.0):
    scaled = logits / temperature
    exp_scaled = np.exp(scaled - np.max(scaled))  # subtract max for numerical stability
    return exp_scaled / exp_scaled.sum()

probs = softmax(logits, temperature=1.0)
print('Probabilities:', np.round(probs, 3))
# [0.567, 0.208, 0.129, 0.095]
# Token 0 is most likely at 56.7%

온도 = 0: 탐욕적 디코딩

온도가 0에 가까워지면 softmax 분포가 붕괴합니다. 로짓이 가장 높은 토큰의 확률은 약 1.0이 되고, 나머지 토큰의 확률은 모두 0에 가까워집니다. 모델은 확률이 가장 높은 단일 토큰을 항상 선택합니다.

이를 탐욕적 디코딩이라고 합니다. 결정론적 방식이므로 동일한 프롬프트는 항상 동일한 출력을 생성합니다. 무작위성도, 창의성도 없습니다.

# Temperature = 0 (greedy)
probs_temp0 = softmax(logits, temperature=0.01)  # near-zero
print('Probs at T=0.01:', np.round(probs_temp0, 4))
# [~1.0, ~0.0, ~0.0, ~0.0]

# In practice, temperature=0 is implemented as argmax:
def greedy_sample(logits):
    return np.argmax(logits)  # always returns the index of the highest logit

token_idx = greedy_sample(logits)
print(f'Selected token index: {token_idx}')  # always 0

온도 = 1: 표준 샘플링

온도 = 1에서는 크기 조정 없이 softmax를 적용하므로 확률 분포가 모델의 자연스러운 확신 정도를 반영합니다. 모델은 이 확률에 따라 샘플링합니다. 가능성이 높은 토큰은 자주 나타나고, 가능성이 낮은 토큰은 드물지만 때때로 나타납니다.

이는 대부분의 대화형 사용 사례에서 기본값으로 사용됩니다. 일관성을 유지하면서도 다양하고 자연스러운 출력을 생성합니다.

# Temperature = 1 (standard)
probs_temp1 = softmax(logits, temperature=1.0)
print('Probs at T=1.0:', np.round(probs_temp1, 3))
# [0.567, 0.208, 0.129, 0.095]

# Sampling from this distribution:
def sample_token(probs):
    vocab = ['the', 'a', 'an', 'is']
    return np.random.choice(vocab, p=probs)

# Run 10 times to see variation
for _ in range(10):
    print(sample_token(probs_temp1), end=' ')
# Output varies each time, but 'the' appears most often

온도 = 2: 혼란스러운 샘플링

높은 온도(> 1)는 확률 분포를 평평하게 만들어 모든 토큰의 가능성을 더 비슷하게 만듭니다. 모델은 예측하기 어려워지고 출력의 일관성이 자주 무너집니다.

온도 > 1.5는 실제로 거의 사용하지 않습니다. 창의적이고 예상 밖의 출력을 만들 수도 있지만, 대개는 무의미한 결과를 생성합니다.

# Temperature = 2 (chaotic)
probs_temp2 = softmax(logits, temperature=2.0)
print('Probs at T=2.0:', np.round(probs_temp2, 3))
# [0.385, 0.261, 0.211, 0.143]
# Much flatter — the 4th token (logit=-1.0) now has 14.3% chance
# (vs 9.5% at T=1.0)

# Visualization: compare distributions
for temp in [0.1, 0.5, 1.0, 1.5, 2.0]:
    probs = softmax(logits, temperature=temp)
    print(f'T={temp}: {np.round(probs, 3)}')

분포의 첨예도를 조절하는 온도

개념적으로 온도는 확률 분포의 첨예도를 조절합니다:

  • 낮은 온도(0.1–0.4): 뾰족한 정점 — 모델이 확신을 갖고 안전하거나 일반적인 토큰을 선택
  • 중간 온도(0.6–1.0): 자연스러운 형태 — 창의성과 일관성의 균형
  • 높은 온도(1.2–2.0): 평평한 분포 — 모델이 가능성이 낮은 토큰도 자유롭게 탐색

온도를 창의성 조절 다이얼이라고 생각하십시오. 낮으면 정확하고, 높으면 대담해집니다.

import matplotlib
# Conceptual: what distribution shape looks like at different temps
temps = {'T=0.2 (sharp)': 0.2, 'T=1.0 (normal)': 1.0, 'T=2.0 (flat)': 2.0}
for label, temp in temps.items():
    probs = softmax(logits, temp)
    bar = '#' * int(probs[0] * 40)
    print(f'{label}: top token = {probs[0]:.1%} |{bar}|')
# T=0.2: top token = 97.2% |########################################|
# T=1.0: top token = 56.7% |######################|
# T=2.0: top token = 38.5% |###############|

온도와 결정성

중요한 세부 사항: 온도 = 0이면 샘플링이 결정론적으로 이루어집니다. 온도 > 0에서는 샘플링이 무작위 과정이므로 실행할 때마다 서로 다른 출력이 생성됩니다. 분포는 고정되어 있지만 샘플은 달라집니다.

테스트에서 재현 가능한 출력을 얻으려면 항상 온도 = 0으로 설정하십시오. 원하는 변동성이 필요한 운영 환경에서는 API가 지원할 경우 시드를 사용하십시오.

import openai
client = openai.OpenAI(api_key='sk-...')

# Deterministic: temperature=0
resp1 = client.chat.completions.create(
    model='gpt-4o',
    messages=[{'role': 'user', 'content': 'What is the capital of France?'}],
    temperature=0
)
resp2 = client.chat.completions.create(
    model='gpt-4o',
    messages=[{'role': 'user', 'content': 'What is the capital of France?'}],
    temperature=0
)
print(resp1.choices[0].message.content == resp2.choices[0].message.content)  # True (usually)

온도가 상위 p와 상호 작용하는 방식

온도와 상위 p(핵 샘플링)는 모두 샘플링 분포를 형성하지만 서로 다른 단계에서 작동합니다:

  • 온도: softmax 전에 로짓을 조정하여 전체 분포의 형태를 변경합니다
  • 상위 p: softmax 후 분포를 상위 p 확률 질량으로 잘라 내어 가장 가능성 높은 토큰 집합에서만 샘플링합니다

두 가지를 함께 사용하면 세밀하게 제어할 수 있습니다. 일반적으로는 한 번에 하나만 조정하는 것이 좋습니다. 두 값을 동시에 변경하면 그 효과를 예측하기 어려워집니다.

# Using temperature with top_p in OpenAI API
resp = client.chat.completions.create(
    model='gpt-4o',
    messages=[{'role': 'user', 'content': 'Write a one-line haiku about code.'}],
    temperature=0.9,  # moderately diverse distribution
    top_p=0.95        # sample from top 95% of probability mass
)

과제별 실용적인 온도 값

일반적인 과제 유형에 대한 빠른 참고:

  • 사실 기반 질의응답: 0 — 정확해야 하므로 변동성이 필요하지 않습니다
  • 코드 생성: 0–0.2 — 구문이 올바라야 합니다
  • 요약: 0.3–0.5 — 어느 정도의 변동성은 허용됩니다
  • 채팅 / 대화형: 0.7–0.9 — 자연스럽고 다양한 응답을 생성합니다
  • 창작 글쓰기: 0.9–1.2 — 다양성이 중요합니다
  • 아이디어 발상: 1.0–1.5 — 예상하지 못한 선택지를 탐색합니다
TEMPERATURE_PRESETS = {
    'factual_qa': 0.0,
    'code_generation': 0.1,
    'summarization': 0.4,
    'chat': 0.8,
    'creative_writing': 1.1,
    'brainstorming': 1.3
}

def call_with_preset(task_type, prompt):
    temp = TEMPERATURE_PRESETS.get(task_type, 0.7)
    return client.chat.completions.create(
        model='gpt-4o',
        messages=[{'role': 'user', 'content': prompt}],
        temperature=temp
    )

API에서의 온도

온도는 모든 주요 LLM API에서 지원됩니다. 유효한 범위는 OpenAI의 경우 0–2이고 Anthropic Claude의 경우 0–1입니다. 최대값을 초과하면 오류가 발생합니다.

# OpenAI: temperature 0 to 2
client.chat.completions.create(
    model='gpt-4o',
    messages=[{'role': 'user', 'content': prompt}],
    temperature=1.2  # Valid for OpenAI
)

# Anthropic Claude: temperature 0 to 1
import anthropic
claude = anthropic.Anthropic(api_key='sk-ant-...')
claude.messages.create(
    model='claude-opus-4-5',
    max_tokens=1024,
    temperature=0.8,  # Max is 1.0 for Claude
    messages=[{'role': 'user', 'content': prompt}]
)

온도만으로 충분하지 않을 때

온도만으로는 필요한 다양성이나 정밀도를 항상 얻을 수 있는 것은 아닙니다. 온도=0에서도 다양한 출력이 생성된다면(일부 모델에서는 부동 소수점 비결정성 때문에 이러한 현상이 발생할 수 있습니다) 진정한 재현성을 위해 seed를 사용하십시오. 높은 온도에서 무의미한 결과가 생성된다면 온도를 더 높이는 대신 상위 p 또는 상위 k로 어휘를 제한하십시오.

# Seed for reproducibility (OpenAI API)
resp = client.chat.completions.create(
    model='gpt-4o',
    messages=[{'role': 'user', 'content': prompt}],
    temperature=0,
    seed=42  # Guarantees same output across calls on same model version
)

# Note: same output only guaranteed with same model version
# A model update can change outputs even with the same seed

지식 확인

온도를 매우 높은 값(예: 2.0)으로 설정하면 토큰에 대한 확률 분포에 어떤 일이 일어납니까?

복습: LLM의 온도

온도는 softmax 전에 로짓을 조정하여 토큰 샘플링의 무작위성을 제어합니다:

  • T=0: 탐욕적 방식 — 항상 확률이 가장 높은 토큰을 선택하며 결정론적입니다
  • T=1: 표준 방식 — 자연적인 확률 분포에 따라 샘플링합니다
  • T>1: 혼돈적 방식 — 분포를 평탄하게 만들어 무작위성은 높이고 일관성은 낮춥니다

사실 기반 및 코드 과제에는 낮은 온도를, 채팅에는 중간 온도를, 창작 과제에는 높은 온도를 사용하십시오. 온도와 상위 p를 동시에 조정하지 말고 한 번에 하나만 조정하십시오. 다음 수업: 상위 p 핵 샘플링

자주 묻는 질문

“LLM에서 Temperature란 무엇인가요?” 강의는 무료인가요?

네 — “LLM에서 Temperature란 무엇인가요?” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Prompt Engineering 강의 전체를 잠금 해제할 수 있습니다. AI Prompt Engineering 강의에는 총 4개의 강의가 포함되어 있습니다.

“LLM에서 Temperature란 무엇인가요?”에서 뭘 배우나요?

창의성을 조절하는 Temperature: 0은 결정적, 2는 혼란스러우며 그 사이의 모든 값도 살펴봅니다. 브라우저에서 직접 실행하는 실습 코드로 AI Prompt Engineering을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

AI Prompt Engineering을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 AI Prompt Engineering은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“LLM에서 Temperature란 무엇인가요?” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 AI Prompt Engineering 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 AI Prompt Engineering 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. LLM에서 Temperature란 무엇인가요?
  2. Top-p 핵 샘플링
  3. Top-k 샘플링
  4. 사용 사례에 맞는 매개변수 선택
← AI Prompt Engineering(으)로 돌아가기