Re Reference AI

技術

Temperatureとは

温度パラメータ

LLMの出力トークン選択のランダム性を調整する、確率分布のサンプリングパラメータ

LLMデコーディングサンプリング

ひとことで言うと

AIの答えをどれくらい決まりきったものにするか、ランダムにするかを調整する設定。

概要

Temperature(温度パラメータ)とは、LLMが次のトークンを生成する際に、出力の確率分布のばらつき具合を調整するサンプリングパラメータ。 モデルは各トークン候補に対してスコア(ロジット)を計算した後、softmax関数で確率分布に変換するが、Temperatureはこの変換前にロジットを割る形で作用する。 値を低くする(0に近づける)ほど最も確率の高いトークンを選びやすくなり出力が決定的で一貫した内容になる一方、値を高くするほど確率の低いトークンも選ばれやすくなり、出力の多様性・創造性が増す代わりに一貫性や正確さが下がりやすくなる。 一般的な対話用途では0.7前後の値がよく使われる一方、コード生成や事実に基づく回答を求める場面では0に近い低い値、創作や発想支援では高めの値を選ぶ傾向がある。

背景

常に最も確率の高いトークンだけを選ぶ生成は、出力が単調になりやすく同じ言い回しの繰り返しに陥りやすい。 Temperatureは、確率分布の形状そのものを調整可能にすることで、用途に応じた決定性と多様性のバランス調整を実現するために導入された。

アーキテクチャ

トークン候補のロジットziを、Temperature Tで割ってからsoftmaxへ入力し確率分布を計算する(softmax(zi / T))。 T=1では元のモデルが学習した分布のまま出力され、T<1では分布が尖り(決定的に)、T>1では分布が平坦(ランダムに)なる。 T→0の極限では、常に最も確率の高いトークンを選ぶ貪欲法(greedy decoding)に近づく。

コード例

temperatureを指定してAPIを呼び出す

from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "AIについての短いキャッチコピーを1つ考えてください。"}],
    temperature=0.9,  # 値を上げると出力の多様性が増す
)

print(response.choices[0].message.content)

利点

  • タスクの性質に応じて出力の決定性と多様性のバランスを調整できる
  • 追加学習を必要とせず、推論時のパラメータ変更だけで挙動を制御できる
  • 実装がシンプルで、ほぼ全てのLLM APIで共通してサポートされている

欠点

  • 値を高くしすぎると、文法的に不自然な文や事実に基づかない出力が増えやすい
  • 最適な値はタスクやモデルによって異なるため、実験しながら調整する必要がある
  • Top-p等の他パラメータと同時に調整すると、相互作用によって挙動を予測しにくくなる

比較

  • Top-pTemperatureとTop-pはどちらも出力のランダム性を調整するサンプリングパラメータで、しばしば併用される
  • Top-kTemperatureとTop-kも出力候補の選び方を調整する目的で組み合わせて使われることが多い
  • デコーディングTemperatureは、デコーディングにおける確率分布のばらつきを調整するパラメータの1つ
  • ビームサーチビームサーチが確率の高い系列を追求するのに対し、Temperatureによるサンプリングは出力に多様性を持たせる方向のパラメータ

関連用語

Top-pTop-kLLMSeedデコーディングビームサーチ

よくある質問

Temperatureは何に設定すればいい?

事実に基づく正確な回答が必要なタスクでは低め(0〜0.3程度)、創作や多様なアイデア出しには高め(0.7〜1.0程度)が目安とされるが、最適値はタスクやモデルによって異なる。

Temperatureを0にすれば毎回全く同じ出力になる?

ほぼ決定的な出力に近づくが、GPU上の浮動小数点演算の非決定性などにより、同一の出力が常に保証されるとは限らない。

参考文献

関連Zenn記事