如下圖,在神經(jīng)元中,輸入的 inputs 通過加權(quán),求和后,還被作用了一個函數(shù),這個函數(shù)就是激活函數(shù) Activation Function。
如果不用激勵函數(shù),每一層輸出都是上層輸入的線性函數(shù),無論神經(jīng)網(wǎng)絡有多少層,輸出都是輸入的線性組合。
如果使用的話,激活函數(shù)給神經(jīng)元引入了非線性因素,使得神經(jīng)網(wǎng)絡可以任意逼近任何非線性函數(shù),這樣神經(jīng)網(wǎng)絡就可以應用到眾多的非線性模型中。
2. 常見的激活函數(shù)
(1) sigmoid函數(shù)
公式:
曲線:
導數(shù):
sigmoid函數(shù)也叫 Logistic 函數(shù),用于隱層神經(jīng)元輸出,取值范圍為(0,1),它可以將一個實數(shù)映射到(0,1)的區(qū)間,可以用來做二分類。
優(yōu)點:
- 便于求導的平滑函數(shù);
- 能壓縮數(shù)據(jù),保證數(shù)據(jù)幅度不會有問題;
- 適合用于前向傳播。
缺點:
- 容易出現(xiàn)梯度消失(gradient vanishing)的現(xiàn)象:當激活函數(shù)接近飽和區(qū)時,變化太緩慢,導數(shù)接近0,根據(jù)后向傳遞的數(shù)學依據(jù)是微積分求導的鏈式法則,當前導數(shù)需要之前各層導數(shù)的乘積,幾個比較小的數(shù)相乘,導數(shù)結(jié)果很接近0,從而無法完成深層網(wǎng)絡的訓練。
- Sigmoid的輸出不是0均值(zero-centered)的:這會導致后層的神經(jīng)元的輸入是非0均值的信號,這會對梯度產(chǎn)生影響。以 f=sigmoid(wx+b)為例, 假設輸入均為正數(shù)(或負數(shù)),那么對w的導數(shù)總是正數(shù)(或負數(shù)),這樣在反向傳播過程中要么都往正方向更新,要么都往負方向更新,導致有一種捆綁效果,使得收斂緩慢。
- 冪運算,使得其相對耗時。
(2) Tanh函數(shù)(雙曲正切函數(shù))
公式:
曲線:
導數(shù):
tanh函數(shù)也稱為雙切正切函數(shù),取值范圍為[-1,1]。
一個優(yōu)點就是與 sigmoid 的區(qū)別是,tanh 是 0 均值的,因此實際應用中 tanh 會比 sigmoid 更好。
缺點類似sigmoid,雖然收斂速度相對快了,但也存在梯度彌散,而且也有冪計算,相對耗時。
(3) ReLU(線性修正單元)
公式:
曲線:
當輸入 x<0 時,輸出為 0,當 x> 0 時,輸出為 x。
優(yōu)點:
(1)SGD算法的收斂速度比 sigmoid 和 tanh 快;(梯度不會飽和,解決了梯度消失問題)
(2)計算復雜度低,不需要進行指數(shù)運算;
(3)適合用于后向傳播。
缺點:
(1)ReLU的輸出不是zero-centered;
(2)Dead ReLU Problem(神經(jīng)元壞死現(xiàn)象):某些神經(jīng)元可能永遠不會被激活,導致相應參數(shù)永遠不會被更新(在負數(shù)部分,梯度為0)。產(chǎn)生這種現(xiàn)象的兩個原因:參數(shù)初始化問題;learning rate太高導致在訓練過程中參數(shù)更新太大。 解決方法:采用Xavier初始化方法,以及避免將learning rate設置太大或使用adagrad等自動調(diào)節(jié)learning rate的算法。
(3)ReLU不會對數(shù)據(jù)做幅度壓縮,所以數(shù)據(jù)的幅度會隨著模型層數(shù)的增加不斷擴張。
(4) softmax函數(shù)
公式:
舉個例子來看公式的意思:
其求導往往結(jié)合交叉熵損失函數(shù),具體見博客:https://www.cnblogs.com/CJT-blog/p/10419523.html
softmax主要用于多類分類。 softmax函數(shù)的輸出可用于表示所有類的概率分布,其中每個類的范圍為(0,1],且其輸出滿足所有類概率和為1。
為什么要取指數(shù),第一個原因是要模擬 max 的行為,所以要讓大的更大。第二個原因是需要一個可導的函數(shù)。
3. 更多激活函數(shù)
下面是 26 個激活函數(shù)的圖示及其一階導數(shù),圖的右側(cè)是一些與神經(jīng)網(wǎng)絡相關(guān)的屬性。
1. Step
激活函數(shù) Step 更傾向于理論而不是實際,它模仿了生物神經(jīng)元要么全有要么全無的屬性。它無法應用于神經(jīng)網(wǎng)絡,因為其導數(shù)是 0(除了零點導數(shù)無定義以外),這意味著基于梯度的優(yōu)化方法并不可行。
2. Identity
通過激活函數(shù) Identity,節(jié)點的輸入等于輸出。它完美適合于潛在行為是線性(與線性回歸相似)的任務。當存在非線性,單獨使用該激活函數(shù)是不夠的,但它依然可以在最終輸出節(jié)點上作為激活函數(shù)用于回歸任務。
3. ReLU
修正線性單元(Rectified linear unit,ReLU)是神經(jīng)網(wǎng)絡中最常用的激活函數(shù)。它保留了 step 函數(shù)的生物學啟發(fā)(只有輸入超出閾值時神經(jīng)元才激活),不過當輸入為正的時候,導數(shù)不為零,從而允許基于梯度的學習(盡管在 x=0 的時候,導數(shù)是未定義的)。使用這個函數(shù)能使計算變得很快,因為無論是函數(shù)還是其導數(shù)都不包含復雜的數(shù)學運算。然而,當輸入為負值的時候,ReLU 的學習速度可能會變得很慢,甚至使神經(jīng)元直接無效,因為此時輸入小于零而梯度為零,從而其權(quán)重無法得到更新,在剩下的訓練過程中會一直保持靜默。
4. Sigmoid
Sigmoid 因其在 logistic 回歸中的重要地位而被人熟知,值域在 0 到 1 之間。Logistic Sigmoid(或者按通常的叫法,Sigmoid)激活函數(shù)給神經(jīng)網(wǎng)絡引進了概率的概念。它的導數(shù)是非零的,并且很容易計算(是其初始輸出的函數(shù))。然而,在分類任務中,sigmoid 正逐漸被 Tanh 函數(shù)取代作為標準的激活函數(shù),因為后者為奇函數(shù)(關(guān)于原點對稱)。
5. Tanh
在分類任務中,雙曲正切函數(shù)(Tanh)逐漸取代 Sigmoid 函數(shù)作為標準的激活函數(shù),其具有很多神經(jīng)網(wǎng)絡所鐘愛的特征。它是完全可微分的,反對稱,對稱中心在原點。為了解決學習緩慢和/或梯度消失問題,可以使用這個函數(shù)的更加平緩的變體(log-log、softsign、symmetrical sigmoid 等等)
6. Leaky ReLU
經(jīng)典(以及廣泛使用的)ReLU 激活函數(shù)的變體,帶泄露修正線性單元(Leaky ReLU)的輸出對負值輸入有很小的坡度。由于導數(shù)總是不為零,這能減少靜默神經(jīng)元的出現(xiàn),允許基于梯度的學習(雖然會很慢)。
7. PReLU
參數(shù)化修正線性單元(Parameteric Rectified Linear Unit,PReLU)屬于 ReLU 修正類激活函數(shù)的一員。它和 RReLU 以及 Leaky ReLU 有一些共同點,即為負值輸入添加了一個線性項。而最關(guān)鍵的區(qū)別是,這個線性項的斜率實際上是在模型訓練中學習到的。
8. RReLU
隨機帶泄露的修正線性單元(Randomized Leaky Rectified Linear Unit,RReLU)也屬于 ReLU 修正類激活函數(shù)的一員。和 Leaky ReLU 以及 PReLU 很相似,為負值輸入添加了一個線性項。而最關(guān)鍵的區(qū)別是,這個線性項的斜率在每一個節(jié)點上都是隨機分配的(通常服從均勻分布)。
9. ELU
指數(shù)線性單元(Exponential Linear Unit,ELU)也屬于 ReLU 修正類激活函數(shù)的一員。和 PReLU 以及 RReLU 類似,為負值輸入添加了一個非零輸出。和其它修正類激活函數(shù)不同的是,它包括一個負指數(shù)項,從而防止靜默神經(jīng)元出現(xiàn),導數(shù)收斂為零,從而提高學習效率。
10. SELU
擴展指數(shù)線性單元(Scaled Exponential Linear Unit,SELU)是激活函數(shù)指數(shù)線性單元(ELU)的一個變種。其中λ和α是固定數(shù)值(分別為 1.0507 和 1.6726)。這些值背后的推論(零均值/單位方差)構(gòu)成了自歸一化神經(jīng)網(wǎng)絡的基礎(SNN)。
11. SReLU
S 型整流線性激活單元(S-shaped Rectified Linear Activation Unit,SReLU)屬于以 ReLU 為代表的整流激活函數(shù)族。它由三個分段線性函數(shù)組成。其中兩種函數(shù)的斜度,以及函數(shù)相交的位置會在模型訓練中被學習。
12. Hard Sigmoid
Hard Sigmoid 是 Logistic Sigmoid 激活函數(shù)的分段線性近似。它更易計算,這使得學習計算的速度更快,盡管首次派生值為零可能導致靜默神經(jīng)元/過慢的學習速率(詳見 ReLU)。
13. Hard Tanh
Hard Tanh 是 Tanh 激活函數(shù)的線性分段近似。相較而言,它更易計算,這使得學習計算的速度更快,盡管首次派生值為零可能導致靜默神經(jīng)元/過慢的學習速率(詳見 ReLU)。
14. LeCun Tanh
LeCun Tanh(也被稱作 Scaled Tanh)是 Tanh 激活函數(shù)的擴展版本。它具有以下幾個可以改善學習的屬性:f(± 1) = ±1;二階導數(shù)在 x=1 較大化;且有效增益接近 1。
15. ArcTan
視覺上類似于雙曲正切(Tanh)函數(shù),ArcTan 激活函數(shù)更加平坦,這讓它比其他雙曲線更加清晰。在默認情況下,其輸出范圍在-π/2 和π/2 之間。其導數(shù)趨向于零的速度也更慢,這意味著學習的效率更高。但這也意味著,導數(shù)的計算比 Tanh 更加昂貴。
16. Softsign
Softsign 是 Tanh 激活函數(shù)的另一個替代選擇。就像 Tanh 一樣,Softsign 是反對稱、去中心、可微分,并返回-1 和 1 之間的值。其更平坦的曲線與更慢的下降導數(shù)表明它可以更高效地學習。另一方面,導數(shù)的計算比 Tanh 更麻煩。
17. SoftPlus
作為 ReLU 的一個不錯的替代選擇,SoftPlus 能夠返回任何大于 0 的值。與 ReLU 不同,SoftPlus 的導數(shù)是連續(xù)的、非零的,無處不在,從而防止出現(xiàn)靜默神經(jīng)元。然而,SoftPlus 另一個不同于 ReLU 的地方在于其不對稱性,不以零為中心,這興許會妨礙學習。此外,由于導數(shù)常常小于 1,也可能出現(xiàn)梯度消失的問題。
18. Signum
激活函數(shù) Signum(或者簡寫為 Sign)是二值階躍激活函數(shù)的擴展版本。它的值域為 [-1,1],原點值是 0。盡管缺少階躍函數(shù)的生物動機,Signum 依然是反對稱的,這對激活函數(shù)來說是一個有利的特征。
19. Bent Identity
激活函數(shù) Bent Identity 是介于 Identity 與 ReLU 之間的一種折衷選擇。它允許非線性行為,盡管其非零導數(shù)有效提升了學習并克服了與 ReLU 相關(guān)的靜默神經(jīng)元的問題。由于其導數(shù)可在 1 的任意一側(cè)返回值,因此它可能容易受到梯度爆炸和消失的影響。
20. Symmetrical Sigmoid
Symmetrical Sigmoid 是另一個 Tanh 激活函數(shù)的變種(實際上,它相當于輸入減半的 Tanh)。和 Tanh 一樣,它是反對稱的、零中心、可微分的,值域在 -1 到 1 之間。它更平坦的形狀和更慢的下降派生表明它可以更有效地進行學習。
21. Log Log
Log Log 激活函數(shù)(由上圖 f(x) 可知該函數(shù)為以 e 為底的嵌套指數(shù)函數(shù))的值域為 [0,1],Complementary Log Log 激活函數(shù)有潛力替代經(jīng)典的 Sigmoid 激活函數(shù)。該函數(shù)飽和地更快,且零點值要高于 0.5。
22. Gaussian
高斯激活函數(shù)(Gaussian)并不是徑向基函數(shù)網(wǎng)絡(RBFN)中常用的高斯核函數(shù),高斯激活函數(shù)在多層感知機類的模型中并不是很流行。該函數(shù)處處可微且為偶函數(shù),但一階導會很快收斂到零。
23. Absolute
顧名思義,值(Absolute)激活函數(shù)返回輸入的值。該函數(shù)的導數(shù)除了零點外處處有定義,且導數(shù)的量值處處為 1。這種激活函數(shù)一定不會出現(xiàn)梯度爆炸或消失的情況。
24. Sinusoid
如同余弦函數(shù),Sinusoid(或簡單正弦函數(shù))激活函數(shù)為神經(jīng)網(wǎng)絡引入了周期性。該函數(shù)的值域為 [-1,1],且導數(shù)處處連續(xù)。此外,Sinusoid 激活函數(shù)為零點對稱的奇函數(shù)。
25. Cos
如同正弦函數(shù),余弦激活函數(shù)(Cos/Cosine)為神經(jīng)網(wǎng)絡引入了周期性。它的值域為 [-1,1],且導數(shù)處處連續(xù)。和 Sinusoid 函數(shù)不同,余弦函數(shù)為不以零點對稱的偶函數(shù)。
26. Sinc
Sinc 函數(shù)(全稱是 Cardinal Sine)在信號處理中尤為重要,因為它表征了矩形函數(shù)的傅立葉變換(Fourier transform)。作為一種激活函數(shù),它的優(yōu)勢在于處處可微和對稱的特性,不過它比較容易產(chǎn)生梯度消失的問題。
補充一個:maxout激活函數(shù)
參考:
https://www.cnblogs.com/lovychen/p/7561895.html
https://blog.csdn.net/qq_35200479/article/details/84502844
https://blog.csdn.net/not_guy/article/details/78749509
http://www.dataguru.cn/article-12255-1.html
https://www.cnblogs.com/makefile/p/activation-function.html