1. 程式人生 > >激活函數

激活函數

測試 加載 分享圖片 過程 分類問題 圖片 alt 得到 如果

神經網絡做的主要事情就是分類,在上課中,最簡單的問題為二分類問題,利用單層感知機,可以畫出一條線將平面隔開分類。同樣如果增加感知機個數,可以得到更強的分類能力,但是無論如何都是一個線性方程。只不過是線性的復雜組合,當然曲線可以用無限的直線去逼近,但是這顯然會帶來巨大的計算量。因此加入了激活函數,這樣原本的線性方程表成了一個非線性方程。如果不用激勵函數(其實相當於激勵函數是f(x) = x),在這種情況下每一層輸出都是上層輸入的線性函數,所以無論神經網絡有多少層,輸出都是輸入的線性組合,與沒有激活層效果相當,這種情況就是最原始的感知機了。正因為上面的原因,所以需要引入非線性函數作為激勵函數。這樣深層神經網絡就有意義了。

relu,sigmoid和tanh激活函數

只是在本數據集和特定網絡下的結果,網絡結構:

技術分享圖片

利用MNIST數據集,做了relu,sigmoid和tanh的實驗,每次輸入50個數據,叠代10000次,三種激活函數的正確率如圖:

技術分享圖片

正確率relu>tanh>sigmoid。

收斂速度有很大的不同,在訓練過程中,每叠代100次,會把加載的50個數據作為測試集,利用前一個模型計算一次正確率輸出。叠代前2000次,不同激活函數正確率曲線如下:

技術分享圖片

可見,sigmoid的收斂速度遠遠慢於tanh和relu激活函數,tanh和relu在100叠代左右已經開始收斂,而sigmoid在800次左右才可收斂。

原因分析:技術分享圖片

sigmoid函數,

sigmoid函數在在兩段接近飽和區是,變換的很緩慢,導數趨近於0,在反向傳播時,容易出現梯度消失的現象,造成信息的丟失。同時因為sigmoid函數是指數運算,計算量較大,導致反向傳播求誤差梯度是,計算量相對於relu會大很多,而采用relu激活函數,計算量會小很多。同樣還有一個好處,relu函數會使得一部分神經元的輸出為0,這樣會使網絡稀疏,減少了參數的依賴關系,緩解了過擬合的發生。

激活函數