AIチャットに同じ質問を投げかけたとき、昨日と今日で言い回しが変わったり、まったく別の切り口で回答されたりして不思議に思ったことはないでしょうか。電卓のように常に決まった答えを返すコンピュータが、なぜ同じ入力に対して異なる言葉を返すのか。その鍵を握っているのが、言語モデルが出力する言葉の確率を調整する「温度パラメータ(Temperature)」という設定値です。

AIは言葉をどう選び、温度によって何が変わるのか。数式の仕組みや「温度0」の実装、計算機の制約まで、その本質を分かりやすく解き明かします。

---

同じ候補スコアで温度を変えた場合の確率分布の傾きを示す概念棒図
解説図同じ候補スコアで温度を変えた場合の確率分布の傾きを示す概念棒図(模式図)。

1. なぜ同じ質問でも回答が変わるのか:確率で言葉を紡ぐ仕組み

大規模言語モデル(LLM)が文章を組み立てる基本原理は、「これまでに入力・生成された文字列の文脈を踏まえ、次に来る確率が最も高い言葉(トークン)を一つずつ順番に予測していく」というものです。この仕組みを「自己回帰(Autoregressive)型生成」と呼びます。

AIは単語同士をしりとりのように直前の1語だけで単純につなげているわけではありません。自己アテンション(Self-Attention)機構などの働きにより、入力された質問文の全体やそれまでに生成した文脈全体を常に参照しながら、次に来る候補単語の確からしさを計算しています。

では、なぜ「同じ入力」から「違う文章」が生まれるのでしょうか。その理由は、多くのAIシステムが「最も確率が高い言葉だけを常に選び続ける」のではなく、「計算された確率の分布に基づいて、サイコロを振るように次の言葉を選び出す方式(確率的サンプリング:Temperature sampling)」を採用しているからです。

たとえば、ある文脈において次の候補として「東京」が64%、「京都」が24%、「大阪」が9%、「横浜」が3%という確率で計算されたとします(※これは確率の性質を説明するための概念例です)。このとき、最も確率が高い「東京」が選ばれやすいのは確かですが、サイコロを振る以上、24%の確率で「京都」が選ばれることもあれば、9%の確率で「大阪」が選ばれることもあります。

そして、一度ある単語が選ばれると、続く文章の文脈そのものが変化します。最初の単語が「東京」になった場合と「京都」になった場合では、その次に来る言葉の予測確率が連鎖的に変わっていくため、最終的に出力される文章全体が大きく枝分かれしていくのです。

なお、AIの出力が変化する要因は、この確率的サンプリングだけとは限りません。常に確率第1位の単語だけを選び取る決定論的な生成方式(貪欲法:Greedy Search)を採用した場合、サンプリングによるランダム性は生じません。それにもかかわらず出力に差が生じるケースについては、後の節で詳しく解説する並列計算や実行環境の要因が関わってきます。まずは「AIは候補単語の確率を計算し、その確率分布に従って言葉を選んでいる」という基本を押さえましょう。

---

2. ロジットとソフトマックス関数:言葉の確率が決まる計算過程

AIがサイコロを振るための「確率分布」は、一体どのようにして作られるのでしょうか。その背後には、ニューラルネットワークが出力する生のスコアと、それを確率へと変換する数学的な関数が存在します。

AIが文脈を読み取って次の単語を予測する際、モデルの内部ではまず、あらかじめ登録されている膨大な語彙(数万種類以上の単語や文字の単位)のそれぞれに対して、予測の確からしさを表す数値が出力されます。この生の数値を「ロジット(Logit)」と呼びます。

ロジットは計算の過程で出力される実数であり、正の数もあれば負の数もあり、0になることもあります。また、すべての単語のロジットを足し合わせても、合計が1(100%)になるわけではありません。そのため、そのままでは「確率」として単語の選択に利用することができません。

そこで使われるのが「ソフトマックス関数(Softmax function)」です。ソフトマックス関数は、各候補のロジットを自然対数の底 e(ネイピア数:約2.718)の指数関数にかけて正の値へと変換し、その総和で各値を割ることで、すべての候補の合計がちょうど 1.0(100%)になるような確率分布へと正規化します。

理解を深めるために、語彙が4つの候補(候補1〜候補4)だけからなる架空のモデルを考えてみましょう。それぞれのロジットが以下のように算出されたとします。

  • 候補1のロジット z_1 = 2.0
  • 候補2のロジット z_2 = 1.0
  • 候補3のロジット z_3 = 0.0
  • 候補4のロジット z_4 = -1.0

通常のソフトマックス関数では、各ロジット z_i に対して \exp(z_i) を計算し、その合計値で割ることで確率を求めます。この計算により、ロジットの大小関係を維持したまま、きれいな確率の比率が得られます。

そして、この記事の主役である「温度パラメータ(T)」は、このソフトマックス関数の内部に組み込まれます。具体的には、指数関数にかける直前の段階で、各ロジット z_i を温度 T で割り算するのです。

p_i = \frac{\exp(z_i / T)}{\sum_{j} \exp(z_j / T)}

数式上の定義として、温度 T は必ず正の実数(T > 0)でなければなりません。このたった一つの割り算が、AIの出力の性質を大きく変化させることになります。

---

3. 温度パラメータ(T)は何を変えるのか:差の拡大と平坦化

日常会話の比喩では「温度を上げるとAIが柔軟になり、下げると真面目になる」などと表現されがちですが、数式が実際に行っている処理は明確です。

温度 T による除算が変化させるのは、各スコアの絶対的な大きさそのものではなく、「候補同士のスコアの格差(差)」です。除算によって広がった、あるいは縮まった格差が、その後の指数関数 \exp によって極端に強調されたり緩和されたりすることで、最終的な確率分布の形状が変化します。

先ほどの架空の4候補(固定ロジット:z = [2.0, 1.0, 0.0, -1.0])を使い、代表的な温度設定において確率がどのように変わるかを具体的に見てみましょう。

低い温度(0 < T < 1、例:T = 0.5)の効果

温度を 0.5 に設定すると、各ロジットを 0.5 で割ることになります。これは数式上、すべてのロジットを「2倍」することと同じです。 もともと候補1(2.0)と候補2(1.0)の差は 1.0 でした。しかし、それぞれを 0.5 で割ると 4.0 と 2.0 になり、その差は 2.0 へと拡大します。

指数関数は入力値が大きくなるほど急激に増大するため、差が広がった状態で \exp を適用すると、上位候補と下位候補の数値の開きは圧倒的になります。計算結果は以下のようになります。

  • 候補1(ロジット 2.0):86.50%
  • 候補2(ロジット 1.0):11.71%
  • 候補3(ロジット 0.0):1.58%
  • 候補4(ロジット -1.0):0.21%

このように、温度を下げるとスコア同士の差が広がり、最上位候補に確率が極端に集中しやすくなります。下位候補が選ばれる余地はわずかになり、何度サンプリングしても上位の単語が選ばれやすくなります。

ただし、ここで重要な注意点があります。もし2つの候補のロジットがまったく同じ値(同点)であった場合、いくら温度を下げても差はゼロのままであり、両者の確率比は変わりません。また、温度を低くしたからといって、AIの出力が論理的になったり事実として正確になったりすることが保証されるわけではありません。モデルが誤った知識に基づいて高いロジットをつけていれば、その誤った単語に確率が集中するだけです。

標準的な温度(T = 1.0)

温度が 1.0 の場合、ロジットはそのまま(z_i / 1.0 = z_i)でソフトマックス関数に渡されます。

  • 候補1:64.39%
  • 候補2:23.69%
  • 候補3:8.71%
  • 候補4:3.21%

最上位の候補1が約64%と優勢ですが、約24%の確率を持つ候補2や、約9%の候補3も現実的な選択肢として残ります。AIモデルが本来学習したスコアのバランスがそのまま反映される基準状態です。

高い温度(T > 1、例:T = 2.0)

温度を 2.0 に上げると、各ロジットは半分(z_i / 2.0)になります。候補1と候補2の差は 1.0 から 0.5 へと縮まります。 差が縮まることで、指数関数を通した後の数値の開きが小さくなり、確率分布は全体的に平坦(フラット)に近づきます。

  • 候補1:45.51%
  • 候補2:27.60%
  • 候補3:16.74%
  • 候補4:10.15%

候補1の確率は45%程度まで低下し、下位だった候補3や候補4が選ばれる可能性が上がります。これにより、普段はあまり選ばれない単語が文章に混ざりやすくなり、生成される文章の表現の幅が広がります。

INTERACTIVE

実際に動かして確かめる

条件や数値を変え、本文で説明した関係を確認できます。
表示値は仕組みを理解するための学習用モデルです。大きな画面で使う

インタラクティブツールの見方と前提条件

上に配置されたツール ai-temperature--tool-01 は、ここで解説した固定ロジット [2.0, 1.0, 0.0, -1.0] に対する各温度(T = 0.5, 1.0, 2.0)の確率分布を視覚的に比較・確認できる教材です。スライダーや切り替えによって、数式通りの確率値(T=0.5 での約86.50%、T=1.0 での約64.39%、T=2.0 での約45.51%)がグラフとして再現されることを確かめてみてください。

同時に、このツールの前提と限界も把握しておく必要があります。このツールは理解を助けるための「4候補の静的な架空モデル」です。実際の言語モデルでは、数万語に及ぶ語彙全体に対してこの計算が毎ステップ実行され、生成された単語に応じて次のロジット群が動的に変化し続けます。また、ツール内にある「T=0」の表示は、次節で解説するように数式計算ではなく別枠の動作(\operatorname{argmax} による最大値の確定的選択)として設計されています。

---

4. 「温度0」の真実:数式の制約とシステムの実装

AIの設定画面や解説記事で、「完全に回答を固定したいなら温度を0にすればよい」という説明を見かけることがあります。しかし、技術的な厳密さを持って見ると、ここには数式と実装のギャップが存在します。

1. 数学的な制約:ゼロ除算の不可能性

第一に、ソフトマックス関数の数式 p_i = \exp(z_i / T) / \sum \exp(z_j / T) において、温度 T に直接 0 を代入することは数学的に不可能です。分母が 0 になる除算(ゼロ除算)は定義されておらず、計算機でもエラーを引き起こします。したがって、数式としての温度サンプリングは常に「T > 0」を大前提としています。

先ほどのツール ai-temperature--tool-01 においても、T=0 を選択した際は数式の割り算を行っているのではなく、「ロジットが最大の候補1(スコア 2.0)を確率100%として確定的に選択する」という別枠の処理(\operatorname{argmax})として結果を表示しています。

2. ライブラリでの実装:貪欲法への切り替え

第二に、深層学習の実装現場における扱いです。広く普及しているオープンソースライブラリの Hugging Face transformers では、温度調整を担う内部クラス TemperatureLogitsWarper は厳密に正の浮動小数点数(T > 0)しか受け付けません。

ライブラリ利用者が確率的な揺らぎを排除し、常に最高スコアの単語だけを選びたい場合は、温度を 0 にするのではなく、生成設定においてサンプリングフラグを無効化(do_sample=False)します。これにより、ソフトマックス計算や確率的サンプリングをスキップし、毎ステップ最もロジットの高いトークンを愚直に選び取る「貪欲法(Greedy Search)」の処理ルーチンへと直接切り替わる設計になっています。

商用チャットサービスやクラウドAPIの中には、パラメータとして temperature: 0 の入力を許容しているものもあります。これらはシステム内部でゼロ除算を行っているのではなく、ユーザーの便宜のために「T=0 が指定されたら内部で貪欲法フラグを有効にする」といった分岐処理を仕様として設けているのです。

3. 温度0でも回答がブレる理由:並列浮動小数点演算と実行環境

サンプリングを行っていないにもかかわらず結果が揺らぐ主たる要因は、GPUなどのハードウェアによる「並列浮動小数点演算の丸め誤差」にあります。

数学の計算では、足し算の順序を入れ替えても結果は変わりません(結合法則:(a + b) + c = a + (b + c))。しかし、コンピュータが扱う有限精度の浮動小数点数(単精度 float32 や半精度 fp16/bf16 など)では、各計算の末尾でごくわずかな丸め誤差(切り捨てや四捨五入)が発生します。そのため、足し合わせる順番が変わると、最下位ビットの計算結果に微小な差が生じます。

大規模な言語モデルの推論では、数千から数万ものGPUコアが並列に動作して膨大な積和演算や集約処理を行います。このとき、スレッドの割り当てや計算順序が実行ごとに微妙に変動すると、最終的に出力されるロジットの値が小数点以下の極小の桁で揺れ動くことがあります。もし2つの候補単語が極めて僅差のスコアを競い合っていた場合、この微小な計算順序の差によって順位が入れ替わり、最高スコアの単語が切り替わってしまうのです。

さらに、実行されるマシンのGPUアーキテクチャの違い、CUDAドライバや深層学習ライブラリのバージョン差異、推論エンジンのバッチ処理の最適化方針などによっても決定性は影響を受けます。PyTorchの公式ドキュメント(再現性に関する注意事項)でも示されている通り、深層学習において完全な再現性を得るためには、乱数シードの固定だけでなく、決定論的アルゴリズムの強制指定やハードウェア・環境の一致といった厳格な条件を揃える必要があります。

そして、温度を0にして出力を1通りに固定できたとしても、それは「モデルがその時点で最も確信度が高いと判断した単語を出し続けた」に過ぎず、出力された内容の論理性や事実としての正しさが保証されるわけではありません。

---

5. コンピュータの限界を越える計算技術:オーバーフロー防止のシフト処理

温度パラメータを数式通りにプログラムで計算しようとするとき、工学的に避けて通れない重大な壁があります。それが「指数のオーバーフロー(計算可能範囲の超過)」という問題です。

float32の表現限界と指数の急増

一般的なコンピュータの深層学習計算では、32ビット浮動小数点数(float32)が多く用いられます。float32が表現できる正の実数の最大値は、およそ 3.4 \times 10^{38} です。

一見すると非常に巨大な数値に見えますが、指数関数 \exp(x) は急激に増大します。自然対数の底 e \approx 2.718 を累乗していくと、x \approx 88.7 の時点で早くも e^{88.7} \approx 3.4 \times 10^{38} に達し、表現限界の天井を突き破ってしまいます。

もしモデルが出力したロジットの中に大きな値があったり、あるいは非常に小さな温度(たとえば T = 0.01)が設定されて z_i / T = 1.0 / 0.01 = 100 となったりした場合、単純に \exp(z_i / T) を計算すると即座にオーバーフローを起こします。計算結果は無限大(inf)となり、ソフトマックスの分子も分母も inf になることで、最終的な確率は計算不能を表す NaN(Not a Number)へと崩壊してしまうのです。

数値安定化処理(Shifted Softmax)の数学

この破綻を防ぐために、深層学習ライブラリでは「数値安定化(Numerical Stabilization)」と呼ばれる工夫が標準的に施されています。それが「最大値を減算するシフト処理」です。

ロジットの集合 z = [z_1, z_2, \dots, z_n] の中から、まず最大値 m = \max(z) を見つけ出します。そして、すべてのロジットからこの最大値 m を差し引いてから、温度除算と指数計算を行うのです。

p_i = \frac{\exp\left(\frac{z_i - m}{T}\right)}{\sum_{j} \ exp\left(\frac{z_j - m}{T}\right)}, \quad m = \max(z)

この式変形を行っても、計算される確率そのものは元のソフトマックス関数と完全に一致します。指数の法則により \exp((z_i - m)/T) = \exp(z_i / T) \cdot \exp(-m / T) と分解でき、分子と分母の両方に共通して現れる定数項 \exp(-m / T) が約分されて相殺されるからです。

すべての候補から最大値 m を引くため、変換後の値 (z_i - m) は最大である候補においてちょうど 0 になり、それ以外のすべての候補では必ず負の数になります。最大の候補に対する指数計算は \exp(0 / T) = \exp(0) = 1.0 となり、他の候補はすべて \exp(\text{負の数}) < 1.0 となります。

つまり、指数計算の対象となる値が 1.0 を超えることがなくなるため、どれほど巨大なロジットが入力されても、どれほど小さな温度が設定されても、float32の限界である 3.4 \times 10^{38} を超えてオーバーフローを起こす危険が完全に排除されます。

数値安定化の限界

ただし、このシフト処理も万能ではありません。 正のオーバーフローは防止できますが、最大値から極端に離れたロジットを持つ下位候補の場合、(z_i - m)/T が大きな負の数になり、\exp の計算結果が小さすぎて表現限界を下回る「アンダーフロー(数値が 0.0 に丸められる現象)」が発生することがあります。確率計算において極小値が 0 になることは通常深刻な害を及ぼしませんが、厳密な微小確率の保持には限界があります。また、データ自体の異常や不適切な入力値を根本から修復できるわけではない点には留意が必要です。

---

6. 温度と他の生成パラメータの関係および実践的な活用法

実際の言語モデルの生成制御では、温度パラメータ単体だけでなく、「Top-kサンプリング」や「Top-p(Nucleus:核)サンプリング」と呼ばれる他のパラメータと組み合わせて利用されるのが一般的です。

Top-k / Top-p との役割分担と処理順序

これら2つの手法の本来の目的は、「確率が著しく低い不自然な単語の候補群を切り捨てる(枝刈りする)」ことにあります。

  • Top-k:確率(またはロジット)が高い順に上位 k 個の単語だけを残し、それ以外の候補を除外します。
  • Top-p(核サンプリング):上位から確率を足し合わせていき、その累積確率が指定したしきい値 p(例:0.9 や 0.95)に達するまでの最小限の候補群だけを動的に残し、残りの長い裾野(ロングテール)を切り捨てます(Holtzman et al., 2019)。

多くの推論システム(Hugging Face transformers など)における標準的な処理順序では、まず温度パラメータ T を適用してロジットを除算し、全体の確率分布の傾きを調整します。その後に、調整された分布に基づいて Top-k や Top-p による足切りフィルタリングが行われ、残った候補の中で確率を再正規化してサイコロが振られます。

温度パラメータが「確率分布全体のメリハリ」を変える役割を持つのに対し、Top-kやTop-pは「不自然な外れ値の単語が紛れ込むリスクを足切りで防ぐ」役割を担っており、両者は補完関係にあります。

実践的な活用のアプローチ

AIを活用する際、「要約タスクは温度0.2、創作小説は温度0.8」といった固定的な推奨値の表を見かけることがあります。しかし、こうした数値を絶対的なルールとして鵜呑みにするのは推奨されません。

第一に、温度パラメータはAIの内部知識や論理的思考能力そのものを書き換えるパラメータではありません。温度をいくら上げても、AIの知識が増えるわけではなく、単に「計算された予測確率において、普段は選ばれない下位の単語が選ばれやすくなっている」に過ぎません。

第二に、「温度を上げるとハルシネーション(事実に基づかないもっともらしい嘘)が増える」という説も、単純な因果関係として断定することはできません。温度を下げて決定論的な出力にしたとしても、モデルの知識不足やプロンプトの不備によって誤った情報が出力されることは頻繁にあります。

したがって、実務において温度パラメータを調整する際は、以下の実践的なアプローチをとることが有効です。

  1. 提供元のデフォルト値を起点にする:まずはモデルやサービスの開発元が推奨・設定している基準値(多くの場合 0.7 前後)から試し、基準となる出力を確認する。
  2. 目的の多様性に応じて段階的に振る:同じ指示に対して異なるアイデアや表現のバリエーションを多く出したい場合は少しずつ温度を引き上げ、ブレを抑えて定型的な形式に揃えたい場合は少しずつ温度を下げて比較する。
  3. 「多様さ」と「正確性」を切り離して評価する:温度の調整だけで事実誤認をなくそうとするのではなく、事実の担保はプロンプトでの制約指示や外部情報の参照(RAGなど)で行い、温度はあくまで表現の揺らぎや選択肢の広がりの調整役として独立して活用する。

---

7. よくある疑問(FAQ)とまとめ

よくある疑問(FAQ)

Q1. 温度パラメータを調整すると、AIの知識や推論の正確さそのものが向上しますか? いいえ、向上しません。温度パラメータはモデルが計算した既存のロジット(スコア)の比率を調整し、次の言葉を選ぶサイコロの出目を偏らせるだけの仕組みです。モデル内部の知識そのものを変化させるわけではないため、温度を変えても知能や事実の正しさが根本的に変わることはありません。

Q2. 完全に毎回同じ回答を再現したい場合、温度を0(または貪欲法)にするだけで確実ですか? それだけでは不十分な場合があります。温度を0にして貪欲法に切り替えることでサンプリングのランダム性は消えますが、GPUの並列計算による浮動小数点の丸め誤差や、マシンのハードウェア・ドライバ・ライブラリのバージョンの違いによって、僅差のロジットが入れ替わる可能性があるためです。厳密な再現性を確保するには、実行環境の完全な統一と決定論的設定が必要です。

Q3. Top-pやTop-kを設定していれば、温度パラメータは調整しなくてもよいですか? 目的によりますが、両者は役割が異なります。Top-kやTop-pは低確率な候補を足切りする「候補数の制限」であり、温度は残った候補同士の「確率のメリハリ」を調整する設定です。Top-pで上位候補を絞り込んだ上で、それらの候補からどれくらい冒険的に選ぶかを温度で制御するなど、併用することでよりきめ細かな出力制御が可能になります。

まとめ

AIが同じ質問に対して異なる答えを返すのは、言葉を紡ぐ過程で確率に基づいて候補を選び取る「確率的サンプリング」を行っているからです。そして温度パラメータは、ソフトマックス関数内でスコアの格差を縮小・拡大させることで、出力の集中と多様性を司っています。

数式上の厳密な条件やハードウェアの特性を正しく把握しておくことは、過度な誤解を排し、AIという道具を自らの意図通りに使いこなすための確かな土台となります。

出典・参考資料