Deep Neural Network
Last updated
Last updated
只有 1-layer 的 logistic 及一些層數較少的 nn 會稱作 "shallow" neural network
當你有越多的 hidden layers 代表你的 nn 越接近 deep neural network
介紹一些 deep neural networks 的 notation
表示 layer 數
表示第 l 層的 units 有幾個
表示第 l 層的 activations
和 表示 的 weights
另外補充
表示 input layer,共有 個 units
表示 output layer,共有 個 units
要在上面的 5-layer nn 進行 forward propogation
方法跟之前學的 2-layer 很像,只是不斷對下面這個步驟 iterate 而已
下面是一個 generalize 的 forward propogation step
若有 l layers,那就要 iterate for i = 1:l
通常跑完所有 layer 需要一個 explicit for-loops 而不是 vectorization
在建置一個 nn 時,考慮好每一個 vector 及 matrix 的 dimension 非常重要
是防止 program 產生問題的重點
先看計算第一層 時 和 的 dimension
可以一般化 和 在計算 時的 dimension
在 backprop 時,產生的 也會和 一模一樣 dimension
使用 vectorization 一次執行 m 筆 training examples 於 forward propogation 時
原本的 z 變成一個 m columns 的矩陣
z 的運算變成這樣
b 保持不變是因為 python 會自動使用 broadcasting 技巧
簡單來說, 變成 在 dimension 上就是從 1 column 變成 m columns
以下用兩個方向來解釋為什麼 nn 越 deep 越好
有了 Deep neural network
我們可以在第一層 hidden layer 對圖片做簡單運算和偵測
例如找出圖片的水平或垂直邊緣線
接著組合上一層結果,在下一層進一步運算
例如找出五官或是一些部位
越往下層走,就可以得到越複雜的計算
例如到最後可以進行人臉辨識
另一個例子是語音辨識系統
Audio -> low level audio waves -> phonemes -> words -> sentences
所以 deep learning 能將一件是從 simple 做到 complex 得到近似解
另一個例子是用邏輯電路來呈現
假設我要運算出
一般的做法都會是使用一個 的方法 (意指 deep nn 的好處)
另一種 shallow 的方法則需要展開 的 nodes 才能做到
Informally:
There are functions you can compute with a "small" L-layer deep neural network
that shallower networks require exponentially more hidden units to compute.
在實際建置 dnn 時,可以把每一個 的 forward 想成一個 block
同理的,也可以將 的 backward 想成一個 block
forward 會將計算好的值 cache 起來給 backward 使用
Input :
Output :
Cache :
Process :
Input :
Ouput :
Process :
整個組合起來的 blocks 會長成這樣
一般的 parameters 是指
hyperparameters 指的是那些足以影響 parameters 的參數
這些 hyperparameters 的設定往往依靠著經驗來做
現有的舉例有
learning rate
number of iterations
number of hidden layers
number of hidden units
choice of activation functions
未來還會有
momentum
mini-batch size
regularization algorithms
所以 deep learning application 其實是一個 very empirical process
常需要在 Idea -> Code -> Experiment 中不斷循環