1. 程式人生 > >為什麼引入非線性激勵函式 為什麼引入relu

為什麼引入非線性激勵函式 為什麼引入relu

第一個問題:為什麼引入非線性激勵函式?
如果不用激勵函式(其實相當於激勵函式是f(x) = x),在這種情況下你每一層輸出都是上層輸入的線性函式,很容易驗證,無論你神經網路有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當,這種情況就是最原始的感知機(Perceptron)了。
正因為上面的原因,我們決定引入非線性函式作為激勵函式,這樣深層神經網路就有意義了(不再是輸入的線性組合,可以逼近任意函式)。最早的想法是sigmoid函式或者tanh函式,輸出有界,很容易充當下一層輸入(以及一些人的生物解釋balabala)。

第二個問題:為什麼引入Relu呢?
第一,採用sigmoid等函式,算啟用函式時(指數運算),計算量大

,反向傳播求誤差梯度時,求導涉及除法,計算量相對大,而採用Relu啟用函式,整個過程的計算量節省很多。
第二,對於深層網路,sigmoid函式反向傳播時,很容易就會出現梯度消失的情況(在sigmoid接近飽和區時,變換太緩慢,導數趨於0,這種情況會造成資訊丟失,參見@Haofeng Li 答案的第三點),從而無法完成深層網路的訓練。
第三,Relu會使一部分神經元的輸出為0,這樣就造成了網路的稀疏性,並且減少了引數的相互依存關係,緩解了過擬合問題的發生(以及一些人的生物解釋balabala)。

1、邏輯迴歸原理 
和線性迴歸很像,邏輯迴歸將多元線性函式的結果,再通過sigmod啟用函式進行運算,從而將結果壓縮至0-1區間,該區間表示事件是否發生的概率。 
2、公式推導 
sigmod函式定義如下: 
 
設線性方程為: 
 
則預測函式H為: 
 
注意:hθ(x)函式的值表示結果取1的概率,寫成條件概率形式,則為: 
 
注意:y只能取0或1,當為1時,該式為hθ(x),為0時,該式為1-hθ(x) 
對m個樣本,取最大似然估計,可得: 
 
為方便計算,取對數得l(θ): 
 
將J(θ)設為l(θ)乘以-1/m,這樣,取似然函式l(θ)的最大值,轉換為取J(θ)的最小值。 
求J(θ)的最小值可以使用梯度下降法,引數更新公式為: 
 
可以看到,需要對J(θ)求導,為了對J(θ)求導,需要先得出h函式的求導公式: 
 
使用該公式對J函式求導: 

這樣引數更新的公式為: 
 
因為式中α本來為一常量,所以1/m一般將省略,所以最終的θ更新過程為: