DeepLearning.ai學習筆記(一)神經網絡和深度學習--Week3淺層神經網絡


介紹
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)中的ε沒有任何關系。

更加詳細的介紹可參看Andrew Ng機器學習課程筆記--week5(下)(梯度檢測&BP隨機初始化)


參考資料:
Deep learning系列(七)激活函數
神經網絡為什么要有激活函數,為什么relu 能夠防止梯度消失




微信公眾號:AutoML機器學習
MARSGGBO原創
如有意合作或學術討論歡迎私戳聯系~
郵箱:marsggbo@foxmail.com

2017-8-30


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM