激活函數 (Sigmod、tanh、Relu)


 

什么是激活函數

   激活函數(Activation functions)對於人工神經網絡 [1]  模型去學習、理解非常復雜和非線性的函數來說具有十分重要的作用。它們將非線性特性引入到我們的網絡中。如圖1,在神經元中,輸入的 inputs 通過加權,求和后,還被作用了一個函數,這個函數就是激活函數。引入激活函數是為了增加神經網絡模型的非線性。沒有激活函數的每層都相當於矩陣相乘。就算你疊加了若干層之后,無非還是個矩陣相乘罷了。
                                                                                圖1

為什么要用激活函數

   如果不用激勵函數,每一層輸出都是上層輸入的線性函數,無論神經網絡有多少層,輸出都是輸入的線性組合,這種情況就是最原始的感知機(Perceptron)。
  如果使用的話,激活函數給神經元引入了非線性因素,使得神經網絡可以任意逼近任何非線性函數,這樣神經網絡就可以應用到眾多的非線性模型中。
 
特點及使用場景

  1、Sigmod激活函數

  公式:

  曲線:

  也叫 Logistic 函數,用於隱層神經元輸出,取值范圍為(0,1)。
  它可以將一個實數映射到(0,1)的區間,可以用來做二分類。(它不像SVM直接給出一個分類的結果,Logistic Regression給出的是這個樣本屬於正類或者負類的可能性是多少,當然在多分類的系統中給出的是屬於不同類別的可能性,進而通過可能性來分類。)

  Sigmod函數優點
  輸出范圍有限,數據在傳遞的過程中不容易發散。
  輸出范圍為(0,1),所以可以用作輸出層,輸出表示概率。
  抑制兩頭,對中間細微變化敏感,對分類有利。
  在特征相差比較復雜或是相差不是特別大時效果比較好。

  sigmoid缺點:
  激活函數計算量大,反向傳播求誤差梯度時,求導涉及除法反向傳播時很容易就會出現梯度消失的情況,從而無法完成深層網絡的訓練(sigmoid的飽和性)

  下面解釋為何會出現梯度消失:

  反向傳播算法中,要對激活函數求導,sigmoid 的導數表達式為:

                                                                             

  sigmoid 原函數及導數圖形如下:

                   
 
  從上圖可以看到,其兩側導數逐漸趨近於0 ,具有這種性質的稱為軟飽和激活函數。具體的,飽和又可分為左飽和與右飽和。與軟飽和對應的是硬飽和, 即sigmoid 的軟飽和性,使得深度神經網絡在二三十年里一直難以有效的訓練,是阻礙神經網絡發展的重要原因。具體來說,由於在后向傳遞過程中,sigmoid向下傳導的梯度包含了一個因子(sigmoid關於輸入的導數),因此一旦輸入落入飽和區,的導數就會變得接近於0,導致了向底層傳遞的梯度也變得非常小。此時,網絡參數很難得到有效訓練。這種現象被稱為梯度消失。一般來說, sigmoid 網絡在 5 層之內就會產生梯度消失現象。
  Sigmoid 的 output 不是0均值,這是不可取的,因為這會導致后一層的神經元將得到上一層輸出的非0均值的信號作為輸入。 產生的一個結果就是:如果數據進入神經元的時候是正的(e.g.x>0   elementwise  in  f=wTx+be.g.x>0   elementwise  in  f=wTx+b),那么 w 計算出的梯度也會始終都是正的。 
  當然了,如果你是按batch去訓練,那么那個batch可能得到不同的信號,所以這個問題還是可以緩解一下的。因此,非0均值這個問題雖然會產生一些不好的影響,不過跟上面提到的 kill gradients 問題相比還是要好很多的。

  (2) Tanh函數

  公式

f’(z)=4sigmoid‘(2z)

  曲線

  也稱為雙切正切函數,取值范圍為[-1,1]。
  tanh在特征相差明顯時的效果會很好,在循環過程中會不斷擴大特征效果。與 sigmoid 的區別是,tanh 是 0 均值的,因此實際應用中 tanh 會比 sigmoid 更好,然而,tanh一樣具有軟飽和性,從而造成梯度消失。

  (3) ReLU

  Rectified Linear Unit(ReLU) - 用於隱層神經元輸出

  公式

  

  曲線

  輸入信號 <0 時,輸出都是0,>0 的情況下,輸出等於輸入

  ReLU 的優點:
  Krizhevsky et al     . 發現使用 ReLU 得到的 SGD 的收斂速度會比 sigmoid/tanh 快很多。除此之外,當x<0時,ReLU硬飽和,而當x>0時,則不存在飽和問題。所以,ReLU 能夠在x>0時保持梯度不衰減,從而緩解梯度消失問題。這讓我們能夠直接以監督的方式訓練深度神經網絡,而無需依賴無監督的逐層預訓練。

  ReLU 的缺點:
  隨着訓練的推進,部分輸入會落入硬飽和區,導致對應權重無法更新。這種現象被稱為“神經元死亡”。與sigmoid類似,ReLU的輸出均值也大於0,偏移現象 和 神經元死亡會共同影響網絡的收斂性。

   

  eaky-ReLU、P-ReLU、R-ReLU

  (1)Leaky ReLUs: 就是用來解決這個 “dying ReLU” 的問題的。與 ReLU 不同的是:  

  這里的 

此處輸入圖片的描述

  關於Leaky ReLU 的效果,眾說紛紜,沒有清晰的定論。有些人做了實驗發現 Leaky ReLU 表現的很好;有些實驗則證明並不是這樣。

此處輸入圖片的描述

 

  數學表示如下:

此處輸入圖片的描述

 

  maxout

       參考:https://blog.csdn.net/hjimce/article/details/50414467

 Maxout出現在ICML2013上,作者Goodfellow將maxout和dropout結合后,號稱在MNIST, CIFAR-10, CIFAR-100, SVHN這4個數據上都取得了start-of-art的識別率。 可以注意到,ReLU 和 Leaky ReLU 都是它的一個變形(比如,Maxout的擬合能力是非常強的,它可以擬合任意的的凸函數。作者從數學的角度上也證明了這個結論,即只需2個maxout節點就可以擬合任意的凸函數了(相減),前提是”隱隱含層”節點的個數可以任意多。
  我們在一層同時訓練n組參數,然后選擇激活值最大的作為下一層神經元的激活值

此處輸入圖片的描述

  所以,Maxout 具有 ReLU 的優點(如:計算簡單,不會 saturation),同時又沒有 ReLU 的一些缺點 (如:容易 go die)。不過呢,還是有一些缺點的嘛:就是把參數double了。

還有其他一些激活函數,請看下表:

此處輸入圖片的描述
此處輸入圖片的描述

  怎么選擇激活函數呢?

  如果你使用 ReLU,那么一定要小心設置 learning rate,而且要注意不要讓你的網絡出現很多 “dead” 神經元,如果這個問題不好解決,那么可以試試 Leaky ReLU、PReLU 或者 Maxout.

友情提醒:最好不要用 sigmoid,你可以試試 tanh,不過可以預期它的效果會比不上 ReLU 和 Maxout.

還有,通常來說,很少會把各種激活函數串起來在一個網絡中使用的。

Reference

[1]. http://www.faqs.org/faqs/ai-faq/neural-nets/part2/section-10.html 
[2]. http://papers.nips.cc/paper/874-how-to-choose-an-activation-function.pdf 
[3]. https://en.wikipedia.org/wiki/Activation_function 
[4]. http://cs231n.github.io/neural-networks-1/


免責聲明!

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



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