Deeplearning.ai吳恩達筆記之神經網路和深度學習3
Shallow Neural Network
Neural Networks Overview
同樣,反向傳播過程也分成兩層。第一層是輸出層到隱藏層,第二層是隱藏層到輸入層。其細節部分我們之後再來討論。
Neural Network Representation
在神經網路中,我們以相鄰兩層為觀測物件,前面一層作為輸入,後面一層作為輸出,兩層之間的w引數矩陣大小為 ,b引數矩陣大小為 ,這裡是作為 的線性關係來說明的,在神經網路中, 。
在logistic regression中,一般我們都會用 來表示引數大小,計算使用的公式為: ,要注意這兩者的區別。
Computing a Neural Network’s Output
Vectorizing across multiple examples
Explanation for Vectorized Implementation
這部分Andrew用圖示的方式解釋了m個樣本的神經網路矩陣運算過程。其實內容比較簡單,只要記住上述四個矩陣的行表示神經元個數,列表示樣本數目m就行了。
值得注意的是輸入矩陣X也可以寫成 。
Activation functions
- sigmoid function
- tanh function
- ReLU function
- Leaky ReLU函式
啟用函式的選擇:
sigmoid函式和tanh函式比較:
- 隱藏層:tanh函式的表現要好於sigmoid函式,因為tanh取值範圍為[−1,+1],輸出分佈在0值的附近,均值為0,從隱藏層到輸出層資料起到了歸一化(均值為0)的效果。
- 輸出層:對於二分類任務的輸出取值為{0,1},故一般會選擇sigmoid函式。
然而sigmoid和tanh函式在當|z|很大的時候,梯度會很小,在依據梯度的演算法中,更新在後期會變得很慢。在實際應用中,要使|z|儘可能的落在0值附近,從而提高梯度下降演算法運算速度。
ReLU彌補了前兩者的缺陷,當z>0時,梯度始終為1,從而提高神經網路基於梯度演算法的運算速度。然而當z<0時,梯度一直為0,但是實際的運用中,該缺陷的影響不是很大。
Leaky ReLU保證在z<0的時候,梯度仍然不為0。
最後總結一下,如果是分類問題,輸出層的啟用函式一般會選擇sigmoid函式。但是隱藏層的啟用函式通常不會選擇sigmoid函式,tanh函式的表現會比sigmoid函式好一些。實際應用中,通常會會選擇使用ReLU或者Leaky ReLU函式,保證梯度下降速度不會太小。其實,具體選擇哪個函式作為啟用函式沒有一個固定的準確的答案,應該要根據具體實際問題進行驗證。
Why do you need non-linear activation functions?
從上圖可以看出,如果令a=z,那麼最後得到的 經過化簡還是一個線性組合。這表明,使用神經網路與直接使用線性模型的效果並沒有什麼兩樣。即便是包含多層隱藏層的神經網路,如果使用線性函式作為啟用函式,最終的輸出仍然是輸入x的線性模型。這樣的話神經網路就沒有任何作用了。因此,隱藏層的啟用函式必須要是非線性的。
另外,如果所有的隱藏層全部使用線性啟用函式,只有輸出層使用非線性啟用函式,那麼整個神經網路的結構就類似於一個簡單的邏輯迴歸模型,而失去了神經網路模型本身的優勢和價值。
值得一提的是,如果是預測問題而不是分類問題,輸出y是連續的情況下,輸出層的啟用函式可以使用線性函式。如果輸出y恆為正值,則也可以使用ReLU啟用函式,具體情況,具體分析。
Derivatives of activation functions
sigmoid導數:
tanh導數:
relu導數:
Leaky relu導數:
Gradient descent for Neural Networks
Random Initialization
如果在初始時,兩個隱藏神經元的引數設定為相同的大小,那麼兩個隱藏神經元對輸出單元的影響也是相同的,通過反向梯度下降去進行計算的時候,會得到同樣的梯度大小,所以在經過多次迭代後,兩個隱藏層單位仍然是對稱的。無論設定多少個隱藏單元,其最終的影響都是相同的,那麼多個隱藏神經元就沒有了意義。
在初始化的時候,W引數要進行隨機初始化,b則不存在對稱性的問題它可以設定為0。
以2個輸入,2個隱藏神經元為例:
W = np.random.rand((2,2))* 0.01
b = np.zero((2,1))
這裡我們將W的值乘以0.01是為了儘可能使得權重W初始化為較小的值,這是因為如果使用sigmoid函式或者tanh函式作為啟用函式時,W比較小,則 所得的值也比較小,處在0的附近,0點區域的附近梯度較大,能夠大大提高演算法的更新速度。而如果W設定的太大的話,得到的梯度較小,訓練過程因此會變得很慢。
ReLU和Leaky ReLU作為啟用函式時,不存在這種問題,因為在大於0的時候,梯度均為1
Summary
本節課主要介紹了淺層神經網路。首先,我們簡單概述了神經網路的結構:包括輸入層,隱藏層和輸出層。然後,我們以計算圖的方式推導了神經網路的正向輸出,並以向量化的形式歸納出來。接著,介紹了不同的啟用函式並做了比較,實際應用中根據不同需要選擇合適的啟用函式。啟用函式必須是非線性的,不然神經網路模型起不了任何作用。然後,我們重點介紹了神經網路的反向傳播過程以及各個引數的導數推導,並以矩陣形式表示出來。最後,介紹了權重隨機初始化的重要性,必須對權重W進行隨機初始化操作。