Course 1 : Neural Networks and Deep Learning（Coursera Deep Learning Specialization 受講記録）

Coursera > [Deep Learning Specialization](https://www.coursera.org/specializations/deep-learning) > **Course 1 : Neural Networks and Deep Learning** の受講記録。

#概要
Course 1 は4週分の講座から構成される。

1. Week 1 Introduction to deep learning
簡単な導入。

2. Week 2 Neural Networks Basics
ロジスティック回帰のモデルを実装するまで。
ロジスティック回帰は1層のニューラルネットワークとみなすことができる。
Week 3 以降、これの組み合わせでニューラルネットを構築していく。

3. Week 3 Shallow neural networks
隠れ層が1つの（＝2層の）ニューラルネットワークを実装するまで。

4. Week 4 Deep Neural Networks
隠れ層が複数のニューラルネットワークを実装するまで。

---
#Week 1 Introduction to deep learning

##Welcome to the Deep Learning Specialization
####Welcome
イントロ。この講座で学ぶことの概要など。

##Introduction to Deep Learning
####What is a neural network?
簡単な教師あり学習の例。
 
####Supervised Learning with Neural Networks
ディープラーニングによって非構造化データの教師あり学習もうまくこなせるようになってきた。例えば音声認識、画像認識、自然言語処理など。

####Why is Deep Learning taking off?
何でディープラーニングが盛り上がっているの？
・大量のデータを入手できるようになったから
・そのデータを処理できるだけのCPU/GPUを利用できるようになったから

##Heroes of Deep Learning (Optional)
####Geoffrey Hinton interview
教科書（[AI白書](https://www.amazon.co.jp/AI%E7%99%BD%E6%9B%B8-2017-%E7%8B%AC%E7%AB%8B%E8%A1%8C%E6%94%BF%E6%B3%95%E4%BA%BA%E6%83%85%E5%A0%B1%E5%87%A6%E7%90%86%E6%8E%A8%E9%80%B2%E6%A9%9F%E6%A7%8B-AI%E7%99%BD%E6%9B%B8%E7%B7%A8%E9%9B%86%E5%A7%94%E5%93%A1%E4%BC%9A/dp/404899607X)）にもよく出てくる偉人。「直感を信じて継続することが大事」という、重みのあるお言葉。

---
#Week 2 Neural Networks Basics
##Logistic Regression as a Neural Network
####Binary Classification
まずはロジスティック回帰で二項分類を行う処理を見ながら学習しましょう、という話。

####Logistic Regression
ロジスティック回帰のモデルはどのようなものか。
線形関数の出力結果をシグモイド関数に入力することで出力値を得る。

####Logistic Regression Cost Function
損失関数とコスト関数
パラメータ（wとb）を訓練するためにはコスト関数を定義する必要がある。

####Gradient Descent
最急降下法
コスト関数をwやbで微分したものを使ってそれぞれのパラメータを更新していく。

####Derivatives
数学が苦手な人向けに、微分とは？の直感的な説明。

####More Derivative Examples
数学が苦手な人向けに、微分とは？の直感的な説明の続き。

####Computation graph
計算グラフ。簡単な計算の例をつかって丁寧に説明してくれる。

####Derivatives with a Computation Graph
※日本語字幕なし。
計算グラフを逆向きにたどるかたちで微分を計算していく。
連鎖律。

####Logistic Regression Gradient Descent
ロジスティック回帰の勾配降下法
今後の講座で頻繁にでてくる数式のベースがここで出てくる。

####Gradient Descent on m Examples
※日本語字幕なし。
訓練データがm件ある場合のコスト関数は？
その場合のパラメータの更新の流れは？
for文で一件ずつ処理すると効率が悪い→ベクトル化で一発計算。

##Python and Vectorization

####Vectorization
ベクトル化すると処理が早いという話。
Pythonの組み込み関数の話。

####More Vectorization Examples
Pythonでのベクトル化の実装例

####Vectorizing Logistic Regression
<font color="Red">見直し必要。</font>
ロジスティック回帰の計算をベクトル化する。
アクティベーション関数の計算まで。

####Vectorizing Logistic Regression's Gradient Output
<font color="Red">見直し必要。</font>
バックプロパゲーションの計算もベクトル化する。

####Broadcasting in Python
Pythonの（というかNumpyの）ブロードキャストの話。

####A note on python/numpy vectors
例えば`a = np.random.randn(5)`といったコードで作成される`(5,)`の配列はランク1の配列と呼ばれる。
ランク1の配列は想定外な処理を引き起こす可能性があるので使わない。
`(5,1)`といったランク2の配列を使うこと。
assert文をいれてこまめに配列のサイズを確認するのが良い。

####Quick tour of Jupyter/iPython Notebooks
Jupyter Notebooksの使い方。
自分の場合は Google Cloud Platform の Cloud Datalab を使ったことがあるので支障なし。

####Explanation of logistic regression cost function (optional)
※日本語字幕なし。
難しい数式が山ほど出てくる上に日本語字幕がないのでキツイ・・・
おそらく、クロスエントロピーの数式の導出について説明しているのでは。
optionalと言っているので、ひとまず流す。

##Programming Assignments
####Python Basics with numpy (optional)
Numpyを使った配列の計算
ブロードキャスト
シグモイド関数、シグモイド関数の微分

####Logistic Regression with a Neural Network mindset
<font color="Red">見直し必要。</font>
ロジスティック回帰の実装
FORWARD PROPAGATION 
BACKWARD PROPAGATION
パラメータ更新
predict
learning rateを変えて性能差を見る

##Heroes of Deep Learning (Optional)
####Pieter Abbeel interview
Pieter Abbeel 氏のインタビュー。深層強化学習の話が多い。
ググってみたら、[PFNのテクニカルアドバイザーに就任](https://www.preferred-networks.jp/ja/news/pr20170724)されているんですね。

---
#Week 3 Shallow neural networks
##Shallow Neural Network
####Neural Networks Overview
※日本語字幕なし

####Neural Network Representation
隠れ層が1つの（＝2層の）ニューラルネットワークを例に、いくつかの表記方法について。

####Computing a Neural Network's Output
隠れ層が1つの（＝2層の）ニューラルネットワークがどのように内部計算をして出力値を得ているか。
基本的にはWeek2で学んだロジスティック回帰の計算処理の繰り返し・組み合わせ。

####Vectorizing across multiple examples
複数のデータをまとめて処理するベクトル化について。

####Explanation for Vectorized Implementation
※日本語字幕なし
ひとつ前のビデオのもう少し細かい説明。
ベクトルの計算はこんなイメージですよ、とかこんな式で実装できますよ、とか。

####Activation functions
※日本語字幕なし
シグモイド関数
tanh
Relu
Leakly Relu

####Why do you need non-linear activation functions?
なぜニューラルネットワークに非線形活性化関数が必要なのか

####Derivatives of activation functions
アクティベーション関数の微分

####Gradient descent for Neural Networks
<font color="Red">見直し必要。</font>
これまでの話を踏まえつつ、実装に踏み込んだ話。
dZ1 の導出方法がいまひとつ理解できていない・・・

####Backpropagation intuition (optional)
<font color="Red">見直し必要。</font>
ひとつ前のビデオでバックプロパゲーションの式が出てきたが、これらがどのように導出されるのかを計算グラフをつかって解説。
理解の足りていない dZ1 の導出方法についても解説しているはず。

####Random Initialization
ニューラルネットワークでは重みを0で初期化してはいけない。（バイアスは0で初期化してOK）
対称性の破れの問題

##Programming Assignments
####Planar data classification with a hidden layer
<font color="Red">見直し必要。</font>結構なボリューム。
シンプルなロジスティック回帰→線形分離できないデータセットをうまく識別できない
2層のニューラルネットワークモデルを作成
initialize_parameters
forward_propagation
compute_cost
backward_propagation（Gradient Descent)
update_parameters

##Heroes of Deep Learning (Optional)
####Ian Goodfellow interview
まだ見ていない。あとで見る。

---
#Week 4 Deep Neural Networks
##Deep Neural Network
####Deep L-layer neural network
層の表記方法について

####Forward Propagation in a Deep Network
L層のニューラルネットワークの順伝播

####Getting your matrix dimensions right
ベクトルの次元数を常に意識しましょうという話
ユニットの数と次元数の関係性

####Why deep representations?
ネットワークの層が深いと複雑な表現ができるようになる
入力層に近い層では比較的細かい部分の特徴を識別しようとし、出力層に近い（深い）層ではより全体的な特徴を識別しようとする
一般的に深いネットワークと同等の性能を浅いネットワークで発揮させるためにはユニットの数を指数関数的に増やす必要がある

####Building blocks of deep neural networks
※日本語字幕なし
ニューラルネットワークのl層目における処理の流れ
順伝播時に計算したZ[l],W[l],b[l]は逆伝播時にも使うのでキャッシュしておく

####Forward and Backward Propagation
※日本語字幕なし
ニューラルネットワークのl層目におけるFoward propagation,Backward propagationの実装

####Parameters vs Hyperparameters
※日本語字幕なし
どんなものがParametersで、どんなものがHyperparametersか。

####What does this have to do with the brain?
ディープラーニングと脳の働きには実際のところほとんど関係ない、という話。

##Programming Assignments
####Building your Deep Neural Network: Step by Step
2-layer Neural NetworkとL-layer Neural Networkの違いを意識しながらそれぞれ実装。
cacheの使い方に注目。

####Deep Neural Network - Application
これまで学んだことを活かして猫の画像識別モデルを構築する。
今回も2-layer Neural NetworkとL-layer Neural Networkをそれぞれ実装。

---
#所感
先月まで Coursera の[Data Engineering on Google Cloud Platform Specialization](http://www.zkai.co.jp/home/coursera/course/gcd.html)という英語オンリーの講座を受講していたため、日本語の字幕のありがたみを実感する。（日本語があったほうがかなり理解がはかどる・・・）
これまで何冊か機械学習・ディープラーニング関連の書籍を読んだことがあるが、数式は基本的にスルーしてきたため、数式の理解をするのに苦労した。オライリーの「ゼロから作るDeep Learning」をざっと読んでおくと理解の助けになるのではと思う。
Course 2 以降は残念ながら日本語の字幕がほぼ無くなってしまうが、数式の理解を最も必要とされる（と個人的に感じている）Course 1 だけでも字幕があって助かった。