上一篇1 深度神經(jīng)網(wǎng)絡(luò)我們知道膝昆,通過(guò)追加隱藏層來(lái)構(gòu)建更加“智能”的深度神經(jīng)網(wǎng)絡(luò),并不奏效运挫。
真正的問(wèn)題不在“深度”本身廷痘,而是由梯度下降算法所指導(dǎo)的訓(xùn)練過(guò)程,容易遭遇梯度消失問(wèn)題(Vanishing Gradient Problem)构灸,以及與之成對(duì)存在的梯度爆炸問(wèn)題(Exploding Gradient Problem)上渴。
本篇分析梯度消失和爆炸問(wèn)題,并引入整流線性單元(ReLU)喜颁。
重現(xiàn)梯度消失
為了凸顯這個(gè)問(wèn)題稠氮,我們需要一個(gè)特別的網(wǎng)絡(luò)架構(gòu),抽出網(wǎng)絡(luò)中由藍(lán)色神經(jīng)元構(gòu)成的路徑半开,形成一個(gè)每層只有一個(gè)神經(jīng)元的多層網(wǎng)絡(luò)隔披,如下圖所示:
接下來(lái)采用鏈?zhǔn)椒▌t進(jìn)行反向傳播,來(lái)獲得最靠前的隱藏層神經(jīng)元參數(shù)的梯度形式:
整理得到下式:
這個(gè)形式可以清晰的反應(yīng)出在反向傳播過(guò)程中寂拆,靠后的層如何影響靠前的層:神經(jīng)元梯度會(huì)受到其后每層神經(jīng)元的累積乘性影響奢米,越靠近輸出層的,乘性因子越多纠永。這將導(dǎo)致靠前面的神經(jīng)元層梯度的不穩(wěn)定——容易過(guò)小或者過(guò)大鬓长,從而產(chǎn)生梯度消失或梯度爆炸。
以梯度消失為例尝江。假設(shè)網(wǎng)絡(luò)參數(shù)初始化符合標(biāo)準(zhǔn)正態(tài)分布N(0,1)涉波,且神經(jīng)元的激活函數(shù)采用Sigmoid函數(shù),則有|w| < 1茂装,而Sigmoid的導(dǎo)數(shù)σ' < 1/4(見(jiàn)下面的Sigmoid導(dǎo)數(shù)曲線)怠蹂。
根據(jù)上述,得到下面推斷:網(wǎng)絡(luò)越深少态,靠近輸入層的神經(jīng)元的梯度的絕對(duì)值越小,也就意味著神經(jīng)元學(xué)習(xí)緩慢易遣,甚至停止學(xué)習(xí)彼妻。這種情況下靠前的隱藏層都是不愛(ài)“學(xué)習(xí)”的無(wú)效層,如下所示:
對(duì)前面的網(wǎng)絡(luò)結(jié)構(gòu),進(jìn)行訓(xùn)練迭代60次侨歉,并監(jiān)測(cè)各隱藏層偏置上的梯度屋摇,會(huì)得到與理論分析相同的結(jié)果。如下圖所示幽邓,從左到右炮温,從上到下,依次是第1個(gè)到第4個(gè)隱藏層偏置bl上的梯度求模的值牵舵,曲線顯示越靠前的層偏置向量b的模越小柒啤,所用代碼tf_2-2_one_path.py。
梯度爆炸
梯度爆炸問(wèn)題畸颅,效果與梯度消失恰恰相反——越靠前的隱藏層的梯度越大担巩。
一個(gè)簡(jiǎn)單的解釋是:訓(xùn)練過(guò)程中隨著權(quán)重w的不斷更新,分布不再服從初始化時(shí)的N(0, 1)没炒。一旦出現(xiàn)權(quán)重w的標(biāo)準(zhǔn)差遠(yuǎn)遠(yuǎn)大于1涛癌,那么越靠前的隱藏層將獲得很大的梯度(絕對(duì)值),導(dǎo)致權(quán)重更新幅度非常大送火,神經(jīng)元很難學(xué)到穩(wěn)定的概念拳话。
總的來(lái)說(shuō),不管是梯度消失還是梯度爆炸种吸,深度網(wǎng)絡(luò)中靠近輸入層的神經(jīng)元弃衍,其梯度的內(nèi)在結(jié)構(gòu)“不穩(wěn)定”是學(xué)習(xí)困難的根本原因。
Sigmoid三宗罪
前面的神經(jīng)網(wǎng)絡(luò)以及相應(yīng)的問(wèn)題都是基于S型神經(jīng)元骨稿,即采用Sigmoid作為各層的激活函數(shù)笨鸡。下面來(lái)說(shuō)說(shuō)Sigmoid的3個(gè)主要缺陷。
1.輸出區(qū)間不以0為中心
Sigmoid的輸出范圍為(0, 1)坦冠,總是正數(shù)形耗,不以0為中心。由此可推斷辙浑,一個(gè)由S型神經(jīng)元構(gòu)成的網(wǎng)絡(luò)中激涤,第一個(gè)隱藏層之后層的輸入永遠(yuǎn)為正值。這會(huì)帶來(lái)一個(gè)問(wèn)題:網(wǎng)絡(luò)中一個(gè)神經(jīng)元中的所有權(quán)重(除第一個(gè)隱藏層之外)判呕,其上梯度的符號(hào)相同倦踢,要么都為正,要么都為負(fù)侠草,造成“zig-zagging dynamics”(之字形動(dòng)態(tài))辱挥。
所謂“zig-zagging”,就是指權(quán)重向量的更新方向受到限制边涕,對(duì)于某些方向上(各分量梯度符號(hào)不同)的目標(biāo)解晤碘,需要“之”字迂回多次才能達(dá)到褂微。這就好比兩個(gè)人的腿綁在一起,對(duì)于各自的目標(biāo)园爷,兩人必須步調(diào)一致妥協(xié)達(dá)成宠蚂,而不能各干各的。
以一個(gè)輸出層S型神經(jīng)元為例童社,來(lái)證明權(quán)重上梯度的符號(hào)相同求厕。
神經(jīng)元輸入輸出定義如下,其中σ表示Sigmoid函數(shù):
如下式所示扰楼,輸入xi恒為正呀癣,σ'(z)恒為正,神經(jīng)元的任一權(quán)重wi上的梯度符號(hào)也不依賴權(quán)重自身(求導(dǎo)后消去)灭抑,最終要么都為正十艾,要么都為負(fù):
2.神經(jīng)元容易飽和,停止學(xué)習(xí)
回顧下熟悉的Sigmoid曲線腾节。從圖上看忘嫉,當(dāng)神經(jīng)元加權(quán)和|z| > 2時(shí),Sigmoid曲線趨于平緩案腺,此時(shí)σ'(z) → 0庆冕,神經(jīng)元趨于飽和,權(quán)重和偏置更新幅度非常小劈榨,學(xué)習(xí)幾乎停滯访递。如下式所示,以一個(gè)輸出層神經(jīng)元為例同辣,如果σ'(z) → 0拷姿,在權(quán)重w上的梯度也趨于0。
此外旱函,從上一節(jié)中Sigmoid導(dǎo)數(shù)曲線可以看出响巢,其最大值也不過(guò)0.25,使得梯度在反向傳播過(guò)程中衰減較快棒妨。
3.計(jì)算耗時(shí)
Sigmoid表達(dá)式中包含了指數(shù)函數(shù)ex踪古,增加了計(jì)算復(fù)雜度。
神奇ReLU
忍了S型神經(jīng)元那么久券腔,它的終結(jié)者神奇ReLU終于出場(chǎng)了伏穆,它的全稱整流線性單元,Rectified Linear Units纷纫。
采用整流器Rectifier作為激活函數(shù)的神經(jīng)元(單元)被稱為ReLU枕扫,很多時(shí)候人們也直接用ReLU指代整流線性函數(shù)。整流函數(shù)形式非常簡(jiǎn)單:f(x) = max(0,x)辱魁。如下圖藍(lán)色曲線所示铡原,其中綠色的曲線是Softplus曲線偷厦,可以看做ReLU的平滑版本商叹。
關(guān)于ReLU的與神經(jīng)科學(xué)的關(guān)系燕刻,有3篇中文文章值得一讀:
- 《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》閱讀筆記與實(shí)現(xiàn)
- 一個(gè)神經(jīng)科學(xué)工作者眼中的Alexnet(上)
- ReLu(Rectified Linear Units)激活函數(shù)
從應(yīng)用的角度來(lái)說(shuō),ReLU有幾個(gè)很棒的特性:
- 在輸入大于0時(shí)剖笙,它的導(dǎo)數(shù)為1卵洗,永不飽和;
- 計(jì)算簡(jiǎn)單高效弥咪;
- 訓(xùn)練收斂極快(與前面2點(diǎn)有關(guān))过蹂;
ReLU在輸入>0時(shí)導(dǎo)數(shù)為1(相比Sigmoid導(dǎo)數(shù)最大值為0.25),具有高效的反向傳播聚至,且平衡了各層更新速率的差異酷勺,很大程度上消除了梯度消失問(wèn)題。
ReLU也并非完美扳躬,首先它的輸出區(qū)間也不以0為中心脆诉。
更加嚴(yán)重的問(wèn)題是,在它的負(fù)區(qū)間上贷币,梯度為0击胜,一旦進(jìn)入到這個(gè)區(qū)間學(xué)習(xí)將完全停止。如果某次權(quán)重大幅度更新后役纹,導(dǎo)致ReLU神經(jīng)元上的權(quán)重W非常信妓ぁ(絕對(duì)值很大的負(fù)數(shù)),使得整個(gè)數(shù)據(jù)集的輸入都無(wú)法激活它促脉,我們稱這種情況為Dying ReLU Problem辰斋。
ReLU也不是救星
嘗試將前面實(shí)驗(yàn)的網(wǎng)絡(luò)隱藏層激活函數(shù)都換成ReLU,實(shí)驗(yàn)結(jié)果如下表所示瘸味。識(shí)別精度比Sigmoid版本有了2個(gè)百分點(diǎn)的大幅提升宫仗,而且訓(xùn)練過(guò)程中收斂速度確實(shí)很快,幾次迭代下來(lái)就可以讓識(shí)別精度達(dá)到95%硫戈。
隱層數(shù)量 | 每隱層神經(jīng)元數(shù) | 迭代次數(shù) | 識(shí)別精度 | 代碼 | |
---|---|---|---|---|---|
1 | 隱層x1 | 100 | 30 | 97.57% | tf_2-2_1_hidden_layers_relu.py |
2 | 隱層x2 | 100,100 | 30 | 97.92% | tf_2-2_2_hidden_layers_relu.py |
3 | 隱層x3 | 100,100,100 | 30 | 97.9% | tf_2-2_3_hidden_layers_relu.py |
4 | 隱層x4 | 100,100,100,100 | 60 | 97.81% | tf_2-2_4_hidden_layers_relu.py |
5 | 隱層x4 | 500,300,150,50 | 60 | 97.98% | tf_2-2_4_hidden_layers_relu_2.py |
6 | 隱層x4 | 2048,1024,512,256 | 60 | 98.07% | tf_2-2_4_hidden_layers_relu_3.py |
但是遺憾的是锰什,繼續(xù)增加隱藏層的數(shù)量,與Sigmoid類似丁逝,識(shí)別精度卻并未出現(xiàn)明顯的提升汁胆。雖然ReLU克服了梯度消失問(wèn)題,但那并不是唯一的問(wèn)題霜幼,太多的因素都在影響訓(xùn)練深度網(wǎng)絡(luò)訓(xùn)練的難度嫩码。如果單靠追加ReLU隱藏層就能構(gòu)建深度網(wǎng)絡(luò),也就沒(méi)卷積神經(jīng)網(wǎng)絡(luò)什么事了罪既。
盡管從理論上講铸题,深度網(wǎng)絡(luò)具備極強(qiáng)的分層概念表示能力铡恕,但是這并不保證學(xué)習(xí)過(guò)程總能通向成功。我們的訓(xùn)練過(guò)程丢间,可能并沒(méi)有學(xué)習(xí)到層次化的概念探熔,或者學(xué)習(xí)了錯(cuò)誤的層次化概念。
這或許是基于梯度下降訓(xùn)練全連接網(wǎng)絡(luò)的宿命烘挫。我們知道诀艰,全連接網(wǎng)絡(luò)的每個(gè)神經(jīng)元都會(huì)接收上一層所有神經(jīng)元的輸出,進(jìn)行輸入輸出的映射饮六,所以在增加深度(隱藏層)的同時(shí)其垄,會(huì)造成參數(shù)量成倍增加,從而加大了訓(xùn)練難度卤橄。
現(xiàn)實(shí)中绿满,全連接網(wǎng)絡(luò)(FC)通常較淺,接受相對(duì)低維的特征數(shù)據(jù)窟扑,或者小分辨率的圖像數(shù)據(jù)喇颁,用于回歸或者分類。對(duì)于大分辨率圖像來(lái)說(shuō)辜膝,也都會(huì)事先進(jìn)行特征提取无牵,再將低維特征數(shù)據(jù)輸入網(wǎng)絡(luò),而不是構(gòu)建端到端的深度網(wǎng)絡(luò)架構(gòu)厂抖。
深度的復(fù)興
2006年茎毁,Hinton的深度信念網(wǎng)絡(luò)(Deep Belief Network,DBN)忱辅,通過(guò)對(duì)每層神經(jīng)元單獨(dú)進(jìn)行訓(xùn)練完成學(xué)習(xí)過(guò)程七蜘,成為了第一批成功應(yīng)用深度架構(gòu)訓(xùn)練的非卷積模型之一,由此開(kāi)啟了深度學(xué)習(xí)的復(fù)興墙懂,而將深度學(xué)習(xí)帶入巔峰的則是接下來(lái)要介紹的:卷積神經(jīng)網(wǎng)絡(luò)橡卤。
上一篇 1 深度神經(jīng)網(wǎng)絡(luò)
下一篇 3 深度學(xué)習(xí)革命的開(kāi)端:卷積神經(jīng)網(wǎng)絡(luò)
共享協(xié)議:署名-非商業(yè)性使用-禁止演繹(CC BY-NC-ND 3.0 CN)
轉(zhuǎn)載請(qǐng)注明:作者黑猿大叔(簡(jiǎn)書)