吳恩達第一門-神經網路和深度學習第三週6-10學習筆記
吳恩達第一門-神經網路和深度學習第三週6-10學習筆記
3.6啟用函式
啟用函式
圖中給出了前面課程中所學到的利用神經網路計算輸出值的具體步驟。其中的
,也就是sigmoid函式在這裡被稱為啟用函式。
啟用函式常用
來表示,除了sigmoid函式外,tanh函式或者雙曲正切函式等一些非線性函式也是啟用函式,而且他們甚至要優於sigmoid函式。
tanh函式
tanh函式是sigmoid的向下平移和伸縮後的結果,其值域介於+1和-1之間,它的均值相比sigmoid函式更接近於0而不是0.5。結果表明tanh函式的效果要優於sigmoid函式。
但同時tanh函式也具有與sigmoid相同的缺點,在z特別大或者特別小的情況下,其導數的梯度、函式的斜率會變得特別小,最後就會接近於0,導致梯度下降的速度變得非常慢。
Relu函式
Relu函式是修正線性單元的函式,只要z是正值的情況下,導數恆等於1,當z是負值的時候,導數恆等於0。
還有一種版本的Relu函式,叫作Leaky Relu函式,當z是負值時,Leaky Relu函式的值不是等於0,取而代之的是一條略微傾斜的直線。
其優點在於:
第一,速度快,在的區間變動很大的情況下,啟用函式的導數或者啟用函式的斜率都會遠大於0,在程式實現就是一個if-else語句,而sigmoid函式需要進行浮點四則運算。
第二,無彌散,sigmoid和tanh函式的導數在正負飽和區的梯度都會接近於0,這會造成梯度彌散,而Relu和Leaky ReLu函式大於0部分都為常數,不會產生梯度彌散現象。
使用情況
sigmoid啟用函式:除了輸出層是一個二分類問題基本不會用它。
tanh啟用函式:tanh是非常優秀的,幾乎適合所有場合。
ReLu啟用函式:最常用的預設函式,如果不確定用哪個啟用函式,就使用ReLu或者Leaky ReLu
3.7為什麼需要非線性啟用函式
本章主要圍繞一個問題:我們為什麼需要非線性啟用函式?
證明:
如果我們讓神經網路正向傳播的方程中的啟用函式
,這是一個線性啟用函式。我們可以得到新的神經網路正向傳播方程:
將前式代入後式中得到:
也就是說,最終得到的還是一個線性關係,所有的隱藏層都是可以去掉的。即使你的網路層數再多,也只能停留在對線性關係的描述,無法研究“更加有趣的函式”。
只有一個地方可以使用線性啟用函式,類似於
,就是在做機器學習中的迴歸問題時。 此時輸出是一個實數,比如在第一章中舉過一個例子,想要預測房地產價格, 此時不是二分類任務0或1,而是要輸出一個實數,這種情況可以在輸出層使用線性啟用函式。
所以,不能在隱藏層用線性啟用函式,可以用ReLU、tanh、leaky ReLU或者其他的非線性啟用函式,一般來說,唯一可以用線性啟用函式的通常就是輸出層。
3.8啟用函式的導數
本章主要介紹了對啟用函式進行的求導操作,作為使用梯度下降法的基礎。
sigmoid函式
tanh函式
ReLU函式和Leaky ReLU函式
ReLU:
Leaky ReLU:
3.9 神經網路的梯度下降
包含的引數為
,
,
,
。令輸入層的特徵向量個數nx=n[0],隱藏層神經元個數為n[1],輸出層神經元個數為n[2]=1。則W[1]的維度為(n[1],n[0]),b[1]的維度為(n[1],1),W[2]的維度為(n[2],n[1]),b[2]的維度為(n[2],1)。
正向傳播過程:
反向傳播過程(求導):