激活函數總結


激活函數有什么用?

  • 提到激活函數,最想問的一個問題肯定是它是干什么用的?激活函數的主要作用是提供網絡的非線性表達建模能力,想象一下如果沒有激活函數,那么神經網絡只能表達線性映射,此刻即便是有再多的隱藏層,其整個網絡和單層的神經網絡都是等價的。因此正式由於激活函數的存在,深度神經網絡才具有了強大的非線性學習能力。接下來我們就來盤點一下當前有哪些流行的激活函數吧。

1. Sigmoid激活函數

  • 函數表達式:

      

  • 函數圖像:



  • 導數:

  • 優點:Sigmoid激活函數是應用范圍最廣的一類激活函數,具有指數形狀,它在物理意義上最為接近生物神經元。另外,Sigmoid的輸出是(0,1),具有很好的性質,可以被表示為概率或者用於輸入的歸一化等。可以看出,Sigmoid函數連續,光滑,嚴格單調,以(0,0.5)中心對稱,是一個非常良好的閾值函數。當x趨近負無窮時,y趨近於0x趨近於正無窮時,y趨近於1x=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

以上內容來源於GiantPandaCV


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM