神經(jīng)網(wǎng)絡(luò)從數(shù)學(xué)上來說,就是用來擬合一個函數(shù)。把數(shù)據(jù)扔進(jìn)去,得到一個預(yù)測結(jié)果,以此來解決分類和回歸等問題。但是針對不同的問題,需要擬合不同的函數(shù),包括線性函數(shù)和非線性函數(shù)。神經(jīng)網(wǎng)絡(luò)中常常會見到各種激活函數(shù),當(dāng)需要擬合非線性函數(shù)時就需要激活函數(shù)登場了。
對于每個神經(jīng)元來說,都是先進(jìn)行線性變換,再將線性變換的結(jié)果通過激活函數(shù)來進(jìn)行激活。注意,這里的有效激活函數(shù)必須是非線性函數(shù)。如果采用線性激活函數(shù),則在前向傳播的過程中,相當(dāng)于一直做線性變換,這樣的話,無論多少隱藏層,都是線性變換,也就是隱藏層在這里沒有發(fā)生作用,仍然是一個單層的感知機(jī)。當(dāng)然對于最后一層的輸出層則沒有這個要求,可以選擇線性或者非線性的激活函數(shù)。
這里主要介紹非線性激活函數(shù),線性的激活函數(shù)也就是恒等函數(shù),在坐標(biāo)軸表示為一條直線,通常使用較少。常見的非線性激活函數(shù)通??梢苑譃閮深悾环N是輸入單個變量輸出單個變量,如sigmoid函數(shù),Relu函數(shù);還有一種是輸入多個變量輸出多個變量,如Softmax函數(shù),Maxout函數(shù)。
Sigmoid函數(shù),也叫做S函數(shù)將值限定在 \((0,1)\) 之間,能夠很好的作為概率來解釋算法得到的結(jié)果。目前在計(jì)算機(jī)視覺中不常用,只適用于二分類等問題。
缺點(diǎn)是當(dāng)輸入較大的正數(shù)或者負(fù)數(shù)時,導(dǎo)數(shù)就會變?yōu)?,這時候采用梯度下降方法就會下降很慢,使得神經(jīng)網(wǎng)絡(luò)不能正常更新。同時不是以0為對稱,容易在更新時產(chǎn)生 zigzag 路徑。
函數(shù)定義為
\[a = sigmoid(z) = \frac{1}{1 e^{-z}}\]
其求導(dǎo)結(jié)果為
\[a'=\frac{1}{1 e^{-z}}\left( 1 - \frac{1}{1 e^{-z}}\right)=a(1-a)\]
thah函數(shù)能夠?qū)⒅迪薅ㄔ?\((-1,1)\) 之間,比sigmoid函數(shù)更為常用。但是也存在與sigmoid函數(shù)一樣的缺點(diǎn),當(dāng)在z值較大或者較小時,斜率接近0,這時優(yōu)化速度很慢,這種情況下可以考慮采用ReLU函數(shù)。
函數(shù)定義為
\[a = thah(z) = \frac{e^z - e^{-z}}{e^z e^{-z}}\]
求導(dǎo)結(jié)果為
\[a' = 1 - tanh^2(z) = 1 - a^2\]
ReLU函數(shù),也叫做線性整流函數(shù),能夠解決在值較大時產(chǎn)生的梯度為0的問題,能夠正常的更新,并且沒有復(fù)雜的指數(shù)計(jì)算,使得性能較好,收斂較快,是目前在視覺領(lǐng)域最為常見的激活函數(shù)。
ReLU函數(shù)為
\[a = ReLU(z) = max(0,z)\]
其導(dǎo)數(shù)為
\[a' = \left\{\begin{matrix}0 & x<0 \\ 1 & x>0\end{matrix}\right.\]
LeakyReLU是為了防止ReLU函數(shù)在負(fù)數(shù)時,斜率為0的情況,但在實(shí)際情況中,很難到負(fù)數(shù)那邊去,所以基本采用ReLU就足夠了,不過也建議采用交叉驗(yàn)證來試試這個函數(shù)。
Leaky ReLU為
\[a = LeakyReLU(z) = max(0.01z,z)\]
其導(dǎo)數(shù)為
\[a' = \left\{\begin{matrix}0.01 & x<0 \\ 1 & x>0\end{matrix}\right.\]
此外,還有幾種激活函數(shù)由算法來學(xué)習(xí)負(fù)數(shù)區(qū)域的學(xué)習(xí)率,如PReLU函數(shù)和ELU函數(shù),原理與ReLU函數(shù)類似。
softmax函數(shù)與sigmoid函數(shù)很相似,也是將值變換到 \((0,1)\) 之間。但是可以針對多個類別,預(yù)測出每個類別的歸一化概率,所以通常softmax函數(shù)是在分類器的輸出層使用。
其函數(shù)表達(dá)式為
\[\sigma (z)_{j}= \frac{e^{z_j}}{\sum_{k=1}^{K}e^{z_k}}\]
選擇激活函數(shù)沒有固定的規(guī)則,每個激活函數(shù)適用于不同的應(yīng)用,比如分類和回歸,多分類和二分類任務(wù)。但根據(jù)每個激活函數(shù)的性質(zhì),也存在一些基本的規(guī)律
對于二分類問題,在輸出層可以選擇 sigmoid 函數(shù)。
對于多分類問題,在輸出層可以選擇 softmax 函數(shù)。
由于梯度消失問題,盡量sigmoid函數(shù)和tanh的使用。
tanh函數(shù)由于以0為中心,通常性能會比sigmoid函數(shù)好。
ReLU函數(shù)是一個通用的函數(shù),一般在隱藏層都可以考慮使用。
有時候要適當(dāng)對現(xiàn)有的激活函數(shù)稍作修改,以及考慮使用新發(fā)現(xiàn)的激活函數(shù)。