最近在reddit上刷到一張非常形象mó xìng的圖。圖形表達的是深度學習中常用的激活函數(shù)。
那就讓我們來整理一下深度學習中離不開的激活函數(shù)!
激活函數(shù)
激活函數(shù)(Activation Function)是一種添加到人工神經(jīng)網(wǎng)絡中的函數(shù),旨在幫助網(wǎng)絡學習數(shù)據(jù)中的復雜模式。類似于人類大腦中基于神經(jīng)元的模型,激活函數(shù)最終決定了要發(fā)射給下一個神經(jīng)元的內(nèi)容。
在人工神經(jīng)網(wǎng)絡中,一個節(jié)點的激活函數(shù)定義了該節(jié)點在給定的輸入或輸入集合下的輸出。標準的計算機芯片電路可以看作是根據(jù)輸入得到開(1)或關(guān)(0)輸出的數(shù)字電路激活函數(shù)。因此,激活函數(shù)是確定神經(jīng)網(wǎng)絡輸出的數(shù)學方程式,本文概述了深度學習中常見的十種激活函數(shù)及其優(yōu)缺點。
首先我們來了解一下人工神經(jīng)元的工作原理,大致如下:
上述過程的數(shù)學可視化過程如下圖所示:
Sigmoid激活函數(shù)
Sigmoid函數(shù)的圖像看起來像一個S形曲線。函數(shù)表達式如下:
在什么情況下適合使用Sigmoid激活函數(shù)呢?
Sigmoid函數(shù)的輸出范圍是0到1。由于輸出值限定在0到1,因此它對每個神經(jīng)元的輸出進行了歸一化;
用于將預測概率作為輸出的模型。由于概率的取值范圍是0到1,因此Sigmoid函數(shù)非常合適;
梯度平滑,避免「跳躍」的輸出值;
函數(shù)是可微的。這意味著可以找到任意兩個點的sigmoid曲線的斜率;
明確的預測,即非常接近1或0。
Sigmoid激活函數(shù)有哪些缺點?
傾向于梯度消失;
函數(shù)輸出不是以0為中心的,這會降低權(quán)重更新的效率;
Sigmoid函數(shù)執(zhí)行指數(shù)運算,計算機運行得較慢。
Tanh/雙曲正切激活函數(shù)
tanh激活函數(shù)的圖像也是S形,表達式如下:
tanh是一個雙曲正切函數(shù)。tanh函數(shù)和sigmoid函數(shù)的曲線相對相似。但是它比sigmoid函數(shù)更有一些優(yōu)勢。
首先,當輸入較大或較小時,輸出幾乎是平滑的并且梯度較小,這不利于權(quán)重更新。二者的區(qū)別在于輸出間隔,tanh的輸出間隔為1,并且整個函數(shù)以0為中心,比sigmoid函數(shù)更好;
在tanh圖中,負輸入將被強映射為負,而零輸入被映射為接近零。
注意:在一般的二元分類問題中,tanh函數(shù)用于隱藏層,而sigmoid函數(shù)用于輸出層,但這并不是固定的,需要根據(jù)特定問題進行調(diào)整。
ReLU激活函數(shù)
ReLU激活函數(shù)圖像如上圖所示,函數(shù)表達式如下:
ReLU函數(shù)是深度學習中較為流行的一種激活函數(shù),相比于sigmoid函數(shù)和tanh函數(shù),它具有如下優(yōu)點:
當輸入為正時,不存在梯度飽和問題。
計算速度快得多。ReLU函數(shù)中只存在線性關(guān)系,因此它的計算速度比sigmoid和tanh更快。
當然,它也有缺點:
Dead ReLU問題。當輸入為負時,ReLU完全失效,在正向傳播過程中,這不是問題。有些區(qū)域很敏感,有些則不敏感。但是在反向傳播過程中,如果輸入負數(shù),則梯度將完全為零,sigmoid函數(shù)和tanh函數(shù)也具有相同的問題;
我們發(fā)現(xiàn)ReLU函數(shù)的輸出為0或正數(shù),這意味著ReLU函數(shù)不是以0為中心的函數(shù)。
Leaky ReLU
它是一種專門設計用于解決Dead ReLU問題的激活函數(shù):
ReLU vs Leaky ReLU
為什么Leaky ReLU比ReLU更好?
Leaky ReLU通過把x的非常小的線性分量給予負輸入(0.01x)來調(diào)整負值的零梯度(zero gradients)問題;
leak有助于擴大ReLU函數(shù)的范圍,通常a的值為0.01左右;
Leaky ReLU的函數(shù)范圍是(負無窮到正無窮)。
注意:從理論上講,Leaky ReLU具有ReLU的所有優(yōu)點,而且Dead ReLU不會有任何問題,但在實際操作中,尚未完全證明Leaky ReLU總是比ReLU更好。
ELU
ELU vs Leaky ReLU vs ReLU
ELU的提出也解決了ReLU的問題。與ReLU相比,ELU有負值,這會使激活的平均值接近零。均值激活接近于零可以使學習更快,因為它們使梯度更接近自然梯度。
顯然,ELU具有ReLU的所有優(yōu)點,并且:
沒有Dead ReLU問題,輸出的平均值接近0,以0為中心;
ELU通過減少偏置偏移的影響,使正常梯度更接近于單位自然梯度,從而使均值向零加速學習;
ELU在較小的輸入下會飽和至負值,從而減少前向傳播的變異和信息。
一個小問題是它的計算強度更高。與Leaky ReLU類似,盡管理論上比ReLU要好,但目前在實踐中沒有充分的證據(jù)表明ELU總是比ReLU好。
PReLU(Parametric ReLU)
PReLU也是ReLU的改進版本:
看一下PReLU的公式:參數(shù)α通常為0到1之間的數(shù)字,并且通常相對較小。
如果a_i=0,則f變?yōu)镽eLU
如果a_i>0,則f變?yōu)閘eaky ReLU
如果a_i是可學習的參數(shù),則f變?yōu)镻ReLU
PReLU的優(yōu)點如下:
在負值域,PReLU的斜率較小,這也可以避免Dead ReLU問題。
與ELU相比,PReLU在負值域是線性運算。盡管斜率很小,但不會趨于0。
Softmax
Softmax是用于多類分類問題的激活函數(shù),在多類分類問題中,超過兩個類標簽則需要類成員關(guān)系。對于長度為K的任意實向量,Softmax可以將其壓縮為長度為K,值在(0,1)范圍內(nèi),并且向量中元素的總和為1的實向量。
Softmax與正常的max函數(shù)不同:max函數(shù)僅輸出最大值,但Softmax確保較小的值具有較小的概率,并且不會直接丟棄。我們可以認為它是argmax函數(shù)的概率版本或「soft」版本。
Softmax函數(shù)的分母結(jié)合了原始輸出值的所有因子,這意味著Softmax函數(shù)獲得的各種概率彼此相關(guān)。
Softmax激活函數(shù)的主要缺點是:
在零點不可微;
負輸入的梯度為零,這意味著對于該區(qū)域的激活,權(quán)重不會在反向傳播期間更新,因此會產(chǎn)生永不激活的死亡神經(jīng)元。
Swish
函數(shù)表達式:
Swish的設計受到了LSTM和高速網(wǎng)絡中g(shù)ating的sigmoid函數(shù)使用的啟發(fā)。我們使用相同的gating值來簡化gating機制,這稱為self-gating。
self-gating的優(yōu)點在于它只需要簡單的標量輸入,而普通的gating則需要多個標量輸入。這使得諸如Swish之類的self-gated激活函數(shù)能夠輕松替換以單個標量為輸入的激活函數(shù)(例如ReLU),而無需更改隱藏容量或參數(shù)數(shù)量。
Swish激活函數(shù)的主要優(yōu)點如下:
「無界性」有助于防止慢速訓練期間,梯度逐漸接近0并導致飽和;(同時,有界性也是有優(yōu)勢的,因為有界激活函數(shù)可以具有很強的正則化,并且較大的負輸入問題也能解決);
導數(shù)恒>0;
平滑度在優(yōu)化和泛化中起了重要作用。
Maxout
在Maxout層,激活函數(shù)是輸入的最大值,因此只有2個maxout節(jié)點的多層感知機就可以擬合任意的凸函數(shù)。
單個Maxout節(jié)點可以解釋為對一個實值函數(shù)進行分段線性近似(PWL),其中函數(shù)圖上任意兩點之間的線段位于圖(凸函數(shù))的上方。
Maxout也可以對d維向量(V)實現(xiàn):
假設兩個凸函數(shù)h_1(x)和h_2(x),由兩個Maxout節(jié)點近似化,函數(shù)g(x)是連續(xù)的PWL函數(shù)。
因此,由兩個Maxout節(jié)點組成的Maxout層可以很好地近似任何連續(xù)函數(shù)。
Softplus
Softplus函數(shù):
Softplus的導數(shù)為:
也稱為logistic/sigmoid函數(shù)。
Softplus函數(shù)類似于ReLU函數(shù),但是相對較平滑,像ReLU一樣是單側(cè)抑制。它的接受范圍很廣:(0,+inf)。