Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Chainerと実験管理と私

6,371 views

Published on

機械学習の実験管理についてと、Chainerでやるときに色々考えたことをまとめました | Chainer LT Meetup #1発表資料

Published in: Technology

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/)

×