深度學習基礎(七)—— Activation Function

1. Sigmoid

函數定義:

f(x)=11+ex

對應的圖像是:
這裏寫圖片描述
優點:
  • Sigmoid函數的輸出映射在(0,1)之間,單調連續,輸出範圍有限,優化穩定,可以用作輸出層。
  • 求導容易。

缺點:

  • sigmoid容易飽和,出現梯度消失的現象。 sigmoid神經元的一個很差的屬性就是神經元的活躍度在0和1處飽和,它的梯度在這些地方接近於0。回憶在反向傳播中,某處的梯度和其目標輸出的梯度相乘,以得到整個目標。因此,如果某處的梯度過小,就會很大程度上出現梯度消失,使得幾乎沒有信號經過這個神經元以及所有間接經過此處的數據。除此之外,人們必須額外注意sigmoid神經元權值的初始化來避免飽和。例如,當初始權值過大,幾乎所有的神經元都會飽和以至於網絡幾乎不能學習。
  • Sigmoid 的輸出不是0均值的會導致後層的神經元的輸入是非0均值的信號,這會對梯度產生影響:假設後層神經元的輸入都爲正(e.g.x>0,f=wTx+b) ,那麼對w求局部梯度則都爲正,這樣在反向傳播的過程中w要麼都往正方向更新,要麼都往負方向更新,導致有一種捆綁的效果,使得收斂緩慢。 但是如果你是按batch去訓練,那麼每個batch可能得到不同的符號(正或負),那麼相加一下這個問題還是可以緩解。

2. Tanh

函數定義:

tanh(x)=1e2x1+e2x

對應圖像:
這裏寫圖片描述
優點:
  • 相比Sigmoid函數,其輸出以0爲中心。
  • 比Sigmoid函數收斂速度更快

缺點:

  • 還是沒有改變Sigmoid函數的最大問題——由於飽和性產生的梯度消失。

3. ReLU

函數定義:

y={0(x0)x(x>0)

對應圖像:
這裏寫圖片描述

優點:

  • 相比起Sigmoid和tanh,ReLU(e.g. a factor of 6 in Krizhevsky et al.)在SGD中能夠快速收斂。
    這裏寫圖片描述
    • Sigmoid和tanh涉及了很多很expensive的操作(比如指數),ReLU可以更加簡單的實現。
    • 有效緩解了梯度消失的問題。
    • 在無監督預訓練的時候也能有較好的表現。
    • 提供了神經網絡的稀疏表達能力。

缺點:

  • 隨着訓練的進行,可能會出現神經元死亡,權重無法更新的情況。如果發生這種情況,那麼流經神經元的梯度從這一點開始將永遠是0。也就是說,ReLU神經元在訓練中不可逆地死亡了。例如,當學習速率設定過快時,60%的網絡都“掛了”(神經元在此後的整個訓練中都不激活)。當學習率設定恰當時,這種事情會更少出現。

4. LReLU、PReLU與RReLU

函數定義:

f(yi)={yiif(yi>0)aiyiif(yi0)

對應圖像:
這裏寫圖片描述

4.1 LReLU

ai 比較小而且固定的時候,我們稱之爲LReLU。LReLU最初的目的是爲了避免梯度消失。但在一些實驗中,我們發現LReLU對準確率並沒有太大的影響。很多時候,當應用LReLU時,必須要選取出合適的ai ,LReLU的表現出的結果才比ReLU好。

4.2 PReLU

PReLU是LReLU的改進,可以自適應地從數據中學習參數。PReLU具有收斂速度快、錯誤率低的特點。PReLU可以用於反向傳播的訓練,可以與其他層同時優化。

  • PReLU 只增加了極少量的參數,也就意味着網絡的計算量以及過擬合的危險性都只增加了一點點。特別的,當不同channels使用相同的ai 時,參數就更少了。
  • BP更新ai 時,採用的是帶動量的更新方式:
    Δai:=μΔai+ϵεai

    注意:上式的兩個係數分別是動量和學習率。
  • 更新 ai 時不施加權重衰減(L2正則化),因爲這會把 ai 很大程度上 push 到 0。事實上,即使不加正則化,試驗中 ai 也很少有超過1的。
  • 整個論文,ai 被初始化爲0.25。
  • PReLU具有收斂速度快、錯誤率低的特點,可以用於反向傳播的訓練,可以與其他層同時優化。

4.3 RReLU

公式:

yji={xjiif(xji>0)ajixjiif(xji0)

其中,aji 是一個保持在給定範圍內取樣的隨機變量,在測試中是固定的。RReLU在一定程度上能起到正則效果。

4.4 ELU

公式:

f(x)={a(ex1)if(x<0)xif(0x)

其中a>0
這裏寫圖片描述
優點:
  • ELU減少了正常梯度與單位自然梯度之間的差距,從而加快了學習。
  • 在負的限制條件下能夠更有魯棒性。

5 總結

  • 選擇的時候,就是根據各個函數的優缺點來配置,例如:
  • 如果使用 ReLU,要小心設置 learning rate,注意不要讓網絡出現很多 “dead” 神經元,如果不好解決,可以試試 Leaky ReLU、PReLU 或者 Maxout。
  • 通常來說,很少會把各種激活函數串起來在一個網絡中使用的。
  • 最好不要用 sigmoid,可以試試 tanh,不過可以預期它的效果會比不上 ReLU 和 Maxout.

6 參考

  1. The Activation Function in Deep Learning 淺談深度學習中的激活函數
  2. 神經網絡中的各種激活函數
  3. 深度學習基礎
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章