如下圖,在神經(jīng)元中,輸入的 inputs 通過加權(quán),求和后,還被作用了一個函數(shù),這個函數(shù)就是激活函數(shù) Activation Function。
如果不用激勵函數(shù),每一層輸出都是上層輸入的線性函數(shù),無論神經(jīng)網(wǎng)絡(luò)有多少層,輸出都是輸入的線性組合。
如果使用的話,激活函數(shù)給神經(jīng)元引入了非線性因素,使得神經(jīng)網(wǎng)絡(luò)可以任意逼近任何非線性函數(shù),這樣神經(jīng)網(wǎng)絡(luò)就可以應(yīng)用到眾多的非線性模型中。
每個激活函數(shù)的輸入都是一個數(shù)字,然后對其進(jìn)行某種固定的數(shù)學(xué)操作。激活函數(shù)給神經(jīng)元引入了非線性因素,如果不用激活函數(shù)的話,無論神經(jīng)網(wǎng)絡(luò)有多少層,輸出都是輸入的線性組合。
激活函數(shù)的發(fā)展經(jīng)歷了Sigmoid -> Tanh -> ReLU -> Leaky ReLU -> Maxout這樣的過程,還有一個特殊的激活函數(shù)Softmax,因為它只會被用在網(wǎng)絡(luò)中的最后一層,用來進(jìn)行最后的分類和歸一化。本文簡單來梳理這些激活函數(shù)是如何一步一步演變而來的。
總結(jié)如下:
sigmoid非線性函數(shù)的數(shù)學(xué)公式是
函數(shù)圖像如下圖所示。它輸入實數(shù)值并將其“擠壓”到0到1范圍內(nèi),適合輸出為概率的情況,但是現(xiàn)在已經(jīng)很少有人在構(gòu)建神經(jīng)網(wǎng)絡(luò)的過程中使用sigmoid。
存在問題:
數(shù)學(xué)公式:
Tanh非線性函數(shù)的數(shù)學(xué)公式是
Tanh非線性函數(shù)圖像如下圖所示,它將實數(shù)值壓縮到[-1,1]之間。
存在問題:
Tanh解決了Sigmoid的輸出是不是零中心的問題,但仍然存在飽和問題。
為了防止飽和,現(xiàn)在主流的做法會在激活函數(shù)前多做一步batch normalization,盡可能保證每一層網(wǎng)絡(luò)的輸入具有均值較小的、零中心的分布。
數(shù)學(xué)公式:
ReLU非線性函數(shù)圖像如下圖所示。相較于sigmoid和tanh函數(shù),ReLU對于隨機梯度下降的收斂有巨大的加速作用;sigmoid和tanh在求導(dǎo)時含有指數(shù)運算,而ReLU求導(dǎo)幾乎不存在任何計算量。
對比sigmoid類函數(shù)主要變化是:
1)單側(cè)抑制;
2)相對寬闊的興奮邊界;
3)稀疏激活性。
存在問題:
ReLU單元比較脆弱并且可能“死掉”,而且是不可逆的,因此導(dǎo)致了數(shù)據(jù)多樣化的丟失。通過合理設(shè)置學(xué)習(xí)率,會降低神經(jīng)元“死掉”的概率。
數(shù)學(xué)公式:
函數(shù)公式是
其中 e是很小的負(fù)數(shù)梯度值,比如0.01,Leaky ReLU非線性函數(shù)圖像如下圖所示。這樣做目的是使負(fù)軸信息不會全部丟失,解決了ReLU神經(jīng)元“死掉”的問題。更進(jìn)一步的方法是PReLU,即把 e當(dāng)做每個神經(jīng)元中的一個參數(shù),是可以通過梯度下降求解的。
Maxout出現(xiàn)在ICML2013上,作者Goodfellow將maxout和dropout結(jié)合后,號稱在MNIST, CIFAR-10, CIFAR-100, SVHN這4個數(shù)據(jù)上都取得了start-of-art的識別率。
數(shù)學(xué)公式:
f i (x)=m ax j ∈[1 ,k] z i j
假設(shè) w 是2維,那么有:
Maxout是對ReLU和leaky ReLU的一般化歸納,可以注意到,ReLU 和 Leaky ReLU 都是它的一個變形(比如, w 1 ,b 1 =0 的時候,就是 ReLU).
Maxout的擬合能力是非常強的,它可以擬合任意的的凸函數(shù)。作者從數(shù)學(xué)的角度上也證明了這個結(jié)論,即只需2個maxout節(jié)點就可以擬合任意的凸函數(shù)了(相減),前提是”隱含層”節(jié)點的個數(shù)可以任意多.
所以,Maxout 具有 ReLU 的優(yōu)點(如:計算簡單,不會 saturation),同時又沒有 ReLU 的一些缺點 (如:容易 go die)。不過呢,還是有一些缺點的嘛:就是把參數(shù)double了。
數(shù)學(xué)公式:
Softmax用于多分類神經(jīng)網(wǎng)絡(luò)輸出,目的是讓大的更大。函數(shù)公式是
示意圖如下。
Softmax是Sigmoid的擴展,當(dāng)類別數(shù)k=2時,Softmax回歸退化為Logistic回歸。
還有其他一些激活函數(shù),請看下表:
如果你使用 ReLU,那么一定要小心設(shè)置 learning rate,而且要注意不要讓你的網(wǎng)絡(luò)出現(xiàn)很多 “dead” 神經(jīng)元,如果這個問題不好解決,那么可以試試 Leaky ReLU、PReLU 或者 Maxout.
還有,通常來說,很少會把各種激活函數(shù)串起來在一個網(wǎng)絡(luò)中使用的。
參考資料:
https://zhuanlan.zhihu.com/p/32610035
https://juejin.im/entry/5a2a3a786fb9a044fa19c5e9