1. 程式人生 > >啟用函式之深入解讀

啟用函式之深入解讀

導讀:什麼是啟用函式?

   在神經網路中,對於影象,我們主要採用了卷積的方式來處理,也就是對每個畫素點賦予一個權值,這個操作顯然就是線性的。但是對於我們的樣本來說,不一定是線性可分的,為了解決這個問題,我們可以進行線性變化,或者我們引入非線性因素,解決線性模型所不能解決的問題。

   這就是為什麼要有啟用函式:啟用函式是用來加入非線性因素的,因為線性模型的表達力不夠

   所以啟用函式,並不是去啟用什麼,而是指如何把“啟用的神經元的特徵”通過函式把特徵保留並映射出來(保留特徵,去除一些資料中是的冗餘),這是神經網路能解決非線性問題關鍵。 

1.Sigmod函式

Sigmod是傳統神經網路中最常用的啟用函式之一,公式和函式影象如下:

優點:它輸出對映在(0,1)內,單調連續,非常適合用作輸出層;並且求導比較容易。

缺點:具有軟飽和性,一旦輸入落入飽和區,一階導數就變得接近於0,很容易產生梯度消失;sigmoid 函式關於原點中心不對稱;並且對於權重矩陣的初始化必須特別留意。比如,如果初始化權重過大,那麼大多數神經元將會飽和,導致網路就幾乎不學習。

飽和性:當|x|>c時,其中c為某常數,此時一階導數等於0,通俗的說一階導數就是上圖中的斜率,函式越來越水平

2.Tanh函式

tach也是傳統神經網路中最常用的啟用函式,與sigmoid一樣也存在飽和問題,但它的輸出是0中心的,因此實際應用中tanh比sigmoid 更受歡迎。tanh函式實際上是一個放大的sigmoid函式,公式和函式影象如下:

         

優點:它的輸出是以0為中心,所以收斂速度比sigmoid函式要快。

缺點:還是沒有改變sigmoid函式的最大問題由於飽和性產生的梯度消失。

3.ReLU函式(預設)

relu函式是目前用的最多也是最受歡迎的啟用函式,一般作為預設的啟用函式使用,公式和函式影象如下:

優點:

相較於sigmoid和tanh函式,relu對於SGD(梯度下降優化演算法) 的收斂有巨大的加速作用(Alex Krizhevsky指出有6倍之多)。有人認為這是由它的線性、非飽和的公式導致的。

相比於 sigmoidtanhrelu只需要一個閾值就可以得到啟用值,而不用去算一大堆複雜的(指數)運算。

relu在x<0時是硬飽和。當x>0時一階導數為1,所以relu函式在x>0時可以保持梯度不衰減,從而有效緩解了梯度消失的問題。

在沒有無監督預訓練的時候也能有較好的表現。

提供了神經網路的稀疏表達能力。

缺點:

隨著訓練的進行,部分輸入會落到硬飽和區,導致對應的權重無法更新。我們稱之為“神經元死亡”。 實際中,如果學習率設定得太高,可能會發現網路中 40% 的神經元都會死掉(在整個訓練集中這些神經元都不會被啟用)。合理設定學習率,會降低這種情況的發生概率。

除了relu本身外,TensorFlow後續又有相關ReLU衍生的啟用函式,比如:ReLU6SReLULeaky ReLU PReLURReLUCReLU

4.ELU函式

ELUs是“指數線性單元”,它試圖將啟用函式的平均值接近零,從而加快學習的速度。同時,它還能通過正值的標識來避免梯度消失的問題。根據一些研究,ELUs分類精確度是高於ReLUs的。公式和影象如下:

5. LReLU、PReLU與RReLU 

LReLU、PReLU與RReLU是relu啟用函式的改進版本,影象如下:

通常在LReLU和PReLU中,我們定義一個啟用函式為:

-LReLU (Leaky ReLUs)

ai比較小而且固定的時候,我們稱之為LReLU。LReLU最初的目的是為了避免梯度消失。但在一些實驗中,我們發現LReLU對準確率並沒有太大的影響。很多時候,當我們想要應用LReLU時,我們必須要非常小心謹慎地重複訓練,選取出合適的a,LReLU的表現出的結果才比ReLU好。因此有人提出了一種自適應地從資料中學習引數的PReLU。

-PReLU (引數化修正線性單元)

PReLU是LReLU的改進,可以自適應地從資料中學習引數。PReLU具有收斂速度快、錯誤率低的特點。PReLU可以用於反向傳播的訓練,可以與其他層同時優化。

-RReLU(隨機糾正線性單元)

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

6.總結

以上是現在比較常見比較常用的幾種啟用函式,sigmod和tach已經慢慢退出舞臺,在實際應用中需要通過分析和嘗試來確定該用哪種啟用函式,隨著深度學習的進一步發展,還會有更多更優秀的啟用函式產生,讀者有好的觀點可以給我留言,互相探討,共同進步。