激活函数 activation function
文章目錄
- 激活函數(shù) activation function
- Sigmoid
- Sigmoid 反向傳播
- Tanh
- ReLU
- Dead ReLU Problem 產(chǎn)生的原因
激活函數(shù) activation function
激活函數(shù)的角色是引入非線性(non-linearity),否則不管網(wǎng)絡(luò)有多深,整個(gè)網(wǎng)絡(luò)都可以直接替換為一個(gè)相應(yīng)的仿射變換(affine transformation),即線性變換(linear transformation),比如旋轉(zhuǎn)、伸縮、偏斜、平移(translation)。
例如,在二維特征空間上,藍(lán)線表示負(fù)面情形 y=0y=0y=0,綠線表示正面情形 y=1y=1y=1:
如果不使用激活函數(shù),神經(jīng)網(wǎng)絡(luò)最好的分類效果如下:
在仿射變換的結(jié)果上應(yīng)用激活函數(shù),可以對(duì)特征空間進(jìn)行扭曲翻轉(zhuǎn),最后得到一條線性可分的邊界。運(yùn)轉(zhuǎn)中的sigmoid激活函數(shù):
在同一個(gè)網(wǎng)絡(luò)中混合使用不同類型的神經(jīng)元是非常少見的,雖然沒有什么根本性問題來禁止這樣做。
Sigmoid
Sigmoid 激活函數(shù):
f(w,x)=11+e?(w0x0+w1x1+w2)\displaystyle f(w,x)=\frac{1}{1+e^{-(w_0x_0+w_1x_1+w_2)}}f(w,x)=1+e?(w0?x0?+w1?x1?+w2?)1?
-
函數(shù)圖像如上圖所示,它將輸入的值“擠壓”到 [0,1][0,1][0,1] 范圍內(nèi),很大的負(fù)數(shù)變成0,很大的正數(shù)變成1。
-
在歷史上,Sigmoid 函數(shù)非常常用,這是因?yàn)樗鼘?duì)于神經(jīng)元的激活頻率有良好的解釋:從完全不激活(0)到在求和后的最大頻率處的完全飽和(saturated)的激活(1)。
現(xiàn)在 Sigmoid 函數(shù)已經(jīng)很少使用了,這是因?yàn)樗袃蓚€(gè)主要缺點(diǎn):
-
Sigmoid函數(shù)飽和使梯度消失:
Sigmoid 神經(jīng)元有一個(gè)不好的特性,就是當(dāng)神經(jīng)元的激活在接近 0 或1 處時(shí)會(huì)飽和:在這些區(qū)域,梯度幾乎為0。在深層網(wǎng)絡(luò)的鏈?zhǔn)角髮?dǎo)過程中,如果局部梯度非常小,那么相乘的結(jié)果也會(huì)接近零,導(dǎo)致梯度消失。
-
Sigmoid 函數(shù)的輸出不是零中心的:
這會(huì)導(dǎo)致后面層中的神經(jīng)元得到的數(shù)據(jù)也不是零中心的,這一情況將影響梯度下降的速度,因?yàn)槿绻斎肷窠?jīng)元的數(shù)據(jù)總是正數(shù)(比如在 f=wTx+bf=w^Tx+bf=wTx+b 中每個(gè)元素都 x>0x>0x>0),那么權(quán)重的梯度在反向傳播的過程中,將會(huì)要么全部是正數(shù),要么全部是負(fù)數(shù)。這將會(huì)導(dǎo)致梯度下降權(quán)重更新時(shí)出現(xiàn) ZZZ 字型的下降。
然而,由于整個(gè)批量的數(shù)據(jù)的梯度被加起來后,對(duì)于權(quán)重的最終更新將會(huì)有不同的正負(fù),這樣就從一定程度上減輕了這個(gè)問題。因此,該問題相對(duì)于上面的神經(jīng)元飽和問題來說只是個(gè)小麻煩,沒有那么嚴(yán)重。
激活變換效果:
Sigmoid 反向傳播
Sigmoid 激活函數(shù):
f(w,x)=11+e?(w0x0+w1x1+w2)\displaystyle f(w,x)=\frac{1}{1+e^{-(w_0x_0+w_1x_1+w_2)}}f(w,x)=1+e?(w0?x0?+w1?x1?+w2?)1?
鏈?zhǔn)角髮?dǎo):
f(x)=1x→dfdx=?1/x2\displaystyle f(x)=\frac{1}{x} \to \frac{df}{dx}=-1/x^2f(x)=x1?→dxdf?=?1/x2
fc(x)=c+x→dfdx=1f(x)=ex→dfdx=ex\displaystyle f_c(x)=c+x \to \frac{df}{dx}=1\displaystyle f(x)=e^x \to \frac{df}{dx}=e^xfc?(x)=c+x→dxdf?=1f(x)=ex→dxdf?=ex
fa(x)=ax→dfdx=a\displaystyle f_a(x)=ax \to \frac{df}{dx}=afa?(x)=ax→dxdf?=a
即:
σ(x)=11+e?x\displaystyle\sigma(x)=\frac{1}{1+e^{-x}}σ(x)=1+e?x1?
→dσ(x)dx=e?x(1+e?x)2\displaystyle\to\frac{d\sigma(x)}{dx}=\frac{e^{-x}}{(1+e^{-x})^2}→dxdσ(x)?=(1+e?x)2e?x?
=(1+e?x?11+e?x)(11+e?x)=(\frac{1+e^{-x}-1}{1+e^{-x}})(\frac{1}{1+e^{-x}})=(1+e?x1+e?x?1?)(1+e?x1?)
=((1+e?x1+e?x)?(11+e?x))(11+e?x)=((\frac{1+e^{-x}}{1+e^{-x}})-(\frac{1}{1+e^{-x}}))(\frac{1}{1+e^{-x}})=((1+e?x1+e?x?)?(1+e?x1?))(1+e?x1?)
=(1?σ(x))σ(x)=(1-\sigma(x))\sigma(x)=(1?σ(x))σ(x)
在分子上先加 1 后減 1 來簡化求導(dǎo)過程:
計(jì)算線路:
根據(jù)上面的公式,局部梯度為 (1?0.73)?0.73=0.2(1-0.73)*0.73~=0.2(1?0.73)?0.73?=0.2
w = [2,-3,-3] # 假設(shè)一些隨機(jī)數(shù)據(jù)和權(quán)重 x = [-1, -2]# 前向傳播 dot = w[0]*x[0] + w[1]*x[1] + w[2] f = 1.0 / (1 + math.exp(-dot)) # sigmoid函數(shù)# 對(duì)神經(jīng)元反向傳播 ddot = (1 - f) * f # 點(diǎn)積變量的梯度, 使用sigmoid函數(shù)求導(dǎo) dx = [w[0] * ddot, w[1] * ddot] # 回傳到x dw = [x[0] * ddot, x[1] * ddot, 1.0 * ddot] # 回傳到w # 完成!得到輸入的梯度Tanh
-
tanh 神經(jīng)元是一個(gè)簡單放大平移后的 Sigmoid 神經(jīng)元。
-
tanh 公式:
tanh(x)=2sigmoid(2x)?1tanh(x)=2sigmoid(2x)-1tanh(x)=2sigmoid(2x)?1
tanh(x)=ex?e?xex+e?xtanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}tanh(x)=ex+e?xex?e?x?
-
圖像如上圖所示。它將實(shí)數(shù)值壓縮到 [?1,1][-1,1][?1,1] 之間。和 Sigmoid 神經(jīng)元一樣,它也存在飽和問題,但是和 Sigmoid 神經(jīng)元不同的是,它的輸出是零中心的。因此,在實(shí)際操作中,tanh 非線性函數(shù)比 Sigmoid 非線性函數(shù)更受歡迎。
激活變換效果:
ReLU
ReLU(校正線性單元:Rectified Linear Unit)激活函數(shù),當(dāng) x=0x=0x=0 時(shí)函數(shù)值為0。當(dāng) x>0x>0x>0 函數(shù)的斜率為 1。使用 ReLU 可以加快收斂速度。
- 在近些年 ReLU變得非常流行,它的函數(shù)公式是:
f(x)=max(0,x)f(x)=max(0,x)f(x)=max(0,x)
- ReLU 函數(shù)其實(shí)就是一個(gè)取最大值函數(shù),它并不是全區(qū)間可導(dǎo)的,但是可以取 sub-gradient,如上圖所示。
ReLU的優(yōu)點(diǎn):
-
sigmoid 和 tanh 神經(jīng)元含有指數(shù)運(yùn)算等耗費(fèi)計(jì)算資源的操作,而 ReLU 可以簡單地通過對(duì)一個(gè)矩陣進(jìn)行閾值計(jì)算得到。
-
相較于 sigmoid 和 tanh 函數(shù),ReLU 對(duì)于隨機(jī)梯度下降的收斂有巨大的加速作用。
ReLU的缺點(diǎn):
-
ReLU 的輸出不是零中心的。
-
Dead ReLU Problem:ReLU 不適合大梯度傳播,因?yàn)樵谇皩訁?shù)更新以后,ReLU 的神經(jīng)元有可能再也不能被激活,導(dǎo)致梯度永遠(yuǎn)都是零。通過合理設(shè)置學(xué)習(xí)速率,這種情況的發(fā)生概率會(huì)降低。
激活變換效果:
Dead ReLU Problem 產(chǎn)生的原因
假設(shè)有一個(gè)神經(jīng)網(wǎng)絡(luò)的輸入 WWW 遵循某種分布,對(duì)于一組固定的樣本, WWW 的分布也就是 ReLU 的輸入的分布,假設(shè) ReLU 輸入是一個(gè)低方差中心在 +0.1+0.1+0.1 的高斯分布。
在這個(gè)場(chǎng)景下:
-
大多數(shù) ReLU 的輸入是正數(shù)
-
大多數(shù)輸入經(jīng)過 ReLU 函數(shù)能得到一個(gè)正值(ReLU is open)
-
大多數(shù)輸入能夠反向傳播通過 ReLU 得到一個(gè)梯度
-
ReLU 的輸入WWW 一般都能通過反向傳播得到更新
現(xiàn)在,假設(shè)在隨機(jī)反向傳播的過程中,有一個(gè)巨大的梯度經(jīng)過 ReLU,由于 ReLU是打開的,將會(huì)有一個(gè)巨大的梯度通過反向傳播傳給輸入 WWW 。這會(huì)引起輸入 WWW 巨大的變化,也就是說輸入 WWW 的分布會(huì)發(fā)生變化,假設(shè)輸入 WWW 的分布現(xiàn)在變成了一個(gè)低方差的,中心在 ?0.1-0.1?0.1 高斯分布。
在這個(gè)場(chǎng)景下:
-
大多數(shù) ReLU 的輸入是負(fù)數(shù)
-
大多數(shù)輸入經(jīng)過 ReLU 函數(shù)會(huì)得到 0 值(ReLU is close)
-
大多數(shù)輸入通過 ReLU 反向傳播,得到一個(gè)梯度也是 0
-
ReLU 的輸入 WWW 大多數(shù)都無法通過反向傳播得到更新了
發(fā)生了什么?只是ReLU函數(shù)的輸入的分布函數(shù)發(fā)生了很小的改變(?0.2-0.2?0.2 的改變),導(dǎo)致了ReLU函數(shù)行為質(zhì)的改變。越過了 0 這個(gè)邊界,ReLU 函數(shù)幾乎永久的關(guān)閉了。更重要的是ReLU函數(shù)一旦關(guān)閉,參數(shù) WWW 就得不到更新,這就是所謂的 dying ReLU,過高的學(xué)習(xí)速率可能是這里的罪魁禍?zhǔn)住?/p>
總結(jié)
以上是生活随笔為你收集整理的激活函数 activation function的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 池化层 pool
- 下一篇: GoogLeNet Inception