Ch.5 확률과 AI의 판단

Temperature — 창의성 조절 다이얼

Temperature가 확률 분포에 미치는 영향을 이해한다낮은/높은 Temperature의 효과를 시각적으로 비교한다Temperature를 조절한 Softmax를 구현할 수 있다

같은 질문에 AI가 매번 다른 답을 한다?

ChatGPT에 같은 질문을 두 번 하면 다른 답이 나옵니다. 그런데 코딩 질문에는 거의 같은 답이 나오죠. 이 차이는 어디서 올까요?

AI의 '확정적' vs '창의적' 응답을 어떻게 조절할까?

Temperature — 확률 분포의 날카로움을 조절하는 하이퍼파라미터입니다.

lightbulb

핵심 개념

Temperature

확률 분포 날카로움을 조절하는 하이퍼파라미터


article

핵심 내용

Temperature는 확률 분포의 '날카로움'을 조절합니다

Softmax 전에 logits를 Temperature(T)로 나눕니다

T↓ = 날카로움(확정적), T↑ = 평평함(창의적)

softmax\left(x_i/T\right) = \frace^{x_i / T}Σ_j e^{x_j / T}

T가 0에 가까우면 가장 큰 값만 1에 가까워지고(greedy), T가 클수록 모든 선택지가 비슷한 확률을 갖게 됩니다.

Temperature를 바꿔가며 확률 분포 변화를 관찰합시다

import numpy as np

def softmax(logits, temperature=1.0):
    """Temperature가 적용된 Softmax"""
    scaled = logits / temperature
    exp_vals = np.exp(scaled - np.max(scaled))
    return exp_vals / np.sum(exp_vals)

words = ["좋다", "나쁘다", "덥다", "춥다", "흐리다"]
logits = np.array([3.2, 1.8, 1.5, 1.0, 0.5])

print("=== Temperature에 따른 확률 분포 변화 ===\n")

for temp in [0.1, 0.5, 1.0, 2.0]:
    probs = softmax(logits, temperature=temp)
    print(f"Temperature = {temp}")
    for word, prob in zip(words, probs):
        bar = "█" * int(prob * 40)
        print(f"  {word:4s}: {prob:.4f}  {bar}")
    print()

극단적인 Temperature 차이를 비교합시다

Temperature를 0.1부터 2.0까지 바꿔가며 확률 분포가 어떻게 변하는지 관찰합니다

# Temperature 효과 시뮬레이터
import math
import random

def softmax_with_temp(logits, temperature):
    scaled = [x / temperature for x in logits]
    max_val = max(scaled)
    exps = [math.exp(x - max_val) for x in scaled]
    total = sum(exps)
    return [e / total for e in exps]

def sample_word(words, probs):
    r = random.random()
    cumsum = 0
    for w, p in zip(words, probs):
        cumsum += p
        if r <= cumsum:
            return w
    return words[-1]

logits = [4.0, 2.0, 1.5, 0.5]
words = ["좋다", "괜찮다", "그렇다", "싫다"]

for temp in [0.1, 0.5, 1.0, 2.0]:
    probs = softmax_with_temp(logits, temp)
    picks = [sample_word(words, probs) for _ in range(10)]
    print(f"\nT={temp:.1f}:")
    for w, p in zip(words, probs):
        bar = "#" * int(p * 25)
        print(f"  {w}: {p:.3f} {bar}")
    print(f"  샘플 10개: {picks}")

Temperature를 0에 가깝게 낮추면 확률 분포는 어떻게 변하나요?

ChatGPT에서 temperature=0으로 설정하면 같은 질문에 항상 동일한 답변이 나온다.

Temperature를 높이면 확률 분포는 어떻게 변하나요?

ChatGPT API에서 코드 생성(정확성 중시)에 적합한 temperature 값은?

다음 빈칸을 채우세요. softmax(logits / ___) # T가 0에 가까울수록 분포가 날카로워짐

softmax(logits / ___)

Temperature 마스터!

key

핵심 용어

🌡️

Temperature

확률 분포 날카로움을 조절하는 하이퍼파라미터

🧊

**T=0.1**

거의 확정적 (코딩, 수학 문제)

💬

**T=0.5**

약간 다양 (일반 대화)

⚖️

**T=1.0**

기본값 (적당한 다양성)

🔥

**T=2.0**

매우 창의적 (브레인스토밍, 시 쓰기)

edit_note

정리 노트

Temperature — 창의성 조절 다이얼 핵심 정리

Temperature 원리

공식
softmax(xᵢ / T) — logits를 T로 나눈 후 Softmax 적용
T↓ (0에 가까움)
분포가 날카로움 — 가장 높은 확률 토큰만 선택 (greedy)
T↑ (큰 값)
분포가 평평해짐 — 모든 토큰이 비슷한 확률 (random)

실전 가이드

T=0 (greedy)
코딩, 수학 — 항상 동일한 답 (확정적)
T=0.5~1.0
일반 대화 — 적당한 다양성 (기본값)
T=1.5~2.0
브레인스토밍, 시 쓰기 — 매우 창의적 (랜덤)

ChatGPT API에서 temperature 파라미터로 직접 조절 가능! 목적에 맞는 T 값을 선택하세요.

image

시각 자료

다이어그램: py-scene-cross-entropy
check_circle

핵심 정리

  • 1Temperature = 확률 분포의 날카로움 조절 다이얼
  • 2T↓ → 확정적(greedy), T↑ → 창의적(random)
  • 3ChatGPT API에서 temperature 파라미터로 직접 조절 가능

퀴즈와 인터랙션으로 더 깊이 학습하세요

play_circle인터랙티브 레슨 시작