狠狠撸

狠狠撸Share a Scribd company logo
颁丑补颈苍别谤と実験管理と私
2018/03/22 Chainer LT Meetup#1
半谷
機械学習の実験管理は大変
? 現実の問題に機械学習を適用する
? 評価指標を決めて、ベースラインを作って、改善の繰り返し [7]
? 処理パイプラインのどこか1箇所を変更すると挙動が変わってしまう
? CACE; Change Anything Changes Everything [1]
? 機械学習の実験管理はかなり大変
? 記録すべき対象が多い
? 計算時間が長いので、処理パイプラインを分割する
? 前処理 -> 事前学習 -> 学習 -> 評価
より良い機械学習システム?
? 機械学習の特性、ベストプラクティス、機械学習システムの例など調査 [1-5]
? 例えば…
My model has higher BLEU, can I ship it? The Joel Test for machine learning systems
(https://www.lucypark.kr/docs/2017-acml/#/)
絵にしてみた
ワークフローの自動化 再利用/交換しやすい部品
複数マシンで並列実行
適切な評価指標&評価データ
バージョン管理&共有 実験を記録/閲覧 大事。
予測の傾向やボトルネックを把握
実験管理
? 実験条件(パラメータ)
? 実験結果(評価指標)
? コード(バージョン情報)
? 入出力データ
? データセット(バージョン情報)
? 重みパラメータ
? 実行環境(マシン、言語環境)、実行時間
? 実験結果の比較
? 詳細情報の表示
? 実験条件
? 実験結果
? 可視化(画像など)
? メンバー間での共有
? 過去の実験の検索
① 記録
② 閲覧
? 実験管理に求められるものを書き出してみる
Chainerで実験管理
? 実験条件はコマンドラインから受け取る(argparseなど)
? 実験結果のlogや重みパラメータは実験結果ディレクトリに格納
? ChainerUIでlogやargsを読み込んで可視化
Training
実験結果ディレクトリ
実験条件
ChainerUI
実行
(コマンドライン引数を保存するユーティリティ)
実験の比較
実験の詳細
log
args
…
.npz
実験管理(再掲)
? 実験条件(パラメータ)
? 実験結果(評価指標)
? コード(バージョン情報)
? 入出力データ
? データセット(バージョン情報)
? 重みパラメータ
? 実行環境(マシン、言語環境)、実行時間
? 実験結果の比較
? 詳細情報の表示
? 実験条件
? 実験結果
? 可視化(画像など)
? メンバー間での共有
? 過去の実験の検索
① 記録
② 閲覧
? お作法に則れば、かなりの部分がカバーできる(便利!)
実験管理(再掲)
? 実験条件(パラメータ)
? 実験結果(評価指標)
? コード(バージョン情報)
? 入出力データ
? データセット(バージョン情報)
? 重みパラメータ
? 実行環境(マシン、言語環境)、実行時間
? 実験結果の比較
? 詳細情報の表示
? 実験条件
? 実験結果
? 可視化(画像など)
? メンバー間での共有
? 過去の実験の検索
① 記録
② 閲覧
? 残る中でクリティカルだと思うのは以下:
コードのバージョンの記録
? 実験に使ったコードは正確に記録する必要がある
? 実験条件(args)だけあっても再現できない
? Chainerはdefine by runなので特に
? Gitから情報を抽出
? HEADのコミットIDやdiffの結果など
? 実はChainerRLにはユーティリティが付属
※別のアプローチ
sacredというライブラリでは、
ソースコードをコピーして保管している
※実験用のブランチが大量に増えていくのだが、
みなさんどうされているのでしょうか…
データセットのバージョンの記録
? 特に問題になるケース
? 精度を上げるために訓練データを増やしていく
? 教師ラベルを人手でつける/修正する
?? 公開されているデータセット(MNISTなど)は一意に決まる
? 対策
? 規約を作ってバージョン番号 or 名前をつける
? 何らかのツールを使う
? dataversioncontrol? quilt? dat? pachyderm?
? 実験毎にどのバージョンを使ったかを記録しておく
? 他の人でも同じ結果を得るために
? 必要なメンバーがアクセスできる場所に置く
? 人手を介さずに読み込めるようにコード化する
2018-03-22
2018-02-15
(おまけ)自作ツールの紹介
? 毎回実験ディレクトリ名を手動でつけるのが面倒なので
? ArgumentParserを拡張してみた
? 引数の受け取り
? 出力ディレクトリ名の自動設定
? 引数の保存(? <output_dir>/args)
? コードのバージョンの記録 (? <output_dir>/git)
https://github.com/t-hanya/xreco
まとめ
? 機械学習の実験管理は大変
? 意識して記録しておかないと再現できなくなってしまう
? Chainerで実験管理
? お作法に従えば、ChainerUIで素早く確認できる
? コードとデータセットのバージョンは意識して記録する
? 実験結果の出力ディレクトリも機械的に決めるといい
(最近考えていること)
? 全ての計算とデータのつながりを記録したい
? 計算とデータが交互に現れる巨大な有向非巡回グラフ(DAG)になる
? コード -> Git、計算実験 -> ?
参考資料
[1] Machine Learning: The High Interest Credit Card of Technical Dept
(https://research.google.com/pubs/pub43146.html)
[2] My model has higher BLEU, can I ship it? The Joel Test for machine learning systems
(https://www.lucypark.kr/docs/2017-acml/#/)
[3] Introducing FBLearner Flow: Facebook’s AI backbone
(https://code.facebook.com/posts/1072626246134461/introducing-fblearner-flow-facebook-s-ai-backbone/)
[4] NSML: A Machine Learning Platform That Enables You to Focus on Your Models
(http://learningsys.org/nips17/assets/papers/paper_32.pdf)
[5] Pythonによる機械学習実験の管理
(/shima__shima/2011-mtokyoscipy1)
[6] 機械学習工学に向けて
(http://jssst.or.jp/files/user/taikai/2017/GENERAL/general6-1.pdf)
[7] Deep Learning - Chapter11 Practical Methodology
(http://www.deeplearningbook.org/contents/guidelines.html)
[8] Best Practices for Applying Deep Learning to Novel Applications
(https://arxiv.org/abs/1704.01568)
[9] The Machine Learning Reproducibility Crisis
(https://petewarden.com/2018/03/19/the-machine-learning-reproducibility-crisis/)

More Related Content

颁丑补颈苍别谤と実験管理と私