啟用函式總結

2021-08-19 08:53:20 字數 3861 閱讀 6108

一 主要作用

啟用函式的主要作用就是加入非線性因素,以解決線性模型表達能力不足的缺陷,在整個神經網路起到至關重要的作用。

在神經網路中常用的啟用函式有sigmoid、tanh和relu等,下面逐一介紹。

二 sigmod函式

1  函式介紹

sigmoid是常用的非線性的啟用函式,數學公式如下:

2  函式曲線

sigmoid函式曲線如下圖,其中x可以是負無窮到正無窮,但是對應的y卻只有0~1的範圍,所以,經過sigmoid函式輸出的都會落到0~1的區間,即sigmod函式能夠把輸入的值「壓縮」到0~1之間。

3 在tensorflow中對應的函式

在tensorflow中對應的函式為:

tf.nn.sigmoid(x,name=none)

從影象上看,隨著x趨近正負無窮大,y對應的值越來越接近1或-1,這種情況叫做飽和。處於飽和態的啟用函式意味著,當x=1000和x=100時的反映都是一樣的。

所以,為了能有效使用sigmod函式,其極限只能在-6~6之間,而在-3~3之間應該會有比較好的效果。

三 tanh函式

1 函式介紹

tanh函式可以說是sigmoid函式的值域公升級版,由sigmoid函式的0~1之間公升級到-1~1.但是tanh函式也不能完全替代sigmoid函式,在某些輸出需要大於0的情況下,還是要用sigmoid函式。

tanh函式也是常用的非線性啟用函式,其數學形式如下:

tanh(x)=2sigmoid(2x)−1

2 函式曲線

tanh函式曲線如下圖,其x取值也是從負無窮到正無窮,對應的y值變成-1到1之間,相對於sigmoid函式有更廣的值域。

3 在tensorflow中對應的函式

在tensorflow中對應的函式

tf.nn.tanh(x,name=none)

顯而易見,tanh函式跟sigmoid函式有一樣的缺陷,也是飽和問題,所以在使用tanh函式時,要注意輸入值的絕對值不能過大,否則模型無法訓練。

四 relu函式

1 函式介紹

更為常用的啟用函式(也稱為rectifier)。其數學公式如下:

f(x)=max(0,x)

該公式非常簡單,大於0的留下,否則一律為0,具體影象如下圖

relu函式應用的廣泛性與它的優勢是分不開的,這種對正向訊號的重視,忽略了負向訊號的特性,與我們人類神經細胞對訊號反映及其相似。所以在神經網路中取得了很好的擬合效果。

另外由於relu函式運算簡單,大大地提公升了機器的執行效率,也是relu函式乙個很大的優點。

與relu函式類似的還有softplus函式。

公式介紹:

兩者曲線比較如下:

雖然relu函式在訊號響應上有很多優勢,但這僅僅是在正向傳播方面。由於其對負值的全部捨棄,因此很容易使模型輸出全零從而無法再進行訓練。例如,隨機初始化的w加入值中有個負值,其對應的正值輸入值特徵也被全部遮蔽了,同理,對應負值輸入值反而被啟用了。這顯然不是我們想要的結果。於是在relu的基礎上又演化出了些變種函式。

為max中的x加了乙個高斯分布的雜訊。

公式如下:

leak relus

在relu基礎上,保留一部分負值,讓x為負值時乘0.01,即leak relus對負訊號不是一味地拒絕,而是縮小。

數學公式如下:

再進一步讓這個0.01作為引數可調,於是,當x小於0時,乘以a,a小於等於1.其數學形式

f(x)=max(x,ax)

當x小於0時,做更複雜的變化

公式如下:

elus函式啟用函式與relu函式一樣都是不帶引數的,而且收斂速度比reul函式要快。

elus函式,不使用批處理比使用批處理能夠獲得更好的效果。

elus函式,不使用批處理的效果比reul函式加批處理效果更好。

2 tensorflow中對應的函式

在tensorflow中,關於reul函式的實現,有以下兩個對應的函式

tf.nn.relu(features,name=none):一般reul函式,即max(features,0)

tf.nn.relu6(features,name=none):是以6為閾值的reul函式,即min(max(features,0),6)

在tensorflow中,softplus函式對應的函式如下:

tn.nn.softplus(features,name=none)

在tensorflow中,elus函式對應的函式如下:

tf.nn.elu(features,name=none)

在tensorflow中,leaky rulus公式沒有專門的函式,不過可以利用現有的函式組成而得到

tf.maximum(x,leak*x,name=name) #leak為傳入的引數,可以設為0.01等。

五 swish

swish函式是谷歌公司發現的乙個效果更優於relu的啟用函式。經過測試,在保持所有的模型引數不變的情況下,只是把原來模型中relu啟用函式修改為swish函式,模型的準確率均有上公升。

公式如下:

f(x)=x * sigmod(x),

變形swish-b啟用函式的公式則為f(x)=x * sigmod(b * x)

其中b為x的縮放引數,一般情況取預設值1即可.

在tensorflow的低版本中,沒有單獨的swish函式,可以手動封裝,**如下:

六 小結

神經網路中,運算特徵是不斷進行迴圈計算,所以在每次迴圈過程中,每個神經元的值也是不斷變化的,這就導致了tanh函式在特徵相差明顯時候效果會很好,在迴圈過程中其會不斷擴大特徵效果並顯示出來。

但有時候當計算的特徵間的相差雖比較複雜卻沒有明顯區別,或是特徵間的相差不是特別大時,就需要更細微的分類判斷,這時sigmoid函式的效果會更好一些。

後來出現的relu啟用函式的優勢是,經過其處理後的資料有更好的稀疏性。即,將資料轉化為只有最大數值,其他都為0.這種變換可以近似程度地保留資料特徵,用大多數元素為0的稀疏矩陣來實現。

實際上,神經網路在不斷反覆計算中,就變成了relu函式在不斷嘗試如何用乙個大多數0的矩陣來表達資料特徵。以稀疏性資料來表達原有資料特性的方法,使得神經網路在迭代運算中能夠取得又快又好的效果。所有目前大多數用max(0,x)來代替sigmoid函式。

七 參考

啟用函式總結

1.sigmod函式 函式公式和圖表如下圖 在sigmod函式中我們可以看到,其輸出是在 0,1 這個開區間內,這點很有意思,可以聯想到概率,但是嚴格意義上講,不要當成概率。sigmod函式曾經是比較流行的,它可以想象成乙個神經元的放電率,在中間斜率比較大的地方是神經元的敏感區,在兩邊斜率很平緩的地...

啟用函式總結

cnn rnn各種模型啟用函式總結 sigmoid函式是早期非常經典的啟用函式,輸出值在 0,1 之間,當輸入值為非常大負數時,值為0,當輸入值非常大正數時,值為1。sigmoid非常經典,但是現在它以不太受歡迎,原因是它存在乙個幾個比較大的缺陷,後面做詳細討論。tanh函式是sigmoid函式的一...

啟用函式總結

在神經網路中,啟用函式的作用是能夠給神經網路加入一些非線性因素,使得神經網路可以更好地解決較為複雜的問題。先舉乙個簡單的例子,在做二分類時,我們的 值y wtx b widehat w x b y wtx b,其中w和b為引數,我們希望得到乙個範圍是 0,1 的概率值,而如果直接使用上式進行計算會導...