「PyCon APAC 2018 in Singapore」参加レポート

Day1:プライバシーを機械学習でどう守るか?/機械学習の基礎と応用

この記事を読むのに必要な時間:およそ 6 分

セッション:Better Care and Feeding of Machine Learning Models―Jeanne Choo, Engineer at AI Singapore

清田史和

こんにちは清田です。データサイエンティストでは無いのですが,見聞を広めるべくデータ系のトークを中心に参加しました。今回レポートするトークは,機械学習のモデルをいい感じで育て扱いましょう的な内容の,初級~中級者向けのトークでした。

まず,登壇者の経験から学んだことの説明がありました。その中で,"Reproducibility(再現性)"について整理を行い,どのように機械学習のモデルをマネージすることができるかという話でした。

そして,スライドにある"Reproducibility has different levels(再現性には段階がある)" の話しに入りました。 次の7段階に整理されていました。

  1. フォルダーで管理
  2. 検索性の高いファイル名を設定
  3. 関数や自動化のスクリプトを利用したビルド系のツール準備
  4. 再現性のためのレポート
  5. バージョンコントロール
  6. モデル開発環境の標準化
  7. コンテナ化

バージョンコントールまでは普段考えつくのですが,次の段階に課題があるという話でした。

次に,標準化の例として,以下のディレクトリ構造について紹介がありました。機械学習の管理構成がしっかりあると,複数人での作業の効率は確実に上がるという話でした。実際の構成例は以下になります。

ディレクトリ構造

├── LICENSE
├── Makefile           <- Makefile with commands like `make data` or `make train`
├── README.md          <- The top-level README for developers using this project.
├── data
│   ├── external       <- 3rdパーティのデータ.
│   ├── interim        <- 前処理された中間地点にあるデータ.
│   ├── processed      <- 最終的に学習するために正準化されたデータ.
│   └── raw            <- オリジナルのデータ.
│
├── docs               <- Sphinx プロジェクトで構成されたドキュメント
│
├── models             <- 学習モデル,モデルサマリー,モデル予測
│
├── notebooks          <- Jupyter notebooks. 命名規則は数字をつかって序列する,
│                         製作者のイニシャルとダッシュ `-` 区切り文字で説明, 例.
│                         `1.0-jqp-initial-data-exploration`.
│
├── references         <- データ辞書,マニュアル,およびその他すべての説明資料.
│
├── reports            <- HTML,PDF,LaTeXなどの生成された分析レポート.
│   └── figures        <- レポート作成に使用される生成されたグラフィックスと図形.
│
├── requirements.txt   <- 分析環境を再現するための要件ファイル,例.
│                         環境設定コマンド `pip freeze > requirements.txt`
│
├── setup.py           <- pipによるインストールを可能する `pip install -e`
├── src                <- このプロジェクトで使用するソースコード.
│   ├── __init__.py    <- srcをPythonモジュールにする.
│   │
│   ├── data           <- データをダウンロードまたは生成するスクリプト.
│   │   └── make_dataset.py
│   │
│   ├── features       <- オリジナルデータから学習モデル用のデータを生成するスクリプト.
│   │   └── build_features.py
│   │
│   ├── models         <- モデルをトレーニングし,訓練されたモデルを使用して予測を行うためのスクリプト.
│   │   ├── predict_model.py
│   │   └── train_model.py
│   │
│   └── visualization  <- 理解の深まる内容を可視化するスクリプト.
│       └── visualize.py
│
└── tox.ini            <- see tox.testrun.org

次に,"data diffs on top of code diffs" コードの差異の上でのデータの差異についての話があり,学習モデルの品質管理をするための例として"SHAP"の紹介がありました。

データの特徴がどのように学習モデルに影響するかなど可視化できるもので,学習モデルの品質管理に繋がるものなのかなと思います。

最後に,SpinnakerやKubeflowなどを利用し,それぞれのプロセスや環境をコンテナ化し独立させることでことで,学習環境,分析環境,学習モデルの管理を更に容易にしたいという話がありました。

セッションの感想

私の場合,仕事で画像を使ったDeep Learningの分野にも多少携わるのですが,教師付きデータ,学習ごとの設定,学習されたモデルの品質管理について何かよい方法がないか考えていたところでしたので,この話が聞くことができて参考になりました。先人たちが既に同じ様な課題にぶつかり,一定の解決方法を持っているのではないかと思っていました。

標準化までは何となくイメージはできたのですが,コンテナ化(Containerisation)について知らなかったので,触りが聞けてよかったです。

実際,私のようなソフトウエア/システムエンジニアにとっては,開発する場合,その環境準備をすることは当たり前になっていますが,データサイエンティストにとっては,まだ一般化していないことなのかなと思ったのとデータサイエンティストとソフトウエア/システムエンジニアがより近い存在になってきているのかなと思いました。

著者プロフィール

taisa(たいさ)

Cocolive株式会社 CTO。SIerを経てアライドアーキテクツにてWeb広告・SNSマーケティング関連のWebサービス開発を経験し,副部長としてマネージメントしながらテックリードとして複数のWebサービス立ち上げに従事。その他にPyCon関連のコミュニティ活動や「AIPyハンズオン」勉強会の主催を行っている。共著本に『React,Angular,Vue.js,React Nativeを使って学ぶ はじめてのフロントエンド開発』がある。

Twitter:@taisa831
GitHub:@taisa831
Blog:https://github.com/taisa831


清田史和(きよたふみかず)

PyCon JP 2012-2016実行員で最近は地元の九州でのPythonの普及活動SnapDishサービス開発を手がけている。

Vuzz Inc.取締役CTO,株式会社ナチュラルコーヒー代表取締役,学校法人北部学園ほくぶ幼稚園 理事長


横山直敬(よこやまなおたか)

株式会社ビープラウド所属。SIerを経てPythonエンジニアとなる。Python学習プラットフォームPyQの開発チームにて問題作成やシステム改善に携わっている。また,Pythonコミュニティにも参加しており,PyCon JP2017-2018スタッフ,みんなのPython勉強会運営メンバーを務めている。

Twitter:@NaoY_py
GitHub:NaoY-2501
Blog:http://nao-y.hatenablog.com/


寺田学(てらだまなぶ)

株式会社CMSコミュニケーションズ代表取締役/一般社団法人PyCon JP代表理事。

Pythonの魅力を伝えるべく,初心者向けや機械学習分野のPython講師を精力的に務めている。

Twitter:@terapyon
GitHub:@terapyon
Blog:https://www.cmscom.jp/blog

バックナンバー

「PyCon APAC 2018 in Singapore」参加レポート