神經網絡梯度消失和梯度爆炸及解決辦法

【轉載自 https://blog.csdn.net/program_developer/article/details/80032376】html

1、神經網絡梯度消失與梯度爆炸java

 

(1)簡介梯度消失與梯度爆炸git

 

層數比較多的神經網絡模型在訓練的時候會出現梯度消失(gradient vanishing problem)和梯度爆炸(gradient exploding problem)問題。梯度消失問題和梯度爆炸問題通常會隨着網絡層數的增長變得愈來愈明顯。github

例如,對於圖1所示的含有3個隱藏層的神經網絡,梯度消失問題發生時,靠近輸出層的hidden layer 3的權值更新相對正常,可是靠近輸入層的hidden layer1的權值更新會變得很慢,致使靠近輸入層的隱藏層權值幾乎不變,扔接近於初始化的權值。這就致使hidden layer 1 至關於只是一個映射層,對全部的輸入作了一個函數映射,這時此深度神經網絡的學習就等價於只有後幾層的隱藏層網絡在學習。梯度爆炸的狀況是:當初始的權值過大,靠近輸入層的hidden layer 1的權值變化比靠近輸出層的hidden layer 3的權值變化更快,就會引發梯度爆炸的問題。網絡

 

 

 

 

(2)梯度不穩定問題dom

 

在深度神經網絡中的梯度是不穩定的,在靠近輸入層的隱藏層中或會消失,或會爆炸。這種不穩定性纔是深度神經網絡中基於梯度學習的根本問題。函數

梯度不穩定的緣由:前面層上的梯度是來自後面層上梯度的乘積。當存在過多的層時,就會出現梯度不穩定場景,好比梯度消失和梯度爆炸。學習


(3)產生梯度消失的根本緣由測試


咱們以圖2的反向傳播爲例,假設每一層只有一個神經元且對於每一層均可以用公式1表示,其中σ爲sigmoid函數,C表示的是代價函數,前一層的輸出和後一層的輸入關係如公式1所示。咱們能夠推導出公式2。優化

 

 

 

而sigmoid函數的導數如圖3所示。

 

 

可見,的最大值爲,而咱們通常會使用標準方法來初始化網絡權重,即便用一個均值爲0標準差爲1的高斯分佈。所以,初始化的網絡權值一般都小於1,從而有。對於2式的鏈式求導,層數越多,求導結果越小,最終致使梯度消失的狀況出現。

 


圖4:梯度變化的鏈式求導分析

對於圖4,和有共同的求導項。能夠看出,前面的網絡層比後面的網絡層梯度變化更小,故權值變化緩慢,從而引發了梯度消失問題。

(4)產生梯度爆炸的根本緣由


,也就是w比較大的狀況。則前面的網絡層比後面的網絡層梯度變化更快,引發了梯度爆炸的問題。

 

(5)當激活函數爲sigmoid時,梯度消失和梯度爆炸哪一個更容易發生?

結論:梯度爆炸問題在使用sigmoid激活函數時,出現的狀況較少,不容易發生。

量化分析梯度爆炸時x的取值範圍:因導數最大爲0.25,故>4,纔可能出現;按照可計算出x的數值變化範圍很窄,僅在公式3範圍內,纔會出現梯度爆炸。畫圖如5所示,可見x的數值變化範圍很小;最大數值範圍也僅僅0.45,當=6.9時出現。所以僅僅在此很窄的範圍內會出現梯度爆炸的問題。

 

 

 


圖5:x的數值變化範圍

(6)如何解決梯度消失和梯度爆炸

梯度消失和梯度爆炸問題都是由於網絡太深,網絡權值更新不穩定形成的,本質上是由於梯度反向傳播中的連乘效應。對於更廣泛的梯度消失問題,能夠考慮一下三種方案解決:

1.    用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函數。

2.    用Batch Normalization。

3.    LSTM的結構設計也能夠改善RNN中的梯度消失問題。

2、幾種激活函數的比較


因爲使用sigmoid激活函數會形成神經網絡的梯度消失和梯度爆炸問題,因此許多人提出了一些改進的激活函數,如:用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函數。下面咱們具體來分析一下這幾個激活函數的區別。


(1)  Sigmoid


Sigmoid是經常使用的非線性的激活函數,它的數學形式如公式4:

 

 

 

 

Sigmoid函數在歷史上曾經很是的經常使用,輸出值範圍爲[0,1]之間的實數。然而如今它已經不太受歡迎,實際中不多使用。緣由是sigmoid存在3個問題:

 

1.sigmoid函數飽和使梯度消失(Sigmoidsaturate and kill gradients)。

咱們從圖7能夠看到sigmoid的導數都是小於0.25的,那麼在進行反向傳播的時候,梯度相乘結果會慢慢的趨近於0。這樣,幾乎就沒有梯度信號經過神經元傳遞到前面層的梯度更新中,所以這時前面層的權值幾乎沒有更新,這就叫梯度消失。除此以外,爲了防止飽和,必須對於權重矩陣的初始化特別留意。若是初始化權重過大,可能不少神經元獲得一個比較小的梯度,導致神經元不能很好的更新權重提早飽和,神經網絡就幾乎不學習。

 

2.sigmoid函數輸出不是「零爲中心」(zero-centered)。

一個多層的sigmoid神經網絡,若是你的輸入x都是正數,那麼在反向傳播中w的梯度傳播到網絡的某一處時,權值的變化是要麼全正要麼全負。

 

解釋下:當梯度從上層傳播下來,w的梯度都是用x乘以f的梯度,所以若是神經元輸出的梯度是正的,那麼全部w的梯度就會是正的,反之亦然。在這個例子中,咱們會獲得兩種權值,權值範圍分別位於圖8中一三象限。當輸入一個值時,w的梯度要麼都是正的要麼都是負的,當咱們想要輸入一三象限區域之外的點時,咱們將會獲得這種並不理想的曲折路線(zig zag path),圖中紅色曲折路線。假設最優化的一個w矩陣是在圖8中的第四象限,那麼要將w優化到最優狀態,就必須走「之字形」路線,由於你的w要麼只能往下走(負數),要麼只能往右走(正的)。優化的時候效率十分低下,模型擬合的過程就會十分緩慢。

若是訓練的數據並非「零爲中心」,咱們將多個或正或負的梯度結合起來就會使這種狀況有所緩解,可是收斂速度會很是緩慢。該問題相對於神經元飽和問題來講仍是要好不少。具體能夠這樣解決,咱們能夠按batch去訓練數據,那麼每一個batch可能獲得不一樣的信號或正或負,這個批量的梯度加起來後能夠緩解這個問題。

 

3.指數函數的計算是比較消耗計算資源的。

 

(2) tanh

 

tanh函數跟sigmoid仍是很像的,實際上,tanh是sigmoid的變形如公式5所示。tanh的具體公式如公式6所示。


tanh與sigmoid不一樣的是,tanh是「零爲中心」的。所以,實際應用中,tanh會比sigmoid更好一些。可是在飽和神經元的狀況下,仍是沒有解決梯度消失問題。
優勢:

1.tanh解決了sigmoid的輸出非「零爲中心」的問題。

 

缺點:

1.依然有sigmoid函數過飽和的問題。

2.依然指數運算。


(3)  ReLU


近年來,ReLU函數變得愈來愈受歡迎。全稱是Rectified Linear Unit,中文名字:修正線性單元。ReLU是Krizhevsky、Hinton等人在2012年《ImageNet Classification with Deep Convolutional Neural Networks》論文中提出的一種線性且不飽和的激活函數。它的數學表達式如7所示:

 

優勢:

1.ReLU解決了梯度消失的問題,至少x在正區間內,神經元不會飽和。

2.因爲ReLU線性、非飽和的形式,在SGD中可以快速收斂。

3.計算速度要快不少。ReLU函數只有線性關係,不須要指數計算,無論在前向傳播仍是反向傳播,計算速度都比sigmoid和tanh快。

 

缺點:

1.ReLU的輸出不是「零爲中心」(Notzero-centered output)。

2.隨着訓練的進行,可能會出現神經元死亡,權重沒法更新的狀況。這種神經元的死亡是不可逆轉的死亡。

解釋:訓練神經網絡的時候,一旦學習率沒有設置好,第一次更新權重的時候,輸入是負值,那麼這個含有ReLU的神經節點就會死亡,不再會被激活。由於:ReLU的導數在x>0的時候是1,在x<=0的時候是0。若是x<=0,那麼ReLU的輸出是0,那麼反向傳播中梯度也是0,權重就不會被更新,致使神經元再也不學習。

也就是說,這個ReLU激活函數在訓練中將不可逆轉的死亡,致使了訓練數據多樣化的丟失。在實際訓練中,若是學習率設置的過高,可能會發現網絡中40%的神經元都會死掉,且在整個訓練集中這些神經元都不會被激活。因此,設置一個合適的較小的學習率,會下降這種狀況的發生。爲了解決神經元節點死亡的狀況,有人提出了Leaky ReLU、P-ReLu、R-ReLU、ELU等激活函數。


(4)  Leaky ReLU


ReLU是將全部的負值設置爲0,形成神經元節點死亡狀況。相反,Leaky ReLU是給全部負值賦予一個非零的斜率。Leaky ReLU激活函數是在聲學模型(2013)中首次提出來的。它的數學表達式如公式8所示。

 

 

Leaky ReLU很好的解決了「dead ReLU」的問題。由於Leaky ReLU保留了x小於0時的梯度,在x小於0時,不會出現神經元死亡的問題。對於Leaky ReLU給出了一個很小的負數梯度值α,這個值是很小的常數。好比:0.01。這樣即修正了數據分佈,又保留了一些負軸的值,使得負軸信息不會所有丟失。可是這個α一般是經過先驗知識人工賦值的。
優勢:

1.神經元不會出現死亡的狀況。

2.對於全部的輸入,無論是大於等於0仍是小於0,神經元不會飽和。

2.因爲Leaky ReLU線性、非飽和的形式,在SGD中可以快速收斂。

3.計算速度要快不少。Leaky ReLU函數只有線性關係,不須要指數計算,無論在前向傳播仍是反向傳播,計算速度都比sigmoid和tanh快。

 

缺點:

1.Leaky ReLU函數中的α,須要經過先驗知識人工賦值。

 

擴展材料:

1.Andrew L. Maas, Awni Y. Hannum and Andrew Y. Ng. Rectified NonlinearitiesImprove Neural Network Acoustic Models (PDF). ICML.2013. 該論文提出了Leaky ReLU函數。

2.He K, Zhang X, Ren S, et al. Delving deepinto rectifiers: Surpassing human-level performance on imagenetclassification[C]//Proceedings of the IEEE international conference on computervision. 2015: 1026-1034. 該論文介紹了用Leaky ReLU函數的好處。

 

(5)  PReLU

 

PReLU的英文全稱爲「Parametric ReLU」,我翻譯爲「帶參數的線性修正單元」。咱們觀察Leaky ReLU可知,在神經網絡中經過損失函數對α求導數,咱們是能夠求得的。那麼,咱們可不能夠將它做爲一個參數進行訓練呢?在Kaiming He的論文《Delving deepinto rectifiers: Surpassing human-level performance on imagenet classification》中指出,α不只能夠訓練,並且效果更好。

 

 


公式9很是簡單,,表示還未通過激活函數的神經元輸出。論文中指出,使用了Parametric ReLU後,最終效果比不用提升了1.03%。

擴展材料:

He K, Zhang X, Ren S, et al. Delving deepinto rectifiers: Surpassing human-level performance on imagenetclassification[C]//Proceedings of the IEEE international conference on computervision. 2015: 1026-1034. 該論文做者對比了PReLU和ReLU在ImageNet model A的訓練效果。

 

(6)  RReLU

 

RReLU的英文全稱是「Randomized Leaky ReLU」,中文名字叫「隨機修正線性單元」。RReLU是Leaky ReLU的隨機版本。它首次是在Kaggle的NDSB比賽中被提出來的。

 

圖13:Randomized Leaky ReLU函數圖像

RReLU的核心思想是,在訓練過程當中,α是從一個高斯分佈中隨機出來的值,而後再在測試過程當中進行修正。數學表達式如10式所示。

 

在測試階段,把訓練過程當中全部的取個平均值。NDSB冠軍的α是從中隨機出來的。那麼在測試階段,激活函數就是公式11。

 

特色:

1.RReLU是Leaky ReLU的random版本,在訓練過程當中,α是從一個高斯分佈中隨機出來的,而後再測試過程當中進行修正。

2.數學形式與PReLU相似,但RReLU是一種非肯定性激活函數,其參數是隨機的。

 

(7)ReLU、Leaky ReLU、PReLU和RReLU的比較

 

 

圖14:ReLU、Leaky ReLU、PReLU、RReLU函數圖像

PReLU中的α是根據數據變化的;

Leaky ReLU中的α是固定的;

RReLU中的α是一個在給定範圍內隨機抽取的值,這個值在測試環節就會固定下來。


擴展材料:

Xu B, Wang N, Chen T, et al. Empiricalevaluation of rectified activations in convolutional network[J]. arXiv preprintarXiv:1505.00853, 2015. 在這篇論文中做者對比了ReLU、LReLU、PReLU、RReLU在CIFAR-十、CIFAR-100、NDSB數據集中的效果。

 

(8)ELU


ELU的英文全稱是「Exponential Linear Units」,中文全稱是「指數線性單元」。它試圖將激活函數的輸出平均值接近零,從而加快學習速度。同時,它還能經過正值的標識來避免梯度消失的問題。根據一些研究顯示,ELU分類精確度是高於ReLU的。公式如12式所示。

 


圖15:ELU與其餘幾種激活函數的比較圖

優勢:

ELU包含了ReLU的全部優勢。

神經元不會出現死亡的狀況。

ELU激活函數的輸出均值是接近於零的。

 

缺點:

計算的時候是須要計算指數的,計算效率低的問題。

 

擴展材料:

Clevert D A, Unterthiner T, Hochreiter S. Fastand accurate deep network learning by exponential linear units (elus)[J]. arXivpreprint arXiv:1511.07289, 2015. 這篇論文提出了ELU函數。

 

(9)Maxout

 

Maxout 「Neuron」 是由Goodfellow等人在2013年提出的一種頗有特色的神經元,它的激活函數、計算的變量、計算方式和普通的神經元徹底不一樣,並有兩組權重。先獲得兩個超平面,再進行最大值計算。激活函數是對ReLU和Leaky ReLU的通常化概括,沒有ReLU函數的缺點,不會出現激活函數飽和神經元死亡的狀況。Maxout出如今ICML2013上,做者Goodfellow將maxout和dropout結合,稱在MNIST,CIFAR-10,CIFAR-100,SVHN這4個數據集上都取得了start-of-art的識別率。Maxout公式如13所示。

 

其中,假設w是2維的,那麼咱們能夠得出公式14。

 

分析公式14能夠注意到,ReLU和Leaky ReLU都是它的一個變形。好比的時候,就是ReLU。Maxout的擬合能力很是強,它能夠擬合任意的凸函數。Goodfellow在論文中從數學的角度上也證實了這個結論,只須要2個Maxout節點就能夠擬合任意的凸函數,前提是「隱含層」節點的個數足夠多。

 

優勢:

Maxout具備ReLU的全部優勢,線性、不飽和性。

同時沒有ReLU的一些缺點。如:神經元的死亡。

 

缺點:

從這個激活函數的公式14中能夠看出,每一個neuron將有兩組w,那麼參數就增長了一倍。這就致使了總體參數的數量激增。

 

擴展材料:

Goodfellow I J, Warde-Farley D, Mirza M, et al.Maxout networks[J]. arXiv preprint arXiv:1302.4389, 2013. Goodfellow的這篇論文提出了Maxout,感興趣能夠了解一下。

 

總結:怎麼選擇激活函數?

 

關於激活函數的選取,目前還不存在定論,在實踐過程當中更多仍是須要結合實際狀況,考慮不一樣激活函數的優缺點綜合使用。我在這裏給你們一點在訓練模型時候的建議。

1.一般來講,不會把各類激活函數串起來在一個網絡中使用。

2.若是使用ReLU,那麼必定要當心設置學習率(learning rate),而且要注意不要讓網絡中出現不少死亡神經元。若是死亡神經元過多的問題很差解決,能夠試試Leaky ReLU、PReLU、或者Maxout。

3.儘可能不要使用sigmoid激活函數,能夠試試tanh,不過我的感受tanh的效果會比不上ReLU和Maxout。

 

Reference:


1.Andrew L. Maas, Awni Y. Hannum and Andrew Y. Ng. Rectified NonlinearitiesImprove Neural Network Acoustic Models (PDF). ICML.2013. 該論文提出了Leaky ReLU函數。

 

2.He K, Zhang X, Ren S, et al. Delving deepinto rectifiers: Surpassing human-level performance on imagenetclassification[C]//Proceedings of the IEEE international conference on computervision. 2015: 1026-1034. 該論文介紹了用Leaky ReLU函數的好處。

 

3.He K, Zhang X, Ren S, et al. Delving deepinto rectifiers: Surpassing human-level performance on imagenetclassification[C]//Proceedings of the IEEE international conference on computervision. 2015: 1026-1034. 該論文做者對比了PReLU和ReLU在ImageNet model A的訓練效果。

 

4.Xu B, Wang N, Chen T, et al. Empiricalevaluation of rectified activations in convolutional network[J]. arXiv preprintarXiv:1505.00853, 2015. 在這篇論文中做者對比了ReLU、LReLU、PReLU、RReLU在CIFAR-十、CIFAR-100、NDSB數據集中的效果。

 

5.Clevert D A, Unterthiner T, Hochreiter S. Fastand accurate deep network learning by exponential linear units (elus)[J]. arXivpreprint arXiv:1511.07289, 2015. 這篇論文提出了ELU函數。

 

6.Goodfellow I J, Warde-Farley D, Mirza M, et al.Maxout networks[J]. arXiv preprint arXiv:1302.4389, 2013. Goodfellow的這篇論文提出了Maxout,感興趣能夠了解一下。

 


梯度消失和梯度彌散問題:

https://zhuanlan.zhihu.com/p/25631496

https://ziyubiti.github.io/2016/11/06/gradvanish/

https://blog.csdn.net/cppjava_/article/details/68941436

 

激活函數問題:

https://blog.csdn.net/hduxiejun/article/details/70815620

https://blog.csdn.net/cyh_24/article/details/50593400

https://blog.csdn.net/huplion/article/details/79121988

https://blog.csdn.net/bea_tree/article/details/51503258

https://livc.io/blog/176

https://www.cnblogs.com/chamie/p/8665251.html

 

激活函數輸出不是「零爲中心」出現全正全負理解:https://www.zhihu.com/question/57194292

https://stats.stackexchange.com/questions/237169/why-are-non-zero-centered-activation-functions-a-problem-in-backpropagation

https://blog.csdn.net/heisejiuhuche/article/details/72514790

 

訓練的數據須要zero-centered:

1.神經網絡的訓練中,爲何訓練的數據若是不是zero-centered,收斂速度會較慢? - 知乎https://www.zhihu.com/question/58582257

2.訓練深度神經網絡儘可能使用zero-centered數據呢? - 知乎

https://www.zhihu.com/question/57194292--------------------- 做者:Microstrong0305 來源:CSDN 原文:https://blog.csdn.net/program_developer/article/details/80032376

相關文章
相關標籤/搜索