Seedとは
乱数シード
乱数生成の初期値。同じ値を指定することでLLMの出力サンプリング結果を再現できる
ひとことで言うと
AIの出力のランダムさを決める初期値。同じ値なら同じ結果を再現できる。
概要
Seed(乱数シード)とは、LLMがTemperatureやTop-p等の設定に基づいて次のトークンをサンプリングする際に使う擬似乱数生成器の初期値。 コンピュータの乱数は特定の初期値(シード)から決定的に生成される擬似乱数であるため、他のパラメータと入力プロンプトが同一であれば、同じシード値を指定することで出力を再現しやすくなる。 テストやデバッグ、実験結果の再現性確保などの用途で用いられる。 GPU上の浮動小数点演算には非決定的な要素が残る。そのため、同じシード値を指定しても、実装やハードウェア構成によっては出力が常に一致するとは限らない。 APIによってはシード指定機能自体を提供していない場合もある。また、内部実装の変更により同一シードでも出力が変わりやすく、再現性を厳密に求める用途では注意が必要。
背景
Temperature等による確率的サンプリングを行うLLMは、同じ入力でも実行のたびに異なる出力を返しうる。 この非決定性は創造性の面では有用だが、テストやデバッグ、研究の再現性という観点では障害になる。 Seedを固定できる仕組みは、この非決定性を制御する手段として提供されている。
歴史
2023年11月: OpenAIがChat Completions APIに再現可能な出力(reproducible outputs)機能として`seed`パラメータと`system_fingerprint`を追加し、同じ設定・入力であれば出力を再現しやすくする仕組みを公式に提供した。
アーキテクチャ
内部的には、擬似乱数生成器(PRNG)の初期状態をシード値によって固定し、Temperature・Top-p等に基づく確率的なトークン選択をこの乱数列に従って行う。 シードと全ての生成パラメータ・入力が同一であれば、同じ乱数列をたどり同じトークン列が選ばれやすくなる。
コード例
seedを指定して出力の再現性を高める
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "サイコロを1回振った結果を教えてください。"}],
seed=42,
temperature=0.7,
)
print(response.choices[0].message.content)
print(response.system_fingerprint) # バックエンド構成が変わったかの確認に使える利点
- 同じ設定・シードであれば出力を再現しやすくなり、デバッグやテストに有用
- 実験結果の比較・検証がしやすくなる
- 他のサンプリングパラメータを変更した際の影響を比較しやすくなる
欠点
- モデルの更新やインフラ(GPU構成・バッチ処理等)の違いにより、同じシードでも同一の出力が保証されるとは限らない
- Temperatureが0に近い場合はシードの影響がほぼ無くなる
- 全てのAPI・モデルがシード指定に対応しているわけではない
比較
- Temperature — SeedはTemperature等のサンプリングパラメータと組み合わせて使うことで、確率的な出力を再現可能にする
関連用語
よくある質問
Seedを指定すれば必ず同じ出力になる?
多くの場合再現性が高まるが、モデルの更新やサーバー側の実行環境の違いにより、完全な再現が保証されるとは限らない。
system_fingerprintとは?
OpenAIのAPIが返す、モデルの実行環境(バックエンド構成)を示す識別子。 この値が変化した場合、同じシードを指定していても出力の一致は保証されなくなる、という手がかりになる。
参考文献
- DocumentationOpenAI API Reference: seed