同じ質問でも答えが変わる原因は、計算順序とバッチ処理

生成AIを利用する際、同じ質問を繰り返しても出力が微妙に異なることがあります。これは“非決定性(nondeterminism)”と呼ばれる現象で、従来はGPUの並列処理や計算精度の問題が原因とされてきました。
しかしながら、Thinking Machines Lab が発表した論文「Defeating Nondeterminism in LLM Inference」によれば、非決定性の本質はバッチ処理の方法によって計算順序が変化する「バッチ依存性」にあることが確認されました。
さらに同論文では、入力のまとめ方に依存せず常に同一の結果を返す「バッチ不変カーネル」を設計することで、問題が解決できることが示されています。
この記事のポイント
- LLMの出力が毎回違うのは「AIの気まぐれ」ではなく、内部計算の仕組みが原因
- 特に大きな要因は、処理のまとめ方で結果が揺らぐ「バッチ依存性」
- 研究者が開発した「バッチ不変カーネル」により、同じ入力なら必ず同じ結果を再現可能に
【出典元】Defeating Nondeterminism in LLM Inference
非決定性はどんなときに起こるのか
温度0でも答えが変わる
AIは答えを出すときに「温度」という数値で“どれくらいランダムにするか”を決めています。温度を高くすると答えがゆらぎやすく、低くすると安定します。通常は温度を0にすれば、必ず「一番ありそうな答え」だけを選ぶので、毎回同じになるはずです。ところが実際には、温度0でも答えが変わることがあります。
従来の説明:GPUと浮動小数点
並列処理の影響
GPUは一度に大量の計算を処理するため、その順序が変われば答えもブレると考えられてきました。
例えば、料理を何人かで分担して作る場合、同じレシピでも順番が少し変わると味が微妙に違ってしまうように、計算の進め方の違いが答えの揺らぎを生むイメージです。
浮動小数点の性質
コンピュータは私たちのように「0.1 + 0.2 = 0.3」とスッキリ計算できません。内部では近似的な数字で処理しているため、計算の順序によって少しずつズレが生じます。これを「非結合性」と呼び、その誤差が積み重なって結果に差が出るのです。
ただし、GPUの行列演算を繰り返しても毎回同じ結果になるケースも確認されており、この説明だけでは不十分です。
新たに判明した原因:バッチ依存性
バッチ処理とは?
AIを動かすサーバーは、効率を上げるために到着した複数のリクエストをまとめて一度に処理することがあります。これをバッチ処理と呼びます。リクエストが少ないときは1件ずつ、集中して届いたときは複数件まとめて処理されます。
なぜ問題になるのか
ただし、まとめ方が変わると、内部の計算手順や足し算の順序が変化する場合があります。その結果、同じ質問をしているのに答えが少しずつ揺らぐことがあります。
本来は、どのようにまとめて処理しても結果が変わらないことが望まれ、これを「バッチ不変性がある」と呼びます。逆に、バッチのまとめ方によって結果が変わってしまう場合を「バッチ不変性がない」といいます。
解決策:バッチ不変カーネル
研究チームは「どのようにリクエストをまとめて処理しても、必ず同じ答えを返す仕組み」を作り直しました。これを バッチ不変カーネル(batch-invariant kernel) と呼びます。
どんな処理を施したのか
- RMSNorm(正規化の処理):文章を扱いやすい形に整える計算
- 行列演算(matrix multiplication):数字の表を掛け合わせて情報を組み合わせる計算
- アテンション(attention mechanism):文章の中でどの部分に注目するかを決める仕組み
どのように直したのか
これらの計算において、足し算を行う順番を固定しました。こうすることで、入力を一つずつ処理しても、複数まとめて処理しても、必ず同じ結果になるようにしました。
この改良によって、同じ入力を繰り返し与えても毎回まったく同じ出力が得られるようになりました。つまり、LLMの推論を完全に再現できるようになったのです。
まとめ
LLMの出力が毎回違うのは、AIが気まぐれだからではなく、内部の計算方法に原因があります。特に「バッチ処理の違い」が大きな要因であり、研究者はそれを克服する方法を開発しました。これにより、再現性のある推論が可能となり、AIの信頼性はさらに高まっていくでしょう。
下記記事では、AIに関する専門用語をまとめた用語集を公開しています。理解を深めたいときにお役立てください。
▶︎AI用語解説(和文・英文索引)◀︎