Successfully reported this slideshow.
Your SlideShare is downloading. ×

Chainerと実験管理と私

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 13 Ad

More Related Content

Slideshows for you (20)

Similar to Chainerと実験管理と私 (20)

Advertisement

Recently uploaded (20)

Chainerと実験管理と私

  1. 1. Chainerと実験管理と私 2018/03/22 Chainer LT Meetup#1 半谷
  2. 2. 機械学習の実験管理は大変 • 現実の問題に機械学習を適用する • 評価指標を決めて、ベースラインを作って、改善の繰り返し [7] • 処理パイプラインのどこか1箇所を変更すると挙動が変わってしまう • CACE; Change Anything Changes Everything [1] • 機械学習の実験管理はかなり大変 • 記録すべき対象が多い • 計算時間が長いので、処理パイプラインを分割する • 前処理 -> 事前学習 -> 学習 -> 評価
  3. 3. より良い機械学習システム? • 機械学習の特性、ベストプラクティス、機械学習システムの例など調査 [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/#/)
  4. 4. 絵にしてみた ワークフローの自動化 再利用/交換しやすい部品 複数マシンで並列実行 適切な評価指標&評価データ バージョン管理&共有 実験を記録/閲覧 大事。 予測の傾向やボトルネックを把握
  5. 5. 実験管理 • 実験条件(パラメータ) • 実験結果(評価指標) • コード(バージョン情報) • 入出力データ • データセット(バージョン情報) • 重みパラメータ • 実行環境(マシン、言語環境)、実行時間 • 実験結果の比較 • 詳細情報の表示 • 実験条件 • 実験結果 • 可視化(画像など) • メンバー間での共有 • 過去の実験の検索 ① 記録 ② 閲覧 • 実験管理に求められるものを書き出してみる
  6. 6. Chainerで実験管理 • 実験条件はコマンドラインから受け取る(argparseなど) • 実験結果のlogや重みパラメータは実験結果ディレクトリに格納 • ChainerUIでlogやargsを読み込んで可視化 Training 実験結果ディレクトリ 実験条件 ChainerUI 実行 (コマンドライン引数を保存するユーティリティ) 実験の比較 実験の詳細 log args … .npz
  7. 7. 実験管理(再掲) • 実験条件(パラメータ) • 実験結果(評価指標) • コード(バージョン情報) • 入出力データ • データセット(バージョン情報) • 重みパラメータ • 実行環境(マシン、言語環境)、実行時間 • 実験結果の比較 • 詳細情報の表示 • 実験条件 • 実験結果 • 可視化(画像など) • メンバー間での共有 • 過去の実験の検索 ① 記録 ② 閲覧 • お作法に則れば、かなりの部分がカバーできる(便利!)
  8. 8. 実験管理(再掲) • 実験条件(パラメータ) • 実験結果(評価指標) • コード(バージョン情報) • 入出力データ • データセット(バージョン情報) • 重みパラメータ • 実行環境(マシン、言語環境)、実行時間 • 実験結果の比較 • 詳細情報の表示 • 実験条件 • 実験結果 • 可視化(画像など) • メンバー間での共有 • 過去の実験の検索 ① 記録 ② 閲覧 • 残る中でクリティカルだと思うのは以下:
  9. 9. コードのバージョンの記録 • 実験に使ったコードは正確に記録する必要がある • 実験条件(args)だけあっても再現できない • Chainerはdefine by runなので特に • Gitから情報を抽出 • HEADのコミットIDやdiffの結果など • 実はChainerRLにはユーティリティが付属 ※別のアプローチ sacredというライブラリでは、 ソースコードをコピーして保管している ※実験用のブランチが大量に増えていくのだが、 みなさんどうされているのでしょうか…
  10. 10. データセットのバージョンの記録 • 特に問題になるケース • 精度を上げるために訓練データを増やしていく • 教師ラベルを人手でつける/修正する ↔︎ 公開されているデータセット(MNISTなど)は一意に決まる • 対策 • 規約を作ってバージョン番号 or 名前をつける • 何らかのツールを使う • dataversioncontrol? quilt? dat? pachyderm? • 実験毎にどのバージョンを使ったかを記録しておく • 他の人でも同じ結果を得るために • 必要なメンバーがアクセスできる場所に置く • 人手を介さずに読み込めるようにコード化する 2018-03-22 2018-02-15
  11. 11. (おまけ)自作ツールの紹介 • 毎回実験ディレクトリ名を手動でつけるのが面倒なので • ArgumentParserを拡張してみた • 引数の受け取り • 出力ディレクトリ名の自動設定 • 引数の保存(⇨ <output_dir>/args) • コードのバージョンの記録 (⇨ <output_dir>/git) https://github.com/t-hanya/xreco
  12. 12. まとめ • 機械学習の実験管理は大変 • 意識して記録しておかないと再現できなくなってしまう • Chainerで実験管理 • お作法に従えば、ChainerUIで素早く確認できる • コードとデータセットのバージョンは意識して記録する • 実験結果の出力ディレクトリも機械的に決めるといい (最近考えていること) • 全ての計算とデータのつながりを記録したい • 計算とデータが交互に現れる巨大な有向非巡回グラフ(DAG)になる • コード -> Git、計算実験 -> ?
  13. 13. 参考資料 [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による機械学習実験の管理 (https://www.slideshare.net/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/)

×