激活函数(activation function)的种类与应用
激活函數(shù)在邏輯回歸、感知機(jī)、神經(jīng)網(wǎng)絡(luò)系列模型中有著重要的作用,是神經(jīng)網(wǎng)絡(luò)最重要的組成成分之一。如果把神經(jīng)網(wǎng)絡(luò)模型比作一臺機(jī)器,那么激活函數(shù)就起著類似信號處理器的作用,把輸入的數(shù)據(jù)進(jìn)行處理然后準(zhǔn)備輸出。
在一般的神經(jīng)網(wǎng)絡(luò)中,激活函數(shù)負(fù)責(zé)把上一層輸出的數(shù)據(jù)(一般是向量或矩陣)計算后的結(jié)果進(jìn)行處理,得到新的一組數(shù)(即新的輸出),對應(yīng)就是下面藍(lán)色與紅色之間的直箭頭部分。
?
?例如,對與上面的三層神經(jīng)元(一般會把藍(lán)色和紅色合并成一個節(jié)點,這里兔兔為了展示方便,畫成兩個圓)。我們以中間層為例。中間的左半部分三個藍(lán)色是上一層計算得到的結(jié)果,每一個圓代表一個數(shù),所以這一層左半部分的三個數(shù)可以用向量表示,即。紅藍(lán)之間的激活函數(shù)為,那么經(jīng)過激活函數(shù)處理后得到的右邊紅色部分就是, 對應(yīng)右邊三個圓。
?一般在深度神經(jīng)網(wǎng)絡(luò)中把紅色和藍(lán)色是合并成一個節(jié)點,激活函數(shù)在層內(nèi)進(jìn)行。
激活函數(shù)的作用,一方面是因為如果沒有激活函數(shù)的限制,數(shù)據(jù)逐層傳遞,最終數(shù)越來越大,類似爆炸一樣,所以需要激活函數(shù)每次把結(jié)果限制在一定范圍內(nèi);另一方面,激活函數(shù)起到類似神經(jīng)元的作用,負(fù)責(zé)信號(或數(shù)據(jù))的控制,來決定該神經(jīng)元是否激活,從而使得模型學(xué)習(xí)效果更好。所以對于一個神經(jīng)網(wǎng)絡(luò),選取合適的激活函數(shù)是十分重要的。
常見激活函數(shù)種類
(1)sigmoid激活函數(shù)
sigmoid函數(shù)形式為:
其導(dǎo)數(shù)為:
函數(shù)圖像如下:
?sigmoid函數(shù)在神經(jīng)網(wǎng)絡(luò)中十分常用,它的定義域是R,輸出在0~1之間,所以可以將預(yù)測概率作為輸出模型;而且函數(shù)梯度平滑,避免跳躍的輸出值;函數(shù)可微,能夠求導(dǎo);輸出限定在0~1,因此它對每個神經(jīng)元輸出做了歸一化。但是sigmoid函數(shù)缺點也比較明顯,例如:隨著神經(jīng)網(wǎng)絡(luò)層的增加,sigmoid 函數(shù)往往會導(dǎo)致梯度消失,此時模型效果就會不好;函數(shù)輸出不是以0為中心,會在訓(xùn)練中降低權(quán)重更新的效率;該函數(shù)執(zhí)行指數(shù)運算,計算機(jī)運行速度慢。
(2)Tanh(雙曲正切)激活函數(shù)
這個函數(shù)在高等數(shù)學(xué)中比較常見,形式是。在這里,我們把式子稍微處理一下,分子分母同時乘,再分離一下,就得到該激活函數(shù)的形式:
其導(dǎo)數(shù)為:
其函數(shù)圖像如下:
?Tanh函數(shù)與sigmoid函數(shù)很像,定義域也是R,但是它是以0為中心的,輸出間隔為1,所以比sigmoid函數(shù)更具優(yōu)勢。但是當(dāng)輸入比較大或較小時,梯度很小,不利于權(quán)重的更新。在Tanh函數(shù)中,負(fù)數(shù)被強(qiáng)映射為負(fù)數(shù),而0輸入映射為0。在一般二元分類問題中,Tanh函數(shù)通常用于隱藏層中,sigmoid用于輸出層中,有時也需要具體問題具體分析。
(3)ReLU激活函數(shù)
該函數(shù)是一個分段函數(shù),當(dāng)x大于等于0時函數(shù)為,小于0時函數(shù)為。所以該激活函數(shù)形式為:
該函數(shù)的導(dǎo)數(shù)為:
其函數(shù)圖像如下:
?該函數(shù)在深度學(xué)習(xí)中應(yīng)用比較廣泛,目前較為流行,其優(yōu)點為:輸入為正數(shù)時,沒有梯度飽和的情況,而且與前兩個函數(shù)相比,該函數(shù)計算速度很快。但其缺點也比較明顯:它是輸出為0或正數(shù),不是以0為中心的函數(shù),就會出現(xiàn)和sigmoid 函數(shù)同樣的問題;而且當(dāng)輸入為負(fù)數(shù)時,梯度變成了0,這個問題也稱為Dead ReLU問題,在神經(jīng)網(wǎng)絡(luò)正向傳播中該問題沒有任何影響,但是在反向傳播修正參數(shù)時,如果輸入是負(fù)數(shù),那么梯度為0,也就無法修正參數(shù)了。
(4)Leaky ReLU激活函數(shù)
針對上面的Dead ReLU問題,應(yīng)用Leaky ReLU便可以解決。Leaky ReLU函數(shù)是一種專門設(shè)計用于解決?Dead ReLU問題的一種激活函數(shù)。
該函數(shù)的形式為:
該函數(shù)的導(dǎo)數(shù)為:
其中a通常大于0小于1,函數(shù)圖像如下:
?這里兔兔是讓a=0.2得到的圖像,實際應(yīng)用a通常為0.01作用。
由于該函數(shù)在小于0的情況下也有梯度,為a,所以解決了Dead ReLU問題。雖然從理論上來說,Leak ReLU函數(shù)具有ReLU所有優(yōu)點,也不會出現(xiàn)Dead ReLU問題,但是實際應(yīng)用中,我們并沒有完全發(fā)現(xiàn)Leaky ReLU比ReLU效果更好。
(5)ELU激活函數(shù)
ELU激活函數(shù)也 解決了ReLU問題,該函數(shù)形式為:
該函數(shù)的導(dǎo)數(shù)為:
函數(shù)圖像為:
該函數(shù)具有很多的優(yōu)點:ELU函數(shù)有負(fù)值,會使激活的平均值接近0,其梯度更接近自然梯度,從而可以使學(xué)習(xí)更快;而且該函數(shù)以0 為中心,輸出平均值接近0;ELU在較小的輸入下會飽和至負(fù)值,從而減少前向傳播的變異信息。
(6)PReLU(Parametric ReLU)激活函數(shù)
該函數(shù)也是對ReLU的一種改進(jìn),函數(shù)形式為:
函數(shù)導(dǎo)數(shù)為:
該函數(shù)圖像與Leaky ReLU圖像相同。
雖然PReLU在形式上與Leaky ReLU很像,當(dāng)alpha在0~1之間就是Leaky ReLU函數(shù),α=0時就變成了ReLU,但是該函數(shù)與前兩者有本質(zhì)區(qū)別:這里的alpha是未知的,是在模型訓(xùn)練中(如梯度下降)的過程中訓(xùn)練學(xué)習(xí)得到的參數(shù),也就是說在模型訓(xùn)練過程中還要求函數(shù)對α的偏導(dǎo)。所以在PReLU中,α是可學(xué)習(xí)參數(shù)。
(7)softmax激活函數(shù)
softmax激活函數(shù)常用于多分類問題,例如用邏輯回歸進(jìn)行多分類,或是深度神經(jīng)網(wǎng)絡(luò)用于多分類問題等。該函數(shù)與前面的不同,它是一個多元函數(shù),自變量為n個,輸出也有n個,該函數(shù)的形式為:
這里x為列向量,xi表示第i個自變量。,。所以softmax也可以表示如下:
該函數(shù)的導(dǎo)數(shù)為:
或者表示為:
其中表示哈達(dá)瑪積,為矩陣或向量對應(yīng)位置元素相乘,符號也可以用表示。導(dǎo)數(shù)推導(dǎo)過程可以用上面右側(cè)向量中每一個對xi求偏導(dǎo),求導(dǎo)結(jié)果放在對應(yīng)的向量第i行,最終整理簡化就是上面的結(jié)果。
兔兔以2個自變量為例,圖像如下圖所示:
?自變量x1,x2對應(yīng)x軸、y軸,z1,z2對應(yīng)兩個曲面,softmax函數(shù)得到的所有值的和為1。
softmax函數(shù)分母結(jié)合了原始輸出值的所有因子,所有softmax函數(shù)獲得的各種概率值是彼此相關(guān)的。softmax的缺點為:負(fù)輸入的梯度為0,這樣就會出現(xiàn)在反向傳播中權(quán)重不會更新,也就是產(chǎn)生永不激活的死亡神經(jīng)元,類似于ReLU的Dead ReLU問題。
(8)Swish激活函數(shù)
該函數(shù)的形式為:
該函數(shù)的導(dǎo)數(shù)為:
函數(shù)圖像為:
?Swish函數(shù)設(shè)計受LSTM和高速網(wǎng)絡(luò)中g(shù)ating的sigmoid函數(shù)的啟發(fā),該函數(shù)優(yōu)點為:無界性,有助于防止慢速訓(xùn)練期間梯度接近0并導(dǎo)致飽和;函數(shù)的平滑度在優(yōu)化和泛化中起到重要作用。
(9)softplus激活函數(shù)
該函數(shù)的形式為:
函數(shù)導(dǎo)數(shù)為:
函數(shù)圖像為:
?該函數(shù)類似于ReLU,但是比較平滑,與ReLU一樣有單側(cè)抑制。
(10)Step Function激活函數(shù)
這個就是高數(shù)中常見的階躍函數(shù),該函數(shù)形式為:
導(dǎo)數(shù)始終是0。
圖像如下所示:
?由于該函數(shù)導(dǎo)數(shù)是0,所以在反向傳遞中很不利于參數(shù)更新。
(11)softsign激活函數(shù)
該函數(shù)的形式為:
函數(shù)導(dǎo)數(shù)為:
函數(shù)圖像如下:
?(12)Log of sigmoid 激活函數(shù)
該函數(shù)的形式為:
即sigmoid 函數(shù)的對數(shù)。導(dǎo)數(shù)為:
函數(shù)圖像如下:
?(13)sinc激活函數(shù)
該激活函數(shù)形式為:
導(dǎo)數(shù)為:
函數(shù)圖像:
?(14)Mish激活函數(shù)
該激活函數(shù)的形式為:
函數(shù)導(dǎo)數(shù)為:
函數(shù)圖像為:
?(15)Maxout激活函數(shù)
關(guān)于Maxout函數(shù),其實是比較特殊的。前面的所有激活函數(shù)都是在神經(jīng)元層內(nèi)進(jìn)行,并且激活函數(shù)處理前后數(shù)的個數(shù)的不變的,就像文章前面圖畫的那樣,紅色與藍(lán)色個數(shù)是相同的。而Maxout函數(shù)是改變了處理前后的數(shù)的個數(shù),其原因是在神經(jīng)元層內(nèi)又加了一層神經(jīng)元,如果原來的神經(jīng)元是隱層,那么Maxout函數(shù)就是在這個隱層中加入隱隱藏層。所以更準(zhǔn)確來說,Maxout更像是神經(jīng)元的一種連接方式,如全連接、卷積、池化等,但是又有著激活函數(shù)的特點,有點兒介于神經(jīng)元連接方式與激活函數(shù)之間,所以兔兔之后會把Maxout激活函數(shù)作為一種連接方式單獨講解。
其它激活函數(shù)
激活函數(shù)的種類是非常多的,上面的15種是比較常用的,其它的激活函數(shù)還有SELU、Tanhshrink、Hardshrink、Softshrink、E-Swish、Hardtanh、GELU、CELU、ReLU6、Aria-2、RReLU、SQNL、Bent's Identity、Hard ELish、Soft Clipping、LeCun's Tanh、SineReLU、Flatten T-Swish、ISRU、Weighted Tanh、ELish、ISRLU、SReLU、Hard Sigmoid、Threshold ReLU......感興趣的同學(xué)可以進(jìn)一步拓展,搜索更多的激活函數(shù)種類與形式,并能夠根據(jù)激活函數(shù)推導(dǎo)出導(dǎo)數(shù)。
應(yīng)用方法
如果要真正了解這些激活函數(shù)的使用,是需要搭建具體的神經(jīng)網(wǎng)絡(luò)模型的,這樣才能夠體會不同激活函數(shù)的使用的。在這里兔兔僅僅大概介紹一下使用方法。
前面講到了,Maxout激活函數(shù)比較特殊,需要單獨講解。其它的14種中只有softmax激活函數(shù)比較特殊: 除了softmax函數(shù),其它函數(shù)都是一元函數(shù),即輸入是1個,輸出是1個,而對于某一層的n個神經(jīng)元,激活函數(shù)為f(x),那么激活函數(shù)的計算過程為:
一般的激活函數(shù)都是按照上面的過程來進(jìn)行計算,而且x1,x2...xn之間沒有什么關(guān)聯(lián)。對于softmax函數(shù)則不同,它的計算綜合了x1到xn各個值,計算過程為:
以上兩種情況雖然有些區(qū)別,但都是在每一層內(nèi)操作。在畫神經(jīng)網(wǎng)絡(luò)圖時我們通常會把左半部分向量和右半部分向量拼接合并,即表示為:
?一個圓代表一個神經(jīng)元節(jié)點,也就是一個數(shù),一個層由n個神經(jīng)元組成,也就是一個n維向量。
總結(jié)
激活函數(shù)作為神經(jīng)網(wǎng)絡(luò)的關(guān)鍵組成部分,其重要作用不言而喻。選好激活函數(shù)對模型效果的好壞也有很大的影響,而這些都需要在具體應(yīng)用中慢慢體會。
總結(jié)
以上是生活随笔為你收集整理的激活函数(activation function)的种类与应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 玻璃化转变
- 下一篇: zlib库介绍四:zlib算法(LZ77