2.3 残差网络-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
| 2.2 經(jīng)典網(wǎng)絡(luò) | 回到目錄 | 2.4 殘差網(wǎng)絡(luò)為什么有用? |
殘差網(wǎng)絡(luò) (Residual Networks (ResNets))
非常非常深的神經(jīng)網(wǎng)絡(luò)是很難訓(xùn)練的,因?yàn)榇嬖谔荻认Ш吞荻缺▎栴}。這節(jié)課我們學(xué)習(xí)跳躍連接(Skip connection),它可以從某一層網(wǎng)絡(luò)層獲取激活,然后迅速反饋給另外一層,甚至是神經(jīng)網(wǎng)絡(luò)的更深層。我們可以利用跳躍連接構(gòu)建能夠訓(xùn)練深度網(wǎng)絡(luò)的ResNets,有時深度能夠超過100層,讓我們開始吧。
ResNets是由殘差塊(Residual block)構(gòu)建的,首先我解釋一下什么是殘差塊。
這是一個兩層神經(jīng)網(wǎng)絡(luò),在 LLL 層進(jìn)行激活,得到 a[l+1]a^{[l+1]}a[l+1] ,再次進(jìn)行激活,兩層之后得到 a[l+2]a^{[l+2]}a[l+2] 。計(jì)算過程是從 a[l]a^{[l]}a[l] 開始,首先進(jìn)行線性激活,根據(jù)這個公式: z[l+1]=W[l+1]a[l]+b[l+1]z^{[l+1]}=W^{[l+1]}a^{[l]}+b^{[l+1]}z[l+1]=W[l+1]a[l]+b[l+1] ,通過 a[l]a^{[l]}a[l] 算出 z[l+1]z^{[l+1]}z[l+1] ,即 a[l]a^{[l]}a[l] 乘以權(quán)重矩陣,再加上偏差因子。然后通過ReLU非線性激活函數(shù)得到 a[l+1]a^{[l+1]}a[l+1] , a[l+1]=g(z[l+1])a^{[l+1]}=g(z^{[l+1]})a[l+1]=g(z[l+1]) 計(jì)算得出。接著再次進(jìn)行線性激活,依據(jù)等式 z[l+2]=W[l+2]a[l+1]+b[l+2]z^{[l+2]}=W^{[l+2]}a^{[l+1]}+b^{[l+2]}z[l+2]=W[l+2]a[l+1]+b[l+2] ,最后根據(jù)這個等式再次進(jìn)行ReLu非線性激活,即 a[l+2]=g(z[l+2])a^{[l+2]}=g(z^{[l+2]})a[l+2]=g(z[l+2]) ,這里的 ggg 是指ReLU非線性函數(shù),得到的結(jié)果就是 a[l+2]a^{[l+2]}a[l+2] 。換句話說,信息流從 a[l]a^{[l]}a[l] 到 a[l+2]a^{[l+2]}a[l+2] 需要經(jīng)過以上所有步驟,即這組網(wǎng)絡(luò)層的主路徑。
在殘差網(wǎng)絡(luò)中有一點(diǎn)變化,我們將 a[l]a^{[l]}a[l] 直接向后,拷貝到神經(jīng)網(wǎng)絡(luò)的深層,在ReLU非線性激活函數(shù)前加上 a[l]a^{[l]}a[l] ,這是一條捷徑。 a[l]a^{[l]}a[l] 的信息直接到達(dá)神經(jīng)網(wǎng)絡(luò)的深層,不再沿著主路徑傳遞,這就意味著最后這個等式( a[l+2]=g(z[l+2])a^{[l+2]}=g(z^{[l+2]})a[l+2]=g(z[l+2]) )去掉了,取而代之的是另一個ReLU非線性函數(shù),仍然對 z[l+2]z^{[l+2]}z[l+2] 進(jìn)行 ggg 函數(shù)處理,但這次要加上 a[l]a^{[l]}a[l] ,即: a[l+2]=g(z[l+2]+a[l])a^{[l+2]}=g(z^{[l+2]}+a^{[l]})a[l+2]=g(z[l+2]+a[l]) ,也就是加上的這個 a[l]a^{[l]}a[l] 產(chǎn)生了一個殘差塊。
在上面這個圖中,我們也可以畫一條捷徑,直達(dá)第二層。實(shí)際上這條捷徑是在進(jìn)行ReLU非線性激活函數(shù)之前加上的,而這里的每一個節(jié)點(diǎn)都執(zhí)行了線性函數(shù)和ReLU激活函數(shù)。所以 a[l]a^{[l]}a[l] 插入的時機(jī)是在線性激活之后,ReLU激活之前。除了捷徑,你還會聽到另一個術(shù)語“跳躍連接”,就是指 a[l]a^{[l]}a[l] 跳過一層或者好幾層,從而將信息傳遞到神經(jīng)網(wǎng)絡(luò)的更深層。
ResNet的發(fā)明者是何凱明(Kaiming He)、張翔宇(Xiangyu Zhang)、任少卿(Shaoqing Ren)和孫劍(Jiangxi Sun),他們發(fā)現(xiàn)使用殘差塊能夠訓(xùn)練更深的神經(jīng)網(wǎng)絡(luò)。所以構(gòu)建一個ResNet網(wǎng)絡(luò)就是通過將很多這樣的殘差塊堆積在一起,形成一個很深神經(jīng)網(wǎng)絡(luò),我們來看看這個網(wǎng)絡(luò)。
這并不是一個殘差網(wǎng)絡(luò),而是一個普通網(wǎng)絡(luò)(Plain network),這個術(shù)語來自ResNet論文。
把它變成ResNet的方法是加上所有跳躍連接,正如前一張幻燈片中看到的,每兩層增加一個捷徑,構(gòu)成一個殘差塊。如圖所示,5個殘差塊連接在一起構(gòu)成一個殘差網(wǎng)絡(luò)。
如果我們使用標(biāo)準(zhǔn)優(yōu)化算法訓(xùn)練一個普通網(wǎng)絡(luò),比如說梯度下降法,或者其它熱門的優(yōu)化算法。如果沒有殘差,沒有這些捷徑或者跳躍連接,憑經(jīng)驗(yàn)?zāi)銜l(fā)現(xiàn)隨著網(wǎng)絡(luò)深度的加深,訓(xùn)練錯誤會先減少,然后增多。而理論上,隨著網(wǎng)絡(luò)深度的加深,應(yīng)該訓(xùn)練得越來越好才對。也就是說,理論上網(wǎng)絡(luò)深度越深越好。但實(shí)際上,如果沒有殘差網(wǎng)絡(luò),對于一個普通網(wǎng)絡(luò)來說,深度越深意味著用優(yōu)化算法越難訓(xùn)練。實(shí)際上,隨著網(wǎng)絡(luò)深度的加深,訓(xùn)練錯誤會越來越多。
但有了ResNets就不一樣了,即使網(wǎng)絡(luò)再深,訓(xùn)練的表現(xiàn)卻不錯,比如說訓(xùn)練誤差減少,就算是訓(xùn)練深達(dá)100層的網(wǎng)絡(luò)也不例外。有人甚至在1000多層的神經(jīng)網(wǎng)絡(luò)中做過實(shí)驗(yàn),盡管目前我還沒有看到太多實(shí)際應(yīng)用。但是對 xxx 的激活,或者這些中間的激活能夠到達(dá)網(wǎng)絡(luò)的更深層。這種方式確實(shí)有助于解決梯度消失和梯度爆炸問題,讓我們在訓(xùn)練更深網(wǎng)絡(luò)的同時,又能保證良好的性能。也許從另外一個角度來看,隨著網(wǎng)絡(luò)越來深,網(wǎng)絡(luò)連接會變得臃腫,但是ResNet確實(shí)在訓(xùn)練深度網(wǎng)絡(luò)方面非常有效。
現(xiàn)在大家對ResNet已經(jīng)有了一個大致的了解,通過本周的編程練習(xí),你可以嘗試親自實(shí)現(xiàn)一下這些想法。至于為什么ResNets能有如此好的表現(xiàn),接下來我會有更多更棒的內(nèi)容分享給大家,我們下個視頻見。
課程板書
| 2.2 經(jīng)典網(wǎng)絡(luò) | 回到目錄 | 2.4 殘差網(wǎng)絡(luò)為什么有用? |
總結(jié)
以上是生活随笔為你收集整理的2.3 残差网络-深度学习第四课《卷积神经网络》-Stanford吴恩达教授的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.2 经典网络-深度学习第四课《卷积神
- 下一篇: 2.4 残差网络为什么有用-深度学习第四