1. 程式人生 > >啟用函式-Sigmoid, Tanh及ReLU

啟用函式-Sigmoid, Tanh及ReLU

什麼是啟用函式

 

在神經網路中,我們會對所有的輸入進行加權求和,之後我們會在對結果施加一個函式,這個函式就是我們所說的啟用函式。如下圖所示。

為什麼使用啟用函式

我們使用啟用函式並不是真的啟用什麼,這只是一個抽象概念,使用啟用函式時為了讓中間輸出多樣化,能夠處理更復雜的問題。

如果不適用結果函式的話,每一層最後輸出的都是上一層輸入的線性函式,不管加多少層神經網路,我們最後的輸出也只是最開始輸入資料的線性組合而已。啟用函式給神經元引入了非線性因素,當加入多層神經網路時,就可以讓神經網路擬合任何線性函式及非線性函式,從而使得神經網路可以適用於更多的非線性問題,而不僅僅是線性問題。

有論文中把啟用函式定義為一個幾乎處處可微的函式f: R->R

有哪些啟用函式

對於神經網路,一版我們會使用三種啟用函式:Sigmoid函式、Tanh函式、ReLU函式。

基本概念:

飽和

當函式f(x)滿足:

\lim_{x\rightarrow+\infty}f^{'}(x)=0

時,稱為右飽和

當函式f(x)滿足:

\lim_{x\rightarrow-\infty}f^{'}(x)=0

時,稱為左飽和

當f(x)同事滿足左飽和及右飽和時,稱為飽和。

軟包和與硬包和

在飽和定義的基礎上,如果儲存常數c1,當x>c1時候恆滿足f^{'}(x)=0,稱之為右硬飽和;同樣的,如果存在c2,當x<c2時恆滿足f^{'}(x)=0,稱之為左硬飽和。如果同時滿足了左飽和,又滿足了右飽和,稱之為硬包和。相對的,只有在x趨於極值時才能滿足f(x)的倒數為0,則成為軟飽和。

1. Sigmoid 函式

sigmoid 曾經風靡一時,但是由於sigmoid有自身的缺陷,現在用的比較少了。

函式公式如下:

f(x)=\frac{1}{1+e^{-x}},相應的f^{'}(x)=f(x)(1-f(x))

​​​​​​函式曲線如下:

優點:

<1> Sigmoid的取值範圍在(0, 1),而且是單調遞增,比較容易優化

<2> Sigmoid求導比較容易,可以直接推導得出。

缺點:

<1> Sigmoid函式收斂比較緩慢

<2> 由於Sigmoid是軟飽和,容易產生梯度消失,對於深度網路訓練不太適合(從圖上sigmoid的導數可以看出當x趨於無窮大的時候,也會使導數趨於0)

<3> Sigmoid函式並不是以(0,0)為中心點

2. Tanh函式

tanh為雙切正切曲線,過(0,0)點。相比Sigmoid函式,更傾向於用tanh函式

函式公式:

f(x)=\frac{sinh(x)}{cosh(x)}=\frac{1-e^{-2x}}{1+e^{-2x}}=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}=\frac{e^{2x}-1}{e^{2x}+1}=2sigmoid(2x)-1

相應的f^{'}(x)=tanh{'}(x)=sech^{2}(x)=1-tanh^{2}(x)

函式曲線如下:

優點:

<1> 函式輸出以(0,0)為中學

<2> 收斂速度相對於Sigmoid更快

缺點:

<1> tanh並沒有解決sigmoid梯度消失的問題

3. ReLU函式

最近這幾年很常用的啟用函式。

公式如下:

f(x)=max(0, x)=\left\{\begin{matrix} 0 & (x \leqslant 0)& \\ x & (x > 0) & \end{matrix}\right.

圖形影象:

優點:

<1> 在SGD中收斂速度要比Sigmoid和tanh快很多

<2> 有效的緩解了梯度消失問題

<3> 對神經網路可以使用稀疏表達

<4> 對於無監督學習,也能獲得很好的效果

缺點:

<1> 在訓練過程中容易出現神經元失望,之後梯度永遠為0的情況。比如一個特別大的梯度結果神經元之後,我們調整權重引數,就會造成這個ReLU神經元對後來來的輸入永遠都不會被啟用,這個神經元的梯度永遠都會是0,造成不可逆的死亡。

參考:http://www.cnblogs.com/rgvb178/p/6055213.html