Saturday 2:05 p.m.–2:35 p.m.
Room 202 #pyconjp_202機械学習におけるデータの再現性について
Yuichiro Someya
- Audience level:
- Intermediate
- Category:
- Useful libraries
- Slide:
- https://speakerdeck.com/ayemos/machine-learning-and-data-reproducibility
- Video:
- https://youtu.be/-OSgUsqwCdo
Description
チームで機械学習のタスクに取り組む際、過去の自分や他人が利用したデータの再現をするのに苦労する事があります。
本トークでは、データの再現性が低下する原因について体系的に解説し、akagi というオープンソースのPython ライブラリを利用してデータの再現性を高める方法について紹介します。
Abstract
機械学習のタスクに取り組む場合において、データの再現性が損なわれる場面があり、その 原因は多岐にわたります。
- データの再現性は時間とともに低下します。過去に誰かが用意したデータを利用しようとする際に、データの入手方法がドキュメント化されておらず、入力データを再現できない場合があります。最悪の場合、丁寧に加工されたデータは本人のローカル環境にしか存在しないかもしれません。
- またデータの入手先が多岐にわたり(MySQL, Google Cloud Storage/Amazon S3, ローカルのファイル、Spreadsheet等)、それらの入手先からデータを集め、実験用のデータに落とし込むのが難しいという問題もあります。これは特にエンタープライズアプリケーションを運用する企業などにおいて顕著です。
- さらにデータの実体が動的である場合(RDS等)、アクセスするタイミングによってデータの内容が変化する場合があり、固定のデータが欲しい場合に問題となります。
一方で例えば深層学習系のフレームワークには、著名なデータセットについて、それをダウンロードし、numpy等の扱いやすい形式に整形する独自のAPIが用意されていることがあり、どこからでも全く同じデータを入手する(再現する)ことが出来ます。
これらの抽象度の高いAPIはデータの再現性を極大に高めており、フレームワークのExampleスクリプトで実行する場合や、モデルの動作を検証するためのダミーデータとして利用する場合などにおいて高い有用性を持ちます。しかしながらその抽象度の高さ故に、このようなAPIをデータセット毎に用意してやる必要があるという問題が有り、実際にそのようなAPIでサポートされるデータセットは少なく(MNIST, CIFAR-10, IMDB等)、現実世界のタスクにおける有用性は高くありません。
本トークではまず、これらの問題の根本的な原因を突き止める為に、データの抽象度について機械学習の文脈でそれを捉える方法を提案します。その為に、データを機械学習に利用する際、実際にデータをモデルに与えるまでの段階を`Loading`と`Processing`という2つのレイヤに分割します。それぞれ
- Loading: データをダウンロードする
- Processing: 適切な形式に加工/分割し、モデルに与える
という操作を表します。
そして、2つ以上の異なるタスクに取り組む際、これらのレイヤそれぞれにおいて導入される多様性に量的差がある事をtensorflowの`maybe_download`等の例を元に指摘し、`Loading`レイヤを抽象化出来る事を示します。
また、そのような抽象化を行うPythonライブラリとしてのakagiを利用する事で、「データを実行可能なPythonスクリプトで表現」し、再現性を高められることを示します。
また本トークでは、データの固定についても触れます。データの固定とは、例えば"http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz"のようなURLを用意する事です。
MNISTデータセットの内容は、このURLを参照する限り(かつサーバー上のその内容が変更されない限り)変化しません。一方でRDB等のデータソースについては、同じクエリでも得られる結果がコンテキストにより変化します。その場合、固定されたデータが欲しい場合は静的なファイル(.csv)に保存するなどの工夫が必要になります。
akagiではAmazon S3をバックエンドとしたデータの固定機構を利用し、この問題に対処しています。
akagiの開発には、上記のような課題の設定が現場の状況に合致していることが必要となります。データの再現性という限定された課題を挟んで情報交換するとともに、参加者の皆様がこの課題を認識/理解する助けになれば幸いです。