【DL-CV】激活函數及其選擇

【DL-CV】反向傳播,(隨機)梯度降低<前篇---後篇>【DL-CV】神經網絡的補充segmentfault

在介紹線性分類器的時候,提到了激活函數,還提到線性分類器的輸出要通過激活函數才能做爲下一層網絡的輸入。爲何呢?本文將對這一問題進行解疑並介紹多種多種激活函數。網絡

引入激活函數

假如神經網絡只由多個線性分類組器合而成,那不管怎樣組合,他們對數據的操做永遠都是線性變換而已,複雜度有限,只能實現線性分類而不能實現非線性分類,但現實中的數據每每不是線性可分的。爲了解決這個問題,就要給神經網絡引入非線性因素,提升神經網絡模型的表達能力(學習更復雜的映射)。激活函數就是用來引入這個非線性因素的,下面介紹幾種常見的激活函數及其優缺點(正負號表示)。函數

Sigmoid

其數學公式及其圖像以下
clipboard.png學習

它把輸入壓縮到(0,1)區間內,有兩端飽和的特性,對於很大的正數它輸出趨近與1,對於絕對值很小的負數它輸出趨近於0。
這個函數曾經很是流行,可是因爲其缺點(主要是兩邊飽和)飽受詬病,如今沒什麼人用了spa

  • (-)梯度消失:當輸入過大或太小時,由圖可知局部梯度幾乎爲0,通過鏈式法則後梯度也幾乎爲0,你會失去梯度流的反饋,使權重幾乎不更新
  • (-)非零中心:sigmoid的輸出均大於零(不是零均值),即給下一層神經元的x都大於零,$\sigma(W*x+b)$,假如這裏的x全是正數,那麼通過反向傳播${∂L\over ∂W}會全正或全負$,因而全部權重值都會往一個方向更新,這樣訓練效率很是低。

tanh

其數學公式及其圖像以下(雙曲正切)
clipboard.png.net

形狀和sigmoid很像,也是兩端飽和,不一樣的是它把輸入壓縮到(-1,1)區間內。blog

  • (+)以零爲中心
  • (-)梯度消失

比sigmoid好了一點,沒有非零中心的問題圖片

ReLU

其數學公式及其圖像以下
clipboard.pngip

就是個取最大值得函數,當輸入爲負數,輸出爲0;當輸入爲正數,輸出仍是這個數get

  • (+)在正區間不會飽和(一個優點):在正區間梯度可傳遞
  • (+)計算成本低
  • (+)使用ReLU以後,權重收斂速度比sigmoid/tanh快(約6倍)
  • (-)非零中心
  • (-)在負區間梯度消失:某些權重永遠不會更新,咱們稱這種狀況叫「dead ReLU」。致使這種狀況頻發的緣由主要有權重初始化很差或學習率過高

雖然有「dead ReLU」的狀況發生,但這並不阻礙它成爲優秀的激活函數,實際應用中其表現不錯,是很是經常使用的激活函數

Leaky ReLU(LReLU)

其數學公式及其圖像以下
clipboard.png

ReLU的變種,負區間再也不是0,而是給它一個很小的斜率(上圖是0.01,也能夠是其餘常數)

  • (+)ReLU的優勢
  • (+)不會出現梯度消失的狀況

關於其效果沒有清晰的定論,有的實驗表現好,有些則很差


其實還能夠把那個斜率看成能夠反向傳播和學習的參數α,而後就變成了Parametric ReLU(PReLU)激活函數
$$f(x)=max(\alpha x,x)$$

ELU

其數學公式及其圖像以下
clipboard.png

全名指數線性單元Exponential Linear Units,α是一個可調整的參數,它控制着ELU負值部分在什麼時候飽和

  • (+)ReLU的優勢
  • (+)輸出均值接近零
  • (+)負飽和機制,使模型對噪音有更強的魯棒性

關於其詳細介紹可看此論文,或者看看論文導讀

Maxout

這個函數有點奇,我以爲它直接改變了原有MLP網絡的結構,以致於造成了maxout網絡,其自己就集成了激活函數的功能。
$$f(x)=max_{j\in [1,k]}z_{j}$$
k是需人爲設定的參數,k=1,網絡就類至關於普通的MLP網絡;k>1,就變身成maxout網絡了。這個函數的原理以下圖,筆者文字表達欠佳,需做圖才能展現出來。若是想了解更多可上網搜「maxout激活函數」
圖片描述

選擇

在同一個模型中,激活函數不會混搭使用,選定一個就用一個。通常最好的經驗法則是使用ReLU函數,可是要謹慎的調節學習率。像LReLU,PReLU,ELU,Maxout這些函數則實驗性強一點(實用性弱一點),但也能夠試下。tanh和sigmoid就em....,算了吧。


除了這裏介紹的6個外,還有一些其餘的激活函數(若有着喪心病狂證實的SeLU),感興趣的能夠去查一下

相關文章
相關標籤/搜索