Menu

LLM temperature란? 역할과 설정 방법

Temperature는 언어 모델이 다음 단어를 고를 때 무작위성을 얼마나 쓸지 정하는 값입니다. 각 단어의 확률을 어떻게 바꾸는지, 언제 낮게 또는 높게 설정할지, top_p와는 어떻게 다른지 알아봅니다.

이 페이지의 모든 프롬프트는 수정한 뒤 ChatGPT, Claude 등 AI 앱에서 바로 열 수 있습니다.

Temperature는 언어 모델이 다음 단어를 고를 때 무작위성을 얼마나 쓸지 정하는 숫자입니다. Temperature가 낮으면 모델은 거의 매번 가장 가능성 높은 단어를 고르므로 답변이 집중되고 반복 가능합니다. Temperature가 높으면 확률이 퍼져서 답변이 더 다양해지고 때로는 엉뚱한 곳으로 흘러갑니다. Temperature는 모델이 이미 고려하는 단어들 사이에서 어떻게 고를지를 바꿀 뿐, 모델이 아는 것을 바꾸지는 않습니다.

모델이 다음 단어를 고르는 방법

모델은 토큰을 하나씩 씁니다. 토큰은 단어 하나이거나 단어의 조각입니다(토큰과 컨텍스트 윈도우 참고). 각 단계에서 모델은 어휘 목록의 모든 토큰에 로짓(logit)이라는 점수를 매깁니다. 소프트맥스(softmax)라는 함수가 이 점수를 확률로 바꿉니다. 각 점수에 지수 함수를 적용한 다음 전체 합으로 나누므로, 점수가 높을수록 몫이 커지고 모든 몫을 더하면 1이 됩니다. 그러고 나서 모델은 이 몫에 따라 무작위로 토큰 하나를 뽑습니다.

Temperature는 소프트맥스 바로 앞에 들어갑니다. 모든 점수를 temperature T로 나눕니다.

probability(word) = exp(score / T) / sum of exp(score / T) over all candidates

T가 1보다 작으면 점수 사이의 격차가 커져서 1위 후보가 더 앞서 나갑니다. T가 1보다 크면 격차가 줄어들어 하위 후보들이 따라잡습니다. T = 1이면 모델 본래의 확률이 나옵니다. T = 0이면 나눗셈이 정의되지 않으므로, API는 이를 "항상 1위 토큰을 고른다"로 처리합니다. 이것을 탐욕적 디코딩(greedy decoding)이라고 합니다.

직접 해 보기: temperature 슬라이더

아래 데모는 "내가 가장 좋아하는 프로그래밍 언어는" 뒤에 올 후보 단어 여섯 개를 보여 줍니다. 점수는 이 데모를 위해 고른 설명용 값입니다. 실제 모델은 수만 개 이상의 토큰으로 된 어휘 목록 전체에 점수를 매기고, 언어 이름 하나가 여러 토큰으로 나뉠 수도 있습니다. 계산은 실제와 같습니다. 막대는 여러분이 고른 temperature에서 이 점수들에 소프트맥스를 적용한 값이고, 샘플 버튼은 이 확률에 따라 단어 열 개를 뽑습니다.

내가 가장 좋아하는 프로그래밍 언어는 …
Next word probabilities
Python46%
JavaScript28%
Rust14%
C7.6%
Haskell3.4%
COBOL0.8%
Samples
Press Sample to let the model pick a word ten times.

1.0에서는 Python이 약 46%, COBOL이 1% 미만입니다. 0.5로 내리면 Python은 약 67%로 올라가고 COBOL은 거의 사라집니다. 2.0으로 올리면 Python은 약 32%로 떨어지고 COBOL은 약 4%까지 올라가서, 열 번 뽑기를 세 번 하면 대략 한 번은 COBOL이 적어도 한 번 나옵니다. 절대 일어나지 않는 일도 눈여겨보세요. 어떤 설정에서도 단어의 순위는 그대로입니다. Temperature는 COBOL을 Python보다 가능성 높게 만들 수 없고, 격차를 넓히거나 좁힐 뿐입니다.

실제 답변은 이런 선택이 수백 번 연달아 이어진 것이고, 각 선택은 다음 선택의 컨텍스트가 됩니다. 초반에 특이한 단어 하나가 나오면 그 뒤의 모든 것이 바뀝니다. 그래서 temperature가 높은 답변은 이 데모의 단어 하나가 보여 주는 것보다 훨씬 멀리 흘러갑니다.

temperature를 낮게 또는 높게 쓸 때

작업출발점이유
코드, 버그 수정, SQL낮게, 0~0.3보통 가장 좋은 이어짐이 하나이고, 실행할 때마다 같은 결과를 원한다
추출, 분류, JSON0어떤 변동도 잡음일 뿐이고, 프로그램이 출력을 읽어야 한다
설명, 일상적인 질문제공사 기본값기본값은 일반적인 용도에 맞춰 정해져 있다
브레인스토밍, 이름, 이야기 아이디어기본값 또는 약간 높게서로 다른 선택지를 원한다

주의할 점이 두 가지 있습니다. 첫째, temperature가 낮다고 답이 맞는 것은 아닙니다. 모델이 가장 가능성 높다고 보는 답이 틀렸다면, temperature 0은 그 틀린 답을 매번 일관되게 내놓을 뿐입니다. AI 할루시네이션을 참고하세요. 둘째, 아주 높은 값(최대가 2인 API에서 1을 훨씬 넘는 값)은 가능성 낮은 토큰이 점점 더 자주 뽑히기 때문에 맥락을 잃거나 말이 안 되는 텍스트를 내는 경우가 많습니다.

때로는 무작위성이 바로 목적입니다. 자기 일관성 프롬프팅은 같은 추론 문제를 일부러 0이 아닌 temperature로 여러 번 실행한 다음, 가장 많은 실행이 동의하는 답을 고릅니다.

temperature, top_p, top_k

샘플링을 조절하는 설정이 두 가지 더 있고, API에서는 흔히 temperature 옆에 함께 있습니다.

top_p(뉴클리어스 샘플링)는 확률의 합이 p가 될 때까지 가장 가능성 높은 토큰들만 남기고, 그 안에서 샘플링합니다. 데모의 숫자로 temperature 1에서 보면, Python, JavaScript, Rust의 합이 약 88%이고 C를 더하면 90%를 넘습니다. 그래서 top_p = 0.9이면 모델은 이 네 개 안에서만 샘플링하고, Haskell과 COBOL은 절대 나오지 않습니다. temperature와 달리 top_p는 상황에 맞춰 변합니다. 모델이 확신할 때는 적은 토큰만 남고, 확신하지 못할 때는 많은 토큰이 남습니다.

top_k는 가장 가능성 높은 토큰을 정해진 개수, 예를 들어 상위 40개만 남깁니다. 제공하는 API도 있고 그렇지 않은 API도 있습니다.

제공사들은 보통 temperature와 top_p 중 하나만 바꾸라고 권장합니다. 두 효과가 겹치면 예측하기 어렵기 때문입니다.

API에서 temperature 설정하기

채팅 앱은 이 설정을 숨기지만 API에서는 매개변수로 받습니다. 범위는 제공사마다 다릅니다. OpenAI의 Chat Completions API는 0에서 2까지, Anthropic의 Messages API는 0에서 1까지 받습니다. 일부 추론 모델은 기본값만 받습니다.

from openai import OpenAI

client = OpenAI()
MODEL = "your-model-id"  # e.g. from your provider's model list

response = client.chat.completions.create(
    model=MODEL,
    messages=[{"role": "user", "content": "Write a SQL query that counts orders per customer."}],
    temperature=0.2,
)
print(response.choices[0].message.content)
import anthropic

client = anthropic.Anthropic()
MODEL = "your-model-id"  # e.g. from your provider's model list

message = client.messages.create(
    model=MODEL,
    max_tokens=500,
    temperature=0.2,
    messages=[{"role": "user", "content": "Write a SQL query that counts orders per customer."}],
)
print(message.content[0].text)

채팅 앱이 temperature를 숨기는 이유와 대안

ChatGPT, Claude, Gemini 앱은 샘플링 설정을 대신 정하고 슬라이더를 보여 주지 않습니다. 덕분에 앱이 단순해지고, 대부분의 요청에서는 프롬프트의 표현을 바꾸는 것이 샘플링 설정보다 답변을 훨씬 크게 바꿉니다.

그러니 채팅 앱에서는 프롬프트가 조절 장치입니다. 답을 하나만 요청하면 모델의 첫 번째 선택에 가까운 답이 나옵니다. 서로 다른 답을 여러 개 요청하면, 모델이 첫 번째 선택을 피할 이유가 생기므로 temperature와 상관없이 다양한 답이 나옵니다. 탭을 바꾸고 제품을 바꿔 가며 차이를 확인해 보세요.

Fill in
습관 관리 앱의 이름을 하나 추천해 줘.
Try it
Example replyReplies vary between models and runs.

꾸준히. 짧고 기억하기 쉬우며, 사람들을 계속 돌아오게 만드는 매일의 연속 기록을 떠올리게 합니다.

채팅 앱의 다시 생성 버튼은 같은 프롬프트로 새 답변을 샘플링하므로, 답변이 얼마나 달라지는지 빠르게 확인할 수 있습니다. 원하는 것보다 답변이 많이 달라진다면, 해결책은 대개 더 구체적인 프롬프트입니다. 정확한 할 일은 좋은 답의 범위를 좁히고, 그러면 실행 결과가 서로 비슷해집니다. 무엇을 더하면 되는지는 프롬프트 작성법에서 다룹니다.

자주 묻는 질문

LLM에서 temperature란 무엇인가요?

Temperature는 다음 토큰을 고르는 선택이 얼마나 무작위적인지 정하는 샘플링 설정입니다. 모델은 다음에 올 수 있는 모든 토큰에 점수를 매기고, 이 점수를 확률로 바꾸기 전에 temperature로 나눕니다. 값이 낮으면 1위 후보가 압도하고, 값이 높으면 확률이 평평해져 가능성이 낮은 토큰도 더 자주 뽑힙니다.

코딩에는 temperature를 얼마로 해야 하나요?

코드, 데이터 추출, 정답이 하나인 작업에는 0에서 0.3 사이의 낮은 값이 흔한 출발점입니다. 가장 가능성 높은 결과와 반복 가능한 결과를 원하기 때문입니다. 이름 브레인스토밍이나 다른 설계안처럼 다양성이 필요할 때 값을 올리세요. 일부 추론 모델은 기본값만 받으므로 제공사 문서를 확인하세요.

temperature와 top_p는 어떻게 다른가요?

Temperature는 확률 분포 전체의 모양을 바꿉니다. 뉴클리어스 샘플링이라고도 하는 top_p는 분포를 잘라 냅니다. 확률의 합이 p가 되는 가장 작은 토큰 집합에서만 샘플링하므로, top_p = 0.9는 가능성이 낮은 토큰들의 긴 꼬리를 버립니다. 제공사들은 보통 둘 중 하나만 조정하고 나머지는 기본값으로 두라고 권장합니다.

temperature를 0으로 하면 출력이 항상 같나요?

거의 같지만 완벽하지는 않습니다. 0에서는 모델이 매 단계에서 가장 가능성 높은 토큰을 고르므로 반복 실행해도 보통 똑같거나 아주 비슷합니다. 하지만 제공사 서버의 작은 수치 차이로 가끔 토큰 하나가 바뀔 수 있고, 토큰 하나가 달라지면 답변의 나머지가 다른 길로 갈 수 있습니다.

ChatGPT나 Claude에서 temperature를 바꿀 수 있나요?

채팅 앱에서는 안 됩니다. 앱이 샘플링 설정을 대신 정하고 temperature 조절 기능을 보여 주지 않습니다. API나 OpenAI Playground, Anthropic Console, Google AI Studio 같은 개발자 도구에서는 설정할 수 있습니다. 채팅 앱에서는 프롬프트 자체에서 다양성이나 일관성을 요청하세요.

Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기