一、前言
激勵函數在神經網絡的作用通俗上講就是講多個線性輸入轉換為非線性的關系。不使用激勵函數的話,神經網絡的每層都只是做線性變換,多層輸入疊加后也還是線性變換。因為線性模型的表達能力不夠,激勵函數可以引入非線性因素。
1.1 單一的神經網絡
如果沒有激勵函數,在單層神經網絡中,我們的輸入和輸出關系如下圖:
這是一個線性方程的直觀表示,如果我們增加感知機,如下圖:
其中結果輸出就是右邊的綠色區域,但是本質上還是各種線性方程的組合,對於非線性數據則無法很好的處理。如下數據:
上圖數據你就沒有辦法畫出一條直線來將數據區分開.
這時候有兩個辦法,第一個辦法,是做線性變換(linear transformation),比如講x,y變成x^2,y^2,這樣可以畫出圓形。如圖所示:
如果將坐標軸從x,y變為以x^2,y^2為標准,你會發現數據經過變換后是線性可分的了。大致示意圖如下:
1.2 含有激勵函數的神經網絡
加入非線性激勵函數后,神經網絡就有可能學習到平滑的曲線來分割平面,而不是用復雜的線性組合逼近平滑曲線來分割平面。 這就是為什么我們要有非線性的激活函數的原因。如下圖所示說明加入非線性激活函數后的差異,上圖為用線性組合逼近平滑曲線來分割平面,下圖為平滑的曲線來分割平面:
二、激勵函數
1、激活函數通常有如下一些性質:
- 非線性: 當激活函數是線性的時候,一個兩層的神經網絡就可以逼近基本上所有的函數了。但是,如果激活函數是恆等激活函數的時候(即f(x)=x),就不滿足這個性質了,而且如果MLP使用的是恆等激活函數,那么其實整個網絡跟單層神經網絡是等價的。
- 可微性: 當優化方法是基於梯度的時候,這個性質是必須的。
- 單調性: 當激活函數是單調的時候,單層網絡能夠保證是凸函數。
- f(x)≈x: 當激活函數滿足這個性質的時候,如果參數的初始化是random的很小的值,那么神經網絡的訓練將會很高效;如果不滿足這個性質,那么就需要很用心的去設置初始值。
- 輸出值的范圍: 當激活函數輸出值是 有限 的時候,基於梯度的優化方法會更加 穩定,因為特征的表示受有限權值的影響更顯著;當激活函數的輸出是 無限 的時候,模型的訓練會更加高效,不過在這種情況小,一般需要更小的learning rate.
2、常用的激勵函數
圖形為:
sigmod激勵函數符合實際,當輸入很小時,輸出接近於0;當輸入很大時,輸出值接近1
但sigmod函數存在較大的缺點:
1、當輸入值很小時或很大時,輸出曲線基本就是直線了,回想一下反向傳播的過程,我們最后用於迭代的梯度,是由中間這些梯度值結果相乘得到的,因此如果中間的局部梯度值非常小,直接會把最終梯度結果拉近0,意味着存在梯度趨向為0
2、非零中心化,也就是當輸入為0時,輸出不為0,,因為每一層的輸出都要作為下一層的輸入,而未0中心化會直接影響梯度下降,我們這么舉個例子吧,如果輸出的結果均值不為0,舉個極端的例子,全部為正的話(例如f=wTx+b中所有x>0),那么反向傳播回傳到w上的梯度將要么全部為正要么全部為負(取決於f的梯度正負性),這帶來的后果是,反向傳播得到的梯度用於權重更新的時候,不是平緩地迭代變化,而是類似鋸齒狀的突變。影響梯度下降的動態性
2、雙極性sigma函數,
圖形為:
3、雙曲正切函數,
圖形為:
與sigmoid相比,輸出至的范圍變成了0中心化[-1, 1]。但梯度消失現象依然存在。所以在實際應用中,tanh激勵函數還是比sigmoid要用的多一些的
4.ReLu 函數
全稱是rectified linear unit,它被廣泛應用到了卷積神經網絡中,並且出現了一些變體。
函數基本形式是:f(x) = max(0,x), smooth approxiation形式為:
函數的樣子所示:
兩種變體是:
noisy Relu
也就是在原來的Relu分類部分添加均值為0,方差為sigma的高斯噪聲
leaky Relu
這個leaky ReLu的好處是當神經元處於非激活狀態是,允許一個非0的梯度存在。
優點:(1)不會出現梯度消失,收斂速度快;
(2)前向計算量小,只需要計算max(0, x),不像sigmoid中有指數計算;
(3)反向傳播計算快,導數計算簡單,無需指數、出發計算;
(4)有些神經元的值為0,使網絡具有saprse性質,可減小過擬合。
缺點:(1)比較脆弱,在訓練時容易“die”,反向傳播中如果一個參數為0,后面的參數就會不更新。使用合適的學習當然,這和參數設置有關系,所以我們要特別小心,
再舉個實際的例子哈,如果學習速率被設的太高,結果你會發現,訓練的過程中可能有高達40%的ReLU單元都掛掉了。所以我們要小心設定初始的學習率等參數,在一定程度上控制這個問題。率會減弱這種情況。
5、徑向基函數,
,g表示的就是徑向基函數,絕對值表達的是徑向距離。
圖形為:
6、one-side hyperbolic ratio function,
圖形為:
那我們咋選用神經元/激勵函數呢?一般說來,用的最多的依舊是ReLU,但是我們確實得小心設定學習率,同時在訓練過程中,還得時不時看看神經元此時的狀態(是否還『活着』)。當然,如果你非常擔心神經元訓練過程中掛掉,你可以試試Leaky ReLU和Maxout。額,少用sigmoid老古董吧,有興趣倒是可以試試tanh,不過話說回來,通常狀況下,它的效果不如ReLU/Maxout。
三、損失函數和激活函數的選擇
具體內容可以參考:深度神經網絡(DNN)損失函數和激活函數的選擇