激活函數有什么用?
- 提到激活函數,最想問的一個問題肯定是它是干什么用的?激活函數的主要作用是提供網絡的非線性表達建模能力,想象一下如果沒有激活函數,那么神經網絡只能表達線性映射,此刻即便是有再多的隱藏層,其整個網絡和單層的神經網絡都是等價的。因此正式由於激活函數的存在,深度神經網絡才具有了強大的非線性學習能力。接下來我們就來盤點一下當前有哪些流行的激活函數吧。
1. Sigmoid激活函數
- 函數表達式:
- 函數圖像:
- 導數:
- 優點:Sigmoid激活函數是應用范圍最廣的一類激活函數,具有指數形狀,它在物理意義上最為接近生物神經元。另外,Sigmoid的輸出是
(0,1)
,具有很好的性質,可以被表示為概率或者用於輸入的歸一化等。可以看出,Sigmoid函數連續,光滑,嚴格單調,以(0,0.5)
中心對稱,是一個非常良好的閾值函數。當x
趨近負無窮時,y
趨近於0
;x
趨近於正無窮時,y
趨近於1
;x=0
時,y=0.5
。當然,在x
超出[-6,6]
的范圍后,函數值基本上沒有變化,值非常接近,在應用中一般不考慮。Sigmoid函數的導數是其本身的函數,即f′(x)=f(x)(1−f(x))
,計算非常方便,也非常節省計算時間。 - 缺點:Sigmoid最明顯的缺點就是飽和性。從曲線圖中看到,其兩側的導數逐漸趨近於
0
,即:limx->∞f'(x)=0 。我們將具有這種性質的激活函數叫作軟飽和激活函數。具體的,飽和又可分為左飽和與右飽和。與軟飽和對應的是硬飽和, 即f′(x)=0
,當|x|>c
,其中c
為常數。sigmoid 的軟飽和性,使得深度神經網絡在二三十年里一直難以有效的訓練,是阻礙神經網絡發展的重要原因。另外,Sigmoid函數的輸出均大於0
,使得輸出不是0
均值,這稱為偏移現象,這會導致后一層的神經元將得到上一層輸出的非0
均值的信號作為輸入。
2. TanH
- 函數表達式:
- 函數圖像:

- 導數:
- 優點:與Sigmoid相比,它的輸出均值是
0
,使得其收斂速度要比Sigmoid快,減少迭代次數。 - 缺點:該導數在正負飽和區的梯度都會接近於
0
值(仍然具有軟飽和性),會造成梯度消失。還有其更復雜的冪運算。
3. ReLU
- 函數表達式:
- 函數圖像:

- 導數:當 x>0 時, f'(x)=1 ,當 x<0 時 f'(x)=0 。
- 優點:ReLU的全稱是Rectified Linear Units,是一種AlexNet時期才出現的激活函數。可以看到,當
x<0
時,ReLU硬飽和,而當x>0
時,則不存在飽和問題。所以,ReLU 能夠在x>0
時保持梯度不衰減,從而緩解梯度消失問題。這讓我們能夠直接以監督的方式訓練深度神經網絡,而無需依賴無監督的逐層預訓練。 - 缺點:隨着訓練的推進,部分輸入會落入硬飽和區,導致對應權重無法更新。這種現象被稱為“神經元死亡”。與Sigmoid類似,ReLU的輸出均值也大於
0
,偏移現象和神經元死亡會共同影響網絡的收斂性。
4. Leaky ReLU & PReLU
- 函數表達式和導數:

- 函數圖像:

- 特點:為了改善ReLU在 x<0 時梯度為 0造成Dead ReLU,提出了Leaky ReLU使得這一問題得到了緩解。例如在我們耳熟能詳的YOLOV3網絡中就使用了Leaky ReLU這一激活函數,一般 α取 0.25。另外PReLU就是將Leaky ReLU公式里面的 α當成可學習參數參與到網絡訓練中。
5. ReLU6
- 函數表達式:
- 特點:ReLU6就是普通的ReLU但是限制最大輸出值為
6
(對輸出值做clip
),這是為了在移動端設備float16
的低精度的時候,也能有很好的數值分辨率,如果對ReLU的激活范圍不加限制,輸出范圍為 0到正無窮,如果激活值非常大,分布在一個很大的范圍內,則低精度的float16
無法很好地精確描述如此大范圍的數值,帶來精度損失。
6. ELU
- 函數表達式:

- 函數圖像:

- 導數:當 x>0 時, f'(x)=1 ,當 x<0 時, f'(x)=αex 。
- 特點:融合了sigmoid和ReLU,左側具有軟飽和性,右側無飽和性。右側線性部分使得ELU能夠緩解梯度消失,而左側軟飽能夠讓ELU對輸入變化或噪聲更魯棒。ELU的輸出均值接近於零,所以收斂速度更快。在 ImageNet上,不加Batch Normalization 30層以上的ReLU網絡會無法收斂,PReLU網絡在MSRA的Fan-in (caffe )初始化下會發散,而 ELU 網絡在Fan-in/Fan-out下都能收斂。
7. SoftSign
- 函數表達式:
- 函數圖像:

- 導數:圖中已經求出。
- 特點:Softsign是tanh激活函數的另一個替代選擇,從圖中可以看到它和tanh的曲線極其相似,不過相比於tanh,Softsign的曲線更平坦,導數下降的更慢一點,這個特性使得它可以緩解梯度消失問題,可以更高效的學習。
8. SoftPlus
- 函數表達式:
- 函數圖像:

- 函數導數:SoftPlus激活函數的導數恰好就是sigmoid激活函數,即 f'(x)=sigmoid(x) 。
- 優點:SoftPlus可以作為ReLu的一個不錯的替代選擇,可以看到與ReLU不同的是,SoftPlus的導數是連續的、非零的、無處不在的,這一特性可以防止出現ReLU中的“神經元死亡”現象。
- 缺點:SoftPlus是不對稱的,不以0為中心,存在偏移現象;而且,由於其導數常常小於1,也可能會出現梯度消失的問題。
9. SELU
- 函數表達式: SELU(x)=λ*ELU(x) ,也即是:
- 特點:這個激活函數來自論文:https://arxiv.org/abs/1706.02515 。而這篇論文就是提出了這一激活函數,然后論文寫了93頁公式來證明只需要把激活函數換成SELU就能使得輸入在經過一定層數之后變成固定的分布。。而這個函數實際上就是在ELU激活函數的基礎上乘以了一個 λ ,但需要注意的是這個 λ是大於 1的。
- 更詳細的討論可以見這里:https://www.zhihu.com/question/60910412
10. Swish
- 函數表達式: f(x) = x*sigmoid(x) ,其中 β 是個常數或可訓練的參數.Swish 具備無上界有下界、平滑、非單調的特性。
- 函數圖像:

- 函數導數

- 特點:Swish 在深層模型上的效果優於 ReLU。例如,僅僅使用 Swish 單元替換 ReLU 就能把 Mobile NASNetA 在 ImageNet 上的 top-1 分類准確率提高 0.9% ,Inception-ResNet-v的分類准確率提高 0.6% 。當 β=0 時,Swish激活函數變成線性函數 f(x)=x/2 .而當 β->∞ 時, δ(x)=(1+exp(-x))-1 為0或1,這個時候Swish激活函數變成ReLU激活函數 f(x)=2max(0,x) 。因此Swish激活函數可以看做是介於線性函數與ReLU函數之間的平滑函數。
11. Maxout
- 函數表達式:
- 特點: Maxout 模型實際上也是一種新型的激活函數,在前饋式神經網絡中, Maxout 的輸出即取該層的最大值,在卷積神經網絡中,一個 Maxout 特征圖可以是由多個特征圖取最值得到。 Maxout 的擬合能力是非常強的,它可以擬合任意的的凸函數。但是它又和 Dropout 一樣需要人為設定一個 k 值。為了便於理解,假設有一個在第 i 層有 2 個節點, i+1 層有1個節點構成的神經網絡。即:

- 激活值 out = f(W*X+b) ,其中 f是激活函數, *在這里代表內積。然后 X=(x1,x2)T , W=(w1,w2)T 。那么當我們對 i層使用 Maxout (設定 k=5 )然后再輸出的時候,情況就發生了改變。網絡就變成了:

- 此時網絡形式上就變成上面的樣子,用公式表現出來就是: z1=W1*X+b1 , z2=W2*X+b2 , z3=W3*X+b3 , z4=W4*X+b4 , z5=W5*X+b5 。 out=max(z1,z2,z3,z4,z5) 也就是說第層的激活值計算了5次,可我們明明只需要 1個激活值,那么我們該怎么辦?其實上面的敘述中已經給出了答案,取這 5個的最大值來作為最終的結果。
- 可以看到采用 Maxout 的話參數個數也增加了 k倍,計算開銷會增大。
12. Mish
- 函數表達式:
- 函數圖像:

- 特點:這個激活函數是最新的SOTA激活函數。論文中提到,以上無邊界(即正值可以達到任何高度)避免了由於封頂而導致的飽和,理論上對負值的輕微允許更好的梯度流,而不是像ReLU中那樣的硬零邊界,並且整個損失函數仍然保持了平滑性。
- 論文名為:Mish: A Self Regularized Non-Monotonic Neural Activation Function
激活函數嘗試經驗
- 首先使用ReLU,速度最快,然后觀察模型的表現。
- 如果ReLU效果不是很好,可以嘗試Leaky ReLU或Maxout等變種。
- 嘗試tanh正切函數(以零點為中心,零點處梯度為1)。
- 在深度不是特別深的CNN中,激活函數的影響一般不會太大。
- Kaggle比賽,試試Mish?
附錄
- 參考1:https://www.cnblogs.com/missidiot/p/9378079.html
- 參考2:https://keras-cn.readthedocs.io/en/latest/other/initializations/
- 參考3:https://zhuanlan.zhihu.com/p/70810466
- 參考4:https://www.cnblogs.com/makefile/p/activation-function.html
- 參考5:https://www.cnblogs.com/missidiot/p/9378079.html