在學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)中,我們會常常碰到激活函數(shù)這個名詞。那么什么是激活函數(shù)?激活函數(shù)激活的是什么?在神經(jīng)網(wǎng)絡(luò)中,有什么用?
1. 激活函數(shù)的概念
- 首先激活函數(shù)并不是真正的激活什么,而是指如何把‘激活的神經(jīng)元的特征’通過函數(shù)把特征保留并映射出來,這是神經(jīng)網(wǎng)絡(luò)能解決非線性問題的關(guān)鍵。也就是,神經(jīng)網(wǎng)絡(luò)能夠加入影響模型結(jié)果的非線性因素,從而使得神經(jīng)網(wǎng)絡(luò)更好地解決復(fù)雜的問題。
1.1 激活函數(shù)在神經(jīng)網(wǎng)絡(luò)中,如何工作的
- 在神經(jīng)網(wǎng)絡(luò)中,對于某一個隱藏層的節(jié)點,該節(jié)點的激活值計算一般分為兩步:
- (1)輸入該節(jié)點的值為
時,在進入這個隱藏節(jié)點后,會先進行一個線性變換,計算出值
,其中上標(biāo)n表示第n層隱藏層。
- (2)再進行一個非線性變換,也就是經(jīng)過非線性激活函數(shù),計算出該節(jié)點的輸出值(激活值)
,其中h(x)為非線性函數(shù)。
2019062201.jpg
- (1)輸入該節(jié)點的值為
2.飽和,硬飽和,軟飽和
- 右飽和:當(dāng)一個激活函數(shù)
,滿足
時,我們稱之為右飽和。其實就是激活函數(shù)的導(dǎo)函數(shù),在趨于正無窮的時候,極限存在且等于0。
- 左飽和:當(dāng)一個激活函數(shù)
,滿足
時,我們稱之為左飽和。其實就是激活函數(shù)的導(dǎo)函數(shù),在趨于負無窮的時候,極限存在且等于0。
- 飽和:當(dāng)一個激活函數(shù),既滿足右飽和有滿足左飽和時,我們稱之為飽和。
- 右硬飽和:對于任意的x,如果存在常數(shù)c,當(dāng)
時恒有
;
- 左硬飽和:對于任意的x,如果存在常數(shù)c,當(dāng)
時恒有
;
- 硬飽和:若激活函數(shù)既滿足右硬飽和又滿足左硬飽和,我們稱這種激活函數(shù)為硬飽和;
- 軟飽和:只有在極限狀態(tài)下,激活函數(shù)的導(dǎo)數(shù)(偏導(dǎo)數(shù))等于0,我們稱之為軟飽和;
3. 梯度消失和梯度爆炸
- 深度學(xué)習(xí)會常常碰到一組名詞,梯度消失和梯度爆炸,什么是梯度消失和梯度爆炸呢,簡單的介紹一下。
- 梯度消失:在反向傳播的算法過程中,由于我們使用了是矩陣求導(dǎo)的鏈?zhǔn)椒▌t,有一大串連乘,如果連乘的數(shù)字在每層都是小于1的,則梯度越往前乘越小,導(dǎo)致梯度消失。梯度消失造成的結(jié)果是將導(dǎo)致靠近輸入層的參數(shù)幾乎不能被更新,靠近輸入層的layer預(yù)測結(jié)果不準(zhǔn)確,產(chǎn)生對整個后面的影響,最后無法訓(xùn)練。
- 梯度爆炸:如果連乘的數(shù)字在每層都是大于1的,則梯度越往前乘越大,導(dǎo)致梯度爆炸。對于梯度爆炸,則一般可以通過調(diào)整我們模型中的初始化參數(shù)得以解決。
4. 稀疏性的觀點
- Machine Learning中的顛覆性研究是稀疏特征,基于數(shù)據(jù)的稀疏特征研究上,派生了Deep Learning這一分支。稀疏性概念最早由Olshausen、Field在1997年對信號數(shù)據(jù)稀疏編碼的研究中引入,并最早在卷積神經(jīng)網(wǎng)絡(luò)中得以大施拳腳。近年來,稀疏性研究不僅在計算神經(jīng)科學(xué)、機器學(xué)習(xí)領(lǐng)域活躍,甚至信號處理、統(tǒng)計學(xué)也在借鑒。總結(jié)起來稀疏性大概有以下三方面的貢獻:
4.1 信息解離
- 當(dāng)前,深度學(xué)習(xí)一個明確的目標(biāo)是從數(shù)據(jù)變量中解離出關(guān)鍵因子(重要特征)。原始數(shù)據(jù)(以自然數(shù)據(jù)為主)中,通常纏繞著高度密集的特征。原因是這些特征向量是相互關(guān)聯(lián)的,一個小小的關(guān)鍵因子可能牽擾著一堆特征,有點像蝴蝶效應(yīng),牽一發(fā)而動全身。基于數(shù)學(xué)原理的傳統(tǒng)機器學(xué)習(xí)手段在解離這些關(guān)聯(lián)特征方面具有致命弱點。然而,如果能夠解開特征間纏繞的復(fù)雜關(guān)系,轉(zhuǎn)換為稀疏特征,那么特征就有了魯棒性(去掉了無關(guān)的噪聲)。
4.2 線性可分性
- 稀疏特征有更大可能線性可分,或者對非線性映射機制有更小的依賴。因為稀疏特征處于高維的特征空間上(被自動映射了)從流形學(xué)習(xí)觀點來看,稀疏特征被移到了一個較為純凈的低維流形面上。線性可分性亦可參照天然稀疏的文本型數(shù)據(jù),即便沒有隱層結(jié)構(gòu),仍然可以被分離的很好。
4.3 稠密分布但是稀疏
- 稠密纏繞分布著的特征是信息最富集的特征,從潛在性角度,往往比局部少數(shù)點攜帶的特征成倍的有效。而稀疏特征,正是從稠密纏繞區(qū)解離出來的,潛在價值巨大。
4.4 稀疏性激活函數(shù)的貢獻的作用:
- 不同的輸入可能包含著大小不同關(guān)鍵特征,使用大小可變的數(shù)據(jù)結(jié)構(gòu)去做容器,則更加靈活。假如神經(jīng)元激活具有稀疏性,那么不同激活路徑上:不同數(shù)量(選擇性不激活)、不同功能(分布式激活),兩種可優(yōu)化的結(jié)構(gòu)生成的激活路徑,可以更好地從有效的數(shù)據(jù)的維度上,學(xué)習(xí)到相對稀疏的特征,起到自動化解離效果。
- 稀疏性有很多優(yōu)勢。但是,過分的強制稀疏處理,會減少模型的有效容量。即特征屏蔽太多,導(dǎo)致模型無法學(xué)習(xí)到有效特征。論文中對稀疏性的引入度做了實驗,理想稀疏性(強制置0)比率是70%~85%。超過85%,網(wǎng)絡(luò)就容量就成了問題,導(dǎo)致錯誤率極高。
- 此處參考此博客
5.常用的激活函數(shù)
- 以多層感知機的網(wǎng)絡(luò)結(jié)構(gòu)為例,當(dāng)前層的梯度和三個方面相關(guān)。具體公式查看神經(jīng)網(wǎng)絡(luò)的原理。
- 第一方面是損失函數(shù);
- 第二方面是上一層的輸出值,
- 第三方面是當(dāng)前層的導(dǎo)函數(shù)值。
5.1 Sigmoid函數(shù)
Sigmoid 函數(shù)也稱為 S 曲線函數(shù),具有指數(shù)函數(shù)的形狀,在物理意義上最為接近生物神經(jīng)元,在生物學(xué)中也是常見的 S 型函數(shù),又稱之為 S 型生長曲線,因此也是神經(jīng)網(wǎng)絡(luò)中最常用的激活函數(shù)之一。該函數(shù)是將取值為
的數(shù)映射到
(開區(qū)間,不是閉區(qū)間) 之間。
Sigmoid函數(shù)的具體公式為:
Sigmoid導(dǎo)函數(shù)公式:
-
Sigmoid函數(shù)圖像: 2019062202.png
-
Sigmoid導(dǎo)函數(shù)圖像:2019062203.png
-
Sigmoid導(dǎo)函數(shù)定義域在[0,1]的圖像:2019062204.png
Sigmoid函數(shù)的表達式或圖像,將定義域為
的數(shù)映射到
,我們可以知道,只要是sigmoid作為該層的激活函數(shù),該層的輸出都是(0,1),從而導(dǎo)致,下一層再次經(jīng)過線性變化和非線性變換的輸出也是(0,1),特別說明,第一層的輸入是自己傳入的數(shù)據(jù)(不僅限于(0,1))。
Signoid導(dǎo)函數(shù)的表達式及圖像值知,其值閾為[0,0.25],定義域在(0,1)時,sigmoid的導(dǎo)函數(shù)時嚴(yán)格單調(diào)遞減的,
,
,其值在(0.196,0.250)區(qū)間內(nèi)。
此時我們知道了隱藏層的輸出值閾及導(dǎo)函數(shù)值閾,假定損失函數(shù)選擇均方誤差函數(shù),這就很簡單的估計出每一層的梯度值。在傳遞過程中,每傳遞一層梯度值都會減小為原來的0-0.25倍,如果神經(jīng)網(wǎng)絡(luò)隱層特別多,且每一隱藏層的激活函數(shù)都是sigmoid函數(shù),在第n層時,梯度值的上界為0.25^{n},當(dāng)n等于5時,
,那么梯度在穿過多層后將變得非常小接近于0,即出現(xiàn)梯度消失現(xiàn)象;
sigmoid 函數(shù)具有單調(diào)遞增及反函數(shù)單調(diào)遞增的性質(zhì),常被用作神經(jīng)網(wǎng)絡(luò)的閾值函數(shù),將其映射到
區(qū)間,一般來講,在訓(xùn)練神經(jīng)網(wǎng)絡(luò)過程中,對于求導(dǎo),連續(xù)求導(dǎo),處理二分類問題,一般使用sigmoid函數(shù),這是因為sigmoid函數(shù)可以很好的把實數(shù)域光滑地映射到
,函數(shù)值恰好的解釋預(yù)測為正類的概率。但是對于多分類問題,就比較麻煩,需要自己預(yù)處理一下,才能使用sigmoid函數(shù).
-
Sigmoid函數(shù)優(yōu)缺點
-
優(yōu)點:
- 函數(shù)具有單調(diào)遞增,連續(xù)可導(dǎo),輸出范圍有限(在(0,1)區(qū)間內(nèi)),優(yōu)化穩(wěn)定,可以用于輸出層(盡量不要使用在隱藏層);
- 函數(shù)及導(dǎo)函數(shù)形式簡單;
-
缺點:
- 由于該函數(shù)具有軟飽和性,容易產(chǎn)生梯度消失,導(dǎo)致訓(xùn)練出現(xiàn)問題。
- 其輸出大于0,因此輸出值不是以0為均值的。這稱為偏移現(xiàn)象,導(dǎo)致后一層的神經(jīng)元得到上一層輸出的非0均值的數(shù)據(jù)作為輸入,這將產(chǎn)生一個結(jié)果,每一層的線性映射部分,對參數(shù)求偏導(dǎo)的結(jié)果都為正(或者負),這樣在反向傳播時,要么往正方向更新,要么負方向更新,使得收斂速度慢。
- sigmoid函數(shù)及其導(dǎo)函數(shù)含有指數(shù),導(dǎo)致計算機運算的時間長,這也造成了收斂速度慢。
-
5.2 Tanh 函數(shù)
Tanh也是一種常見的激活函數(shù),它是sigmoid函數(shù)的變形。
Tanh函數(shù)的公式為:
Tanh導(dǎo)函數(shù)公式:
-
Tanh函數(shù)的圖像:2019062205.png
-
Tanh導(dǎo)函數(shù)的圖像:2019062207.png
tanh函數(shù)的表達式或圖像,我們能輕易知道tanh的值閾[-1,1],從而它解決了Sigmoid函數(shù)的不是0均值輸出問題。
tanh導(dǎo)函數(shù)的表達式或圖像,我們能夠知道其值閾為[0,1]。當(dāng)線性變換的結(jié)果大于3或者小于-3時,其導(dǎo)函數(shù)的值接近于0。
在梯度消失方面,tanh函數(shù)的缺點同sigmoid函數(shù)的缺點一樣,當(dāng)該層線性變換的結(jié)果很大或很小時,梯度接近于0,會導(dǎo)致梯度很小,權(quán)重更新非常緩慢,即梯度消失。
在定義域[-1,1]時,tanh導(dǎo)函數(shù)對應(yīng)的值閾為[0.42,1],上一小節(jié)的知識可知,sigmoid導(dǎo)函數(shù)的值閾為[0.196,0.250],從而tanh函數(shù)要比sigmoid函數(shù)收斂速度快。
但是梯度消失的問題和冪運算的問題仍然存在。梯度消失問題相對于sigmoid要有所緩解。
一般來說,Tanh函數(shù)在特征相差明顯時效果好,在傳遞過程中會不斷地擴大特征,效果就顯示出來了。如果特征相差不是很大,或者特征比較復(fù)雜的時,Tanh的效果就不好了。
-
Tanh函數(shù)的優(yōu)缺點:
- 優(yōu)點:
- Tanh函數(shù)輸出的均值為0,該角度導(dǎo)致收斂要比sigmoid函數(shù)快。
- 迭代次數(shù)較少
- 缺點:
- Tanh函數(shù)及其導(dǎo)函數(shù),同sigmoid函數(shù)一樣。含有指數(shù),導(dǎo)致計算機運算的時間長。
- 與sigmoid函數(shù)相同,具有軟飽和性,會產(chǎn)生梯度消失問題,但是改善一些。
- 優(yōu)點:
5.3 Relu 函數(shù)
- Relu(Rectified Linear Units)是一種最常用的激活函數(shù),與Sigmoid相比,Relu函數(shù)的收斂速度會更快。
- Relu函數(shù)的表達式:
- Relu導(dǎo)函數(shù)的表達式:
-
Relu函數(shù)的圖像:2019062208.png
-
Relu導(dǎo)函數(shù)的圖像:2019062209.png
- Relu函數(shù)的表達式及其圖像,知道定義域
,值閾
。
- Relu導(dǎo)函數(shù)的表達式及其圖像,知道定義域
,值閾0或者1。
- 我們可以看到,當(dāng)
時,Relu 硬飽和;當(dāng)
時,Relu 不存在飽和問題。從而Relu函數(shù)能夠在x>0時保持梯度不衰減,從而緩解梯度消失問題。這可以讓我們直接以有監(jiān)督的方式訓(xùn)練深度神經(jīng)網(wǎng)絡(luò),而無須依賴無監(jiān)督的逐層預(yù)訓(xùn)練。然而,隨著訓(xùn)練的推進,部分輸入會落入硬飽和區(qū),導(dǎo)致對應(yīng)的權(quán)重?zé)o法更新。這種現(xiàn)象被稱為'神經(jīng)元死亡'。針對神經(jīng)元死亡,我們會對Relu函數(shù)進行改進。
- Relu函數(shù)的取值是
,因為神經(jīng)網(wǎng)絡(luò)是不斷重復(fù)計算的,實際上變成了它在不斷試探如何用一個大多數(shù)為0的矩陣來表達數(shù)據(jù)的特征,會導(dǎo)致因為稀疏特征的存在,反而使得運算速度快,效果好。
- 深度學(xué)習(xí)中最大的問題是梯度消失問題,使用tanh、sigmod等飽和激活函數(shù)情況下特別嚴(yán)重。神經(jīng)網(wǎng)絡(luò)在進行方向誤差傳播時,各個層都要乘以激活函數(shù)的一階導(dǎo)數(shù),梯度每傳遞一層就會衰減一層,網(wǎng)絡(luò)層數(shù)較多時,梯度就會不停衰減直到消失,使得訓(xùn)練網(wǎng)絡(luò)收斂越來越慢,而ReLU函數(shù)憑借其線性、非飽和的形式,訓(xùn)練速度則快很多。
- Relu 優(yōu)缺點:
- 優(yōu)點:
- 只需要判斷輸入是否大于0,相比 Sigmoid函數(shù),Tanh函數(shù),Relu函數(shù)能夠快速的收斂;
- Sigmoid 函數(shù)和 Tanh 函數(shù)涉及指數(shù)運算,Relu函數(shù)在大于0的區(qū)間內(nèi),簡單的線性運算,可以更好的實現(xiàn);
- Relu有效的緩解梯度消失問題。在x>0的區(qū)間里,解決了梯度消失問題。
- 在無監(jiān)督預(yù)訓(xùn)練的時候也有較好的表現(xiàn)。
- 缺點:
- 可能會出現(xiàn)神經(jīng)元死亡,權(quán)重?zé)o法更新;
- ReLU的輸出不是0均值,影響收斂性;
- 輸入負數(shù),則完全不激活,ReLU函數(shù)死掉;
- dead relu
- 優(yōu)點:
5.3.1 DEAD RELU
5.3.1.1 什么是 dead relu
- 在訓(xùn)練過程中,某些神經(jīng)元可能永遠不會被激活,導(dǎo)致相應(yīng)的參數(shù)永遠不能被更新。有兩個主要原因可能導(dǎo)致這種情況產(chǎn)生:
- (1) 非常不幸的參數(shù)初始化,這種情況比較少見(w都是負的);
- (2) 由于一次梯度更新的幅度過大(learning rate太大),導(dǎo)致某些Relu節(jié)點的權(quán)重調(diào)整的太大,使得后續(xù)的訓(xùn)練對該節(jié)點不再起作用,不幸使網(wǎng)絡(luò)進入這種狀態(tài)。解決方法是可以采用Xavier初始化方法,以及避免將learning rate設(shè)置太大或使用adagrad等自動調(diào)節(jié)learning rate的算法。
5.3.1.2 dead relu 產(chǎn)生的原因
假設(shè)有一個神經(jīng)網(wǎng)絡(luò)在其輸入X上有一些分布。讓我們看一個特定的ReLU單元R,對于任何固定的參數(shù)集,X上的分布意味著在R的輸入上的分布。假設(shè)R的輸入分布為以+0.1為中心的低方差高斯分布,在這種情況下,現(xiàn)在假設(shè)在一個特定的backprop期間,有一個大的梯度向后傳遞給R.由于R是開放的,它會將這個大的梯度向后傳遞到它的輸入。這會導(dǎo)致計算R輸入的函數(shù)發(fā)生相對較大的變化。這意味著R的輸入上的分布已經(jīng)改變。 假設(shè)R的輸入現(xiàn)在分布為以-0.1為中心的低方差高斯分布。現(xiàn)在我們有R的大多數(shù)輸入都是負數(shù),因此大多數(shù)輸入經(jīng)過ReLU函數(shù)能得到一個0(ReLU is close),大多數(shù)輸入不能反向傳播通過ReLU得到一個梯度,因此ReLU的輸入w一般都得不到更新通過隨機反向傳播(SGD)。R的輸入分布相對較小的變化(-0.2)導(dǎo)致R的行為存在質(zhì)的差異。我們越過零邊界,R現(xiàn)在幾乎總是關(guān)閉。問題是關(guān)閉的ReLU無法更新其輸入?yún)?shù),因此死亡(死亡=始終關(guān)閉)ReLU會停止運行,這就是所謂的‘dying ReLU’。
5.3.2 Leaky-Relu
-
Relu函數(shù)在定義域大于0的區(qū)間內(nèi),保持梯度不衰減,但是在定義域小于0的區(qū)間內(nèi),Relu硬飽和,會出現(xiàn)神經(jīng)元死亡的現(xiàn)象。針對小于0的硬飽和現(xiàn)象,一般會對Relu函數(shù)做出相應(yīng)的改進,改進后的函數(shù)表達式為:
2019062210.png
- L-Relu函數(shù),在定義域小于0的區(qū)間內(nèi),比著Relu前面多了一個系數(shù)(0.01),其存在的目的在于即修正了數(shù)據(jù)又保留了部分在定義域小于0的值,使其信息不完全全部丟失。
5.3.3 P-ReLu
- 相比L-Relu,P-Relu函數(shù)在定義域小于0的區(qū)間內(nèi),將0.01更改為學(xué)習(xí)率,LReLu與ReLu對模型影響相差不大,通過在訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)時,不斷調(diào)整學(xué)習(xí)率(也可以固定學(xué)習(xí)率),讓模型更加完美。
- P-Relu表達式為:
-
P-Relu具體表達式為:
2019062211.png
5.3.4 C-ReLu
C-Relu中的C是指concatenated。 CRelu主要用在CNN架構(gòu)中,通過簡單的修改,更好地提高CNN的性能。在深入分析CNN網(wǎng)絡(luò)內(nèi)部結(jié)構(gòu),發(fā)現(xiàn)在CNN網(wǎng)絡(luò)的前幾層學(xué)習(xí)到的濾波器中存在負相關(guān)。
C-Relu表達式:
。舉個例子,理解一下,假設(shè)輸入C-Relu函數(shù)是1,經(jīng)過非線性映射變?yōu)?img class="math-inline" src="https://math.jianshu.com/math?formula=%5BReLU(1)%2CReLU(%E2%88%921)%5D%20%3D%5B1%2C0%5D" alt="[ReLU(1),ReLU(?1)] =[1,0]" mathimg="1">;假設(shè)輸入C-Relu函數(shù)是-1,經(jīng)過非線性映射變?yōu)?img class="math-inline" src="https://math.jianshu.com/math?formula=%5BReLU(-1)%2CReLU(1)%5D%20%3D%5B0%2C1%5D" alt="[ReLU(-1),ReLU(1)] =[0,1]" mathimg="1">;
-
下圖是對所有卷積核尋找其 pair filter(即所有卷積核中選擇一個cos相似度最小的卷積核),并計算cos相似度得到藍色的統(tǒng)計直方圖。 紅色的曲線是假設(shè)隨機高斯分布生成的卷積核得到的相似度統(tǒng)計。在第一卷積層,藍色的直方圖分布以-0.5為中心點,對稱均勻分布,也就是說有較多成對的濾波器。越到后面的層,藍色的直方圖分布越集中,成對的濾波器越少。也就是說學(xué)習(xí)到的濾波器存在冗余。由于CNN前幾層出現(xiàn)大量負值數(shù)據(jù)及大量的對稱的濾波,ReLU在神經(jīng)網(wǎng)絡(luò)的前幾層會抹掉定義域為負的值,對此設(shè)計了C-ReLU。2019062212.png
低層的濾波器分布存在對稱的現(xiàn)象, 所以考慮在低層的網(wǎng)絡(luò)中采用 CRelu效果會提升很多。
使用CReLU時,要有意識的將濾波器數(shù)量減半,否則會將輸入的feature-map的數(shù)量擴展為兩倍, 網(wǎng)絡(luò)參數(shù)將會增加。
C-Relu論文:請點我
5.3.5 ELU (Exponential Linear Units)
為了減少不必要的偏移移位效應(yīng),做出如下改變:(i)輸入單元的激活可以以零為中心,(ii)可以使用具有負值的激活函數(shù)。 介紹一個新的激活函數(shù)具有負值,同時保持正參數(shù)的特性,即elu。
-
ELU函數(shù)表達式:2019062213.png
-
ELU函數(shù)圖像:2019062214.png
-
ELU導(dǎo)函數(shù)圖像:2019062215.png
-
elu函數(shù)可以加速訓(xùn)練并且可以提高分類的準(zhǔn)確率。它有以下特征:
- 1)elu由于其正值特性,可以像relu,lrelu,prelu一樣緩解梯度消失的問題。
- 2)相比relu,elu存在負值,可以將激活單元的輸出均值往0推近,達到batchnormlization的效果且減少了計算量。(輸出均值接近0可以減少偏移效應(yīng)進而使梯度接近于自然梯度),所以收斂速度更快。
- 3)Lrelu和prelu雖然有負值存在,但是不能確保是一個噪聲穩(wěn)定的去激活狀態(tài)。Elu左側(cè)軟飽性能夠讓ELU對輸入變化或噪聲更魯棒。
- 4)Elu在負值時是一個指數(shù)函數(shù),對于輸入特征只定性不定量。
Elu論文:請點我
5.3.6 S-Elu (Exponential Linear Units)
上面那個ELU,
要設(shè)多少?后來又出現(xiàn)一種新的方法,叫做SELU。它相對于ELU做了一個新的變化:就是現(xiàn)在把每一個值的前面都乘上一個
,然后他會告訴你,
,
應(yīng)該是多少。
-
S-Elu函數(shù)表達式:2019062216.png
-
S-Elu函數(shù)圖像:2019062217.png
S-Elu函數(shù)的超參
,
的值是證明得到的,而并非訓(xùn)練學(xué)習(xí)得到。
= 1.6732632423543772848170429916717,
= 1.0507009873554804934193349852946
經(jīng)過該激活函數(shù)后,使得樣本服從標(biāo)準(zhǔn)正態(tài)分布,保證訓(xùn)練過程中梯度不會爆炸或消失,效果比Batch Normalization 要好。S-Elu其實就是ELU乘了個
,關(guān)鍵在于這個
是大于1的。
以前relu,prelu,elu這些激活函數(shù),都是在負半軸坡度平緩,而S-Elu在activation的方差過大的時候可以讓它快速減小,防止了梯度爆炸;在正半軸relu,prelu,elu這些激活函數(shù)簡單的設(shè)成了1。而selu的正半軸大于1,在方差過小的的時候可以讓它增大,同時防止了梯度消失。這樣激活函數(shù)就有一個不動點,網(wǎng)絡(luò)層數(shù)很多層以后,每一層的輸出都是均值為0和方差為1。
-
推到 S-Elu有兩個假設(shè):
- 第一種假設(shè),每一個神經(jīng)元的input是mean=0,variance=1的i.i.d,不一定是高斯分布。一般在feature應(yīng)該要先做一下normalize讓input服從mean=0,varaince=1的高斯分布。
- 第二種假設(shè),每一個神經(jīng)元的weight是mean=0,variance=1/K(K是上一層神經(jīng)元的個數(shù)),但是這種假設(shè),沒有辦法在training的時候保證weight一直都是處于這個狀態(tài),但我們至少可以在initialize的時候把他initialize成這個狀態(tài),這樣子我們到時候train的時候就不會差太多。一般在initialize的時候,讓weight是mean=0,variance=1/K,可以通過kernel_initializer='lecun_normal'來實現(xiàn)。
tensorflow里可以直接使用selu,也可以改進elu,具體代碼如下.
def selu(x):
with ops.name_scope('elu') as scope:
alpha = 1.6732632423543772848170429916717
scale = 1.0507009873554804934193349852946
return scale*tf.where(x>=0.0, x, alpha*tf.nn.elu(x))
5.4 Softplus 函數(shù)
softplus其實就是 sigmoid 函數(shù)的原函數(shù),它的導(dǎo)數(shù)就是 sigmoid 函數(shù)。softplus的函數(shù)圖像和ReLU有些類似。它出現(xiàn)的比ReLU早,可以視為ReLU的鼻祖。也可以將Softplus看成 Relu 的平滑形式。一開始想要一個指數(shù)函數(shù)作為激活函數(shù),但是發(fā)現(xiàn)線性變換后,數(shù)值足夠大時,梯度太大了,難以訓(xùn)練,于是外面套了一個對數(shù)函數(shù)。
Softplus函數(shù)表達式:
-
Softplus和Relu函數(shù)圖像:2019062218.png
-
Softplus優(yōu)點:
- 相比sigmoid函數(shù),softplus指數(shù)運算,計算量少很多。
- 對于深層網(wǎng)絡(luò),反向傳播時,softplus相對sigmoid函數(shù),不容易出現(xiàn)梯度消失問題。
5.5 Softmax 函數(shù)
- Softmax函數(shù)常用來最后的一層,并作為輸出層進行多分類判別。 它跟二分類在輸出層之后一個單元不同的是,使用softmax的輸出層擁有多個單元,實際上我們有多少個分類就會有多少個單元,在softmax的作用下每個神經(jīng)單元都會計算出當(dāng)前樣本屬于本類的概率,并且其和等于1。
- 輸出層第i個神經(jīng)元的Softmax函數(shù)表達式:
,其中k為類別的個數(shù)。
- 用于分類的softmax激活函數(shù),對應(yīng)的損失函數(shù)一般都是用對數(shù)似然函數(shù),這樣算出來梯度很簡潔,也沒有sigmoid訓(xùn)練速度慢的問題。
- softmax與sigmoid函數(shù),多分類對比:
- softmax 函數(shù)服從多項式分布,sigmoid 函數(shù)服從伯努利分布;
- softmax 進行分類時,類與類之間是互斥的;sigmoid 函數(shù)進行分類時,類與類之間并不是互斥的;
- softmax 函數(shù)多類分類問題,大多數(shù)損失函數(shù)為categorical_crossentropy,取概率分布中最大的作為最終的分類結(jié)果;
- sigmoid 函數(shù)在多標(biāo)簽分類中,大多使用binary_crossentropy損失函數(shù),設(shè)置一個概率閾值,如果概率值大于閾值,則判定屬于該類別符合,會造成一個樣本具有多個類別。