激活函數(shù)也是神經(jīng)網(wǎng)絡(luò)中一個(gè)很重的部分。每一層的網(wǎng)絡(luò)輸出都要經(jīng)過激活函數(shù)。比較常用的有l(wèi)inear,sigmoid,tanh,softmax等。Keras內(nèi)置提供了很全的激活函數(shù),包括像LeakyReLU和PReLU這種比較新的激活函數(shù)。
一、激活函數(shù)的使用
常用的方法在Activation層中可以找到??创a
from keras.layers.core import Activation, Dense
model.add(Dense(64))
model.add(Activation('tanh'))
等價(jià)于:
model.add(Dense(64, activation='tanh')) #此處’tanh’是一個(gè)字符串
我們也可以將一個(gè)Theano function作為激活函數(shù)傳遞給activation,如下:
def tanh(x):
return theano.tensor.tanh(x)
model.add(Dense(64, activation=tanh)) #此處tanh是函數(shù)
model.add(Activation(tanh))
二、常用的激活函數(shù)
- softmax: 在多分類中常用的激活函數(shù),是基于邏輯回歸的。
- Softplus:softplus(x)=log(1+e^x),近似生物神經(jīng)激活函數(shù),最近出現(xiàn)的。
- Relu:近似生物神經(jīng)激活函數(shù),最近出現(xiàn)的。
- tanh:雙曲正切激活函數(shù),也是很常用的。
- sigmoid:S型曲線激活函數(shù),最常用的。
- hard_sigmoid:基于S型激活函數(shù)。
- linear:線性激活函數(shù),最簡(jiǎn)單的。
2001年,神經(jīng)科學(xué)家Dayan、Abott從生物學(xué)角度,模擬出了腦神經(jīng)元接受信號(hào)更精確的激活模型。模型圖如下:

image.png
該模型的曲線變化特點(diǎn)有:?jiǎn)蝹?cè)抑制,相對(duì)寬闊的興奮邊界,稀疏激活性(這個(gè)是重點(diǎn),紅框中的狀態(tài)完全沒有激活)。

image.png
其中softplus和relu就是近似生物神經(jīng)激活函數(shù),圖像如上圖。Softplus具有新模型的前兩點(diǎn),卻沒有稀疏激活性。因而,校正函數(shù)max(0,x)成了近似符合該模型的最大贏家。
雖然稀疏性有很多優(yōu)勢(shì)。但是,過分的強(qiáng)制稀疏處理,會(huì)減少模型的有效容量。即特征屏蔽太多,導(dǎo)致模型無(wú)法學(xué)習(xí)到有效特征。對(duì)比大腦工作的95%稀疏性來看,現(xiàn)有的計(jì)算神經(jīng)網(wǎng)絡(luò)和生物神經(jīng)網(wǎng)絡(luò)還是有很大差距的。然而ReLu只有負(fù)值(如上圖)才會(huì)被稀疏掉,即引入的稀疏性是可以訓(xùn)練調(diào)節(jié)的,是動(dòng)態(tài)變化的。只要進(jìn)行梯度訓(xùn)練,網(wǎng)絡(luò)可以向誤差減少的方向,自動(dòng)調(diào)控稀疏比率,保證激活鏈上存在著合理數(shù)量的非零值?!颈静糠终?a target="_blank" rel="nofollow">ReLu(Rectified Linear Units)激活函數(shù)】
三、復(fù)雜的激活函數(shù)
更復(fù)雜的激活函數(shù),可以在keras.layers.advanced_activations中找到。就是開始提到的PReLU和LeakyReLU。這兩個(gè)函數(shù)都是在ReLU的基礎(chǔ)之上進(jìn)行改進(jìn)的。從相關(guān)實(shí)驗(yàn)來看,這些函數(shù)具有更好的準(zhǔn)確度,但是訓(xùn)練時(shí)間需要更長(zhǎng),因?yàn)橛?jì)算更復(fù)雜。