activation function 神經網絡常用激活函數

1.引入非線性激活函數(activation function)的作用

如果不使用非線性激活函數,此時激活函數本質上相當於f(x)=ax+b。這種情況先,神經網絡的每一層輸出都是上層輸入的線性函數。不難看出,不論神經網絡有多少層,輸出與輸入都是線性關係,與沒有隱層的效果是一樣的,這個就是相當於是最原始的感知機(Perceptron)。至於感知機,大家知道其連最基本的異或問題都無法解決,更別提更復雜的非線性問題。

首先,激活函數不是真的要去激活什麼。在神經網絡中,激活函數的作用是能夠給神經網絡加入一些非線性因素,使得神經網絡可以更好地解決較爲複雜的問題。

比如在下面的這個問題中:


在最簡單的情況下,數據是線性可分的,只需要一條直線就已經能夠對樣本進行很好地分類。


數據就變成了線性不可分的情況。在這種情況下,簡單的一條直線就已經不能夠對樣本進行很好地分類了。


激活函數的定義及其相關概念

在實際應用中,我們還會涉及到以下的一些概念:
a.飽和
當一個激活函數h(x)滿足

limn+h(x)=0limn→+∞h′(x)=0
時我們稱之爲右飽和

當一個激活函數h(x)滿足

limnh(x)=0limn→−∞h′(x)=0
時我們稱之爲左飽和。當一個激活函數,既滿足左飽和又滿足又飽和時,我們稱之爲飽和

b.硬飽和與軟飽和
對任意的xx,如果存在常數cc,當x>cx>c時恆有 h(x)=0h′(x)=0則稱其爲右硬飽和,當x<cx<c時恆 有h(x)=0

h′(x)=0則稱其爲左硬飽和。若既滿足左硬飽和,又滿足右硬飽和,則稱這種激活函數爲硬飽和。但如果只有在極限狀態下偏導數等於0的函數,稱之爲軟飽和

2.神經網絡常見的非線性激活函數

Sigmoid函數

Sigmoid函數曾被廣泛地應用,但由於其自身的一些缺陷,現在很少被使用了。Sigmoid函數被定義爲:

f(x)=11+exf(x)=11+e−x
函數對應的圖像是:

優點:
1.Sigmoid函數的輸出映射在(0,1)(0,1)之間,單調連續,輸出範圍有限,優化穩定,可以用作輸出層。
2.求導容易。

缺點:
1.由於其軟飽和性,容易產生梯度消失,導致訓練出現問題。
2.其輸出並不是以0爲中心的。


tanh函數

現在,比起Sigmoid函數我們通常更傾向於tanh函數。tanh函數被定義爲

tanh(x)=1e2x1+e2xtanh(x)=1−e−2x1+e−2x

函數位於[-1, 1]區間上,對應的圖像是:

優點:
1.比Sigmoid函數收斂速度更快。
2.相比Sigmoid函數,其輸出以0爲中心。
缺點:
還是沒有改變Sigmoid函數的最大問題——由於飽和性產生的梯度消失。


ReLU

ReLU是最近幾年非常受歡迎的激活函數。被定義爲

y={0x(x0)(x>0)y={0(x≤0)x(x>0)
對應的圖像是:

但是除了ReLU本身的之外,TensorFlow還提供了一些相關的函數,比如定義爲min(max(features, 0), 6)的tf.nn.relu6(features, name=None);或是CReLU,即tf.nn.crelu(features, name=None)。其中(CReLU部分可以參考這篇論文)。
優點:
1.相比起Sigmoid和tanh,ReLU(e.g. a factor of 6 in Krizhevsky et al.)在SGD中能夠快速收斂。例如在下圖的實驗中,在一個四層的卷積神經網絡中,實線代表了ReLU,虛線代表了tanh,ReLU比起tanh更快地到達了錯誤率0.25處。據稱,這是因爲它線性、非飽和的形式。

2.Sigmoid和tanh涉及了很多很expensive的操作(比如指數),ReLU可以更加簡單的實現。
3.有效緩解了梯度消失的問題。
4.在沒有無監督預訓練的時候也能有較好的表現。


5.提供了神經網絡的稀疏表達能力。

缺點:
隨着訓練的進行,可能會出現神經元死亡,權重無法更新的情況。如果發生這種情況,那麼流經神經元的梯度從這一點開始將永遠是0。也就是說,ReLU神經元在訓練中不可逆地死亡了。


LReLU、PReLU與RReLU

通常在LReLU和PReLU中,我們定義一個激活函數爲

f(yi)={yiaiyiif(yi>0)if(yi0)f(yi)={yiif(yi>0)aiyiif(yi≤0)

-LReLU
aiai比較小而且固定的時候,我們稱之爲LReLU。LReLU最初的目的是爲了避免梯度消失。但在一些實驗中,我們發現LReLU對準確率並沒有太大的影響。很多時候,當我們想要應用LReLU時,我們必須要非常小心謹慎地重複訓練,選取出合適的aa,LReLU的表現出的結果才比ReLU好。因此有人提出了一種自適應地從數據中學習參數的PReLU。

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


在論文Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification中,作者就對比了PReLU和ReLU在ImageNet model A的訓練效果。
值得一提的是,在tflearn中有現成的LReLU和PReLU可以直接用。

-RReLU
在RReLU中,我們有

yji={xjiajixjiif(xji>0)if(xji0)yji={xjiif(xji>0)ajixjiif(xji≤0)
ajiU(l,u),l<uandl,u[0,1)aji∼U(l,u),l<uandl,u∈[0,1)

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

在論文Empirical Evaluation of Rectified Activations in Convolution Network中,作者對比了RReLU、LReLU、PReLU、ReLU 在CIFAR-10、CIFAR-100、NDSB網絡中的效果。

ELU

ELU被定義爲

f(x)={a(ex1)xif(x<0)if(0x)f(x)={a(ex−1)if(x<0)xif(0≤x)
其中a>0
2.jpg-34.2kB

優點:
1.ELU減少了正常梯度與單位自然梯度之間的差距,從而加快了學習。
2.在負的限制條件下能夠更有魯棒性。

ELU相關部分可以參考這篇論文

Softplus與Softsign

Softplus被定義爲

f(x)=log(ex+1)f(x)=log(ex+1)

Softsign被定義爲
f(x)=x|x|+1f(x)=x|x|+1

目前使用的比較少,在這裏就不詳細討論了。TensorFlow裏也有現成的可供使用。激活函數相關TensorFlow的官方文檔

總結

關於激活函數的選取,目前還不存在定論,實踐過程中更多還是需要結合實際情況,考慮不同激活函數的優缺點綜合使用。同時,也期待越來越多的新想法,改進目前存在的不足。