目前啟用函式有sigmoid、tanh、relu、leakyrelu、elu。
sigmoid函式
sigmoid函式表示式f(x
)=11
+e−x
f(x) = \frac}}}
f(x)=1
+e−x
1sigmoid函式在遠離座標原點的時候,函式梯度非常小,在梯度反向傳播時,會造成梯度消失(梯度瀰散),無法更新引數,即無法學習。另外,sigmoid函式的輸出不是以零為中心的,這會導致後層的神經元的輸入是非0均值的訊號。那麼對於後層的神經元,其區域性梯度w′=
x×f(
x)×(
1−f(
x))w'=x \times f(x) \times (1-f(x))
w′=x×f
(x)×
(1−f
(x))
永遠為正,假設更深層的神經元的梯度反向傳遞到這為w′′
w''w′
′。根據鏈式法則,此時後層神經元的全域性梯度為w′×
w′′w'\times w''
w′×w′′
。當w ′′
w''w′
′為正時,對於所有的連線權w
ww,其都往「負」方向修正(因為w′×
w′′w'\times w''
w′×w′′
為正,要往負梯度方向修正);而當w′′
w''w′
′為負時,對於所有的連線權w
ww,其都往「正」方向修正。所以,如果想讓w
ww中的w
1w_1
w1往正方向修正的同時,w
2w_2
w2往負方向修正是做不到的。對於w=(
w1,w
2,..
.,wn
)w=(w_1,w_2,...,w_n)
w=(w1
,w2
,...
,wn
)會造成一種**的效果,使得收斂很慢。如果是按batch來訓練的話,不同的batch會得到不同的符號,能緩和一下這個問題。
由於以上兩個缺點,sigmoid函式已經很少用了。
tanh函式
tanh函式的表示式
tanh(
x)=e
x−e−
xex+
e−x\tanh (x) = \frac - }}} + }}}
tanh(x
)=ex
+e−x
ex−e
−xtanh函式能解決sigmoid函式輸出不是零均值的問題,但和sigmoid函式一樣,tanh函式還是會存在很大的梯度瀰散問題。
relu函式
relu函式表示式為f(x
)=ma
x(0,
x)f(x)=max(0,x)
f(x)=m
ax(0
,x)relu函式在輸入為正的時候,不存在梯度瀰散的問題,對梯度下降的收斂有巨大加速作用。同時由於它只是乙個矩陣進行閾值計算,計算很簡單。但它也有兩個缺點,乙個是當輸入x小於零時,梯度為零,relu神經元完全不會被啟用,導致相應引數永遠不會被更新;另乙個和sigmoid一樣,輸出不是零均值的。
leakyrelu函式
為了解決relu函式在輸入小於零神經元無法啟用的問題,人們提出了leakyrelu函式。
該函式在輸入小於零時,給了乙個小的梯度(斜率,比如0.01)。因此就算初始化到輸入x小於零,也能夠被優化。其表示式為f(x
)=ma
x(αx
,x)f(x)=max(\alpha x,x)
f(x)=m
ax(α
x,x)
,α
\alpha
α為斜率。當把α
\alpha
α作為引數訓練時,啟用函式就會變為prelu。leakyrelu以其優越的效能得到了廣泛的使用。
elu函式
elu函式也是relu函式的乙個變形,也是為了解決輸入小於零神經元無法啟用的問題。
與leakyrelu不同的是,當x
<
0x<0
x<
0時,f(x
)=α(
ex−1
)f(x)=\alpha (e^x-1)
f(x)=α
(ex−
1)。在tensorflow和pytorch中,都已經整合了這些啟用函式,可以拿來直接用。詳見:
參考:深度學習使用到的啟用函式種類和優缺點解釋!
幾種常用啟用函式的簡介
深度學習 啟用函式
如下圖,在神經元中,輸入的 inputs 通過加權,求和後,還被作用了乙個函式,這個函式就是啟用函式 activation function。啟用函式的這些特性可以很好地解釋我們為什麼要用啟用函式。函式公式和圖表如下圖 在sigmod函式中我們可以看到,其輸出是在 0,1 這個開區間內,這點很有意思...
深度學習 啟用函式
主要作用 加入非線性因素,彌補線性模型表達不足的缺陷 sigmoid函式 隨著 x xx 的趨近正 負無窮,y yy 對應的值越來越接近 1 1,趨近飽和 因此當 x xx 100 和 x xx 1000 的差別不大,這個特性丟掉了 x xx 1000 的資訊 tanh函式 對sigmoid函式的值...
深度學習 啟用函式
啟用函式又稱 非線性對映函式 是深度卷積神經網路中不可或缺的模組。可以說,深度網路模型強大的表示能力大部分便是由啟用函式的非線性單元帶來的。這部分共介紹7個啟用函式 sigmoid函式,tanh函式,relu函式,leaky relu函式,引數化relu,隨機化relu和指數化線性單元 elu si...