CourseraのDeep Learning Specialization 5コース中4コースまで受講した

．．．というのは現時点（2018年1月上旬）で最後の5コース目は準備中のため。1月下旬から受講可能になるそうです。

オンライン学習プラットフォームCourseraでDeep Learning Specializationという連続コースが2017年8月からスタートしました。今後、ディープラーニングを学ぶオンラインコースのスタンダードとなっていくのではないかと思います。

![alt](https://d3njjcbhbojbot.cloudfront.net/api/utilities/v1/imageproxy/https://d15cw65ipctsrr.cloudfront.net/94/14d6e06da311e7a4a8bfd1b46fdf02/Messages-Image_606749677_.png?auto=format%2Ccompress&dpr=1&w=200&h=100&fit=clip)

講師はCouseraのファウンダーでもあるStanford大学のAndrew Ng氏。BaiduにChief Scientistとして引き抜かれていましたが、2017年にBaiduを退職してdeeplearning.aiという会社を設立し、ディープラーニングの教育事業に注力すると発表しています。今回のCoursera Deep Learning Specializationはこの新会社deeplearning.aiが提供する最初のコースとなります。

個人的には、同じAndrew先生が教えるコースでCourseraの看板講座といえる存在、機械学習全般を学ぶMachine Learningコース（以下ML）を受けて以来、2年ぶりのMOOC受講になります。

## 特徴
### とにかく実践的
Andrew先生の教え方には以前から定評があり、数学的厳密さや細部の正確さよりも、コアとなるコンセプトを伝えることにフォーカスしています。その説明の方法はとても実践的です。例えば、backpropagation（誤差逆伝播法）の解説で出て来る数式の一部はこんな感じ。

```math
\begin{align}
dw^{\left[i\right]} &= \frac{1}{m}dZ^{\left[i\right]}X^T \\
db^{\left[i\right]} &= \frac{1}{m}np.sum\left(dZ^{\left[i\right]}, axis=1, keepdims=True\right)
\end{align}
```

こんな感じで、数式とpythonのコードが混在しています。教科書だったらこんな書き方はしないはずですが、実装段階で詰まることがないように（具体的には、pythonでふつうにsumを取ると行列の次元数が変わってしまうためそれを回避する）あえてこうした教え方をしています。

### Python(Jupyter Notebook)ベースである
MLでの使用言語はOctaveというMatlab互換の数値計算言語でしたが、本コースではDeep Learningではデフォルト言語の地位を確立したPythonを使います。
プログラミング課題はJupyter Notebook上で実施し、Courseraサイドの環境で動くため、Pythonのインストールは必要ありません（！）。環境構築の手間やトラブルが省け、ブラウザさえあればすぐに課題に取り組むことができます。
### フレームワークはTensorflowとKeras
プログラミング課題は、最初のほうはDeep Learningのフレームワークを使わず、スクラッチでDNNを実装して原理を理解することを目指します。コースが進んでよりDeepで複雑なネットワークを実装する際には、まずは生Tensorflow、次にTensorflowバックエンドのKerasを利用します。

## 内容
MLはひとつのコースでWeek 11まであって幅広い内容をカバーしていましたが、今回のDL Specializationは5コースに分かれています。
1. Neural Networks and Deep Learning (4 weeks)
2. Hyperparameter tuning, Regularization and Optimization (3 weeks)
3. Structuring Machine Learning Projects (2 weeks)
4. Convolutional Neural Networks (4 weeks)
5. Sequence Models (2018年1月下旬から開始, 4 weeks)

5コースの合計で17週ということで、MLコースよりもボリュームは大きくなっています。が、難易度は初〜中級といったところでMLと同程度ではないでしょうか。プログラミング課題もキーとなる部分を数行書くだけです。（でも、結構ハマる）

いちおう週ごとにスケジュールが構成されていますが、あくまで目安であり自分のペースで進めます。コース1~4までで13週ですが、私は主に通勤時間にiPhoneでビデオ聴講、夜にプログラミング課題、というスタイルで9週間くらいで進んでいます。

### Course1: Neural Networks and Deep Learning
最初はロジスティック回帰を例に、Forward PropagationとBackpropagation、最急降下法などの基礎を学びます。その後単一レイヤのニューラルネットワーク、そして層を増やしたDeep NNへと進んでいきます。
MLでも機械学習の一部としてNeural Networkのセッションがありましたが、当時から比べると教え方がこなれてきているように思います。Backpropagation（誤差逆伝播法）はNNの中でも難解なコンセプトで、Coursera MLの時はAndrew先生も「僕も正直backpropは何をやってるかイメージしづらいんだよね」と言っていたような気がします。今回のDLではStanfordの授業で採用されてメジャーになってきているらしい、計算グラフ(computational graph)を使った解説法を採用しています。良書として名高い[「ゼロから学ぶDeep Learning」](http://amzn.asia/bcJkAKP)と同じアプローチです。並行してこちらの本をじっくり読みながらすすめるとよりわかりやすいと感じました。こちらの書籍と同じく、Course1のプログラミング課題ではDeep NNをTensorflowを使わずにスクラッチで実装します。

### Course 2:Hyperparameter tuning, Regularization and Optimization
DLの開発において重要となるハイパーパラメータのチューニング方法、weight decayやdropoutといった正則化の方法、RMSpropやAdam等の最適化手法などを学ぶ内容です。こちらも実践的な内容で、パラメータチューニングはまず$\alpha$（learning rate, 学習係数）を最優先にしなさい、次に隠れ層のユニット数とミニバッチサイズをいじってみなさい、といったところ。教科書からでは学べない内容も多いのではないでしょうか。
Course2-Week3のプログラミング課題で、初めてTensorflowを使います。

### Course 3:Structuring Machine Learning Projects
Deep Learningプロジェクトを進める上での留意点を扱うという変わり種の内容で、プログラミング課題はありません。パフォーマンスが上がらない際にどういう方針をとるか、データをさらに集めるのかハイパーパラメータをチューニングするのかNNの構成を変えるのか。現実のプロジェクトで起きそうな問題（そもそも訓練データセットに間違いが多そうな場合はどうするか、とか）。DLの開発では標準になっていると思われる、学習済みモデルを利用する転移学習(Transfer Learning)についても扱います。こちらもCourse2に続き、教科書的でない実践的な内容となっています。

### Course 4:Convolutional Neural Networks
CNN（畳み込みニューラルネットワーク）を4週間かけてみっちりやります。Week1は最初はCNNの構成要素であるConvolutionレイヤやPoolingレイヤなどの仕組みを学びスクラッチで実装。その後ディープなネットワークにする際にはTensorflowを使っていきます。
Week2ではAlexNet, VGG-16, ResNet, GoogLeNet などの代表的なCNNを学びます。ここのプログラミング課題ではTensorflowのより上位フレームワークであるKerasを使い、50層のResNetを実装します。
Week3は物体認識アルゴリズム、Week4では顔認識とStyle Transferの応用例を学ぶかなりAdvancedな内容。
Andrew先生も講義中に言っているのですが、CNNをその主な利用分野であるコンピュータビジョンの例で学ぶのですが、CNNは時系列データなど別の分野への応用可能性も大きいため、コンピュータビジョンを扱わない人にとっても有用な内容となると思います。

Week4のProgramming Exerciseの2つ目、"Face Recognition for the Happy House"では顔認識システムを作るのですが、ここで自分で書くのではない提供されたコードが動かず、ややハマりました。以下のDiscussion ForumでのErrataを発見しトラブルシュートを実施（weightsフォルダの中身とフォルダを消去、Control Panelからサーバをリスタート）すると無事動きました。
[Error on given script on: Face Recognition for the Happy House - v3 // 2 - Loading the trained model](https://www.coursera.org/learn/convolutional-neural-networks/discussions/forums/4Bua7cZTEeeYBA47k-OCuA/threads/p2uBnc2OEeeTYAoJO24o4g)

### Course5: Sequence Model （未提供）
最後のCourse 5はRNNを使って時系列データを扱う内容です。

## コストとまとめ
MLコースは完全無料でCertificate（修了証）を発行する際にだけお金がかかりましたが、今回こちらのコースでは1ヶ月49米ドルの受講料がかかります（最初の7日間はトライアルで無料）。
ディープラーニングの書籍も次から次へと発売されていますが、本を読んだだけでは理解が進まない、かといって自分で環境構築して実装をすすめていくのはハードルが高い．．． と考えている人は少なくないと思います。そういう人にとって、わかりやすいビデオ講義を聴いて、お膳立てされたプログラミング課題に取り組むことでコンセプトの理解が進む本コースはおすすめできます。一通りコンプリートすれば、これからDL関連の論文やGithubのコードを読んで理解していくだけの力がつくのではないでしょうか。