「第5回 Machine Learning 15minutes!」で発表してきました。
こんにちは、ALICEチーム*1の白木です。
2016/10/22(土)に第5回 Machine Learning 15minutes!が開催され、発表してきましたので、その発表内容と感想についてショートに報告します。
Machine Learning 15minutes!とは
Machine Learning 15minutes!は、その名の通り「機械学習」を中心に、ビジネスへの応用例や技術の部分について15分以内の発表を行い、知見の共有を行うイベントです。個人的には「事例を知ることができる」こと、懇親会を通して人のネットワークが広げられることが魅力的なイベントです。(実際にこのイベントの懇親会で色んな方と出会うことができました。皆様、これからもよろしくお願いします!)
発表
今回、私は「経験ゼロのWeb企業が機械学習に取り組んだ話」と題して、企業として、また個人として機械学習とは無縁だった状態から、約半年間取り組みを行った中で得られた「重要だったこと」を事例紹介・知見共有的に発表しました。
スライドは以下をご参照いただくとともに、国内の人工知能専門メディアのAINOWさんでもイベントレポートがありますので、ご覧いただければと思います。
↓ AINOW 第5回 Machine Learning 15minutes! イベントレポート
ainow.ai
内容について
今回発表した内容は、特に重要と感じた、以下の5項目です。
- 「今を知る」情報収集
- 高速で仮説検証を回す
- すぐに成果を求めない
- 教師データ作成のフローを作成する
- 目標を明確に定義する
「今を知る」情報収集
機械学習初学者の方は「何から手をつければいいのかわからない」と一度は思われたと思います。
そこでオススメするのが、片っ端から情報収集すること。
ディープラーニングはまだ新しい技術で、2006年にヒントン先生がブレークスルーを果たした後、話題になったのは2012年のILSVRCなので、今からの世の中の情報を抑えておくだけでも、その適用範囲・使い方の情報等がたくさん出ていると思います。そうした情報を自動で収集して、Slackにバンバン送るということをしました。
ちょうど話題にもなっていることもあり、世の中的に初心者向けの記事や、発展的な内容の記事、新しいアルゴリズムに関する記事、適用事例に関する記事等がたくさん出されており、何から手をつければいいのかわからないという状況から、今の課題に則した技術選定が行える状況になれると思います。
高速で仮説検証を回す
機械学習の経験が無い状態だと、進める中で発生する課題(例えば精度が出ないとかデータセットをより効率的に集めたいなど)が出てきたときに、その課題に対する解決策が、すぐにはわかりません。そうした課題の解決策の中には既に論文の中で紹介されているものがあるかもしれませんが、実際問題、該当の論文をすぐに探し出すのも慣れていなければ難しく、今直面している課題に本当に適用可能なものかの確証を得るのも難しいです。
そこで「何をやろう」「どうしよう」とアレコレ迷う前に、実際に自分の手で解決策となりえる仮説を立ててやってみる、つまり高速でPDCAを回すのが良いです。
やってみる中で、やってみた施策に対する結果を比較して見ることにより、その因果を経験的に学ぶことができますし、さらにその施策を行う中で機械学習ライブラリツールの使い方も覚えられ、次のPDCAがさらに高速で回せるようになります。
すぐに成果を求めない
機械学習はとにかく時間がかかります。機械学習エンジニアが実作業として行うべきことは以下のものが考えられます。
- インプット: アルゴリズムの学習、情報収集、ライブラリとその使い方を調べる、写経する 等
- 実作業: 実装、学習(Train)、学習結果の評価・考察 等
- アウトプット: 経験による暗黙知を形式知化するための文章化・資料化
- さらに: 精度向上を狙ってあの手この手をする
(※実際に経験したものを列挙してみたので、他にもあると思います。)
これらの作業は絶対的に必要で、しかも機械学習は必ず上手くいくというものではなく、精度を実サービスで使えるまでに相当な時間がかかってしまいます。また、機械学習は用意できるデータセットに影響される部分が大きく、精度を出すために、もう一度データセットを精査・取得しないといけない等も考えれます。なので「長い目で待つことは想定の内に入れておく」ことが求められます。
(発表後日、「ただし、中長期的な成果はゴリゴリに求める」と上司に言われて「ヒエッ」っとなったのはいい話)
教師データ作成のフローを作る
この話はプロジェクトで「教師データ」を必要とし、さらにアノテーション作業を行わないといけない場合に限定した話です。
教師あり学習を行う場合では、教師データは絶対的に必要になり、その作成には時間がかかることが多いです(こうした課題に対して、教師データを自動生成するという取り組みもあります)。
エンジニアには技術的な作業に集中して欲しいし、一方で、何度も言いますが、教師データは必要なもので、人の手によるアノテーション作業は一度だけとも限りません。教師データが精度に与える影響が支配的な機械学習では、アノテーションのルールが悪くて精度が悪いだとか、そもそもアノテーション作業の精度が悪いなどのケースがあったり、データを追加するためなどの理由から、複数回発生したりします。
そこで、業務フローとして、予め教師データを作成するフローを作成しておくことがオススメです。
弊社では、投稿監視作業などを行うメンバーに協力してもらって、アノテーションルールを明確に記載したルールブックを渡すと共に作業を依頼しています。アノテーションルールが最終的な精度に与える影響が大きいことがわかっていますので、そのルールは誰がやっても同じようなアノテーションができるように細かに定義しています。
目標を明確に定義する
取り組み当初、弊社では取り組みの目標を「〇〇な画像を自動分類し、ソリューションとして提供する」として、分類器開発を行っていました。
開発を進めていき「再現率90%、適合率60%の分類器ができた」のですが、ここから次の開発方針を決めるのに苦戦しました。精度を上げたいという思いはありましたが、やみくもに精度を上げるといっても、そこに優先度が無いと方針を決めるのは難しいです。
そこで、検討を行い、目標を「〇〇という戦略で、△△な企業に対して、□□というソリューションを提供する。そのためには、最低限の性能として再現率80%以上、適合率は70%以上の性能を持った分類器が必要だ」と詳細に決めました。
このような詳細な目標設定がなされたおかげで、「次の改善の方向性として、現状は目標に対して再現率は高くて適合率が低い状態なので、クラス判定の閾値設定をもう少し厳しめにしてみよう」と考えることができました。
Web開発では「こんな機能が欲しい」に対して「できた」or「できない」のゼロイチの世界ですが、機械学習は精度100%は不可能なので、ゼロイチで考えることができません。なので、詳細に目標を定義する必要があるわけです。
さいごに
スライド後方にもありますが、これらの話は改めて考えるとこれらはおおよそ「仕事をする上で重要なこと」であって「機械学習に限った話」でもなかったりするんですよね。でもいざ取り組んでみると意識の外にいってしまうことでもあるしで、 当たり前を当たり前だと言う ことは重要だと思っています。 今後、個人・会社で機械学習を用いたプロジェクトを始められる方々にとって、何かのお役立てができていれば幸いです。
アディッシュ技術開発部では、今後も取り組みの中で得られたことを積極的に社外へと発信していく所存です。(このブログもそうですが)
逆に発表できるだけの技術や知見をどんどん溜めないとですね!よし、やってくぞ!