啟用函式-Sigmoid, Tanh及ReLU
什麼是啟用函式
在神經網路中,我們會對所有的輸入進行加權求和,之後我們會在對結果施加一個函式,這個函式就是我們所說的啟用函式。如下圖所示。
為什麼使用啟用函式
我們使用啟用函式並不是真的啟用什麼,這只是一個抽象概念,使用啟用函式時為了讓中間輸出多樣化,能夠處理更復雜的問題。
如果不適用結果函式的話,每一層最後輸出的都是上一層輸入的線性函式,不管加多少層神經網路,我們最後的輸出也只是最開始輸入資料的線性組合而已。啟用函式給神經元引入了非線性因素,當加入多層神經網路時,就可以讓神經網路擬合任何線性函式及非線性函式,從而使得神經網路可以適用於更多的非線性問題,而不僅僅是線性問題。
有論文中把啟用函式定義為一個幾乎處處可微的函式f: R->R
有哪些啟用函式
對於神經網路,一版我們會使用三種啟用函式:Sigmoid函式、Tanh函式、ReLU函式。
基本概念:
飽和:
當函式f(x)滿足:
時,稱為右飽和;
當函式f(x)滿足:
時,稱為左飽和。
當f(x)同事滿足左飽和及右飽和時,稱為飽和。
軟包和與硬包和:
在飽和定義的基礎上,如果儲存常數c1,當x>c1時候恆滿足,稱之為右硬飽和;同樣的,如果存在c2,當x<c2時恆滿足,稱之為左硬飽和。如果同時滿足了左飽和,又滿足了右飽和,稱之為硬包和。相對的,只有在x趨於極值時才能滿足f(x)的倒數為0,則成為軟飽和。
1. Sigmoid 函式
sigmoid 曾經風靡一時,但是由於sigmoid有自身的缺陷,現在用的比較少了。
函式公式如下:
,相應的
函式曲線如下:
優點:
<1> Sigmoid的取值範圍在(0, 1),而且是單調遞增,比較容易優化
<2> Sigmoid求導比較容易,可以直接推導得出。
缺點:
<1> Sigmoid函式收斂比較緩慢
<2> 由於Sigmoid是軟飽和,容易產生梯度消失,對於深度網路訓練不太適合(從圖上sigmoid的導數可以看出當x趨於無窮大的時候,也會使導數趨於0)
<3> Sigmoid函式並不是以(0,0)為中心點
2. Tanh函式
tanh為雙切正切曲線,過(0,0)點。相比Sigmoid函式,更傾向於用tanh函式
函式公式:
相應的
函式曲線如下:
優點:
<1> 函式輸出以(0,0)為中學
<2> 收斂速度相對於Sigmoid更快
缺點:
<1> tanh並沒有解決sigmoid梯度消失的問題
3. ReLU函式
最近這幾年很常用的啟用函式。
公式如下:
圖形影象:
優點:
<1> 在SGD中收斂速度要比Sigmoid和tanh快很多
<2> 有效的緩解了梯度消失問題
<3> 對神經網路可以使用稀疏表達
<4> 對於無監督學習,也能獲得很好的效果
缺點:
<1> 在訓練過程中容易出現神經元失望,之後梯度永遠為0的情況。比如一個特別大的梯度結果神經元之後,我們調整權重引數,就會造成這個ReLU神經元對後來來的輸入永遠都不會被啟用,這個神經元的梯度永遠都會是0,造成不可逆的死亡。
參考:http://www.cnblogs.com/rgvb178/p/6055213.html