非線性啟用函式(為什麼需要它 導數 優缺點)

2021-08-20 23:19:12 字數 2021 閱讀 4150

為什麼需要非線性啟用函式?

a=z 叫做線性啟用函式 或 恒等啟用函式

如果使用線性啟用函式,那麼這個模型的輸出不過是你輸入特徵x的線性組合。神經網路只是把輸入線性組合再輸出。

所以即使你有很多個隱含層,但是你如果使用線性啟用函式或者不用啟用函式,一直在做的只是計算線性啟用函式,所以還不如直接去掉全部隱藏層。所以除非引入非線性,那麼無法計算更有趣的函式。

只有乙個地方可以使用線性啟用函式,那就是回歸問題。或者在輸出層用也是可以的。

非線性啟用函式導數

【基礎知識:

對於一元二次方程

求根公式:

求最大/最小值所對應的x:x=

各種非線性啟用函式的優缺點:

sigmoid(左上角):

現在吳恩達幾乎從來不用sigmoid啟用函式了,但是

吳恩達會用sigmoid的乙個例外場合是進行二元分類時。

缺點:1、sigmoid容易飽和,並且當輸入非常大或者非常小的時候,神經元的梯度就接近於0了,從圖中可以看出梯度的趨勢。這就使得我們在反向傳播演算法中反向傳播接近於0的梯度,導致最終權重基本沒什麼更新,我們就無法遞迴地學習到輸入資料了。另外,你需要尤其注意引數的初始值來盡量避免saturation的情況。如果你的初始值很大的話,大部分神經元可能都會處在saturation的狀態而把gradient kill掉,這會導致網路變的很難學習。容易飽和

2、sigmoid 的輸出不是0均值的,這是我們不希望的,因為這會導致後層的神經元的輸入是非0均值的訊號,這會對梯度產生影響:假設後層神經元的輸入都為正(e.g. x>0 elementwise inf的梯度)。這可能會在權重的梯度更新中引入不受歡迎的zig-zagging動態。

導致有一種**的效果,使得收斂緩慢。

當然了,如果你是按batch去訓練,那麼每個batch可能得到不同的符號(正或負),那麼相加一下這個問題還是可以緩解。因此,非0均值這個問題雖然會產生一些不好的影響,不過跟上面提到的 kill gradients 問題相比還是要好很多的。

tanh(右上角):

tanh:有資料中心化的效果,讓均值接近於0,而不是0.5,這實際讓下一層的學習更方便點。tanh幾乎在所有場合都更優越,乙個例外是輸出層,因為y如果真實值為0或1,那麼我們希望y帽介於0和1之間,而不是-1和1之間,這時sigmoid更適合。

tanh和sigmoid的乙個共同缺點:當z很大或很小時,那麼這個函式的斜率會很小,很接近於0,這樣會拖慢梯度下降法。

relu(左下角):

relu:a = max(0,z),但是當z = 0時,導數是沒有定義的,但如果程式設計實現,你得到的z剛好等於0.

000000000000的概率很低,所以不必擔心。

relu已經變成啟用函式的預設選擇了,當你不知道因隱層到底該用哪個啟用函式時,就可以用relu。雖然有人也會用tanh。relu的乙個缺點:當z為負時,導數等於0。但在實際中卻沒有什麼問題。雖然對於z的一半範圍來說,relu的斜率為0,但在實踐中,有足夠多的隱藏單元令z大於0,所以對於大多數訓練樣本來說還是很快的。

leaky relu(右下角):

relu的另乙個版本:leaky relu(a = 0.01*z,z),實際上比relu要好,但是實際中使用的頻率卻沒有那麼高。

為什麼神經網路需要非線性啟用函式

生物神經網路啟發了人工神經網路的發展,在了解為什麼神經網路需要非線性啟用函式之前,理解生物神經網路的工作原理對我們是有幫助的。乙個典型的生物神經元的物理結構包括細胞體 樹突 軸突。樹突具有接受刺激並將衝動傳入細胞體的功能,細胞體具有聯絡和整合輸入資訊並傳出資訊的作用,軸突的主要功能是將神經衝動由細胞...

為什麼要使用非線性啟用函式

線性可分的情況下 邏輯回歸和線性回歸,無論是閉解形式還是凸優化都能高度擬合,但是線性不可分的情況下 xor異或函式 需要非線性對換資料的分布進行重新對映。對神經網路我們在神經網路中,對每一層線性變換後疊加乙個非線性啟用函式,以避免多層網路等效於單層線性函式,從而獲得更大的學習與擬合能力。使用啟用函式...

為什麼人工神經網路需要非線性啟用函式?

我們用人工神經網路來表述輸入x與輸出y之間複雜的關係,用數學語言來說,就是用人工神經網路來實現複雜的函式 如果使用線性啟用函式,那麼無論神經網路中有多少層,都只是在做線性運算,最後一層得到的結果是輸入層的線性組合,而輸入層的線性組合,用一層隱藏層就可以表示,也就是說,多層的隱藏層運算後的結果等同於一...