介紹
DeepLearning課程總共五大章節,該系列筆記將按照課程安排進行記錄。
另外第一章的前兩周的課程在之前的Andrew Ng機器學習課程筆記(博客園)&Andrew Ng機器學習課程筆記(CSDN)系列筆記中都有提到,所以這里不再贅述。
1、神經網絡概要
注意:這一系列的課程中用中括號表示層數,例如\(a^{[1]}\)表示第二層(隱藏層)的數據。
2、神經網絡表示
這個圖的內容有點多,跟着下面的步驟來理解這個圖吧:
-
首先看藍色字體,這個2層的神經網絡(輸入層一般理解成第0層)有輸入層(input layer)、隱藏層(Hidden layer)、輸出層(output layer)組成
-
再看紫色字體,每一層用\(a^{[i]}, i=0,1...n\)表示,\(a^{[0]}\)表示輸入層的所有數據。而下標則表示某一層的某一行的具體的數據,例如\(a^{[1]}_1\)表示隱藏層的第一個元素。
-
最后是綠色字體,介紹的分別是\(w\)(權重)和\(b\)(偏置),其中\(w^{[1]}\)表示輸入層到隱藏層的權重,其是(4,3)的矩陣,而\(b^{[1]}\)是(4,1)的矩陣。
3、計算神經網絡的輸出
這個比較簡單就不做過多解釋了,主要就是線性代數的知識。
4、多個例子中的向量化
還是以上面的神經網絡為模型進行介紹,向量化過程如下:
for i in range(m):
\(\quad \quad z^{[1](i)}=W^{[1]}x^{(i)}+b^{[1]}\)
\(\quad \quad a^{[1](i)}=σ(z^{[1](i)})\)
\(\quad \quad z^{[2](i)}=W^{[2]}x^{(i)}+b^{[2]}\)
\(\quad \quad a^{[2](i)}=σ(z^{[2](i)})\)
5、向量化實現的解釋
上一節中使用了for循環和矩陣向量機,這里可以更加徹底地向量化,讓運算更加簡單,如下:
\(Z^{[1]}=W^{[1]}X+b^{[1]}\)
\(A^{[1]}=σ(Z^{[1]})\)
\(Z^{[2]}=W^{[2]}X+b^{[2]}\)
\(A^{[2]}=σ(Z^{[2]})\)
6、激活函數
常用的一共四個激活函數
-
(1): \(σ(z)=\frac{1}{1+e^{-z}}\),一般只用在二元分類的輸出層,因為二元分類一般要求輸出結果\(y∈{0,1}\),而σ函數剛好其閾值就在0,1之間。而其它層更加建議用其他的激活函數。所以一個神經網絡可以使用多種激活函數(用\(g^{[i]}\)表示第i層的激活函數)
-
(2): \(tanh(z) = \frac{e^z-e^{-z}}{e^z+e^{-z}}\),上下界限分別是1,-1。它相比於\(σ(z)\)表現更好的原因是因為它的均值在0附近,有數據中心化的效果,所以下一層在學習的時候要更加方便和快速。但是\(σ(z)\)和\(tanh(z)\)有一個共同的缺點,就是當z很大或很小的時候,它們的斜率就會趨向於0,這會使得梯度下降的學習速率降低。
-
(3): ReLu(The Rectified Linear Unit) 表達式是\(f(x)=max(0,x)\),它表現的效果是最好的,所以在不確定使用何種激活函數的時候就可以不顧一切的選擇它~(難道這就是傳說中的備胎?)
相比sigmoid和tanh函數,Relu激活函數的優點在於:-
梯度不飽和。梯度計算公式為:1{x>0}。因此在反向傳播過程中,減輕了梯度彌散的問題,神經網絡前幾層的參數也可以很快的更新。
-
計算速度快。正向傳播過程中,sigmoid和tanh函數計算激活值時需要計算指數,而Relu函數僅需要設置閾值。如果x<0,f(x)=0,如果x>0,f(x)=x。加快了正向傳播的計算速度。
因此,Relu激活函數可以極大地加快收斂速度,相比tanh函數,收斂速度可以加快6倍
-
-
(4): Leaky Relu,你也許發現了Relu激活函數在當z小於0的時候導數為0,雖然這在實踐中並不影響,但是為了進一步優化提出了Leaky Relu,在z小於0時導數不為0.表達式一般為\(f(x)=max(0.01x,x)\)。其中0.01是一個可調的參數,類似於學習步長α。
7、為什么需要非線性激活函數
如果不用激勵函數(其實相當於激勵函數是f(x) = x),在這種情況下你每一層輸出都是上層輸入的線性函數,很容易驗證,無論你神經網絡有多少層,輸出都是輸入的線性組合,與只有一個隱藏層效果相當,這種情況就是多層感知機(MLP)了。
正因為上面的原因,我們決定引入非線性函數作為激勵函數,這樣深層神經網絡就有意義了(不再是輸入的線性組合,可以逼近任意函數)。最早的想法是sigmoid函數或者tanh函數,輸出有界,很容易充當下一層輸入(以及一些人的生物解釋balabala)。
8、激活函數的導數
- \(σ'(z)=σ(z)(1-σ(z))\)
- \(tanh'(z)=1-(tanh(z))^2\)
- Relu:
- \(Relu'(z) =1 \ when\ z≥0;\)
- \(Relu'(z) = 0 \ when \ z<0\)
9、神經網絡的梯度下降法
10、直觀理解反向傳播
9、10節的內容都是介紹的神經網絡的計算過程,更加詳細的可以參看Andrew Ng機器學習課程筆記--week5(上)(神經網絡損失函數&反向傳播算法)
11、隨機初始化
在神經網絡中,如果將參數全部初始化為0 會導致一個問題,例如對於上面的神經網絡的例子,如果將參數全部初始化為0,在每輪參數更新的時候,與輸入單元相關的兩個隱藏單元的結果將是相同的,既:
\(a_1^{(2)}=a_2^{(2)}\)這個問題又稱之為對稱的權重問題,因此我們需要打破這種對稱,這里提供一種隨機初始化參數向量的方法: 初始化\(θ_{ij}^{(l)}\)為一個落在 [-ε,ε]區間內的隨機數, 可以很小,但是與上面梯度檢驗( Gradient Checking)中的ε沒有任何關系。