深度學習基礎知識(四)— 激活函數
- 2020 年 2 月 14 日
- 筆記
激活函數也就是一些非線性單元,如果不用激活函數,每一層輸出都是上層輸入的線性函數,無論神經網絡有多少層,輸出都是輸入的線性組合。
如果使用的話,激活函數給神經元引入了非線性因素,使得神經網絡可以任意逼近任何非線性函數,這樣神經網絡就可以應用到眾多的非線性模型中。
參考文章:
https://zhuanlan.zhihu.com/p/25110450
1.sigmoid

sigmoid作激活函數的優缺點:
①梯度計算較為方便:

②能夠控制數值的幅度,在深層網絡中可以保持數據幅度不會出現大的變化;
(即能壓縮數據,保證數據幅度不會有問題)
sigmoid缺點:
(1)容易出現梯度消失(gradient vanishing)的現象:當激活函數接近飽和區時,變化太緩慢,導數接近0,
(參考上圖中的右圖梯度變化趨勢)根據後向傳遞的數學依據是微積分求導的鏈式法則,當前導數需要之前各層導數的乘積,幾個比較小的數相乘,導數結果很接近0,從而無法完成深層網絡的訓練。
(2)Sigmoid的輸出不是0均值(zero-centered)的,輸出值恆大於0,這會導致模型訓練的收斂速度變慢:比如上一級 經過 sigmoid之後,輸出的一定是個正數x,那麼希望更新這一級的參數的時候,wx+b,w的梯度是x,但是x恆為正,那麼我這一級的w(w是個向量,裏面會有很多分量)的所有分量都只能往正向移動,不能各個分量朝不同的方向移動,所以收斂速度變慢。
(3)冪運算相對來講比較耗時
2.tanh
tanh讀作 Hyperbolic Tangent

它的輸出是0均值的了,解決了上面sigmoid的(2問題),但是梯度消失 和 冪運算費時的問題依然存在
3.ReLU (Rectified Linear Unit)整流線性單元

ReLU函數其實就是一個取最大值函數,注意這並不是全區間可導的(0點不連續),但是我們可以取sub-gradient,如上圖所示。ReLU雖然簡單,但卻是近幾年的重要成果,有以下幾大優點:
(1)解決了gradient vanishing問題 (在正區間)
(2)計算速度非常快,只需要判斷輸入是否大於0
(3)收斂速度遠快於sigmoid和tanh
ReLU也有幾個需要特別注意的問題:
(1)ReLU的輸出不是zero-centered
(2)Dead ReLU Problem,指的是某些神經元可能永遠不會被激活,導致相應的參數永遠不能被更新。有兩個主要原因可能導致這種情況產生: (1) 非常不幸的參數初始化,這種情況比較少見 (2) learning rate太高導致在訓練過程中參數更新太大,使得輸入發生巨大變化後越過0界,則前向傳播為0,相當於這個單元被關閉了,反向傳播的時候也為0 ,這個關掉的單元就跳不出來了。解決方法是可以採用Xavier初始化方法,以及避免將learning rate設置太大或使用adagrad等自動調節learning rate的算法。
儘管存在這兩個問題,ReLU目前仍是最常用的activation function,在搭建人工神經網絡的時候推薦優先嘗試!
4.Leaky ReLU(滲漏整流線性單元)
為了解決Dead ReLU Problem,提出了將ReLU的前半段設為0.01x而非0.

5.ELU (Exponential Linear Units)指數化線性單元

ELU也是為解決ReLU存在的問題而提出,顯然,ELU有ReLU的基本所有優點,以及:
(1)不會有Dead ReLU問題
(2)輸出的均值接近0,zero-centered
它的一個小問題在於計算量稍大。類似於Leaky ReLU,理論上雖然好於ReLU,但在實際使用中目前並沒有好的證據ELU總是優於ReLU。
6.PReLU ( Parameterized ReLU) 參數整流線性單元

將輸入為負半軸部分映射為 一個可學習參數α和輸入的乘積