目次
背景
- 毎回このコードを最初に貼り付けるが、いつも見失う
- なのでgistとしてここに残す
- 機械学習で毎回seedを固定するためのもの
- 非決定的にせずに実験をスムーズにするための設定
課題
- 機械学習での実験の課題はモデルの評価
- 新しいネットワーク構造にしても差が数ポイントだったりする
- そうすると、ノイズフロアによる誤差なのかがわからない
- そこで、学習や推論をできるだけ決定的(deterministic)にして再現性を高める
非決定的
非決定的とランダムの違い
非決定的と似た概念としてランダムがあるが、同じではない。
$$ 非決定的 \neq ランダム $$- ランダム化アルゴリズム
- 実際に乱数を使って1つの経路を選ぶ
- 非決定的アルゴリズム
- 理論上、複数の選択肢から「正解につながる選択ができる」と考える計算モデル
NOTE: ただしPyTorchのバージョン・プラットフォーム・CPU/GPUをまたいだ完全な再現性までは保証されない。
非決定的という言葉について
計算量理論でいう非決定的アルゴリズムと、PyTorchでいうnondeterministic operationは意味が異なる。
- 計算量理論の non-deterministic
- 複数の計算経路の中から正解につながる経路を選べると仮定する理論上の計算モデル
- PyTorchやGPU計算のnon-deterministic
- 並列計算や演算順序などにより、同じ入力でも実行ごとに数値結果がわずかに変わることがある
seed固定と deterministic algorithmの利用は、後者を抑えて実験の再現性を高めるために行う。
安定化モード
安定化モードのコード
| |
安定化モードの注意点
- たとえ、あるseedに固定して決定的にして実験して精度が出せても、それが完全に優れているとは限らない
- なぜなら、ある条件A(仮にseed=42)の時の複数の実験結果の精度比較に過ぎないから
- つまり、複数seedでの平均・標準偏差などを見て最終的には評価する必要がある
たとえば、以下の結果だったとする。
| |
しかし、seedを変えたら、以下になったら、Bが良いとは言い難い。
| |
統計的に評価する
複数seedで実験した結果、その差が統計的に意味のあるものかを確認する方法がいくつか提案されている。
検定の分類
良い図があったので、これを載せる。

t検定(平均とSDから直接比較する)
最もシンプルな方法は、平均と標準偏差からそのままt検定を行うこと。
$$ t = \frac{\bar{x}_A - \bar{x}_B}{\sqrt{\dfrac{s_A^2}{n_A} + \dfrac{s_B^2}{n_B}}} $$- $\bar{x}_A, \bar{x}_B$: それぞれのモデルの複数seedでの平均
- $s_A, s_B$: それぞれのSD
- $n_A, n_B$: seed数
$t$の絶対値が大きいほど、平均の差がSD(ばらつき)に対して十分大きい、つまり偶然とは考えにくいと判断できる。
分布を仮定しない方法
t検定は、データが正規分布に近いという前提を置いている。seed数が5個などと少ない場合、この前提が怪しくなる。
- Kolmogorov-Smirnov検定やブートストラップ法は、分布の形を仮定しない、より頑健な代替手段になる
- Henderson et al.は、強化学習分野でseedによる結果のばらつきが無視できないほど大きいことを指摘し、2標本t検定・Kolmogorov-Smirnov検定・ブートストラップ法による有意性検定を推奨している
必要なseed数を見積もる
「優劣を出す」話とは別に、「そもそも何seed回せば信頼できる結論が出せるか」という、実験を始める前の設計の問題もある。
- 検定力分析(power analysis)で、必要なseed数を統計的に見積もることができる
- Colas et al.は強化学習実験を例に、この考え方を具体的に示している
探索コストの公平性
比較する2つのモデルが、同じ探索コストをかけて選ばれたかという、また別の前提条件もある。
- Dodge et al.は、単一のtest scoreだけでなく、ハイパーパラメータ探索にかけた計算量(試行回数)に応じた期待検証性能を報告することを提案している
- 探索に使った計算量が違うモデル同士を比較すると、優劣の判定自体が公平でなくなる
実用ツール
- 深層学習向けにこうした検定を簡単に行うための
deep-significanceというPythonライブラリも公開されている - 有意検定(Significance Testing)によって、調査結果の有意性に関してある仮説をたてて、それが成り立つか否かを現実のデータでもって判断することが可能
- 単純に複数seedの平均を比べるだけでなく、その差が統計的に有意かどうかまで確認するのが望ましい。
その他
- ちなみに、seedで42がよく使われるのは、銀河ヒッチハイクガイドからのオマージュ
- その小説の中の「生命、宇宙、そして万物についての究極の疑問の答え」= 42という答えから引用している
- 個人的には、最高の答えが42だとしたら、最高の質問は存在の質問「Why is there something rather than nothing?」だと思う
- それらを組み合わせると、なぜなぜ究極の答えは、42だったと
- ただ、個人的には、モンスター群の196883の方が真理に近い気がして好きな数字
まとめ
- モデル変更による数pointの差を比較するときは、seedや演算を固定して実験を決定的にすることで、ばらつきを抑えられる
- これは開発中のデバッグやablationでは非常に便利で、変更前後を同条件で比較しやすくなる
- 一方、最終的にモデル性能の改善を主張する場合は、単一seedでの結果だけでは不十分
- つまり、複数seedで実験して平均や分散を見る必要がある
- determinismは統計評価の代替ではなく、実験条件を揃えるための手段ということ
- 統計的保証に関しては、個人的にはt検定をすれば十分だと思っている
参考文献
- Difference between Deterministic and Non-deterministic Algorithms - GeeksforGeeks
- Reproducibility — PyTorch 2.14 documentation
- Deterministic and Non-Deterministic Algorithms - CodeCrucks
- 生命、宇宙、すべての究極の質問への答え「42」は真実なのか? - GIGAZINE
- Deep Reinforcement Learning that Matters(Henderson et al., AAAI 2018)
- How Many Random Seeds? Statistical Power Analysis in Deep Reinforcement Learning Experiments(Colas et al.)
- Show Your Work: Improved Reporting of Experimental Results(Dodge et al., EMNLP 2019)
- deep-significance: Easy and Meaningful Statistical Significance Testing in the Age of Neural Networks
- 29 検定 – R入門
- T-test - GeeksforGeeks
- 生命、宇宙、そして万物についての究極の疑問の答え - Wikipedia
- なぜ何もないのではなく、何かがあるのか - Wikipedia
- モンスター群 - Wikipedia
