Deep Learningの習得にはスクラッチでの実装が効果的
多くの業界からますます注目を集める機械学習・深層学習。2012年、東京大学の松尾 豊研究室においてDeep Learningとはじめて出会った巣籠 悠輔氏は、現在、母校東大の招聘講師としてAIの未来を担う後進の育成に力を入れている。Deep Learningに関する英文による書籍執筆経験もあり、株式会社 情報医療(MICIN, Inc.)※では同社の最高技術責任者(CTO)を務める巣籠氏にお話をうかがった。
※:機械学習・深層学習を医療分野に応用した新事業の開拓を目指して2015年11月に設立された。MICINは「マイシン」と読む。
Deep Learningとの出会い~2012年、松尾 豊研究室
私がDeep Learningを知ったのは2012年の秋、東大の修士2年で、現在では人工知能の世界で非常に著名な松尾 豊先生の研究室に在籍していました。松尾先生が「Deep Learningはすごい」と言って紹介してくれたのが、今では関連書籍に必ず登場する「ILSVRC(ImageNet Large Scale Visual Recognition Competition)」コンペでの画像分類タスクの結果でした。Deep Learningを使用したカナダのトロント大学のチームが他のチームのモデル性能を10%近く引き離して勝利したのです。当時、日本国内でDeep Learningに注目している研究者は松尾先生を除けば私くらいで、ほかにはほとんど誰もいなかったのではないでしょうか。
それを契機にDeep Learning関係の英語の論文をチェックするようになりました。「Googleが猫の画像を自動判別した」という発表も同年の6月ごろにあり、海外では急激に注目度が高まっていました。
卒論では機械学習を金融分野に応用していましたが、当時修士論文で私が取り組んでいたのはポートフォリオ理論を応用してビジネスSNSで人脈を最適化する研究でした。こちらはDeep Learningと関連はないのですが、数理ファイナンスもDeep Learningも、どちらも背景は美しい数式に支えられているという共通点があります。
修士論文と並行してDeep Learningの文献を基にさまざまな言語で実装を行い、その成果をGitHubのDeep Learningリポジトリで公開しアップデートを続けていきました。これはすべて英語です。一方、同時期にブログでは日本語でDeep Learningについて情報発信をしていました。
編集者はGitHubを見ていた
修士を終えた私は電通に入社しました。就職は数理ファイナンス・金融工学に興味があったため、外資系の証券会社でトレーダーのインターンなどをやってみたのですが、どうもしっくりきませんでした。当時私は「社会に対する技術のアウトプットはどのような形が適しているか」を考えていたのですが、その解決には経験が不足していると感じました。そこで、アウトプット表現を常に専門的に考えている電通を選んだのです。電通ではデジタルクリエイティブ分野でアプリの企画や制作、ディレクションを主に行っていました。
並行して、GitHubではPython、C、C++、Java、Scala、Goといった様々な言語でDeep Learning実装をアップデートしていきました。そのGitHubを見たPackt Publishingの編集者から書籍執筆の打診が来たのです。当時JavaによるDeep Learningの書籍タイトルはなかったため、「Javaにフォーカスして書いてほしい」という依頼でした。現在ではPackt Publishingから“Machine Learning in Java”や“R Deep Learning Essentials”といったタイトルも出版されていて、機械学習やDeep Learningに力を入れている出版社です。
Deep Learningに使用する言語はPythonがスタンダードですが、Javaはエンジニアの数が大変多く、そうした技術者のDeep Learning入門への入り口になる本の出版には意義があると考えて引き受けました。数式やコードは通常使っているもので良いのですが、英国の出版社なので解説は英文で書かなくてはなりませんでした。
“Java Deep Learning Essentials”の上梓
執筆に取りかかる同時期に、電通からGoogleのニューヨークオフィスへ出向することになりました。ニューヨークでの仕事は短期間でしたが、グローバル企業向けの企画に実装メインで取り組みました。VRなどの実装も経験しました。
米Googleの印象として「こうしたワークライフのスタイルは良いな」と思いました。一方、当時はちょうどGoogleを子会社とする持株会社Alphabetが設立された時期だったので、社内は変化の予感で少し落ち着かない感じでもありました。
私はといえば、Googleにいた期間のプライベートな時間はすべて書籍の執筆に充てていました。これはなかなか苦しい体験でした。楽観的な性格も手伝って、これまで何をするにしても「どうにかなる」と思ってきたのですが、この時ばかりは「これは完成できないのでは……」と半分諦めかけたこともありました。当時は毎週末にシェイクシャックに行くと決め、それを楽しみに仕事や執筆を続けているという状態でしたが、どうにか12月に脱稿し、2016年5月に“Java Deep Learning Essentials”の刊行に漕ぎつけました。この本はその後自分で日本語に翻訳し(『Deep Learning Javaプログラミング 深層学習の理論と実装』(インプレス刊))、現在では日本語で読んでいただくことができます。
“Java Deep Learning Essentials”ではスクラッチでDeep Learningを実装するところから始め、ライブラリDeepLearning4Jについて解説し、さらにPythonのライブラリTheane、TensorFlow、Caffeを紹介しています。スクラッチでやってみることは重要で、数式を実装に落とし込むことはより明晰な理解につながります。私自身、GitHubでもフルスクラッチで実装するという勉強法をとっていました。
Pythonの強みはライブラリとツールの充実
現在、Deep Learningに使用される言語はPythonを使用するケースが多いですが、これはライブラリやツールなどが充実しているためで、数式を実装するだけならばJavaとPythonでは大きな違いはありません。しかし、実際にDeep Learningを使用していく際にはどちらを使用するかで大きな違いが生じます。
TensorFlowはPythonで扱える代表的なライブラリですが、Python は関連したライブラリが充実しています。Deep Learningには大量の入力データが必要ですが、データを集めさえすれば効率的に学習できるわけではありません。Deep Learningに適した形にデータを加工する細々とした前処理が必要で、TensorFlowをはじめとしたPythonのライブラリにはこれを代替してくれるAPIが揃っているため、開発時間を大きく短縮できるのです。利用者が多いとこうした環境もどんどん整っていきますから、Python、TensorFlowの優位性は当分揺るぎそうにありません。もし専門的に使用している言語がない場合はPythonでDeep Learningを習得するのが早道でしょう。
Deep Learningの成果を役立てるために
各大学ではDeep Learningを学べる講座や研究室が増加しています。現在の学生たちが順調に育ってくれば、将来的に日本でも研究者は不足しないと思います。
しかし、一方でDeep Learningのコモディティ化は進んでいるものの、データサイエンティストに加えアプリケーションエンジニア不足が問題になってきます。効果的に学習できたモデルは学習済モデルとしてずっと利用可能ですが、現実社会でそれを役立てるためには、アプリケーションに落とし込む必要があります。
そうした場面では、現在システム開発やアプリケーション開発に携わっているエンジニアがDeep Learningを理解し、成果の利用をスムーズにできるようにしていくことが大切です。それによって今後のDeep Learningの発展、普及のスピードが決定されていくのだと思います。
次回に続く