我們知道深度學習的理論基礎是神經網路,在單層神經網路中(感知機),輸入和輸出計算關係如下圖所示:
可見,輸入與輸出是乙個線性關係,對於增加了多個神經元之後,計算公式也是類似,如下圖:
這樣的模型就只能處理一些簡單的線性資料,而對於非線性資料則很難有效地處理(也可通過組合多個不同線性表示,但這樣更加複雜和不靈活),如下圖所示:
那麼,通過在神經網路中加入非線性激勵函式後,神經網路就有可能學習到平滑的曲線來實現對非線性資料的處理了。如下圖所示:
因此,神經網路中激勵函式的作用通俗上講就是將多個線性輸入轉換為非線性的關係。如果不使用激勵函式的話,神經網路的每層都只是做線性變換,即使是多層輸入疊加後也還是線性變換。通過激勵函式引入非線性因素後,使神經網路的表示能力更強了。
下面介紹幾個常用的激勵函式
1、sigmoid 函式
這應該是神經網路中使用最頻繁的激勵函式了,它把乙個實數壓縮至0到1之間,當輸入的數字非常大的時候,結果會接近1,當輸入非常大的負數時,則會得到接近0的結果。在早期的神經網路中使用得非常多,因為它很好地解釋了神經元受到刺激後是否被啟用和向後傳遞的場景(0:幾乎沒有被啟用,1:完全被啟用),不過近幾年在深度學習的應用中比較少見到它的身影,因為使用sigmoid函式容易出現梯度瀰散或者梯度飽和。當神經網路的層數很多時,如果每一層的激勵函式都採用sigmoid函式的話,就會產生梯度瀰散的問題,因為利用反向傳播更新引數時,會乘以它的導數,所以會一直減小。如果輸入的是比較大或者比較小的數(例如輸入100,經sigmoid函式後結果接近於1,梯度接近於0),會產生飽和效應,導致神經元類似於死亡狀態。
【小白科普】什麼是飽和呢?
2、tanh 函式
tanh函式將輸入值壓縮至-1到1之間。該函式與sigmoid類似,也存在著梯度瀰散或梯度飽和的缺點。
3、relu函式
relu是修正線性單元(the rectified linear unit)的簡稱,近些年來在深度學習中使用得很多,可以解決梯度瀰散問題,因為它的導數等於1或者就是0。相對於sigmoid和tanh激勵函式,對relu求梯度非常簡單,計算也很簡單,可以非常大程度地提公升隨機梯度下降的收斂速度。(因為relu是線性的,而sigmoid和tanh是非線性的)。
但relu的缺點是比較脆弱,隨著訓練的進行,可能會出現神經元死亡的情況,例如有乙個很大的梯度流經relu單元後,那權重的更新結果可能是,在此之後任何的資料點都沒有辦法再啟用它了。如果發生這種情況,那麼流經神經元的梯度從這一點開始將永遠是0。也就是說,relu神經元在訓練中不可逆地死亡了。
4、leaky relu 函式
leaky relu主要是為了避免梯度消失,當神經元處於非啟用狀態時,允許乙個非0的梯度存在,這樣不會出現梯度消失,收斂速度快。它的優缺點跟relu類似。
5、elu 函式
elu在正值區間的值為x本身,這樣減輕了梯度瀰散問題(x>0區間導數處處為1),這點跟relu、leaky relu相似。而在負值區間,elu在輸入取較小值時具有軟飽和的特性,提公升了對雜訊的魯棒性
下圖是relu、lrelu、elu的曲線比較圖:
6、maxout 函式
maxout也是近些年非常流行的激勵函式,簡單來說,它是relu和leaky relu的乙個泛化版本,當w1、b1設定為0時,便轉換為relu公式。
因此,maxout繼承了relu的優點,同時又沒有「一不小心就掛了」的擔憂。但相比relu,因為有2次線性對映運算,因此計算量也會翻倍。
深度學習中常見的啟用函式
下面分別進行介紹。1.sigmoid函式 s型增長函式 sigmoid函式能夠將取值為 infty,infty 的數對映到 0,1 公式和圖形如下 s x frac sigmoid函式作為非線性啟用函式卻不被經常使用,具有以下幾個缺點 1.當x非常大或者非常小的時候,sigmoid函式的導數將接近0...
深度學習常用啟用函式
參考 sigmoid函式曾被廣泛地應用,但由於其自身的一些缺陷,現在很少被使用了。sigmoid函式被定義為 函式對應的影象是 優點 1.sigmoid函式的輸出對映在 0,1 之間,單調連續,輸出範圍有限,優化穩定,可以用作輸出層。2.求導容易。缺點 1.由於其軟飽和性,容易產生梯度消失,導致訓練...
深度學習中常見的啟用函式總結
relu leaky relu 兩者的優點是 第一,在 z z 的區間變動很大的情況下,啟用函式的導數或者啟用函式的斜率都會遠大於0,在程式實現就是乙個 if else 語句,而 sigmoid 函式需要進行浮點四則運算,在實踐中,使用 relu 啟用函式神經網路通常會比使用 sigmoid 或者 ...