推論パラメータと出力のばらつき

推論パラメータと出力のばらつきとは

同じプロンプトを2回投げたのに返ってくる文章が違う。LLMを使い始めて最初に戸惑うのがこれです。バグでも通信エラーでもなく、そういう仕組みで動いているからです。

[[生成AI・LLM]] は「次に来る言葉を予測する」と説明されますが、正確には次の [[トークンとトークナイザ]] の候補ごとに確率を計算しているだけです。その確率のリストから1つを引く工程はサンプリングと呼ばれ、temperature や top-p といった推論パラメータは、このサンプリングを調整するつまみです。

1トークンずつサイコロを振っている

「日本の首都は」に続くトークンの確率が、たとえば次のように出たとします。

候補トークン確率
東京0.92
首都0.04
現在0.02
その他多数0.02

常に最上位を選べば必ず「東京」です。しかし既定の設定では確率に応じてランダムに引くため、まれに別の候補が出ます。さらにLLMは選んだトークンを末尾に足して次の1トークンをまた予測するので、序盤の1回の分岐が以降の文章を丸ごと変えます。「言い回しが少し変わる」で済まず「箇条書きが表になった」「JSONのキー名が変わった」といった構造レベルのブレが起きるのはこのためです。

temperature — 分布の尖り方を変える

temperature は確率分布を再計算し、上位の候補にどれだけ集中させるかを決めます。

設定分布出力の傾向
0に近い上位へ極端に集中堅い・同じ表現を繰り返しがち
0.7前後やや上位寄り会話らしい自然な揺らぎ
1.0モデルが出した分布そのまま基準となる振る舞い
1.0より上下位も拾いやすい多様・意外性が出る

温度を上げると賢くなるわけではなく、モデルが「ここでは来にくい」と判断した語が選ばれやすくなるだけです。上げすぎれば文章は破綻します。指定できる範囲や既定値はAPIごとに違う(上限が1のものも2のものもある)ため、使う前に仕様を確認してください。

top-p と top-k — 候補の数を絞る

temperature が確率の「形」を変えるのに対し、top-p と top-k は候補に残す語そのものを減らします

  • top-k … 確率の高い順にk個だけ残す。k=40なら常に40個
  • top-p … 確率を高い順に足し、合計がpを超えたところで打ち切る。核サンプリングとも呼ばれます

先の例で p=0.9 なら「東京」だけで0.92に達するので候補は1個になり、事実上ブレません。逆に「彼はゆっくりと」の続きのように候補が散っている場面では多くの語が残ります。候補集合が場面ごとに伸び縮みするのが top-p の利点です。調整は片方ずつ。同時に変えるとどちらが効いたか切り分けられません。

temperature=0 でも完全な決定論にはならない

温度を0にすると「毎回いちばん確率が高いトークンを選ぶ」動作(greedy decoding)になり、原理的にはサイコロが消えます。それでも同じ出力が保証されない理由があります。

  • 僅差の逆転 — 1位が0.4801、2位が0.4799のような場面では、GPU上の並列計算で加算の順序が変わるだけの誤差が順位をひっくり返します。1トークン変われば以降は別の文章です
  • 前提の変化 — サービス側でモデルが差し替わる、会話履歴や [[RAG(検索拡張生成)]] の検索結果が変わる、といった要因でも「同じ条件」ではなくなります

seed を指定できるAPIもありますが、多くは「再現しやすくなる」であって完全一致の保証ではありません。temperature=0 はブレを最小化する設定であって決定論の保証ではないと理解し、モデルIDもバージョンまで固定しておきます。

用途別の使い分け

用途目安
分類・情報抽出0〜0.2
要約・翻訳・コード生成0〜0.4
チャット応答0.6〜0.8
アイデア出し0.8〜1.2

答えが1つに決まる処理ほど低く、幅を出したい処理ほど高く、が基本です。

決定論が必要な処理はLLMの外に出す

ここから導かれる設計方針は1つです。同じ入力なら必ず同じ結果でなければならない処理は、パラメータで頑張らずプログラム側へ寄せる。金額の合計や採番は、温度を0にして祈るのではなくコードで計算します([[Excel自動生成]] や [[AgentCore Code Interpreter]] の役割分担も、根拠はこのばらつきです)。

LLMの出力自体は、形式をJSONに固定するよう指示し([[プロンプトエンジニアリング]])、[[JSON Schema]] で検証し、落ちたらどこが不正だったかを添えて投げ直します。「再試行も設計する」定石は、確率的にトークンを選び続ける以上一定の割合で必ず崩れるという前提から来ています。

初学者向けポイント

  • 出力が安定しないとき、まず温度を下げたくなりますが、原因の多くは指示の曖昧さです。「いい感じに」と書いてあれば温度が0でも望む形にはなりません
  • 温度を下げても [[ハルシネーション]] は消えません。低温は「最もありがちな続き」へ寄せるだけで、ありがちなことと事実は別です
  • パラメータを変えたら体感で判断せず、[[LLMアプリの評価とテスト]] の考え方で複数件を流して比べます
  • デモでは高い温度が賢そうに見えますが、業務処理では退屈で予測可能な出力のほうが価値が高いことがほとんどです

関連技術とのつながり

  • [[トークンとトークナイザ]] — サンプリングが1つ選ぶ対象。この記事はその選び方の話
  • [[生成AI・LLM]] — 確率分布を出すところまでがモデルの仕事
  • [[プロンプトエンジニアリング]] — 形式指定と再試行が実践的な対処になる
  • [[ハルシネーション]] — もっともらしさを確率で選ぶ同じ仕組みに由来する現象
  • [[LLMアプリの評価とテスト]] — 揺れる出力を数で測り、変更の良し悪しを判断する
Q: 同じプロンプトでもLLMの出力が毎回変わる直接の理由はどれ?
- [ ] 通信経路が毎回異なるサーバーに振り分けられるから
- [x] 次のトークンの確率分布から1つを確率的に選んでおり、その選択が以降の生成を変えるから
- [ ] モデルが会話のたびに再学習されているから
解説: モデルは候補ごとの確率を出すだけで、そこから1つ選ぶサンプリングにランダム性があります。序盤の1トークンの違いが以降の文章を丸ごと変えます。

Q: top-pがtop-kと異なる点はどれ?
- [x] 確率を高い順に足して合計がpを超えるまでを残すため、候補の数が場面ごとに伸び縮みする
- [ ] 常に上位p個の候補だけを残す
- [ ] 確率分布そのものを再計算して尖らせる
解説: 上位k個で固定するtop-kと違い、top-pはモデルの自信が高い場面では候補が数個に絞られ、迷っている場面では広がります。

Q: temperature=0 にしても出力が完全には一致しないことがある理由として本文が挙げたのはどれ?
- [ ] 温度0では仕様上サンプリングのランダム性が最大になるため
- [ ] 温度0ではモデルが最も確率の低いトークンを選ぶため
- [x] 1位と2位が僅差のとき、並列計算の誤差で順位が入れ替わることがあるため
解説: 温度0は最上位のトークンを選ぶ動作ですが、確率が僅差なら計算誤差で順位が入れ替わり、そこから先の文章が変わります。決定論の保証ではありません。