ゼロから作るDeep Learningで素人がつまずいたことメモ: まとめ

# はじめに

ふと思い立って勉強を始めた[「ゼロから作るDeep LearningーーPythonで学ぶディープラーニングの理論と実装」](https://www.oreilly.co.jp/books/9784873117584/)が読破できたので、感想やこれから読む方に向けてのメッセージをまとめます。購入を悩んでいる方や、読み始めたけど途中で挫折してしまった方の参考になれば幸いです。

:::note info
この記事は個人で作成したものであり、内容や意見は所属企業・部門見解を代表するものではありません。
:::

# 良かった点

最後まで読んだ結果、「ディープラーニング完全に理解した[^1]」と人に言えるようになりました😄

# 困った点

「ゼロから作る」とあるので、この本を読みながら実際に作ってみようと思われる方は多いかと思います。私もそんな1人だったのですが、この本だけで作るのは大変でした。具体的に困った点をまとめます。
　　
- Pythonは少し知っている必要があります
　　
この本の1章は「Python入門」ですが、内容はかなりあっさりしていますので、この1章だけではPythonのプログラミングができるようにはならないと思います。私はPythonをかじっていたので良かったのですが、全く触ったことがない方は、他の入門書や入門サイトを併用されることをお勧めします。
　　
- 後半はコードの説明が減るので大変です
　　
3章まではコードの説明も多いため、本を読みながら実際に実装できるかと思います。ただし、4章からはだんだん説明が省かれるようになり、GitHubで公開されているコードを見てください、参考文献を参照してください、という場面が増えていきます。最終章ではこの本で学んだことの集大成として、MNISTデータの認識精度が99%を超えるCNNを実装します。でもこの章にコードの説明は一切ありません。
  前半を、なんとなく本の写経で実装していた私は、後半で動かない部分が出てきた時の原因調査に苦戦しました。特に、バッチ処理に対応させるための実装や、逆伝播の実装、Adamの説明が少なかった部分は大変でした。
　　
- 微分の基礎知識はあった方が良いです
　　
この本は4章の数値微分の説明が非常にていねいです。でも5章の合成関数の微分からは、微分に関する詳細説明が省かれ始めます。そのため、微分についても他の入門書や入門サイトを併用されることをお勧めします。私は記号の読み方すら忘れていたので、高校生向けのサイトを見ながら前に進みました。
　　
- GitHubで公開されているコードは、本の説明と完全には一致していません
　　
  GitHubで公開されているコードは、本の説明よりも高度な実装になっているものがあります。例えば8章のネットワークを実装するコードでは、ループの中でパラメーターの初期値を算出する際に、無駄な計算を繰り返さないように式を変形して、共通部分をループの外に出してあります。処理効率を上げるために当たり前のことなのですが、ソースを見てロジックを理解しようとする方にとっては少し難しいコードになってしまいます。
私は勉強のためのコーディングと割り切って、あまり最適化しない形で実装しました。

# この本のオススメの読み方

「困った点」の内容は、いずれも紙面の都合によるところが大きいのではないかと想像しています。万人を対象にすることはできませんし、Pythonの説明、微分のおさらい、登場するアルゴリズムの説明、事細かなコードの解説などを終わりまで続けていたら、何冊あっても終わらないでしょう。

幸いなことにこの本はベストセラーで世の中に読者があふれており、ネットに情報がたくさんあります。そのため、つまずいた時はググりながら進むのがお勧めです。私もいろいろな情報を参考に読破できました。

私が参考にしたサイトや実装したコードなどは、章ごとにメモにまとめてQiitaに投稿しています。もしよろしければ参考にしてください。なお、私の持っている本は2019年5月31日発行の初版第13刷で、勉強に使った環境はmacOS Mojave + Anaconda 2019.10、Pythonのバージョンは3.7.4です。

|本の内容| Qiitaに投稿したメモ                                          |
|----| ------------------------------------------------------------ |
|1章 Python入門| [ゼロから作るDeep Learningで素人がつまずいたことメモ:1章](https://qiita.com/segavvy/items/1945aa1a0f91a1473555) |
|2章 パーセプトロン| [ゼロから作るDeep Learningで素人がつまずいたことメモ:2章](https://qiita.com/segavvy/items/d8e9e70437e35083a459) |
|3章 ニューラルネットワーク| [ゼロから作るDeep Learningで素人がつまずいたことメモ:3章](https://qiita.com/segavvy/items/6d79d0c3b4367869f4ea) |
|4章 ニューラルネットワークの学習| [ゼロから作るDeep Learningで素人がつまずいたことメモ:4章](https://qiita.com/segavvy/items/bdad9fcda2f0da918e7c) |
|5章 誤差逆伝播法| [ゼロから作るDeep Learningで素人がつまずいたことメモ:5章](https://qiita.com/segavvy/items/8707e4e65aa7fa357d8a) |
|6章 学習に関するテクニック| [ゼロから作るDeep Learningで素人がつまずいたことメモ:6章](https://qiita.com/segavvy/items/ca4ac4c9ee1a126bff41) |
|7章 畳み込みニューラルネットワーク| [ゼロから作るDeep Learningで素人がつまずいたことメモ:7章](https://qiita.com/segavvy/items/8541c6ae1868d9b2b805) |
|8章 ディープラーニング| [ゼロから作るDeep Learningで素人がつまずいたことメモ:8章](https://qiita.com/segavvy/items/3eb6ea0ea2af68c96fcf) |

# おわりに
この本のおかげで、ディープラーニングへの理解が深まりました。著者の斎藤康毅さんに感謝しています。また、みなさんのからのいいね、ストック、はてなブックマークなどに励まされ、途中であきらめずに読破することができました。ありがとうございました。

このメモが、後に続く方の参考になれば幸いです。

# 追伸

続編の[「ゼロから作るDeep Learning❷ーー自然言語処理編」](https://www.oreilly.co.jp/books/9784873118369/)も読み終えたのでメモにまとめました。
→[「ゼロから作るDeep Learning❷で素人がつまずいたことメモ: まとめ」](https://qiita.com/segavvy/items/0f2980ad746d797dd8c1)

[^1]: 正確には「完全に理解した」から「なにもわからない」に少し足を突っ込むことができる感じです。なお、エンジニアの言う「完全に理解した」については、モーリさんが  [IT技術の最高熟練度を表す「チョットデキル」に先行するプルシェンコの「スケートチョットデキル」を完全に理解した](https://mohritaroh.hateblo.jp/entry/2019/08/18/164000) で歴史を紐解いています。