深度學習06: 常用激活函數總結(sigmod,tanh,Relu等)

深度學習中幾種常見的激活函數理解與總結
https://www.cnblogs.com/XDU-Lakers/p/10557496.html
神經網絡梯度消失和梯度爆炸及解決辦法
https://blog.csdn.net/program_developer/article/details/80032376

這文章詳細分析了幾個激活函數優缺點,值得分享;

飽和激活函數:

sigmod:

優點:
提供非線性激活函數
缺點:
1.sigmoid函數飽和,使梯度消失;
2.sigmoid函數輸出不是零中心(zero-centered);
3.指數函數計算耗費計算資源;

tanh:

優點:tanh解決了sigmoid的輸出非“零爲中心”的問題

缺點:
1.依然有sigmoid函數過飽和的問題。
2.依然進行的是指數運算

非飽和激活函數:

ReLu

優點:
1.ReLU解決了梯度消失的問題,至少x在正區間內,神經元不會飽和;
2.由於ReLU線性、非飽和的形式,在SGD中能夠快速收斂;
3.計算速度要快很多。ReLU函數只有線性關係,不需要指數計算,不管在前向傳播還是反向傳播,計算速度都比sigmoid和tanh快

缺點:
1.ReLU的輸出不是“零爲中心”(Notzero-centered output)。
2.隨着訓練的進行,可能會出現神經元死亡,權重無法更新的情況。這種神經元的死亡是不可逆轉的死亡

總結:訓練神經網絡的時候,一旦學習率沒有設置好,第一次更新權重的時候,輸入是負值,那麼這個含有ReLU的神經節點就會死亡,再也不會被激活。所以必須設置一個合理的學習率。爲了解決神經元節點死亡的情況,有人提出了Leaky ReLU、P-ReLu、R-ReLU、ELU等激活函數。

Leaky ReLU

優點:

1.神經元不會出現死亡的情況。

2.對於所有的輸入,不管是大於等於0還是小於0,神經元不會飽和。

3.由於Leaky ReLU線性、非飽和的形式,在SGD中能夠快速收斂。

4.計算速度要快很多。Leaky ReLU函數只有線性關係,不需要指數計算,不管在前向傳播還是反向傳播,計算速度都比sigmoid和tanh快。

缺點:
1.Leaky ReLU函數中的α,需要通過先驗知識人工賦值。

總結:Leaky ReLU很好的解決了“dead ReLU”的問題。因爲Leaky ReLU保留了x小於0時的梯度,在x小於0時,不會出現神經元死亡的問題。對於Leaky ReLU給出了一個很小的負數梯度值α,這個值是很小的常數。比如:0.01。這樣即修正了數據分佈,又保留了一些負軸的值,使得負軸信息不會全部丟失。但是這個α通常是通過先驗知識人工賦值的。

RReLU

特點:
(1).RReLU是Leaky ReLU的random版本,在訓練過程中,α是從一個高斯分佈中隨機出來的,然後再測試過程中進行修正。

(2).數學形式與PReLU類似,但RReLU是一種非確定性激活函數,其參數是隨機的

總結:

(1)PReLU中的α是根據數據變化的;

(2)Leaky ReLU中的α是固定的;

(3)RReLU中的α是一個在給定範圍內隨機抽取的值,這個值在測試環節就會固定下來。

ELU

優點:

(1)ELU包含了ReLU的所有優點。

(2)神經元不會出現死亡的情況。

(3)ELU激活函數的輸出均值是接近於零的。

缺點:

(1)計算的時候是需要計算指數的,計算效率低的問題。

Maxout

優點:

(1)Maxout具有ReLU的所有優點,線性、不飽和性。

(2)同時沒有ReLU的一些缺點。如:神經元的死亡。

缺點:

(1)從這個激活函數的公式14中可以看出,每個neuron將有兩組w,那麼參數就增加了一倍。這就導致了整體參數的數量激增。

如何選擇合適的激活函數?

看了這多激活函數,想必大家都應該有所瞭解,那這麼多的激活函數該如何選擇呢?目前還不存在定論,在實踐過程中更多還是需要結合實際情況,考慮不同激活函數的優缺點綜合使用。我在這裏給大家一點在訓練模型時候的建議。

(1)通常來說,不能把各種激活函數串起來在一個網絡中使用。

(2)如果使用ReLU,那麼一定要小心設置學習率(learning rate),並且要注意不要讓網絡中出現很多死亡神經元。如果死亡神經元過多的問題不好解決,可以試試Leaky ReLU、PReLU、或者Maxout。

(3)儘量不要使用sigmoid激活函數,可以試試tanh,不過我還是感覺tanh的效果會比不上ReLU和Maxout。

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