機械学習に入門した話

気になりつつもスルーし続けてきた機械学習学習を始めて2ヶ月半になります。ネタとしてはありふれているので恐縮ですが(Impostor Syndrone)、自分の中で一区切りついたのでこれまでやったことをまとめます。

## やったこと

**受講したオンラインコース**

- [DL4US](http://dl4us.com/)
- [Coursera: Machine Learning](https://www.coursera.org/learn/machine-learning/home/welcome)

**読んだ本**

- [ITエンジニアのための機械学習理論入門](https://www.amazon.co.jp/dp/B016Q22IX2/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)
- [ゼロから作るDeep Learning](https://www.oreilly.co.jp/books/9784873117584/)
- [詳解 ディープラーニング　TensorFlow・Kerasによる時系列データ処理](https://www.amazon.co.jp/dp/B072JC21DH/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)
- [深層学習 (機械学習プロフェッショナルシリーズ)](https://www.amazon.co.jp/dp/B018K6C99A/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)
- [Python Machine Learning: Machine Learning and Deep Learning with Python, scikit-learn, and TensorFlow, 2nd Edition](https://www.amazon.co.jp/dp/B0742K7HYF/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)

**まとめたブログ**

- [kerasを使ったreuter記事分類のexampleをなぞる](http://kentakudo.hatenablog.com/entry/2018/01/28/193734)
- [Seq2Seqを使った英日翻訳機](http://kentakudo.hatenablog.com/entry/2018/02/18/221617)
- [GANについて](http://kentakudo.hatenablog.com/entry/2018/03/02/060701)
- [強化学習について](http://kentakudo.hatenablog.com/entry/2018/03/10/194447)
- その他公開に至らなかった記事いくつか

とにかく「[ITエンジニアのための機械学習理論入門](https://www.amazon.co.jp/dp/B016Q22IX2/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)」がオススメです。これを最初にじっくり2週読んだことで、機械学習の基本となる考え方は抑えられた気がします。「[ゼロから作るDeep Learning](https://www.oreilly.co.jp/books/9784873117584/)」は去年一度読んだのですが、それでやめてしまったため体系的な知識としてはあまり身につきませんでした。今回改めて2週しましたが、やはり深層学習を始めるにあたってこれ以上の本はないように思えます。この二冊のおかげで[Courseraのオンラインコース](https://www.coursera.org/learn/machine-learning/home/welcome)はほとんど復習のような形で進めることができました。コースの最後の動画は噂通り涙なしでは見れない感動ものでした。

[DL4US](http://dl4us.com/)は東京大学の松尾研究室が主催している無償のオンラインコースで、そもそも機械学習を始めたきっかけはこれの第１期生として当選したことでした。(第二期の開催も予定しているそうなので気になる人は要チェック。)iLectというプラットフォーム上で一人一つGPUインスタンスがセットアップされた状態で与えられるという、無償とは思えないとても贅沢なコースでした。内容は深層学習にフォーカスしたもので、多層ニューラルネットワークの入り口からCNN、RNN、CNN+RNNモデル、GANそしてDQNに到るまで深層学習のメインストリームを総ざらいします。これを2ヶ月半で行うので内容としてはいっぱいいっぱいというか、浅く広くという形にならざるを得ないのですが、適宜関連する内容の本を読んだり、ネット記事を追いかけてブログにまとめたりすることで学習を進めました。

特にCNN/RNNに力を入れて学び、実際に動くものを作るところまでトライしました。CNNに関しては前述の「ゼロから作る〜」がオススメで、RNNに関しては「[詳解 ディープラーニング　TensorFlow・Kerasによる時系列データ処理](https://www.amazon.co.jp/dp/B072JC21DH/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)」が大変オススメです。「ゼロから作る〜」よりもやや高度な内容を含みますが、RNNを扱っている入門+αレベルの本はなかなかみつからないので貴重な存在です。青い表紙で有名な「[深層学習 (機械学習プロフェッショナルシリーズ)](https://www.amazon.co.jp/dp/B018K6C99A/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)」はRNNの理解を深める目的で読みました。内容は「詳解〜」よりもさらに高度なので全てを理解することはできませんでしたが、自己符号化器などの他の本にない内容も扱っているのでオススメです。最後に機械学習をアプリケーションとして構築する部分を学ぶために「[Python Machine Learning: Machine Learning and Deep Learning with Python, scikit-learn, and TensorFlow, 2nd Edition](https://www.amazon.co.jp/dp/B0742K7HYF/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)」の該当の章を読みました。この本の第一版は各ブログでオススメされているのですが、最新版がでていたのでそちらを読みました。そもそもは機械学習を全般的に扱った本ですが、Flaskを使ったアプリの構築について学びたいときはオススメです。またtensorflowの使い方を詳しく解説した章もあり、丁寧に説明されていて非常にためになりました。
このオンラインコースと参考書での学習を平行して行うことで互いに足りない部分を補うことができたこと、またいろんな角度から知識を吸収することで効率よく学ぶことができたのはよかったです。
GANや強化学習はとてもエキサイティングでホットな話題ですが、今回はあまり深掘りすることができませんでした。また最新情報の収集はtwitterがメインで行なっていますが、機械学習界隈で有名な[@piqcy](https://twitter.com/icoxfog417?lang=ja)さんが毎週出している[ニュースレター](https://www.getrevue.co/profile/icoxfog417/)は必読です。

## これから
GAN/強化学習については動くものを作ることも含めもっと深く理解したいです。GANのアイデアを生み出したIan Goodfellow氏が書いた本が[松尾研によって翻訳されている](https://www.deeplearningbook.me/)のでこれは読んでみなくてはと思っています。また強化学習についても[これは必読、という本がある](https://www.amazon.co.jp/dp/B008H5Q8VA/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)のを認識しつつスルーしています。
機械学習を本格的にやろうと思ったら線形代数と統計の力不足を感じます。またパターン認識などの深層学習ブーム以前からある手法も抑えておきたいです。それぞれのモデルのアイデアの元となる論文を読むこと、また日進月歩の分野なので日々公開される論文に目を通すことも必要かなと思っています。
[「ゼロから作る〜」の続編がRNNをテーマに出版予定](https://www.oreilly.co.jp/editors/archives/2018/02/ann-public-review-machine-learning-from-scratch.html?utm_campaign=Revue%20newsletter&utm_medium=Newsletter&utm_source=piqcy)との話を目にしたので注目しています。また機械学習のアプリケーションの方法論やプラットフォームも毎週最新情報がでているので、実際に触ったりアプリを作ってみたりして試行錯誤したいです。