激活函數的作用
摘自:https://www.zhihu.com/question/22334626
激活函數(Activation Function)是用來加入非線性因素的,因為線性模型的表達能力不夠。
以下,同種顏色為同類數據。
某些數據是線性可分的,意思是,可以用一條直線將數據分開。比如下圖:
這時候你需要通過一定的機器學習的方法,比如感知機算法(perceptron learning algorithm) 找到一個合適的線性方程。
但是有些數據不是線性可分的。比如如下數據:
第二組數據你就沒有辦法畫出一條直線來將數據區分開。
這時候有兩個辦法,第一個辦法,是做線性變換(linear transformation),比如講x,y變成x2,y2,這樣可以畫出圓形。如圖所示:
如果將坐標軸從x,y變為以x2,y2為標準,你會發現數據經過變換后是線性可分的了。大致示意圖如下:
另外一種方法是引入非線性函數。
我們來看異或問題(xor problem)。以下是xor真值表:
個真值表不是線性可分的,所以不能使用線性模型,如圖所示:
我們可以設計一種神經網絡,通過激活函數來使得這組數據線性可分。
激活函數我們選擇閥值函數(threshold function),也就是大于某個值輸出1(被激活了),小于等于則輸出0(沒有激活)。這個函數是非線性函數。
神經網絡示意圖如下:
其中直線上的數字為權重。圓圈中的數字為閥值。第二層,如果輸入大于1.5則輸出1,否則0;第三層,如果輸入大于0.5,則輸出1,否則0。
我們來一步步算。第一層到第二層(閥值1.5):
第二層到第三層(閥值0.5):
可以看到第三層輸出就是我們所要的xor的答案。
經過變換后的數據是線性可分的(n維,比如本例中可以用平面),如圖所示:
這是一個單層的感知機, 也是我們最常用的神經網絡組成單元啦. 用它可以劃出一條線, 把平面分割開:
那么很容易地我們就會想用多個感知機來進行組合, 獲得更強的分類能力, 這是沒問題的啦~~~~ 如圖所示:
那么我們動筆算一算, 就可以發現, 這樣一個神經網絡組合起來,輸出的時候無論如何都還是一個線性方程哎~~~~納尼, 說好的非線性分類呢?
我們在每一層疊加完了以后, 加一個激活函數, 如圖中的.
這樣輸出的就是一個不折不扣的非線性函數!
有了這樣的非線性激活函數以后, 神經網絡的表達能力更加強大。
加上非線性激活函數之后, 我們就有可能學習到這樣的平滑分類平面。
所以到這里為止,我們就解釋了這個觀點,加入激活函數是用來加入非線性因素的,解決線性模型所不能解決的問題。
激活函數的類型
- 紅色:ReLU
- 藍色:Tanh
- 綠色:Sigmoid
- 紫色:Linear
Sigmoid
Sigmoid 非線性函數將輸入映射到 (0,1) 之間。它的數學公式為
歷史上,sigmoid 函數曾非常常用,然而現在它已經不太受歡迎,實際很少使用了,因為它主要有兩個缺點:
1. 函數飽和使梯度消失
sigmoid 神經元在值為 0 或 1 的時候接近飽和,這些區域,梯度幾乎為 0。因此在反向傳播時,這個局部梯度會與整個代價函數關于該單元輸出的梯度相乘,結果也會接近為 0 。
這樣,幾乎就沒有信號通過神經元傳到權重再到數據了,因此這時梯度就對模型的更新沒有任何貢獻。
除此之外,為了防止飽和,必須對于權重矩陣的初始化特別留意。比如,如果初始化權重過大,那么大多數神經元將會飽和,導致網絡就幾乎不學習。
2. sigmoid 函數不是關于原點中心對稱的
這個特性會導致后面網絡層的輸入也不是零中心的,進而影響梯度下降的運作。
因為如果輸入都是正數的話(如
當然,如果是按 batch 去訓練,那么每個 batch 可能得到不同的信號,整個批量的梯度加起來后可以緩解這個問題。因此,該問題相對于上面的神經元飽和問題來說只是個小麻煩,沒有那么嚴重。
tanh
注: σ函數就是sigmoid函數
ReLU
近些年ReLU變得非常流行。它的函數公式是
換句話說,這個激活函數就是一個關于0的閾值。使用ReLU有以下一些優缺點:
-
優點:相較于sigmoid和tanh函數,ReLU對于隨機梯度下降的收斂有巨大的加速作用( Krizhevsky等的論文指出有6倍之多)。據稱這是由它的線性,非飽和的公式導致的。
image.png 優點:sigmoid和tanh神經元含有指數運算等耗費計算資源的操作,而ReLU可以簡單地通過對一個矩陣進行閾值計算得到。
缺點:在訓練的時候,ReLU單元比較脆弱并且可能“死掉”。舉例來說,當一個很大的梯度流過ReLU的神經元的時候,可能會導致梯度更新到一種特別的狀態,在這種狀態下神經元將無法被其他任何數據點再次激活。如果這種情況發生,那么從此所以流過這個神經元的梯度將都變成0。也就是說,這個ReLU單元在訓練中將不可逆轉的死亡,因為這導致了數據多樣化的丟失。例如,如果學習率設置得太高,可能會發現網絡中40%的神經元都會死掉(在整個訓練集中這些神經元都不會被激活)。通過合理設置學習率,這種情況的發生概率會降低。
Leaky-ReLU、P-ReLU、R-ReLU
Leaky ReLUs :就是用來解決這個 “dying ReLU” 的問題的。與 ReLU 不同的是:
f(x)=αx,(x<0)
f(x)=x,(x>=0)
這里的 α 是一個很小的常數。這樣,即修正了數據分布,又保留了一些負軸的值,使得負軸信息不會全部丟失。
關于Leaky ReLU 的效果,眾說紛紜,沒有清晰的定論。有些人做了實驗發現 Leaky ReLU 表現的很好;有些實驗則證明并不是這樣。
Parametric ReLU: 對于 Leaky ReLU 中的α,通常都是通過先驗知識人工賦值的。然而可以觀察到,損失函數對α的導數我們是可以求得的,可不可以將它作為一個參數進行訓練呢?
Kaiming He的論文指出,不僅可以訓練,而且效果更好。
公式非常簡單,反向傳播至未激活前的神經元的公式就不寫了,很容易就能得到。對α的導數如下:
原文說使用了Parametric ReLU后,最終效果比不用提高了1.03%。
Randomized ReLU:Randomized Leaky ReLU是 leaky ReLU 的random 版本 (α 是random的)。它首次試在 kaggle 的NDSB 比賽中被提出的。
核心思想就是,在訓練過程中,α 是從一個高斯分布 U(l,u) 中 隨機出來的,
然后再測試過程中進行修正(有點像dropout的用法)。
數學表示如下:
在測試階段,把訓練過程中所有的 αij 取個平均值。NDSB 冠軍的 α 是從 U(3,8) 中隨機出來的。那么,在測試階段,激活函數就是就是:
看看 cifar-100 中的實驗結果:
Maxout
一些其他類型的單元被提了出來,它們對于權重和數據的內積結果不再使用
函數形式。一個相關的流行選擇是Maxout(最近由Goodfellow等發布)神經元。
Maxout是對ReLU和leaky ReLU的一般化歸納,它的函數是:
ReLU和Leaky ReLU都是這個公式的特殊情況(比如ReLU就是當[w1=0,b1=0]的時候)。這樣Maxout神經元就擁有ReLU單元的所有優點(線性操作和不飽和),而沒有它的缺點(死亡的ReLU單元)。然而和ReLU對比,它每個神經元的參數數量增加了一倍,這就導致整體參數的數量激增。
Maxout出現在ICML2013上,作者Goodfellow將maxout和dropout結合后,號稱在MNIST, CIFAR-10, CIFAR-100, SVHN這4個數據上都取得了start-of-art的識別率。
Maxout的擬合能力是非常強的,它可以擬合任意的的凸函數。作者從數學的角度上也證明了這個結論,即只需2個maxout節點就可以擬合任意的凸函數了(相減),前提是”隱隱含層”節點的個數可以任意多.
softmax
softmax用于多分類過程中,它將多個神經元的輸出,映射到(0,1)區間內,可以看成概率來理解,從而來進行多分類!
假設我們有一個數組,V,Vi表示V中的第i個元素,那么這個元素的softmax值就是 :
更形象的如下圖表示:
softmax直白來說就是將原來輸出是3,1,-3通過softmax函數一作用,就映射成為(0,1)的值,而這些值的累和為1(滿足概率的性質),那么我們就可以將它理解成概率,在最后選取輸出結點的時候,我們就可以選取概率最大(也就是值對應最大的)結點,作為我們的預測目標!
舉一個我最近碰到利用softmax的例子:我現在要實現基于神經網絡的句法分析器。用到是基于轉移系統來做,那么神經網絡的用途就是幫我預測我這一個狀態將要進行的動作是什么?比如有10個輸出神經元,那么就有10個動作,1動作,2動作,3動作...一直到10動作。原理圖如下圖所示:
那么比如在一次的輸出過程中輸出結點的值是如下:
[0.2,0.1,0.05,0.1,0.2,0.02,0.08,0.01,0.01,0.23]
那么我們就知道這次我選取的動作是動作10,因為0.23是這次概率最大的,那么怎么理解多分類呢?如果你想選取倆個動作,那么就找概率最大的倆個值即可。
其他的一些激活函數
如何選擇激活函數?
一句話:“那么該用那種呢?”用ReLU非線性函數。注意設置好學習率,或許可以監控你的網絡中死亡的神經元占的比例。如果單元死亡問題困擾你,就試試Leaky ReLU或者Maxout,不要再用sigmoid了。也可以試試tanh,但是其效果應該不如ReLU或者Maxout。
最后需要注意一點:在同一個網絡中混合使用不同類型的神經元是非常少見的,雖然沒有什么根本性問題來禁止這樣做。
------參考:https://zhuanlan.zhihu.com/p/21462488
------參考:https://zhuanlan.zhihu.com/p/25723112
------參考:http://blog.csdn.net/cyh_24/article/details/50593400