本文結(jié)構(gòu):
- 什么是梯度消失?
- 梯度消失有什么影響邪媳?
- 是什么原因?
- 解決方案有哪些荡陷?
- 如何選擇激活函數(shù)雨效?
1. 什么是梯度消失?
梯度消失废赞,常常發(fā)生在用基于梯度的方法訓(xùn)練神經(jīng)網(wǎng)絡(luò)的過程中徽龟。
當(dāng)我們在做反向傳播,計(jì)算損失函數(shù)對權(quán)重的梯度時(shí)唉地,隨著越向后傳播据悔,梯度變得越來越小传透,這就意味著在網(wǎng)絡(luò)的前面一些層的神經(jīng)元,會(huì)比后面的訓(xùn)練的要慢很多极颓,甚至不會(huì)變化朱盐。
2. 有什么影響?
網(wǎng)絡(luò)的前面的一些層是很重要的菠隆,它們負(fù)責(zé)學(xué)習(xí)和識(shí)別簡單的模式兵琳,也是整個(gè)網(wǎng)絡(luò)的基礎(chǔ),如果他們的結(jié)果不準(zhǔn)確的話骇径,那么后面層結(jié)果也會(huì)不準(zhǔn)確躯肌。
而且用基于梯度的方法訓(xùn)練出參數(shù),主要是通過學(xué)習(xí)參數(shù)的很小的變化對網(wǎng)絡(luò)的輸出值的影響有多大破衔。如果參數(shù)的改變羡榴,網(wǎng)絡(luò)的輸出值貢獻(xiàn)很小,那么就會(huì)很難學(xué)習(xí)參數(shù)运敢,花費(fèi)時(shí)間會(huì)非常長校仑。
3. 梯度消失的原因?
在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí)传惠,為了讓損失函數(shù)越來越小迄沫,其中一種優(yōu)化的方法是梯度下降。梯度下降法簡單的來說就是在權(quán)重的負(fù)梯度方向更新權(quán)重卦方,如下面這個(gè)公式所示羊瘩,一直到梯度收斂為零。(當(dāng)然在實(shí)際過程中盼砍,會(huì)通過設(shè)定一個(gè)超參數(shù)叫做最大跌代數(shù)來控制尘吗,如果迭代次數(shù)太小,結(jié)果就會(huì)不準(zhǔn)確浇坐,如果迭代次數(shù)太大睬捶,那么訓(xùn)練過程會(huì)非常長。)
這里就需要計(jì)算參數(shù)的梯度近刘,方法是用反向傳播擒贸。
為了推導(dǎo)一下梯度消失的原因,我們來看一個(gè)最簡單的神經(jīng)網(wǎng)絡(luò)的反向傳播過程觉渴。
每個(gè)神經(jīng)元有兩個(gè)過程介劫,一個(gè)是權(quán)重與上一層輸出的線性組合,一個(gè)是作用激活函數(shù)案淋。
來看一下最后的損失對第一層權(quán)重的梯度是怎樣的:
其中各部分推導(dǎo):
上面用到的激活函數(shù)為 sigmoid 函數(shù)座韵,黃色曲線為 Sigmoid 的導(dǎo)數(shù),它的值域在 0 到 1/4 之間:
同時(shí)一般情況下神經(jīng)網(wǎng)絡(luò)在權(quán)重初始化時(shí)踢京,會(huì)按照高斯分布誉碴,平均值為0標(biāo)準(zhǔn)差為1這樣進(jìn)行初始化宦棺,所以權(quán)重矩陣也是小于1的。
于是可以知道:
由上面的例子可以看出翔烁,對第一層的權(quán)重求的偏導(dǎo),就有五個(gè)小于1的數(shù)相乘旨涝,那么當(dāng)層數(shù)越多蹬屹,這就會(huì)以指數(shù)級(jí)迅速減小。
越靠前的層數(shù)白华,由于離損失越遠(yuǎn)慨默,梯度計(jì)算式中包含的激活函數(shù)的導(dǎo)數(shù)就越多,那么訓(xùn)練也就越慢弧腥。
(那么梯度爆炸厦取,也就是同樣的道理,當(dāng)激活函數(shù)的導(dǎo)數(shù)大于1的時(shí)候管搪,它會(huì)呈指數(shù)級(jí)的增長虾攻。)
4. 解決方案有哪些?
由上面的推導(dǎo)我們可以知道更鲁,梯度消失的主要原因霎箍,主要是和激活函數(shù)的導(dǎo)數(shù)有關(guān)。
所以如果激活函數(shù)選擇的不合適澡为,就會(huì)出現(xiàn)梯度消失問題
當(dāng)然漂坏,除了激活函數(shù),還有其他幾種方法:
梯度消失:
- 逐層“預(yù)訓(xùn)練”(pre-training)+對整個(gè)網(wǎng)絡(luò)進(jìn)行“微調(diào)”(fine-tunning)
- 選擇合適的激活函數(shù)
- batch normalization 批規(guī)范化:通過對每一層的輸出規(guī)范為均值和方差一致的方法媒至,消除了 w 帶來的放大縮小的影響
- 殘差結(jié)構(gòu)
- LSTM
梯度爆炸:
- 梯度剪切( Gradient Clipping)
- 權(quán)重正則化
- 選擇合適的激活函數(shù)
- batch normalization 批規(guī)范化顶别,
- RNN 的 truncated Backpropagation through time ,LSTM
今天先來重點(diǎn)看一下激活函數(shù)的選擇
5. 那么如何選擇激活函數(shù)呢拒啰?通常都有哪些激活函數(shù), 它們的導(dǎo)數(shù)長什么樣子呢驯绎?
由前面的推導(dǎo)可以知道梯度消失的主要原因,是激活函數(shù)的導(dǎo)數(shù)小于 1谋旦,那么在選擇激活函數(shù)時(shí)条篷,就考慮這一點(diǎn)。
有哪些激活函數(shù)可以選擇呢蛤织?
Relu赴叹,
Rectified linear unit,x 大于 0 時(shí)指蚜,函數(shù)值為 x乞巧,導(dǎo)數(shù)恒為 1,這樣在深層網(wǎng)絡(luò)中使用 relu 激活函數(shù)就不會(huì)導(dǎo)致梯度消失和爆炸的問題摊鸡,并且計(jì)算速度快绽媒。
但是因?yàn)?x 小于 0 時(shí)函數(shù)值恒為0蚕冬,會(huì)導(dǎo)致一些神經(jīng)元無法激活。
Leaky Relu是辕,
是 ReLU 激活函數(shù)的變體囤热,為了解決 Relu 函數(shù)為 0 部分的問題,當(dāng) x 小于 0 時(shí)获三,函數(shù)值為 kx旁蔼,有很小的坡度 k,一般為 0.01疙教,0.02棺聊,或者可以作為參數(shù)學(xué)習(xí)而得。
優(yōu)點(diǎn)
Leaky ReLU有ReLU的所有優(yōu)點(diǎn):計(jì)算高效贞谓、快速收斂限佩、在正區(qū)域內(nèi)不會(huì)飽和
導(dǎo)數(shù)總是不為零,這能減少靜默神經(jīng)元的出現(xiàn)裸弦,允許基于梯度的學(xué)習(xí)
一定程度上緩解了 dead ReLU 問題
ELU:
指數(shù)線性單元(Exponential Linear Unit祟同,ELU)也屬于 ReLU 的變體。x 小于 0 時(shí)為 alpha*(e^x -1)和其它修正類激活函數(shù)不同的是理疙,它包括一個(gè)負(fù)指數(shù)項(xiàng)耐亏,從而防止靜默神經(jīng)元出現(xiàn),導(dǎo)數(shù)收斂為零沪斟,從而提高學(xué)習(xí)效率广辰。
優(yōu)點(diǎn)
不會(huì)有Dead ReLU問題
輸出的均值接近0,zero-centered
缺點(diǎn)
計(jì)算量稍大
現(xiàn)在最常用的是 Relu主之,已經(jīng)成了默認(rèn)選擇择吊,
sigmoid 不要在隱藏層使用了,如果是二分類問題槽奕,可以在最后的輸出層使用一下几睛,
隱藏層也可以用 tanh,會(huì)比 sigmoid 表現(xiàn)好很多粤攒。
此外所森,下面思維導(dǎo)圖總結(jié)了其他幾種 relu,sigmoid, Tanh 的變體函數(shù)夯接,它們的導(dǎo)數(shù)焕济,以及優(yōu)缺點(diǎn):
學(xué)習(xí)資料:
http://neuralnetworksanddeeplearning.com/chap5.html
https://dashee87.github.io/data%20science/deep%20learning/visualising-activation-functions-in-neural-networks/
https://blog.csdn.net/qq_25737169/article/details/78847691
https://www.cnblogs.com/willnote/p/6912798.html
https://www.quora.com/What-is-the-vanishing-gradient-problem
https://ayearofai.com/rohan-4-the-vanishing-gradient-problem-ec68f76ffb9b
https://www.learnopencv.com/understanding-activation-functions-in-deep-learning/
推薦閱讀 歷史技術(shù)博文鏈接匯總
http://www.reibang.com/p/28f02bb59fe5
也許可以找到你想要的:
[入門問題][TensorFlow][深度學(xué)習(xí)][強(qiáng)化學(xué)習(xí)][神經(jīng)網(wǎng)絡(luò)][機(jī)器學(xué)習(xí)][自然語言處理][聊天機(jī)器人]