如下圖,在神經元中,輸入的 inputs 通過加權,求和後,還被作用了乙個函式,這個函式就是啟用函式 activation function。
啟用函式的這些特性可以很好地解釋我們為什麼要用啟用函式。
函式公式和圖表如下圖
在sigmod函式中我們可以看到,其輸出是在(0,1)這個開區間內,這點很有意思,可以聯想到概率,但是嚴格意義上講,不要當成概率。sigmod函式曾經是比較流行的,它可以想象成乙個神經元的放電率,在中間斜率比較大的地方是神經元的敏感區,在兩邊斜率很平緩的地方是神經元的抑制區。
當然,流行也是曾經流行,這說明函式本身是有一定的缺陷的。
1) 當輸入稍微遠離了座標原點,函式的梯度就變得很小了,幾乎為零。在神經網路反向傳播的過程中,我們都是通過微分的鏈式法則來計算各個權重w的微分的。當反向傳播經過了sigmod函式,這個鏈條上的微分就很小很小了,況且還可能經過很多個sigmod函式,最後會導致權重w對損失函式幾乎沒影響,這樣不利於權重的優化,這個問題叫做梯度飽和,也可以叫梯度瀰散。
2) sigmoid函式的輸出不是零中心的。這是不可取的,因為這會導致後一層的神經元將得到上一層輸出的非0均值的訊號作為輸入。 產生的乙個結果就是:如果資料進入神經元的時候是正的(e.g. x>0 elementwise inf=),那麼 w 計算出的梯度也會始終都是正的。當然,如果你是按batch去訓練,那麼那個batch可能得到不同的訊號,所以這個問題還是可以緩解一下的。因此,非0均值這個問題雖然會產生一些不好的影響,不過跟上面提到的 kill gradients 問題相比還是要好很多的。
3) sigmod函式要進行指數運算,這個對於計算機來說是比較慢的。
tanh函式公式和曲線如下
tanh非線性函式影象如上圖所示。它是雙曲正切函式,tanh函式和sigmod函式的曲線是比較相近的,咱們來比較一下看看。首先相同的是,這兩個函式在輸入很大或是很小的時候,輸出都幾乎平滑,梯度很小,不利於權重更新;不同的是輸出區間,tanh的輸出區間是在(-1,1)之間,而且整個函式是以0為中心的,這個特點比sigmod的好。
一般二分類問題中,隱藏層用tanh函式,輸出層用sigmod函式。不過這些也都不是一成不變的,具體使用什麼啟用函式,還是要根據具體的問題來具體分析,還是要靠除錯的。
relu函式公式和曲線如下
優點一:相較於sigmoid和tanh函式,relu對於隨機梯度下降的收斂有巨大的加速作用( krizhevsky 等的**指出有6倍之多)。據稱這是由它的線性,非飽和的公式導致的。
優點二:sigmoid和tanh神經元含有指數運算等耗費計算資源的操作,而relu可以簡單地通過對乙個矩陣進行閾值計算得到。
優點三:relu也引入了一定的稀疏性,在特徵表示的範疇內,資料有一定的稀疏性,也就是說,有一部分的資料其實是冗餘的。通過引入relu,可以模擬這種稀疏性,以最大近似的方式來保留資料的特徵。
缺點一:當輸入是負數的時候,relu是完全不被啟用的,這就表明一旦輸入到了負數,relu就會死掉。這樣在前向傳播過程中,還不算什麼問題,有的區域是敏感的,有的是不敏感的。但是到了反向傳播過程中,輸入負數,梯度就會完全到0,這個和sigmod函式、tanh函式有一樣的問題。
缺點二:我們發現relu函式的輸出要麼是0,要麼是正數,這也就是說,relu函式也不是以0為中心的函式。
elu函式公式和曲線如下圖
elu函式是針對relu函式的乙個改進型,相比於relu函式,在輸入為負數的情況下,是有一定的輸出的,而且這部分輸出還具有一定的抗干擾能力。這樣可以消除relu死掉的問題,不過還是有梯度飽和和指數運算的問題。
prelu函式公式和曲線如下圖
prelu也是針對relu的乙個改進型,在負數區域內,prelu有乙個很小的斜率,這樣也可以避免relu死掉的問題。相比於elu,prelu在負數區域內是線性運算,斜率雖然小,但是不會趨於0,這算是一定的優勢吧。
我們看prelu的公式,裡面的引數α一般是取0~1之間的數,而且一般還是比較小的,如零點零幾。kaiming he等人在2023年發布的**delving deep into rectifiers中介紹了一種方法prelu,把負區間上的斜率當做每個神經元中的乙個引數。當α=0.01時,我們叫prelu為leaky relu,算是prelu的一種特殊情況吧。
一些其他型別的單元被提了出來,它們對於權重和資料的內積結果不再使用函式形式。乙個相關的流行選擇是maxout(最近由goodfellow等發布)神經元。maxout是對relu和leaky relu的一般化歸納,它的函式是:。relu和leaky relu都是這個公式的特殊情況(比如relu就是當的時候)。這樣maxout神經元就擁有relu單元的所有優點(線性操作和不飽和),而沒有它的缺點(死亡的relu單元)。然而和relu對比,它每個神經元的引數數量增加了一倍,這就導致整體引數的數量激增。
如果你使用 relu,那麼一定要小心設定 learning rate,而且要注意不要讓你的網路出現很多 「dead」 神經元,如果這個問題不好解決,那麼可以試試 leaky relu、prelu 或者 maxout.
參考部落格:
深度學習 啟用函式
主要作用 加入非線性因素,彌補線性模型表達不足的缺陷 sigmoid函式 隨著 x xx 的趨近正 負無窮,y yy 對應的值越來越接近 1 1,趨近飽和 因此當 x xx 100 和 x xx 1000 的差別不大,這個特性丟掉了 x xx 1000 的資訊 tanh函式 對sigmoid函式的值...
深度學習 啟用函式
啟用函式又稱 非線性對映函式 是深度卷積神經網路中不可或缺的模組。可以說,深度網路模型強大的表示能力大部分便是由啟用函式的非線性單元帶來的。這部分共介紹7個啟用函式 sigmoid函式,tanh函式,relu函式,leaky relu函式,引數化relu,隨機化relu和指數化線性單元 elu si...
深度學習之啟用函式
sigmoid啟用函式 sigmoid將乙個實數輸入對映到 0,1 範圍內,如下圖 左 所示。使用sigmoid作為啟用函式存在以下幾個問題 梯度飽和。當函式啟用值接近於0或者1時,函式的梯度接近於0。在反向傳播計算梯度過程中 l w l t l 1 f z l 每層殘差接近於0,計算出的梯度也不可...