為什麼引入非線性激勵函式 為什麼引入relu
第一個問題:為什麼引入非線性激勵函式?
如果不用激勵函式(其實相當於激勵函式是f(x) = x),在這種情況下你每一層輸出都是上層輸入的線性函式,很容易驗證,無論你神經網路有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當,這種情況就是最原始的感知機(Perceptron)了。
正因為上面的原因,我們決定引入非線性函式作為激勵函式,這樣深層神經網路就有意義了(不再是輸入的線性組合,可以逼近任意函式)。最早的想法是sigmoid函式或者tanh函式,輸出有界,很容易充當下一層輸入(以及一些人的生物解釋balabala)。
第二個問題:為什麼引入Relu呢?
第一,採用sigmoid等函式,算啟用函式時(指數運算),計算量大
第二,對於深層網路,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一般將省略,所以最終的θ更新過程為: