機械学習/ディープラーニング勉強としてやってきたこと -読んだ本編-

# 初めに
2018年1月頃から機械学習/ディープラーニングの本を読み始め、6月頃からコードを書くようにしてきました。今振り返ると「これはいい本だった」「もっと先にこれをやればよかった」などの気付きがあるので、それを紹介します。[kaggle初心者の私が3ヶ月でソロゴールドを獲得した方法](https://www.rco.recruit.co.jp/career/engineer/blog/kaggle_by_novice_engineer/)のようにすぐに結果を出した！なんてことはなく、普通の社会人が休日だけ勉強した軌跡です。

# 対象読者
これから機械学習/ディープラーニングを勉強しようという方

# 勉強前後の自身の能力
||勉強前（2017年12月以前）|現在|
|---|---|---|
|数学|一応理系だったものの線形代数、確率はほぼ忘れていた。当時は行列の掛け算もできない、分散の定義も言えないというありさま|相変わらず苦手だが、行列の掛け算はできるように。分散と標準偏差の違い、ベイズの定理くらいはわかるようになった|
|理論|機械学習/ディープラーニングの違いすら怪しかったかも|機械学習はk-近傍法あたりはわかるが、ランダムフォレスト、SVMは説明する自信なし。ディープラーニングはMLP、CNN、RNNの初歩的なことは理解したつもり|
|実装|pythonすら触ったことなし|python、numpyはある程度マニュアルを読まずに書ける。Tensorflow、Kerasはマニュアルを読みながら書ける程度|

# 読んだ本（:star:の数は初学者へのお勧め度です）
* 2018年5月以前（コードは書いていなかった時期）
    * :star::star:[機械学習入門 ボルツマン機械学習から深層学習まで](https://www.amazon.co.jp/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E5%85%A5%E9%96%80-%E3%83%9C%E3%83%AB%E3%83%84%E3%83%9E%E3%83%B3%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%8B%E3%82%89%E6%B7%B1%E5%B1%A4%E5%AD%A6%E7%BF%92%E3%81%BE%E3%81%A7-%E5%A4%A7%E9%96%A2%E7%9C%9F%E4%B9%8B-ebook/dp/B06Y41YGNW)
        * 一番初めにこれを読みました。会話形式で読みやすかったです。しかし、ボルツマン機械学習は未だ理解できていません・・・
    * :star::star:[ITエンジニアのための機械学習理論入門](https://www.amazon.co.jp/IT%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E7%90%86%E8%AB%96%E5%85%A5%E9%96%80-%E4%B8%AD%E4%BA%95%E6%82%A6%E5%8F%B8-ebook/dp/B016Q22IX2/ref=sr_1_1?s=digital-text&ie=UTF8&qid=1546684405&sr=1-1&keywords=it%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E7%90%86%E8%AB%96%E5%85%A5%E9%96%80)
        * 次にこれを読みました。ここで何となく理論を学びました。ただ、自分には数式が若干辛かったです
    * [イラストで学ぶ　機械学習　最小二乗法による識別モデル学習を中心に (ＫＳ情報科学専門書)](https://www.amazon.co.jp/%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E3%81%A7%E5%AD%A6%E3%81%B6-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92-%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%97%E6%B3%95%E3%81%AB%E3%82%88%E3%82%8B%E8%AD%98%E5%88%A5%E3%83%A2%E3%83%87%E3%83%AB%E5%AD%A6%E7%BF%92%E3%82%92%E4%B8%AD%E5%BF%83%E3%81%AB-%EF%BC%AB%EF%BC%B3%E6%83%85%E5%A0%B1%E7%A7%91%E5%AD%A6%E5%B0%82%E9%96%80%E6%9B%B8-%E6%9D%89%E5%B1%B1%E5%B0%86-ebook/dp/B00LUMVZWE/ref=sr_1_1?s=digital-text&ie=UTF8&qid=1546684623&sr=1-1&keywords=%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E3%81%A7%E5%AD%A6%E3%81%B6%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92)
        * そして次がこれです・・・。これは初学者には全くお勧めしません！「イラストで学ぶ」に騙されてはいけません。あまり機械学習を勉強していないからというのも関係しているかもしれませんが、未だにほとんど理解できていません・・・。でも、書かれていることは役に立ちそうな気はするので、いつかは理解できるといいなって感じです
    * :star::star::star:[やさしく学ぶ 機械学習を理解するための数学のきほん ~アヤノ&ミオと一緒に学ぶ 機械学習の理論と数学、実装まで~](https://www.amazon.co.jp/dp/4839963525?aaxitk=cKL6RDl5V9F-5M-Q.Y02Eg&pd_rd_i=4839963525&pf_rd_p=a1a1201a-b39a-4f0b-886e-09739a3e746a&hsa_cr_id=6654055200403&sb-ci-n=productDescription&sb-ci-v=%E3%82%84%E3%81%95%E3%81%97%E3%81%8F%E5%AD%A6%E3%81%B6%20%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%82%92%E7%90%86%E8%A7%A3%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E6%95%B0%E5%AD%A6%E3%81%AE%E3%81%8D%E3%81%BB%E3%82%93%20~%E3%82%A2%E3%83%A4%E3%83%8E%26%E3%83%9F%E3%82%AA%E3%81%A8%E4%B8%80%E7%B7%92%E3%81%AB%E5%AD%A6%E3%81%B6%20%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E7%90%86%E8%AB%96%E3%81%A8%E6%95%B0%E5%AD%A6%E3%80%81%E5%AE%9F%E8%A3%85%E3%81%BE%E3%81%A7~)
        * もう少し基本的な数学と理論を勉強しないとと思い読み始めたのがこれです。丁寧に書かれていることと、これまでの多少の蓄積もあり、ここでかなり理解できるようになった気がします
    * :star::star:[詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~](https://www.amazon.co.jp/%E8%A9%B3%E8%A7%A3-%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-TensorFlow%E3%83%BBKeras%E3%81%AB%E3%82%88%E3%82%8B%E6%99%82%E7%B3%BB%E5%88%97%E3%83%87%E3%83%BC%E3%82%BF%E5%87%A6%E7%90%86-%E5%B7%A3%E7%B1%A0-%E6%82%A0%E8%BC%94/dp/4839962510)
        * そしてついにディープラーニングに入っていきます。Kerasすげー、Tensorflowよくわからん・・・と思った記憶があります。今考えるとCNNなしにRNNに入るのは珍しいですね。当時はLSTMなんて確実に理解できていませんでしたが、Deep Learning基礎講座受講により理解できるようになりました（巣籠先生、いつもお世話になっています）
    * :star::star:[仕事ではじめる機械学習](https://www.amazon.co.jp/%E4%BB%95%E4%BA%8B%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92-%E6%9C%89%E8%B3%80-%E5%BA%B7%E9%A1%95/dp/4873118255)
        * この本は機械学習をどう業務に適用するかが中心になっていたと思います。初めに機械学習を適用しない方法を考えなさいと書かれていたのが印象的です
    * :star:[戦略的データサイエンス入門 ―ビジネスに活かすコンセプトとテクニック](https://www.amazon.co.jp/%E6%88%A6%E7%95%A5%E7%9A%84%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9%E5%85%A5%E9%96%80-%E2%80%95%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E3%81%AB%E6%B4%BB%E3%81%8B%E3%81%99%E3%82%B3%E3%83%B3%E3%82%BB%E3%83%97%E3%83%88%E3%81%A8%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Foster-Provost/dp/4873116856)
        * 上の本の流れで読んでみたのはいいものの当時の自分にはあまり理解できませんでした
* 2018年6月以降（コードを書き始めた時期）
    * :star::star::star:[ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装](https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E4%BD%9C%E3%82%8BDeep-Learning-%E2%80%95Python%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%81%AE%E7%90%86%E8%AB%96%E3%81%A8%E5%AE%9F%E8%A3%85-%E6%96%8E%E8%97%A4-%E5%BA%B7%E6%AF%85/dp/4873117585/ref=sr_1_1?s=books&ie=UTF8&qid=1546686311&sr=1-1&keywords=%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E4%BD%9C%E3%82%8Bdeep+learning)
        * Deep Learning基礎講座を受講できることになったので、そろそろコードも書いてみるかということでこの本を買いました。この本はお勧めです！理論と実装がどちらも丁寧で何度もわからなくなっては読み返しています。Tensorflowなどを使うと誤差逆伝播などは目に見えなくなってしまいますが、それがわかるのもいいですね
    * :star::star:[直感 Deep Learning ―Python×Kerasでアイデアを形にするレシピ](https://www.amazon.co.jp/Deep-Learning-%E2%80%95Python%C3%97Keras%E3%81%A7%E3%82%A2%E3%82%A4%E3%83%87%E3%82%A2%E3%82%92%E5%BD%A2%E3%81%AB%E3%81%99%E3%82%8B%E3%83%AC%E3%82%B7%E3%83%94-Antonio-Gulli/dp/4873118263/ref=sr_1_4?s=books&ie=UTF8&qid=1546686649&sr=1-4&keywords=%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E4%BD%9C%E3%82%8Bdeep+learning%EF%BC%92)
        * 幅広い分野へのKeras適用について書かれています。これまでGAN、WaveNet、強化学習の知識がなかったため役立ちました
    * :star::star::star:[ゼロから作るDeep Learning ❷ ―自然言語処理編](https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E4%BD%9C%E3%82%8BDeep-Learning-%E2%80%95%E8%87%AA%E7%84%B6%E8%A8%80%E8%AA%9E%E5%87%A6%E7%90%86%E7%B7%A8-%E6%96%8E%E8%97%A4-%E5%BA%B7%E6%AF%85/dp/4873118360/ref=sr_1_1?s=books&ie=UTF8&qid=1546686649&sr=1-1&keywords=%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E4%BD%9C%E3%82%8Bdeep+learning%EF%BC%92)
        * この本もお勧めです。前回のもの同様何度も読み返しています
    * :star::star:[Pythonデータサイエンスハンドブック ―Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習](https://www.amazon.co.jp/Python%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9%E3%83%8F%E3%83%B3%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-%E2%80%95Jupyter%E3%80%81NumPy%E3%80%81pandas%E3%80%81Matplotlib%E3%80%81scikit-learn%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E3%80%81%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92-Jake-VanderPlas/dp/4873118417/ref=sr_1_1?s=books&ie=UTF8&qid=1546686976&sr=1-1&keywords=python%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9%E3%83%8F%E3%83%B3%E3%83%89%E3%83%96%E3%83%83%E3%82%AF)
        * pandas、matplotlib、scikit-learnなどの知識が弱かったため、その補完として買い、まだ読んでいる最中です。特にscikit-learnに感動しています（ディープラーニングを除けば万能な印象）

# お勧めの本
読んだ（読んでる）本は以上です。今からディープラーニングを勉強してみようという方には、

* やさしく学ぶ 機械学習を理解するための数学のきほん ~アヤノ&ミオと一緒に学ぶ 機械学習の理論と数学、実装まで~
* ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
* ゼロから作るDeep Learning ❷ ―自然言語処理編

をまずはお勧めします。その後、利用するフレームワークに応じた本を読むのがいいのではないでしょうか？それとやはり実践ですね。本を眺めているとわかった気になるのですが、いざ実装しようとすると手が動かないことが多くありました。自分自身は少ししかやっていないですが、写経もいいと思います。今後、当面本は買い足さず、これまで買った本を読み返すことと実践で鍛える予定です。