Deep Learning Book (和訳: 深層学習) を第2部まで読んだので紹介する


Deep Learningの基本から発展までを網羅しているとして有名な書籍であるDeep Learning Bookを、全3部構成のうち第2部まで読んだので簡単に紹介したいと思います :star2: 

# 本記事について

前述の書籍Deep Learning Bookこと[Deep Learning](https://amzn.to/2yZZBsk)を、全3部構成のうち(実際は第1部は飛ばし気味に)第2部まで読みました。
Deep Learningを勉強したい人にはとても良い書籍だと思ったので、どういう書籍なのか、どういう人にオススメか、どういう風に読み進めたら良いか、内容の一部、などを簡単に紹介したいと思います！
Deep Learningを勉強したい方、参考書籍の購入に迷っている方がいたら、参考になると幸いです。

目次はこんな感じ :soon: 

- 書籍について
- こんな人にオススメ
- 読み方のオススメ
- ちょっと内容紹介
- 最後に

# 書籍について

まず、書籍自体は http://www.deeplearningbook.org/ で公開されています。
サイト上であれば無料で読めますので、とりあえず見てみると良いと思います。
和訳版は https://www.deeplearningbook.me/ で公開されていましたが、[既に「深層学習」として発売済み](https://amzn.to/2tNK3m9)につき、現在は公開停止されています。

原著の Deep Learning Book は、Deep Learningの世界では大変有名な Ian Goodfellow, Yoshua Bengio, Aaron Courville によって書かれ、2016年末に発売されました。
和訳である「深層学習」のWebサイトでの言葉を借りると、`「深層学習の勉強のための決定版ともいえる教科書」`とのことです。

その言葉の通り、かなり濃い内容になっています。
第1部では、Deep Learningを学ぶために必要になるような数学の基礎、機械学習の考え方の基礎などが5章に分けて解説されています。
第2部では、Deep Learningの基礎から応用まで広い範囲をカバーしつつ、教師有り学習の枠組みを中心に、重要な分野が詳解されています。
第3部では、より発展的な内容として、最新の研究成果であったり、現在まさに研究対象となっているような分野について紹介されています。


下記に、 http://www.deeplearningbook.org/ から目次を引用しておきます。

```
- 1 Introduction
# Part I: Applied Math and Machine Learning Basics
- 2 Linear Algebra
- 3 Probability and Information Theory
- 4 Numerical Computation
- 5 Machine Learning Basics
# Part II: Modern Practical Deep Networks
- 6 Deep Feedforward Networks
- 7 Regularization for Deep Learning
- 8 Optimization for Training Deep Models
- 9 Convolutional Networks
- 10 Sequence Modeling: Recurrent and Recursive Nets
- 11 Practical Methodology
- 12 Applications
# Part III: Deep Learning Research
- 13 Linear Factor Models
- 14 Autoencoders
- 15 Representation Learning
- 16 Structured Probabilistic Models for Deep Learning
- 17 Monte Carlo Methods
- 18 Confronting the Partition Function
- 19 Approximate Inference
- 20 Deep Generative Models
```

# こんな人にオススメ

### 前提

まず、私はDeep Learningの経験はほぼない状態で本書籍に手を出しました。

- 基礎となる数学はなんとなく覚えている
- 機械学習自体は学生自体の研究などで一部経験がある
    - 例になるか分かりませんが、PRMLの1~4章を読んだことがある(なんとなくの理解)
    - ニューラルネットワークや誤差逆伝播法とかはなんとなく理解してる(実装経験ナシ)
    - Deep Learningについては頻出ワードは聞いたことがあるやつもあるくらい
        - Dropoutは聞いたことがあったけどBatch Normalizationは知らなかった
- コンピュータサイエンスは大学で習うようなことは覚えてたり覚えてなかったり(成績は大変悪かった)
- 英語にはそこまで苦手意識はない

そのため、冒頭にも書きましたが第一部は結構飛ばしてます。2,3,4章はページめくりながら知らなそうな内容や気になる内容だけ目を通しつつ、5章も読む量は増やしつつ同様に一部だけ読む感じで終えました。

### オススメ対象

その前提の上で、次のような方にオススメします。完全に主観ですのでその点はご留意ください :bow: 

- 大学レベルの線形代数や解析学はある程度分かっていて、Deep Learningを勉強したい方
- Deep Learningの経験は少しあり、他の応用について学びたい方 (CNNは経験あるので他を知りたい、など)
- Deep Learningの経験は少しあり、基礎や理論の部分を学びたい方
- Deep Learningに精通しており、辞書的に使いたい方
- 英語が苦手ではない方 <- **重要**

逆に、(基本的にはオススメなんですが)次のような方にはあんまり勧められません。

- 機械学習を1から勉強したい方
- Deep Learningをとりあえず動かしたい方
- 英語が苦手な方 <- **重要**

### 理由

どっちかというとオススメしづらい点についてです :umbrella2: 

- 英語なので、Deep Learning以外については日本語の解説書を読んだほうが良い

分厚い英語の書籍を読むというのは人によっては結構しんどいと思います。私は1日5ページずつくらい読んでましたが、第二部までで400P以上あるため、第二部の12章までもろもろで3ヶ月ほどかかりました。
また、説明も分かりやすいところもあれど、分かりづらいところもまぁまぁあるのが現実です。
時間的な面や体力的な面も踏まえて、基礎的な数学や機械学習についてはたくさん日本語の書籍があると思うので、そちらで勉強することをオススメします。
例えば、[ITエンジニアのための機械学習理論入門](https://amzn.to/2tZv5Jj)は機械学習自体がはじめての方にも分かるように基本的な考え方や数式などが説明されており、ハードルが低いです。

和訳もでとるやん！ :cat: という話もあると思いますが、個人的には他の本を読んだほうが良いと思いました(後述します)。

- 教科書的な進み方なので、実践的な進め方ではない

よくある参考書のようなサンプルプログラムのようなものはなく、教科書的にひたすら解説が続くような内容になっています。とりあえず手を動かしてみたい人には向かないでしょう。また、カバー範囲が広い分、前後の関連があまりないようなテクニックが紹介され続けるようなエリアもあります。
動くものを作りつつしっかりDeep Learningを学びたいという方は、有名ですが[ゼロから作るDeep Learning](https://amzn.to/2tZAKPm)がオススメです。
とりあえず動かして色んなことをやってみたい、という人は、別途TensorFlowやKeras等のライブラリのチュートリアルを触ったり、その解説書を読むと良いでしょう。

# 読み方のオススメ

### 和訳について

冒頭でも述べましたが、Deep Learning Bookは東京大学の松尾研究室のメンバーによって翻訳され、[2018年3月に和訳版が発売されています](https://amzn.to/2tNK3m9)。大変ありがたい限りです :bow: 

さて、じゃあこっちを読むほうが楽じゃないかという話ですが、個人的には原著を中心に併読することを勧めます。なかなか分厚いので会社など所属先で買ってもらえると良いですね。
これは私の経験になりますが、和訳になってしまうと(翻訳のプロではないと思うので)どうしてもところどころ分かりづらい部分が出てきてしまうように感じました。また、いかんせん日本語なのでなんとなくすらすら読めてしまい、半端な理解で進んでしまうこともありました(ここは自分の甘えかもしれないです :sob: )。
とはいえ英語の表現が難しいところもあるため、基本的に原著を読みつつも、難しいところは参考に併読するのが良いと思います。
英語の苦手度合いにもよると思うので、原著をWebで軽く読んでみてから日本語版の購入を考えても遅くないでしょう。参考になるかは分かりませんが私の場合、和訳も買いましたがあまり合わず、ほとんど原著でだいたい1時間半で3~5ページほどのペースで読みました。

### 他との併読について

全体を通してカバー範囲が広く、これ一冊で様々なことが書かれています。結果として、分かりやすい部分もあれば分かりづらい部分もあり、説明が省かれていたり、英語のニュアンスで理解が難しい点もあります。
一つの分野やテクニックとして有名なものであれば、適宜ググるなどして大雑把な理解を得てから読むことをオススメします。例えば10章はRNN等の章ですが、10.10のLSTMなどは先に概要を知ってから読まないと図が分かりづらいかと思います。概要紹介程度のものも多いため、気になったワードは別で調べるなりすると良いでしょう。幸いググるとQiitaをはじめたくさんの参考ブログがあるので、先人に感謝しつつ参考にさせてもらいましょう :ok_hand: 


# ちょっと内容紹介

色々書きましたが、書籍自体はそのカバー範囲と内容量から、他にはないDeep Learningの教科書と言えるものだと思います。
ここでは第2部である6章から12章について、ちょっとだけ内容を紹介します。

### 6. Deep Feedforward Networks

Deep Learningの基礎についての章です。最も基本的なネットワークであるFeedforward Network (=Multi Layer Perceptron)を対象に、Deep Learningに必要な要素が一つ一つ説明されています。
そもそもFeedforward Networkとはどのようなものなのか、どのような動きをしているのか、という点から始まり、勾配法、隠れユニット、誤差逆伝播法などの説明があります。
また、Architecture Designの節では、Deep Learningの性能の保証となるUniversal Approximation Theoremについても触れられています。

Universal Approximation Theoremについて、Deep Learning Bookを基に自分の理解をQiitaに投稿しているので、良ければ参考にしてください。
[ニューラルネットワークにおけるUniversal Approximation Theorem(普遍性定理)について](https://qiita.com/cfiken/items/e2047d9b27e6ef2a132b)

### 7. Regularization for Deep Learning

タイトルの通り、Deep LearningのRegularization(正則化)に関する章になります。
前半はDeep Learningというよりは、Penaltyなど一般的なRegularizationの手法の説明になります。ある程度理解がある方は飛ばし読みでも良いかもしれません。
後半も、Deep Learning特有というよりは、既存の概念をDeep Learningに適用するといった話が多いです。前章とは違って細かい手法の説明が続きます。いくつか挙げるなら`Early Stopping`, `Dropout`などは聞いたことがある方も多いと思います。

Dropoutについてもこの章を基にQiitaに解説を投稿しているので良ければ参考にしてください。
[Deep LearningにおけるDropoutの理解メモと、実際にどう効いているのか見てみる](https://qiita.com/cfiken/items/88427533ea9b501a6c10)

### 8. Optimization for Training Deep Models

こちらもタイトルの通り、Optimization(最適化)の記事になります。
Deep Learningが抱える最適化の問題について解説されたあと、基本となる最適化手法である`Stochastic Gradient Descent`をはじめ、その派生や、他の適応的な最適化手法について解説されており、よく名前を聞く`Momentum`, `AdaGrad`, `RMSProp`, `Adam`, `Newton's Method`, `BFGS`などの手法も簡潔に説明されています。
後半では、最適化手法以外で使える最適化のためのテクニックが多く紹介されています。中でも`Batch Normalization`は効果が高いと有名で、こちらについても拙作になりますがQiitaに記事を投稿しているので、参考にしてもらえればと思います。

[Deep LearningにおけるBatch Normalizationの理解メモと、実際にその効果を見てみる](https://qiita.com/cfiken/items/b477c7878828ebdb0387)

### 9. Convolutional Networks

Deep Learningの世界ではその応用が最も成功しているといっても過言ではない、CNNについての章になります。
そもそものCNNの考え方から始まり、`Convolution`や`Pooling`の説明、応用時に考えなければいけないことなどが説明されています。
後半では、脳神経科学との関連の話もありました(私は難しかったのでサッと一読するに留め理解は諦めました)。
CNN自体について大雑把な理解がないと辛いかもしれないので、事前に軽く日本語文献で調べてから読み進むと良いと思います。

### 10. Sequence Modeling: Recurrent and Recursive Nets

音声やテキストデータなどSequence Dataを扱う際に使用される、RNNなどを中心とした章です。
こちらも前章と同様に、事前にRNN自体の考え方などは軽く調べておくことをオススメします。
前半は、Sequence Dataを取り扱うためのネットワークとして、UnfoldなComputation Graphの考え方から入り、RNNやそれを組み合わせたEncoder-Decoderの解説となっています。
後半は、その他の種類のRecurrenceなネットワークや、LSTMなど以前の状態を記憶するように工夫されたセルやネットワークが紹介されています。
後半は紹介が多いので、そんなのもあるのか、程度で覚えておけば良いと思います。

### 11. Practical Methodology

実際にDeep Learningを応用として使用する際の手引きが書かれています。機械学習をやっている人にとっては割と当たり前のことが書かれていると思いますが、軽く一読しておくと良いと思います。
前章までと打って変わって数式はほとんど出ず、ひたすら説明が続きます。個人的には眠かったです。

### 12. Applications

具体的な応用事例などを紹介しています。
最初に大規模なDeep Learningの計算速度についての節があり、詳しくない人は読んでおくと良いです。CPUとGPUの仕事の解説から、計算を早くするための考え方や工夫などが説明されています。
その後は、`Computer Vision`, `Speech Recognition`, `Natural Language Processing`, `Other Applications`として、それぞれの歴史や固有の工夫、考え方について説明されています。

# 最後に

近年の手法や応用までカバーしつつ、基礎のしっかりとした説明もある書籍は有料でもなかなかないと思うので、無料で読めるのは大変良い環境だと思います!
途中でオススメできない例も書きましたが、あくまで私の感想になります。少しでも気になった方は、無料なのでとりあえず読んでみると良いです :muscle: 
著者の皆様と日本語版の翻訳者の皆様に感謝しつつ、終わりたいと思います :bow: 
興味のある人にうまく魅力が届くと良いな :blush: