自然語言菜鳥學習筆記(八):激活函數

目錄

前言

爲什麼要激活函數?

幾種激活函數

Sigmoid

Tanh

ReLU

Leaky-ReLU

ELU

激活函數的選擇


前言

學自然語言的時候,也不知道咋回事,就是頭冷。


爲什麼要激活函數?

比如說對於一個神經網絡,我們不用激活函數是一個什麼樣紙?那麼我們可以假想激活函數是 f(x) = x,因爲沒有用激活函數嘛,也就是 y = x一個線性的存在,神經網絡的結構是層次的,高級的層次的輸入是來自於低級的層次的輸出的,那麼,如果我們不使用激活函數,神經網絡上的每一層節點的輸入都是上一層的節點的輸出的線性函數(可以想象成 f(x) = x)。那麼,無論我們使用多少層、多深層次的神經網絡,輸出都是輸入的線性組合,隱藏層失去效果,很多層次的神經網絡相當於單層的神經網絡,其實很好理解,這種情況就是最原始的感知機(Perception)。

若我們使用非線性的函數當做激活函數,神經網絡不在是線性組合,給神經元引入了非線性因素, 可以逼近任意非線性函數,這樣我們深層次的神經網絡的表達能力更強。


幾種激活函數

採用不同的激活函數可能會使神經網絡梯度下降的速度不一樣,最終神經網絡的擬合能力可能也不一樣,所以怎麼選激活函數得看實際的模型中是如何操作的。

Sigmoid

左側爲Sigmoid函數的形狀,右側爲Sigmoid導數的形狀

公式如下:

\sigma (x) = \frac{1}{1 + e^{-x}}

特點:

  • 可以看到左側他的函數的形狀,在[ -5, +5 ]的區間內,值的波動會比較大,而在這個區間之外,值將逐漸趨於平緩。所以在輸入非常大或者輸入很小的時候是沒有梯度的,從右側的倒數也可以看出,當輸入超過區間的時候,梯度基本爲0。兩側的導數逐漸趨於零,這種特性成爲軟飽和性。飽和的意思就是梯度不下降了。
  • 輸出均值非0,大於0,在圖中可以看出是0.5,輸出均值不爲0,有什麼不好的地方?         這會導致後面一層的神經元將得到上一層輸出的非0均值的信號作爲輸入。產生的一個結果就是:如果數據進入神經元的時候是正的,那麼計算出的梯度也會始終都是正的。因爲原本輸入的計算經過sigmoid它就會大於0。當然了,如果你是按batch去訓練,那麼那個batch可能得到不同的信號,所以這個問題還是可以緩解一下的。
  • e的-x次方會導致模型計算複雜,計算資源消耗大
  • 梯度消失,梯度下降是對每個方向求偏導,Sigmoid的導數的取值範圍在0到0.25之間,假設讓很多層的神經網絡,他梯度下降的過程中如果吧激活函數設置爲sigmoid就會導致很多個 [ 0, 0.25 ]之間的數相乘,最終梯度消失。

 

Tanh

特點:

  • 輸入超過一定的區間範圍,也會導致沒有梯度,可以看到右側的導數形狀,取值很大或很小,梯度就沒有了。
  • 輸出均值是0,這點是好一些的,輸出均值在上面sigmoid有介紹到。所以收斂速度要比sigmoid快,會減少迭代次數。
  • 計算複雜,計算e的x和-x次方

 

ReLU

公式:

f(x) = \left\{\begin{matrix} x, x \geq 0\\ 0, x < 0 \end{matrix}\right.

特點:

  • 計算簡單。
  • 不飽和性,觀察右側的導數,當輸入大於0的時候,值都能等於1,一直是有梯度的,所以收斂速度會比較快。
  • 輸出均值大於0
  • 當輸入小於零,則梯度直接爲0,就是ReLU硬飽和。就是假設有一個比較大的梯度進行下降導致 x 變爲負值,那麼他的梯度將持續爲0,一直得不到更新,對數據不再有激活的能力,該神經單元相當於死掉了。

 

Leaky-ReLU

爲了解決上述ReLU導致神經元死掉的情況,提出了一種Leaky-ReLU,公式改爲:

f(x) = max(0.01x, x)

這樣子當x小於0的時候梯度不會是0, 解決了ReLU最大的一個問題。

 

     

特點:

可以看到右側是他的一個導數,當x小於0的時候梯度也是存在的,不會出現Dead ReLU的問題,可以梯度更新。

 

ELU

特點:

  • 和Leaky-ReLU類似,只不過當x小於0的時候是用了指數的形式
  • 輸出均值相較於Leaky-ReLU和ReLU更接近於0
  • 小於0的部分計算複雜

 

公式:

f(x) = \left\{\begin{matrix} x, & x>0 \\ \alpha (exp(x)-1), & x \leq 0 \end{matrix}\right.

 

Maxout

ReLU的一個衍生版本

公式:

f(x) = max(w_{1}^{T}x + b_{1}, w_{2}^{T}x + b_{2})

對比普通的ReLU公式:

f(x) = max(w_{1}^{T}x + b_{1}, 0)

Maxout也可以成下方的形式:

特點:

  • 同樣解決了Dead ReLU的問題
  • 多了一套參數
  • 很明顯,擬合能力很強,多套參數
  • 計算量增加,參數增多代表計算複雜。

激活函數的選擇

1. 儘量不使用Sigmoid,缺點多相較於其他的激活函數

2. ReLU的學習率設置較小的值,因爲他的導數較大

3. 相較於ReLU,使用它的衍生版本。

 

 

 

以上是對激勵函數的粗淺認識

本菜鳥學習不好,如有不妥望各位大佬指點

如要轉載請說明原文:https://blog.csdn.net/qq_36652619

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章