Temperatureとは?次トークンの選び方を確率で確かめる
同じ入力を与えたのに、LLMの返答が毎回少し違うことがある。モデルが語彙上の候補へ付けた点数を、そのまま最大値だけで決めず、確率に従って次のトークンを抽選するからだ。Temperatureは、抽選前の確率分布の偏りを調整する。
前の記事では、logits [2, 1, 0] をsoftmaxへ通すと、3候補の確率がおよそ [0.665, 0.245, 0.090] になる例を扱った。ここでは同じ点数のままTemperatureだけを変え、何が変わり、何が変わらないかを見る。
logitsを割ってからsoftmaxに入れる
Temperatureを とすると、候補 の確率は次の形で計算できる。
は候補のlogitだ。 なら通常のsoftmaxと同じになる。 なら点数の差が拡大し、高得点の候補に確率が集まる。 なら点数の差が縮まり、低得点の候補にも確率が配られる。
ここで変わるのは確率の配分であり、正のTemperatureだけではlogitsの大小関係は入れ替わらない。最も高い候補は同じでも、抽選時に他の候補が選ばれる頻度は変わる。
3候補で確率を計算する
次のコードは標準Pythonだけで動く。例のlogitsは説明用に手で決めた値で、実在するLLMの出力ではない。
from math import exp
logits = [2.0, 1.0, 0.0] # 候補: 猫、犬、。
def softmax_temperature(logits, temperature): if temperature <= 0: raise ValueError("temperature must be positive") scaled = [value / temperature for value in logits] peak = max(scaled) weights = [exp(value - peak) for value in scaled] total = sum(weights) return [value / total for value in weights]
for temperature in (0.5, 1.0, 2.0): probs = softmax_temperature(logits, temperature) values = ", ".join(f"{p:.3f}" for p in probs) print(f"T={temperature:.1f}: {values} (sum={sum(probs):.3f})")実行結果:
T=0.5: 0.867, 0.117, 0.016 (sum=1.000)T=1.0: 0.665, 0.245, 0.090 (sum=1.000)T=2.0: 0.506, 0.307, 0.186 (sum=1.000) では最有力の「猫」が約86.7%になり、 では約50.6%まで下がる。どちらも各候補の確率は0以上、合計は1だ。peak を引くのは指数計算の数値的なあふれを避けるためで、分布自体は変えない。
Temperatureが低いだけでは出力は固定されない
Temperatureは抽選で使う確率を調整するパラメータだ。低くしても、最上位以外の確率は一般に0にならない。この例の でも「犬」は約11.7%、「。」は約1.6%残る。抽選を続ければ選ばれる可能性がある。
一方、常に最大確率の候補を選ぶ貪欲法では、この3候補の順位はTemperatureを変えても同じなので、選ばれるのは毎回「猫」だ。Hugging Face Transformersの生成設定でも、do_sample=False は貪欲選択、do_sample=True はサンプリングを選ぶ。Temperatureの数値だけで「ランダム生成になる」とは言えない。
は上記の割り算に入れられない。APIによっては「0」を特別に扱う場合があっても、それをこの式へ代入してよいわけではない。利用するサービスの仕様を別途確認する。
正確さのつまみではない
Temperatureを下げれば正しい答えになる、という理解は危うい。モデルが誤った候補を高く採点していれば、その誤った候補へ確率を集中させるだけだ。逆に高くすれば候補は散らばるが、事実確認の仕組みが追加されるわけではない。
文章の変化には、TemperatureのほかにTop-pやTop-kの候補制限、モデルの設定、入力文脈なども関わる。実際のサービスでは利用できるパラメータや組み合わせが異なる。まずは「モデルのlogits」「確率の調整」「候補からの選択」を別の段階として捉えると、設定の意味を見失いにくい。
次はTop-pで候補集合をどのように絞るかを見る。Temperatureが確率の偏りを変えるのに対し、Top-pは抽選に残す候補の範囲を決める。