從Sigmoid到GELU,一文概覽神經(jīng)網(wǎng)絡(luò)激活函數(shù)

你好,我是Giant。
神經(jīng)網(wǎng)絡(luò)得益于強(qiáng)大的非線性擬合能力,可以自動(dòng)完成特征提取工作,在NLP、CV、ASR、推薦、搜索等領(lǐng)域發(fā)揮了廣泛的應(yīng)用。

這里的擬合能力,主要來自于非線性激活函數(shù)。
最近我總結(jié)了7個(gè)深度學(xué)習(xí)訓(xùn)練中常用的激活函數(shù),并對它們的特點(diǎn)和優(yōu)劣做了整理。激活函數(shù)也是算法面試中??贾黝},建議同學(xué)們提前收藏備需!
sigmoid 是最基礎(chǔ)的激活函數(shù),可以將任意數(shù)值轉(zhuǎn)換為概率(縮放到0~1之間),在分類等場景中有廣泛的應(yīng)用。

sigmoid的公式也非常簡潔優(yōu)雅:

主要優(yōu)點(diǎn):
函數(shù)的映射范圍是 0 到 1,對每個(gè)神經(jīng)元的輸出進(jìn)行了歸一化
梯度平滑,避免「跳躍」的輸出值
函數(shù)是可微的,意味著可以找到任意兩個(gè)點(diǎn)的 sigmoid 曲線的斜率
預(yù)測結(jié)果明確,即非常接近 1 或 0
缺點(diǎn):
傾向于梯度消失
函數(shù)輸出不是以 0 為中心的,會(huì)降低權(quán)重更新的效率
Sigmoid 函數(shù)執(zhí)行指數(shù)運(yùn)算,計(jì)算機(jī)運(yùn)行得較慢
激活函數(shù)Tanh和sigmoid類似,都是 S 形曲線,輸出范圍是[-1, 1]。
在一般的二元分類問題中,tanh 函數(shù)常用于隱藏層,sigmoid 用于輸出層,但這并不是固定的,需要根據(jù)特定問題進(jìn)行調(diào)整。


相比sigmoid,tanh的優(yōu)勢在于:
tanh 的輸出間隔為 1,并且整個(gè)函數(shù)以 0 為中心,比 sigmoid 函數(shù)更好 在負(fù)輸入將被強(qiáng)映射為負(fù),而零輸入被映射為接近零。
缺點(diǎn):
當(dāng)輸入較大或較小時(shí),輸出幾乎是平滑的并且梯度較小,這不利于權(quán)重更新 依然存在指數(shù)計(jì)算量大的問題
3.Relu?整流線性單元
Relu也是深度學(xué)習(xí)中非常流行的激活函數(shù),近兩年大火的Transformer模塊由Attention和前饋神經(jīng)網(wǎng)絡(luò)FFN組成,其中FFN(即全連接)又有兩層,第一層的激活函數(shù)就是ReLU,第二層是一個(gè)線性激活函數(shù)。


相比sigmoid和tanh,它具有以下優(yōu)點(diǎn):
當(dāng)輸入為正時(shí),不存在梯度飽和問題 計(jì)算復(fù)雜度低。ReLU 函數(shù)只存在線性關(guān)系,一個(gè)閾值就可以得到激活值 單側(cè)抑制,可以對神經(jīng)元進(jìn)行篩選,讓模型訓(xùn)練更加魯棒
當(dāng)然它也存在缺點(diǎn):
dead relu 問題(神經(jīng)元壞死現(xiàn)象)。relu在訓(xùn)練的時(shí)很“脆弱”。在x<0時(shí),梯度為0,這個(gè)神經(jīng)元及之后的神經(jīng)元梯度永遠(yuǎn)為0,不再對任何數(shù)據(jù)有所響應(yīng),導(dǎo)致相應(yīng)參數(shù)永遠(yuǎn)不會(huì)被更新 解決方法:采用Xavier初始化方法,以及避免將learning rate設(shè)置太大或使用adagrad等自動(dòng)調(diào)節(jié)learning rate的算法。 輸出不是 0 均值
為了解決dead relu問題,Leaky relu用一個(gè)類似0.01的小值來初始化神經(jīng)元,從而使得relu在負(fù)數(shù)區(qū)域更偏向于激活而不是壞死,這里的斜率都是確定的。

從理論上講,Leaky ReLU 具有 ReLU 的所有優(yōu)點(diǎn),但在實(shí)際中尚未完全證明 Leaky ReLU 總是比 ReLU 更好。
ELU 的提出也解決了 ReLU 的問題。與 ReLU 相比,ELU 有負(fù)值,這會(huì)使激活的平均值接近零,讓模型學(xué)習(xí)得更快。


其中a不是固定的,是通過反向傳播學(xué)習(xí)出來的。ELU的一個(gè)小問題是需要exp計(jì)算,運(yùn)算量會(huì)更大一些。
6.GELU?高斯誤差線性單元
激活函數(shù)GELU的靈感來源于 relu 和 dropout,在激活中引入了隨機(jī)正則的思想。gelu通過輸入自身的概率分布情況,決定拋棄還是保留當(dāng)前的神經(jīng)元。


可以理解為,對于輸入的值,根據(jù)它的情況乘上 1 或 0。更「數(shù)學(xué)」一點(diǎn)的描述是,對于每一個(gè)輸入 x,其服從于標(biāo)準(zhǔn)正態(tài)分布 N(0, 1),它會(huì)乘上一個(gè)伯努利分布 Bernoulli(Φ(x)),其中Φ(x) = P(X ≤ x)。
隨著 x 的降低,它被歸零的概率會(huì)升高。對于 ReLU 來說,這個(gè)界限就是 0,輸入少于零就會(huì)被歸零。這一類激活函數(shù),不僅保留了概率性,同時(shí)也保留了對輸入的依賴性。
gelu在最近的Transformer模型中(包括BERT,RoBertA和GPT2等)得到了廣泛的應(yīng)用。
似乎是 NLP 領(lǐng)域的當(dāng)前最佳;尤其在 Transformer 模型中表現(xiàn)最好 能避免梯度消失問題。
7.Maxout
激活函數(shù)本質(zhì)上可以作為一個(gè)激活層來使用,而maxout相對來說更靈活,直接將激活層的部分替換為一個(gè)新的隱層結(jié)構(gòu),簡單粗暴點(diǎn)說就是用一個(gè)隱層來作為激活函數(shù),而這個(gè)隱層的神經(jīng)元個(gè)數(shù)(maxout的參數(shù)k)可以人工指定。
比如指定參數(shù)k=5,maxout層就如下所示:

相當(dāng)于在每個(gè)輸出神經(jīng)元前面又多了一層。這一層有5個(gè)神經(jīng)元,此時(shí)maxout網(wǎng)絡(luò)的輸出計(jì)算公式為:

這就是為什么采用maxout的時(shí)候,參數(shù)個(gè)數(shù)成k倍增加的原因。本來只需要一組參數(shù)就夠了,采用maxout后,就需要有k組參數(shù)。
Maxout是通過分段線性函數(shù)來擬合所有可能的凸函數(shù)來作為激活函數(shù)的,但是由于線性函數(shù)是可學(xué)習(xí),所以實(shí)際上是可以學(xué)出來的激活函數(shù)。具體操作是對所有線性取最大,也就是把若干直線的交點(diǎn)作為分段的邊界,然后每一段取最大。

Maxout的擬合能力非常強(qiáng),可以擬合任意的凸函數(shù) 具有ReLU的所有優(yōu)點(diǎn),線性、不飽和性 不會(huì)出現(xiàn)神經(jīng)元壞死的現(xiàn)象。
缺點(diǎn):增加了參數(shù)量。顯然這計(jì)算量太大了。常規(guī)的激活函數(shù)就只是單純的函數(shù)而已,而maxout還需要反向傳播去更新它自身的權(quán)重系數(shù)。。
以上就是深度學(xué)習(xí)領(lǐng)域常用的非線性激活函數(shù),你都掌握了嗎?
https://www.jiqizhixin.com/articles/2021-02-24-7


