再現性

再現性

執筆済 科学計算研究

同じ手順で同じ結果が得られること。 科学的主張の前提であり、 再現できない結果は主張として成立しない。

段階#

用語 意味
再現 (reproducibility) 同じデータ・同じコードで同じ結果
追試 (replicability) 別のデータ・別の実装で同じ結論

前者は最低限の要求。後者が本当の検証。

妨げるもの#

要因 対処
乱数の種 固定して記録する
ライブラリのバージョン ロックファイル、コンテナ
浮動小数点の非決定性 演算順序を固定する
並列実行の順序 決定的な集約を使う
GPU の非決定性 決定的アルゴリズムを指定する
環境変数、ハードウェア 記録する

浮動小数点の順序依存#

浮動小数点の加算は結合則を満たさない

(a+b)+ca+(b+c)

並列に総和を取ると、 スレッドの終了順で結果がわずかに変わる。 反復的なアルゴリズムではこの差が増幅されうる。

**「同じコード・同じデータなのに結果が違う」**の 主要な原因のひとつ。

実践#

手段 内容
バージョン管理 コードと設定を git に
依存の固定 package-lock.jsonrequirements.txtuv.lock
コンテナ Docker で環境ごと固定
実験管理 設定・結果・成果物を紐づけて保存
自動化 手作業の手順を残さない
公開 コードとデータを出す

手で実行した手順は必ず失われる。 スクリプトにしておけば、それ自体が記録になる。

このノートでの実践#

出典リンクの実在を 機械的に検証する仕組みを CI に組み込んでいる。 人間の記憶や善意ではなく、 自動化された検査によって主張の根拠を保つという考え方は、 再現性の実践と同じ発想にある。

参考文献#

ノート一覧を閉じる