編者按:在機(jī)器學(xué)習(xí)面前,我們都像一個(gè)孩子。當(dāng)剛學(xué)會(huì)反向傳播算法時(shí),許多人會(huì)不滿足于最基礎(chǔ)的感知器,去嘗試搭建更深、層數(shù)更多的神經(jīng)網(wǎng)絡(luò)。他們欣賞著自己的實(shí)現(xiàn),就像沙灘上的孩子驕傲地看著自己用泥沙堆起來(lái)的城堡。但和城堡的徒有其表一樣,這些神經(jīng)網(wǎng)絡(luò)的性能往往也難以令人滿意,它們也許會(huì)陷入無(wú)休止的訓(xùn)練,也許準(zhǔn)確率永遠(yuǎn)提不上來(lái)。這時(shí),一些人就會(huì)開(kāi)始懷疑:難道神經(jīng)網(wǎng)絡(luò)不是最先進(jìn)的技術(shù)?
類似的懷疑,誰(shuí)都有過(guò)——
神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過(guò)程包括前向傳播和反向傳播兩個(gè)部分,如果前向傳播得到的預(yù)測(cè)結(jié)果和實(shí)際結(jié)果不符,這就說(shuō)明網(wǎng)絡(luò)沒(méi)有訓(xùn)練好,要用反向傳播去重新調(diào)整各個(gè)權(quán)重。這之中涉及各種常見(jiàn)的優(yōu)化算法,以梯度下降為例,它的思路是把當(dāng)前梯度的負(fù)值方向作為搜索方向,通過(guò)調(diào)整權(quán)重使目標(biāo)函數(shù)趨近局部最小值,也就是讓代價(jià)函數(shù)/損失函數(shù)越來(lái)越小。

如上式所述,梯度下降算法用原權(quán)重減去乘上標(biāo)量α(0到1之間)的梯度來(lái)更新權(quán)重,并“重復(fù)”這一過(guò)程直至收斂。但在實(shí)際操作中,這個(gè)“重復(fù)”的迭代次數(shù)是一個(gè)人為選定的超參數(shù),這意味著它可能過(guò)小,最后收斂效果并不好;它也可能過(guò)大,網(wǎng)絡(luò)被訓(xùn)練得“沒(méi)完沒(méi)了”。因此訓(xùn)練時(shí)間和訓(xùn)練效果之間存在“過(guò)猶不及”的尷尬情況。
那么這個(gè)超參數(shù)是怎么影響收斂的?就像不同人下山速度不同一樣,梯度下降有一個(gè)下降步長(zhǎng),迭代時(shí)間越短,步長(zhǎng)就越大,雖然收斂速度很快,但它容易無(wú)法精確收斂到最后的最優(yōu)解;相反地,如果迭代時(shí)間過(guò)長(zhǎng),步長(zhǎng)越小,那在很長(zhǎng)一段收斂過(guò)程中,可能網(wǎng)絡(luò)的權(quán)重并不會(huì)發(fā)生太大改變,而且相對(duì)大步長(zhǎng),小步長(zhǎng)在規(guī)定迭代次數(shù)內(nèi)接近最小值也更難。

小步長(zhǎng)收斂宛如“蝸?!?/p>

大步長(zhǎng)收斂效率更高
這還不是唯一的毛病,當(dāng)梯度數(shù)值過(guò)小時(shí),它容易被四舍五入為0,也就是下溢出。這時(shí)再對(duì)這個(gè)數(shù)做某些運(yùn)算就會(huì)出問(wèn)題。
看到這里,我們似乎已經(jīng)得到這樣一個(gè)事實(shí):小梯度 = 不好。雖然這個(gè)結(jié)論看起來(lái)有些武斷,但在很多情況下,它并不是危言聳聽(tīng),因?yàn)楸疚囊v的梯度消失就是由小梯度引起的。
讓我們回想一下sigmoid函數(shù),這是一個(gè)經(jīng)常會(huì)在分類問(wèn)題中遇到的激活函數(shù):


如上圖所示,sigmoid的作用確實(shí)是有目共睹的,它能把任何輸入的閾值都限定在0到1之間,非常適合概率預(yù)測(cè)和分類預(yù)測(cè)。但這幾年sigmoid與tanh卻一直火不起來(lái),凡是提及激活函數(shù),大家第一個(gè)想到的就是ReLU,為什么?
因?yàn)閟igmoid幾乎就是梯度消失的代名詞,我們先對(duì)它求導(dǎo):

這看起來(lái)就是個(gè)很普通的 s(1-s) 算式,好像沒(méi)什么問(wèn)題。讓我們繪制它的圖像:

仔細(xì)看一看,還是沒(méi)問(wèn)題嗎?可以發(fā)現(xiàn),上圖中最大值只有1/4,最小值無(wú)限接近0,換言之,這個(gè)導(dǎo)數(shù)的閾值是(0, 1/4]。記住這個(gè)值,待會(huì)兒我們會(huì)用到。
現(xiàn)在我們先回頭繼續(xù)討論神經(jīng)網(wǎng)絡(luò)的反向傳播算法,看看梯度對(duì)它們會(huì)產(chǎn)生什么影響。

這是一個(gè)最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò),除了輸入神經(jīng)元,其他神經(jīng)元的act()都來(lái)自前一層的神經(jīng)元:先用act()乘上一個(gè)權(quán)重,再經(jīng)激活函數(shù)饋送進(jìn)下一層,來(lái)自上層的信息就成了一個(gè)全新的act()。最后的J歸納了前饋過(guò)程中的所有誤差項(xiàng)(error),輸出網(wǎng)絡(luò)整體誤差。這之后,我們?cè)賵?zhí)行反向傳播,通過(guò)梯度下降修改參數(shù),使J的輸出最小化。
下面是第一項(xiàng)權(quán)重w1的導(dǎo)數(shù):

我們可以利用權(quán)重的導(dǎo)數(shù)來(lái)進(jìn)行梯度下降,繼而迭代出全局最優(yōu)點(diǎn),但在那之前,這個(gè)派生的乘法運(yùn)算值得關(guān)注:

由于上一層的輸出乘上激活函數(shù)就是下一層的輸入,所以上式其實(shí)還包含sigmoid的導(dǎo)數(shù),如果把信息全部表示完整,從輸出返回到第二層隱藏層的表達(dá)式應(yīng)該是:

同理,從第二層隱藏層到第一層隱藏層則是:

它們都包含sigmoid函數(shù),合起來(lái)就是:

之前我們已經(jīng)對(duì)sigmoid求過(guò)導(dǎo)了,計(jì)算出它的閾值是(0, 1/4]。結(jié)合上式,兩個(gè)0到1之間的小數(shù)相乘,積小于任一乘數(shù)。而在典型的神經(jīng)網(wǎng)絡(luò)中,權(quán)重初始化的一般方法是權(quán)重的選擇要服從均值=0,方差=1的正態(tài)分布,因此這些初始權(quán)重的閾值是[-1, 1]。
接下來(lái)的事情就很清楚了:

即便不用常規(guī)權(quán)重初始化方法,w2和w3大于1,但它們對(duì)兩個(gè)sigmoid導(dǎo)數(shù)相乘來(lái)說(shuō)還是杯水車薪,梯度變得太小了。而在實(shí)際操作中,隨機(jī)權(quán)重是很可能小于1的,所以那時(shí)它反而是在助紂為虐。
這還只有2個(gè)隱藏層,試想一下,如果這是一個(gè)工業(yè)級(jí)的深層神經(jīng)網(wǎng)絡(luò),那么當(dāng)它在執(zhí)行反向傳播時(shí),這個(gè)梯度會(huì)變得有多小,小到突然消失也在情理之中。另一方面,如果我們把然激活函數(shù)導(dǎo)數(shù)的絕對(duì)值控制在大于1,那這個(gè)連乘操作也很嚇人,結(jié)果會(huì)無(wú)限大,也就是我們常說(shuō)的“梯度爆炸”。
現(xiàn)在,我們來(lái)看一個(gè)典型的ANN:

第一項(xiàng)權(quán)重距離誤差項(xiàng)J最遠(yuǎn),因此求導(dǎo)后它的表達(dá)式最長(zhǎng),也包含更多sigmoid函數(shù),計(jì)算結(jié)果更小。所以神經(jīng)網(wǎng)絡(luò)的第一層往往是訓(xùn)練時(shí)間最長(zhǎng)的一層。它同時(shí)也是后面所有層的基礎(chǔ),如果這一層不夠準(zhǔn)確,那就會(huì)產(chǎn)生連鎖反應(yīng),直接拉低整個(gè)網(wǎng)絡(luò)的性能。
這就也是神經(jīng)網(wǎng)絡(luò),尤其是深層神經(jīng)網(wǎng)絡(luò)一開(kāi)始并不為行業(yè)所接受的原因。正確訓(xùn)練前幾層是整個(gè)網(wǎng)絡(luò)的基礎(chǔ),但激活函數(shù)的缺陷和硬件設(shè)備的算力不足,使當(dāng)時(shí)的研究人員連打好基礎(chǔ)都做不到。
看到這里,我們應(yīng)該都已經(jīng)理解sigmoid函數(shù)的缺點(diǎn)了,它的替代方案tanh函數(shù)雖然也曾聲名大噪,但考慮到tanh(x)=2sigmoid(2x)-1,它肯定也存在同樣的問(wèn)題。那么,現(xiàn)在大家都在用的ReLU好在哪兒?
首先,ReLU是一個(gè)分段函數(shù):

它還有另一種寫(xiě)法:

當(dāng)輸入小于0時(shí),函數(shù)輸出0;當(dāng)輸入大于零時(shí),函數(shù)輸出x。

我們計(jì)算它的導(dǎo)數(shù)來(lái)對(duì)比sigmoid:

然后是它的圖像,注意一點(diǎn),它在0點(diǎn)不可微,所以當(dāng)x=0時(shí),圖中y軸上應(yīng)該是兩個(gè)空心圓。

可以發(fā)現(xiàn),導(dǎo)數(shù)的閾值終于不再是(0, 1)了,它好像可以避免梯度消失,但似乎又有點(diǎn)不對(duì)勁?當(dāng)我們把一個(gè)負(fù)值輸入到ReLU函數(shù)后,梯度為0,這時(shí)這個(gè)神經(jīng)元就“壞死”了。換句話說(shuō),如果存在負(fù)數(shù)權(quán)重,那某些神經(jīng)元可能永遠(yuǎn)不會(huì)被激活,導(dǎo)致相應(yīng)參數(shù)永遠(yuǎn)不會(huì)被更新。從某種意義上來(lái)說(shuō),ReLU還是存在部分梯度消失問(wèn)題。
那么,我們?cè)撛趺催x擇呢?不急,這里還有一種激活函數(shù)——Leakly ReLU。
既然ReLU的“梯度消失”源于它的閾值0,那么我們可以把它重設(shè)成一個(gè)0到1之間的具體小數(shù)。這之后,當(dāng)輸入為負(fù)時(shí),它還是具有非常小的梯度,這就為網(wǎng)絡(luò)繼續(xù)學(xué)習(xí)提供了機(jī)會(huì)。

上式中的ε=0.01,但它最常見(jiàn)的范圍是0.2-0.3。因?yàn)樾甭市?,輸入?fù)值權(quán)重后,它在圖像上是一條非常緩的線:

這里我們要聲明一點(diǎn):雖然Leakly ReLU可以解決ReLU的神經(jīng)元壞死問(wèn)題,但它的表現(xiàn)并不一定比ReLU更好。比如常數(shù)ε萬(wàn)一過(guò)小,它就很可能會(huì)導(dǎo)致新的梯度消失。另一方面,這兩個(gè)激活函數(shù)有個(gè)共同的缺點(diǎn),即不像tanh和sigmoid一樣輸出有界,如果是在RNN這樣很深的神經(jīng)網(wǎng)絡(luò)里,即便ReLU的導(dǎo)數(shù)是0或1,很小,但除了它我們還有那么多權(quán)重,多項(xiàng)連乘會(huì)導(dǎo)致非常大的輸出值,然后梯度就爆炸了。
所以總的來(lái)說(shuō),ReLU并沒(méi)有根治梯度消失這個(gè)問(wèn)題,它只是在一定程度上緩解了矛盾,并產(chǎn)生了另一個(gè)新問(wèn)題。這也是這些激活函數(shù)至今還能共存的原因——CNN用ReLU更常見(jiàn),而RNN大多用tanh。在“玄學(xué)”的大背景下,這大概是新手入門(mén)機(jī)器學(xué)習(xí)后,接觸到的第一起trade off吧。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4825瀏覽量
106757 -
梯度
+關(guān)注
關(guān)注
0文章
30瀏覽量
10548 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5589瀏覽量
123884
原文標(biāo)題:深度學(xué)習(xí)解密:我的梯度怎么消失了?
文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
詳解深度學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)的應(yīng)用
在Ubuntu20.04系統(tǒng)中訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的一些經(jīng)驗(yàn)
人工神經(jīng)網(wǎng)絡(luò)原理及下載
AI知識(shí)科普 | 從無(wú)人相信到萬(wàn)人追捧的神經(jīng)網(wǎng)絡(luò)
【案例分享】ART神經(jīng)網(wǎng)絡(luò)與SOM神經(jīng)網(wǎng)絡(luò)
人工神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)方法有哪些?
如何構(gòu)建神經(jīng)網(wǎng)絡(luò)?
神經(jīng)網(wǎng)絡(luò)移植到STM32的方法
從神經(jīng)網(wǎng)絡(luò)到深度學(xué)習(xí)
【人工神經(jīng)網(wǎng)絡(luò)基礎(chǔ)】為什么神經(jīng)網(wǎng)絡(luò)選擇了“深度”?
神經(jīng)網(wǎng)絡(luò)會(huì)犯一些人類根本不會(huì)犯的錯(cuò)誤
用Python從頭實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)理解神經(jīng)網(wǎng)絡(luò)的原理2
反向傳播神經(jīng)網(wǎng)絡(luò)和bp神經(jīng)網(wǎng)絡(luò)的區(qū)別
bp神經(jīng)網(wǎng)絡(luò)和反向傳播神經(jīng)網(wǎng)絡(luò)區(qū)別在哪
人工神經(jīng)網(wǎng)絡(luò)的原理和多種神經(jīng)網(wǎng)絡(luò)架構(gòu)方法

一些人會(huì)懷疑:難道神經(jīng)網(wǎng)絡(luò)不是最先進(jìn)的技術(shù)?
評(píng)論