常見啟用函式對比

2021-10-11 17:36:24 字數 2422 閱讀 3581

參考blog

啟用函式的主要功能是為神經網路非線性能力 ,去掉啟用函式層,神經網路僅剩下線性函式,多層線性函式的擬合還是線性的,無法更好的建模生活中的大多數非線性問題。

線性啟用函式(不是重點)

非線性啟用函式(sigmod,tanh,relu,lrelu,prelu,swish)

考量:公式

f (x

)=11

+e−x

f′(x

)=f(

x)∗(

1−f(

x)

)f(x) = \frac} \\ f^(x) = f(x)*(1-f(x))

f(x)=1

+e−x

1​f′

(x)=

f(x)

∗(1−

f(x)

)性質不錯,可做歸一化和表示為概率

左端趨近於0,右端趨近與1,兩邊飽和性 ,兩邊導數趨近於0

當輸入落入飽和區,梯度比較小,引數更新難度變大,此現象為梯度消失

啟用函式的偏移現象。sigmoid函式的輸出值均大於0,使得輸出不是0的均值,這會導致後一層的神經元將得到上一層非0均值的訊號作為輸入。

t an

h=1−

e−2x

1+e−

2x

tanh = \frac}}

tanh=1

+e−2

x1−e

−2x​

解決了sigmoid函式的不是zero-centered輸出問題,

使得它的收斂速度要比sigmoid快,減少了迭代更新的次數。然而,梯度消失(gradient vanishing)的問題和冪運算的問題仍然存在

f (x

)=ma

x(0,

x)

f(x) = max(0,x)

f(x)=m

ax(0

,x)優點:

1) 解決了gradient vanishing問題 (在正區間)

2)計算速度非常快,只需要判斷輸入是否大於0

3)收斂速度遠快於sigmoid和tanh

缺點:1)relu的輸出不是zero-centered

2)某些神經元可能永遠不會被啟用(dead relu problem),導致相應的引數永遠不能被更新

初始化方法

學習率太高

f (x

)=x,

x>0f

(x)=

α∗x,

x<=0

f(x) = x ,x>0 \\ f(x) = \alpha*x,x<=0

f(x)=x

,x>0f

(x)=

α∗x,

x<=0

針對 x<0 的硬飽和問題,我們對 [公式] 作出改進,提出leaky-relu,即在 x<0 部分新增乙個引數 \alpha。

p-relu則認為 [公式] 也應當作為乙個引數來學習,一般建議 \alpha 初始化為0.25

f (x

)=x,

x>0f

(x)=

α∗(e

x−1)

f(x) = x ,x>0 \\ f(x) = \alpha*(e^x-1)

f(x)=x

,x>0f

(x)=

α∗(e

x−1)

lu是結合了sigmoid的左側軟飽和性和relu的右側無飽和性而提出的一種新的啟用函式。從上面圖中不難看到這一特點。右側線性部分使得elu可以緩解梯度消失問題,而左側軟飽和效能讓elu對輸入變化或雜訊更魯棒。

s wi

sh(x

)=x∗

sigm

od

swish(x) = x*sigmod

swish(

x)=x

∗sig

modswish函式跟relu差不多,唯一區別較大的是接近於0的負半軸區域, google大腦做了很多實驗,結果都表明swish優於relu

m ax

out:

f(x)

=max

(w1t

x+b1

,...

,wnt

x+bn

)maxout: f(x) = max(w_1^tx+b_1,...,w_n^tx+b_n)

maxout

:f(x

)=ma

x(w1

t​x+

b1​,

...,

wnt​

x+bn

​)maxout網路能夠近似任意連續函式,且當 [公式] 為0時,退化為relu。maxout能夠緩解梯度消失,同時又規避了relu神經元死亡的缺點,但增加了引數和計算量

。。。留待更新

各個啟用函式對比

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

常見啟用函式整理

啟用函式的飽和 定義 x趨向於正無窮或者負無窮時,函式導數趨近於0,此時稱為飽和 飽和啟用函式 sigmod tanh 非飽和啟用函式 relu leaky relu gelu 給神經網路引入非線性元素,使神經網路可以完成非線性對映。如果不使用啟用函式,無論神經網路有多少層,都只是線性組合而已。si...

神經網路 啟用函式對比

本部落格僅為作者記錄筆記之用,不免有很多細節不對之處。還望各位看官能夠見諒,歡迎批評指正。日常 coding 中,我們會很自然的使用一些啟用函式,比如 sigmoid relu等等。不過好像忘了問自己一 n 件事 為什麼需要啟用函式?啟用函式都有哪些?都長什麼樣?有哪些優缺點?怎麼選用啟用函式?此圖...