啟用函式之深入解讀
導讀:什麼是啟用函式?
在神經網路中,對於影象,我們主要採用了卷積的方式來處理,也就是對每個畫素點賦予一個權值,這個操作顯然就是線性的。但是對於我們的樣本來說,不一定是線性可分的,為了解決這個問題,我們可以進行線性變化,或者我們引入非線性因素,解決線性模型所不能解決的問題。
這就是為什麼要有啟用函式:啟用函式是用來加入非線性因素的,因為線性模型的表達力不夠
所以啟用函式,並不是去啟用什麼,而是指如何把“啟用的神經元的特徵”通過函式把特徵保留並映射出來(保留特徵,去除一些資料中是的冗餘),這是神經網路能解決非線性問題關鍵。
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倍之多)。有人認為這是由它的線性、非飽和的公式導致的。
相比於 sigmoid和tanh,relu只需要一個閾值就可以得到啟用值,而不用去算一大堆複雜的(指數)運算。
relu在x<0時是硬飽和。當x>0時一階導數為1,所以relu函式在x>0時可以保持梯度不衰減,從而有效緩解了梯度消失的問題。
在沒有無監督預訓練的時候也能有較好的表現。
提供了神經網路的稀疏表達能力。
缺點:
隨著訓練的進行,部分輸入會落到硬飽和區,導致對應的權重無法更新。我們稱之為“神經元死亡”。 實際中,如果學習率設定得太高,可能會發現網路中 40% 的神經元都會死掉(在整個訓練集中這些神經元都不會被啟用)。合理設定學習率,會降低這種情況的發生概率。
除了relu本身外,TensorFlow後續又有相關ReLU衍生的啟用函式,比如:ReLU6、SReLU、Leaky ReLU 、PReLU、RReLU、CReLU。
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已經慢慢退出舞臺,在實際應用中需要通過分析和嘗試來確定該用哪種啟用函式,隨著深度學習的進一步發展,還會有更多更優秀的啟用函式產生,讀者有好的觀點可以給我留言,互相探討,共同進步。