コンピューターの計算は決まった規則に従う。それでも、同じプログラムの結果が機器や実行ごとに少し変わることがある。有限の桁で行う計算と、処理を実行する順序が関わっている。
足し算の順序が、丸め誤差を変える
実数はコンピューターの中で有限のビット数に近似される。非常に大きな数へ小さな数を足すと、小さい方の情報が丸めで失われる場合がある。このため、(a+b)+cとa+(b+c)が、計算機上で完全には一致しないことがある。
多数の値をGPUなどで並列に足す場合、どの組から足すかが変わると、最後の数桁も変わり得る。数学の式が同じであることと、実行する演算列が同じであることは異なる。
乱数と、並列処理の順番
機械学習では、初期値やデータの順番に乱数を使うことがある。乱数の種を固定すれば、その要因をそろえやすい。複数の乱数生成器や並列実行を使う場合には、それぞれの設定も必要になる。
乱数を使わなくても、並列処理の実行順やライブラリが選ぶアルゴリズムに違いがある。決定的な処理を選ぶ設定は再現性に役立つが、速度や利用できる演算との兼ね合いが生じる。
完全一致と、科学的な一致
結果を一ビットまで一致させたいのか、許容される誤差内で同じ結論を得たいのかを決める。測定誤差よりはるかに小さい差を、研究結果の矛盾と扱う必要はない。
逆に、小さな数値差が分類や最適化の経路を大きく変える問題では、差の増幅を調べる必要がある。版、機器、精度、乱数設定を記録し、複数回の結果や残差を確認することで、丸め誤差と実装の問題を区別しやすくなる。
許容誤差は、数字が一致しない都合に合わせて後から広げるものではない。問題の精度要求や、既知の数値誤差を根拠に設定する。
参考資料
参考資料確認日:2026年10月13日。
