目次
- イントロ ← 今ココ
- Scikit-learn・Keras
- モデルの性能指標・評価方法
- データの前処理・データ拡張
- 早期終了(early stopping)
- 転移学習
- ハイパーパラメータのチューニング
- モデル圧縮
- 応用
はじめに
大学3年生のとき、小林雅一『AIの衝撃 人工知能は人類の敵か』という本をなんのきなし読んだことがあります。その本の中で「最先端のAIを実装できるのは世界でも50人くらいの研究者・大学院生くらいだ」といった文章を読み、なんだかすごそうという動機で機械学習に触れ始めました。そのころちょうど、TensorFlow 0.0.5が公開されて騒がれていたことを覚えていますが、当時ディープラーニングとは何かすらまったく分かりませんでした。それから約2年の月日が経ちますが、TensorFlowをはじめとしたフレームワークの普及もあってか「最先端のAI」というものを研究し実装している人たちの規模は数百倍にも膨れ上がったのではないでしょうか(もちろん昔からTheanoやTorch、PyBrainなどのライブラリはありました)。
また、フレームワークの登場により非研究者でもカジュアルにディープラーニングというものに触れることができるようになりました。TensorFlowやChainerなどに触れたことがある方ならば、「アイドルの顔画像認識」や「線画の自動彩色」といった魅力的な作品を知っていると思います。一般人でもディープラーニングを学ぶ学習教材や環境は整っています。Webで読めるテキストのMichael Nielsen『Neural networks and deep learning』(邦題:ニューラルネットワークと深層学習)やUDACITYのオンライン教材『DEEP LEARNING』、さらに皆さんもご存知の斎藤康毅『ゼロから作るDeep Learning ― Pythonで学ぶディープラーニングの理論と実装』(オライリージャパン)もあります。この本は1万冊売れればすごいと言われている出版業界でも異例の7万部もの反響を得ているようです。世間の関心がそれだけ高いことがうかがい知れますね。
目的と動機
導入が長くなりましたが、本記事は「三平方の定理や余弦定理の証明は分からなくてもまずはそれで問題を解いてみよう!」というノリで書きました。その後で「なんでそうなっているのか?」と疑問が生じて勉強してみるという逆向きの学習もありだと思います。
また、データを活用したちょっとリッチな推論機能を自分のアプリに組み込む際にどうやって開発しようかなと考えて、あとですぐに動かせるカタチで残しておきたいと思いました。
最後の理由としてハッカソンやプロトタイプ作成のための実践的な入門というものを念頭においています。先日、ハッカソンに参加したのですが多くのチームがアイディア出しの段階では、プロダクトやサービスのある機能を「AI」にひとまず押し込んで「便利」になるというアイディアの体裁を取っていましたが、短期間で開発するというハッカソンの性質上どのチームも実現することはできなかったようです。早いサイクルの中でAIという機能も組み込んで、コンセプト検証ができたらいいなという動機で書きました。
この分野はサイエンスとエンジニアリングが重なる領域なので「実験の諸元を明確にしておく」・「性能指標と評価手法をちゃんとする」ということだけは厳しくしておいて、あとはできるだけラクをしようと思います。ちなみに「怠け者のための〜」というのは、プログラマの三大美徳にあやかって最小限の努力で最高の結果を得たいという気持ちで付けてみました。
使用するライブラリのバージョン
使用したPythonやKerasなどのバージョンは以下のとおりです:
- Python 3.6.2(Python2.x系でも動くかな)
- Numpy 1.13.1
- Pandas 0.20.3
- Matplotlib 2.0.2
- Seaborn 0.8.0
- Scikit-learn 0.19.0
- Keras 2.0.8
- TensorFlow 1.3.0
おわりに
アプリに組み込むためのニューラルネットを実装し学習させながら、この記事を書きました。みなさんからツッコミやコメントをいただて良い記事に育てていけたらうれしいです。