失敗から学ぶ機械学習応用～Another Story～

# はじめに
[機械学習をどう学んだか by 日経 xTECH ビジネスAI② Advent Calendar 2019](https://qiita.com/advent-calendar/2019/machine-learning-01) 13日目の記事です。
本記事はSlideShareで公開した勉強会資料「[**失敗から学ぶ機械学習応用**](https://www.slideshare.net/HiroyukiMasuda1/ss-181844477)」 のあとがき的な位置づけの記事です。

おそらく機械学習の勉強法やおすすめ書籍、Kaggle参戦などの話題は他の方がまとめていると思うので、私は機械学習のプロジェクトに関わる中で得た学びを中心に書いていこうと思います。

# 機械学習をどう学んだか
はじめに私が機械学習テーマに配属されてから勉強会発表にいたるまでの遍歴と学び、そしてお世話になった教材をざっくりと振り返ってみます。
※明確な期間や時期は伏せますが、全体で約4、5年くらいのスパンです。
## １．前任者の異動により機械学習テーマを引き継ぐ
機械学習テーマを担当していた前任者が異動し、素人だった私がそのテーマを引き継ぐことになる。
前任者が残したコードを動かしつつ、本やネットに転がっている資料を物色して勉強に励む。ここで「次元の呪い」や「クロスバリデーション」「過学習」など**機械学習の基礎の基礎を学ぶ**。

- [はじめてのパターン認識](https://www.morikita.co.jp/books/book/2235)

## ２．アルゴリズム開発部隊を離れ、一人ソフト開発担当に
職場の再編により入社時から所属していたアルゴリズム開発部隊を離れることになる。
ソフト関係で周りに頼る人がいなくなり、自分で価値検討、実験計画、データ収集、モデル開発、評価をまわすようになる。ここで機械学習テーマの全貌が見えてくる。自分でデータ収集検討を進めたことで、**アノテーションの苦労やラベルの信頼性などのデータ周りの重要性を学ぶ**。

- [Tokyo.R勉強会](https://tokyor.connpass.com/)

## ３．Deep Learningプロジェクトの発足
Deep Learningプロジェクトが新たに発足し、その立ち上げメンバーに招集される。
チームでStanford大学のCS231を視聴し、Deep LearningおよびCNNを勉強する。この時期から論文を積極的に読んで情報収集に努めるようになり、**Deep Learningのポテンシャルの高さと進展の速さを実感する**。

- [CS231n: Convolutional Neural Networks for Visual Recognition](http://cs231n.stanford.edu/)
- [深層学習 (機械学習プロフェッショナルシリーズ)](https://www.amazon.co.jp/%E6%B7%B1%E5%B1%A4%E5%AD%A6%E7%BF%92-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E5%B2%A1%E8%B0%B7-%E8%B2%B4%E4%B9%8B/dp/4061529021)

## ４．プロジェクトの拡大
世間的にもAIブーム真っ只中だったこともあり、課のメンバーがどんどん増員される。
それによりアルゴリズム開発と並行し、新メンバーの育成を受け持つことに。CS231におんぶにだっこではあったが**教える立場として理解を深める重要性を実感**。教材や参考になりそうな良質な資料を見つけては保存しておくのが習慣化される。また**この時期に開発アルゴリズムの導入が実現し、はじめての成果を得ることができる**。

- [arXivTimes](https://github.com/arXivTimes/arXivTimes)
- [cvpaper.challenge](https://qiita.com/drafts/8c55cb329e55b4c11232/edit)
- CV、MLを中心とした勉強会

## ５．新規テーマのリーダーに任命、壁にぶち当たる
導入実現の節目を迎えたこともあり、これまでの担当テーマを離れて新テーマのリーダーにアサインされる。
協業先に機械学習の特性をなかなか理解して貰えず、**AI（機械学習）って凄いんでしょ、データがあれば賢くなるんじゃないの？的な認識ズレにかなり苦労する**。「今のデータじゃ開発できない」vs「今のデータがダメという結果を示してくれないとデータは集められない」のデータが先か？開発が先か？の関係にもがくことになる。この経験から現場や専門外の人に「どうやって機械学習を理解してもらうか？機械学習プロジェクトはどうあるべきか？」を強く意識するようになる。

- [仕事ではじめる機械学習](https://www.oreilly.co.jp/books/9784873118215/)
- [ITmedia NEWS これからのAIの話をしよう](https://www.itmedia.co.jp/news/series/9203/)

# 失敗から学ぶ
以上のように座学と実践の両面で学んできましたが、個人的には**失敗から学ぶのが一番勉強になったかなと思います**。仕事で失敗するとか言っちゃいけない気もしますが、色々なプロジェクトに関わる中で各ステップでのつまづきを目にしてきました。そして勉強会資料を見て気づいた方も多いと思いますが、この資料かなり「しくじり先生」を意識して作っています。このような失敗事例を題材にした授業で良いなと思う点を挙げると

- **実体験なのでリアリティがある**
- **痛い目にあったことを伝えている分、とても教訓になる**
- **同じ経験をした人にとってわかりみが深い**
- **成功体験の裏には失敗がつきもの**

あたりかと個人的には思います。加えて機械学習プロジェクトを1サイクルで成功に導けることは稀で、大体何かしらの失敗や試行錯誤をしてます。にもかかわらずメディア記事や非エンジニアを対象としたセミナーで見かけるものは

- **機械学習でこんなことができます！**
- **世の中こんなところで機械学習が使われています！**
- **凄いでしょ機械学習！　皆さんこれからは機械学習ですよ！！**
- **（一応）機械学習はこういう仕組みです**

みたいなポジティブな話が多分にあると思います。これらをすべて否定するつもりはないですが、上澄みの成功事例だけを見て「ウチもAI（機械学習）をやらなきゃ」的に見切り発車をするとまぁ失敗しますよ、というのを伝えるため。そしてこういった認識のズレに遭遇してこれ以上疲弊したくない、という考えのもとで「[**失敗から学ぶ機械学習応用**](https://www.slideshare.net/HiroyukiMasuda1/ss-181844477)」の発表準備を進めました。

## 資料作成にあたって意識したこと
### できる限り実例を引用して失敗事例を示す
機械学習開発で言われる「Leakage」や「Garbage in, garbage out」は有名な話ですし、機械学習プロジェクトにフォーカスした「AIプロジェクトが失敗するパターン」なども検索すれば割と引っかかります。ただそれらは例が示されているものの一般論としてまとまっており、具体的な失敗事例としてはイメージしづらいように感じました。そういう意味では「○○しないように気を付けてください」と説明するよりも**「○○を疎かにするとこういう失敗が待っています。だから気を付けてください」**という形で、先人の教訓を活かすことができるような資料を集めることを心がけました。

### 機械学習プロジェクトの全貌を把握してもらう
論文や公開データセット、Kaggleなどでモデルを動かしながら機械学習を勉強することもあると思います。ただ**これらは機械学習プロジェクトの中のごく一部を切り取ったものである**と考えています。そして[機械学習プロジェクトがうまく進まない理由](https://ainow.ai/2019/08/14/174714/)の多くが、「機械学習で何がしたいかわからない」や「学習させるためのデータが集まらない」といった開発以外の要因であることが多いです。今回、[機械学習のビジネスフレームワーク「5D」](https://leapmind.io/blog/2018/09/10/deeplearning5d/)を引用しつつ事例を示すことで、プロジェクトの全体とその中でのつまづくポイントを理解して貰えるように資料をまとめました。

### 機械学習の成功がビジネスの成功とは限らない
機械学習はこれまで困難であった様々な課題を解決できる可能性を持った技術です。ただし機械学習によって何が解決できるかをよく考えないと、最終的な価値にまで到達しないことが往々にして起こりえます。改めて**機械学習を使うことを目的としてしまわない**ように、開発の失敗事例とは別に「ビジネスの壁」の話を設ける形で勉強会を行いました。

# 失敗のその先
「[**失敗から学ぶ機械学習応用**](https://www.slideshare.net/HiroyukiMasuda1/ss-181844477)」を公開し、幸いにも多くの方々に見ていただき、機械学習の導入を検討する方々に役立ててもらえたのかなと思います。ただ中には「これじゃ機械学習プロジェクトなんてやらない方が良いんじゃない？」とネガティブに捉えた感想もいくつか見かけました。
資料では「失敗から学ぶ」にフォーカスをしたため紹介しきれませんでしたが、**これらのプロジェクトはこの失敗で機械学習の活用を断念する。なんてことは決してなく、その後の話が存在しています**。有名な話もあるので既に知っている人も多いと思いますが、ネガティブな印象を払拭するためにも、引用させていただいたプロジェクトのその後を紹介したいと思います。
(`勉強会資料をまだ見てない方はここから先はネタバレです`)

## ・[クックパッドにおける推薦の取り組み](https://logmi.jp/tech/articles/321731)
「Define」で言及したKPI設計の難しさを伝えるために引用させていただいた事例ですが、林田さんの発表資料では推薦システム導入までの実際の道のりを話されています。クックパッドは機械学習をサービスに活かすと同時に、[得られた知見を積極的に発信](https://static.cookpad.com/techlife/presentations.html)しており、その他にもJSAI Cup 2018で[食材認識コンペを開催](https://www.ai-gakkai.or.jp/jsai2018/jsai-cup_info/)するなど**国内の機械学習活用をリードしている存在**になっているといえます。

## ・[カスタマーサポートAIの失敗と教訓](https://medium.com/mixi-developers/challenge-of-cs-ai-15c65ef7066a)
カスタマーサポートの事例では失敗してしまいましたが、mixiは別プロジェクトの[「不適切コンテンツ検出」](https://medium.com/mixi-developers/mixi-20190110-d1cde81cf37c)の取り組みにおいて成果を上げています。またプロジェクトリーダーを務めた豊川さんが[インタビュー](https://www.itmedia.co.jp/news/articles/1902/22/news024.html)で答えている**「本当の失敗は、失敗を理由に途中で諦めてしまうこと」**は非常に重みのある言葉だと思います。こういった失敗経験を活かしてこそ機械学習導入が実現でき、私自身もこの知見から成功事例よりも多くの学びを得ることができたと思います。

## ・[Leakの洗礼](https://speakerdeck.com/iwiwi/kaggle-state-farm-distracted-driver-detection?slide=19)
[講演動画](https://www.youtube.com/watch?v=7389fOxgBz8)を視聴してもらえばわかりますが、発表者の秋葉さんはこのLeakで失敗した後に**最終的にこのコンペでソロGoldを獲得します**。そもそもこの方は競プロでレッドコーダーの称号を有し、今やKaggle Grand Masterの称号を獲得された業界の第一人者です。当時は初めての機械学習だったそうで、定番のミスをしまったと発表で語っています。Andrew Ngのような超大御所の先生でもLeakをやらかしてしまうあたり、機械学習に関わっていれば多くの人が一度はやってしまうミスではないかなと思います。

## ・[Netflix Prize](https://blogs.itmedia.co.jp/saito/2009/09/httpjournalmyco.html)
優勝モデルの本番実装にも取り組んだXavier Amatriainさんが"[On the “Usefulness” of the Netflix Prize](https://xamat.medium.com/on-the-usefulness-of-the-netflix-prize-403d360aaf2)"でNetflix Prizeの恩恵について振り返っています。その中では大量のアンサンブルモデルそのものは実装されなかったが、**Netflixの認知度拡大や採用貢献、本番環境に投入されたソリューション（初年度のProgress Prize）、推薦の課題が広く共有された点など、多くの利得があった**と述べています。Kaggleがまだなかった2006年にこのコンペを開催した先見性はきわめて高く、今やNetflixは機械学習をビジネス活用する世界的な企業となっています[[参考](https://note.com/hidekiikeda/n/n6f68e8b1feca)]。

<!-- また「Netflix Prizeの賞金100万ドルで3年間雇うことができるシリコンバレーのエンジニアの数を知っていますか？ おそらく1人未満です。」とも述べており、100万ドルの賞金は決して高くはないと述べています -->


## ・[機械学習案件を納品する](https://qiita.com/yoshizaki_kkgk/items/fa8b45918445bb3e6dc3)
Qiitaでもたくさんの機械学習に関連する良記事を執筆されている[株式会社キカガク](https://www.kikagaku.co.jp/services/seminars/)の[吉崎さん](https://qiita.com/yoshizaki_kkgk)の事例です。吉崎さんが代表を務めるこの会社は、まさに機械学習の初学者がお世話になる会社で、人工知能・機械学習を題材とした教育を事業としています。教育事業の中でこの失敗の教訓も伝授しているでしょうし、会社の事業としても**創業3年で累計受講生数20,000人を超える実績を達成**しています。

## ・[AIを使ったキュウリの自動選別](https://news.mynavi.jp/article/20180606-642208/)
残念ながら3号機は導入実現に至りませんでしたが、個人が開発したAI活用事例としては一番有名な事例かもしれません。この実績を買われて、多くのメディアでインタビューを受けたり[PyConJPの基調講演に登壇](https://www.youtube.com/watch?v=0bTPOsVvG7g)するなどしています。そして現在、小池さんは社会人Dr.になると同時に**大学発ベンチャーを立ち上げて「農業×AI」の領域をリードする立場でご活躍中です**。

# まとめ
私が機械学習プロジェクトに関わる中で得た学びと、勉強会資料の中で伝えたかったことをまとめてみました。
こうして振り返ると**自身の経験と共に、先人の方々が公開してくれた知見から学んできて今の自分があるのだなと実感しています**。この記事や勉強会資料も同じような形で機械学習を学ぶ人の参考になれば幸いです。最後に失敗に関する名言を引用して締めたいと思います。
> It’s fine to celebrate success, but it is more important to heed the lessons of failure.
成功を祝うのはいいが、もっと大切なのは失敗から学ぶことだ。（ビル・ゲイツ）

**これら失敗事例を糧にして、みんなでAI導入の壁をぶっ壊しましょう！！**