01 深層網(wǎng)絡(luò)診斷越深越好嗎?
深度學(xué)習(xí)的概念源于人工神經(jīng)網(wǎng)絡(luò),而之所以叫深度學(xué)習(xí)。我認(rèn)為有 2 點(diǎn),第一是網(wǎng)絡(luò)很深,非常深,第二是學(xué)習(xí),如何學(xué)習(xí)呢?通過(guò)數(shù)學(xué)建模,不斷調(diào)整參數(shù)達(dá)到減少目標(biāo)值和預(yù)測(cè)值之間的誤差,從而可以擬合任意的曲線,達(dá)到準(zhǔn)確預(yù)測(cè)的目的。
而今天我們就來(lái)談?wù)勆疃葘W(xué)習(xí)的一個(gè)特點(diǎn):深。
深層網(wǎng)絡(luò)一般會(huì)比淺層網(wǎng)絡(luò)效果好,包含的信息更多,因此,如果我們想要提升模型準(zhǔn)確率,最直接的方法就是把網(wǎng)絡(luò)設(shè)計(jì)的更深,這樣模型的準(zhǔn)確率會(huì)越來(lái)越準(zhǔn)確。
但是,現(xiàn)實(shí)場(chǎng)景真是這樣嗎?我們先來(lái)看一組數(shù)據(jù),下表是經(jīng)典的圖像識(shí)別深度學(xué)習(xí)模型。
| CV 模型 | 發(fā)布時(shí)間 | 層數(shù) | 成就 |
|---|---|---|---|
| LeNet | 1998 | 5 | 經(jīng)典手寫數(shù)字識(shí)別模型 |
| AlexNet | 2012 | 8 | ILSVRC 2012 第一名 |
| VGG | 2014 | 19 | ILSVRC 2014 第二名 |
| GoogleNet | 2014 | 22 | ILSVRC 2014 第一名 |
這幾個(gè)模型都是世界頂級(jí)比賽中獲獎(jiǎng)的著名模型,然而,這些模型的網(wǎng)絡(luò)層數(shù),少則 5 層,多也就 22 層。這些世界頂級(jí)比賽中的模型并非我們想象中的那么深,多則成百上千層。為什么會(huì)出現(xiàn)這種問(wèn)題?
帶著這個(gè)問(wèn)題,我們先看一個(gè)實(shí)驗(yàn),對(duì)于常規(guī)網(wǎng)絡(luò),直接堆疊很多層,經(jīng)過(guò)圖像識(shí)別檢測(cè),訓(xùn)練集,測(cè)試集和誤差結(jié)果表現(xiàn)如圖:

上圖中,56 層 和 20 層相比,模型越深,訓(xùn)練集和測(cè)試集上誤差越大,這也并不是過(guò)擬合,過(guò)擬合是訓(xùn)練集表現(xiàn)優(yōu)秀,測(cè)試集表現(xiàn)一般。實(shí)驗(yàn)表明:隨著網(wǎng)絡(luò)層數(shù)增加,模型準(zhǔn)確率會(huì)得到一定的提升,當(dāng)網(wǎng)絡(luò)層數(shù)增加到一定數(shù)量后,訓(xùn)練和測(cè)試誤差會(huì)準(zhǔn)會(huì)先飽和,之后急劇下降。
在深層網(wǎng)絡(luò)訓(xùn)練中,我們都知道,隨著層數(shù)增加,訓(xùn)練和優(yōu)化會(huì)變得越來(lái)越難,一個(gè)很大的原因就是梯度消失和爆炸問(wèn)題,也就是退化問(wèn)題。
02 網(wǎng)絡(luò)訓(xùn)練失敗的罪魁禍?zhǔn)资峭嘶瘑?wèn)題
退化問(wèn)題: 隨著網(wǎng)絡(luò)層數(shù)增加,錯(cuò)誤率反而提高了。主要是因?yàn)楫?dāng)網(wǎng)絡(luò)深度很深的時(shí)候,會(huì)出現(xiàn)梯度消失等問(wèn)題。
假設(shè)你有這樣一個(gè)神經(jīng)網(wǎng)絡(luò),第一層是輸入層,包含 2 個(gè)神經(jīng)元 i1, i2,和截距項(xiàng) b1;第二層是隱藏層,包含 2 個(gè)神經(jīng)元 h1,h2 和截距項(xiàng) b2,每條線上標(biāo)的 wi 是層與層關(guān)系連接的權(quán)重,激活函數(shù)我們默認(rèn)為 sigmoid 函數(shù)。

現(xiàn)對(duì)他們賦初始值。

輸入數(shù)據(jù):i1=0.05, i2=0.10
輸出數(shù)據(jù):o1=0.01, o2=0.99
初始權(quán)重:w1=0.15, w2=0.20, w3=0.25, w4=0.30;w5=0.40, w6=0.45, w7=0.50, w8=0.55
目標(biāo):給出輸入數(shù)據(jù),使得輸出盡可能和原始輸出接近。
回想一下神經(jīng)網(wǎng)絡(luò)的反向傳播,先通過(guò)正向傳播計(jì)算出結(jié)果,然后與樣本比較得出誤差值 Etotal。

根據(jù)誤差結(jié)果,利用鏈?zhǔn)椒▌t求偏導(dǎo),使得結(jié)果誤差反向傳播從而得出權(quán)重 w 調(diào)整梯度。下圖是輸出結(jié)果到隱含層的反向傳播過(guò)程。

通過(guò)不斷迭代,對(duì)參數(shù)矩陣進(jìn)行不斷調(diào)整,使得輸出的誤差值更小,使得輸出結(jié)果與實(shí)際結(jié)果更接近。
從上面的過(guò)程可以看出,神經(jīng)網(wǎng)絡(luò)在反向傳播過(guò)程中要不斷傳播梯度,而當(dāng)層數(shù)加深,梯度在傳播過(guò)程中逐漸消失,導(dǎo)致無(wú)法對(duì)前面網(wǎng)絡(luò)的權(quán)重進(jìn)行有效調(diào)整。
如何既能加深網(wǎng)絡(luò)層數(shù),又能解決梯度消失問(wèn)題,從而提升模型精度呢?
03 ResNet 建立高速網(wǎng)絡(luò),輸入與輸出恒等映射
在 MobileNet V2 的論文中提到,由于非線性激活函數(shù) Relu 的存在,每次輸入到輸出的過(guò)程幾乎是不可逆的,這也造成很多不可逆的信息損失,那我們可以試想一下,一個(gè)特質(zhì)的一些有用信息損失了,那他的表現(xiàn)還能持平嗎?答案是顯然的。
我們用一個(gè)直觀的例子來(lái)感受一下深層網(wǎng)絡(luò)與淺層網(wǎng)絡(luò)持平的表現(xiàn):

右邊的網(wǎng)絡(luò)可以理解為左邊的淺層網(wǎng)絡(luò)加深了 3 層,假設(shè)我們希望右邊的深層網(wǎng)絡(luò)與左邊的淺層網(wǎng)絡(luò)持平,即是可以理解為右邊的 3 層網(wǎng)絡(luò)相當(dāng)于沒(méi)增加 --- 輸入等于輸出。
03.1 恒等映射
所以,ResNet 的初衷,就是讓網(wǎng)絡(luò)擁有這種恒等映射能力,能在加深網(wǎng)絡(luò)的時(shí)候,至少能保證深層網(wǎng)絡(luò)和淺層網(wǎng)絡(luò)持平。ResNet 引入了殘差網(wǎng)絡(luò)結(jié)構(gòu) (Residual Network),通過(guò)這種殘差網(wǎng)絡(luò)結(jié)構(gòu),可以把網(wǎng)絡(luò)層弄得很深,甚至達(dá)到成百上千層。并且最終分類效果也非常好,殘差網(wǎng)絡(luò)基本結(jié)構(gòu)如圖:

殘差網(wǎng)絡(luò)借鑒了高速網(wǎng)絡(luò) (Higeway Network) 的跨層連接思想,但與其有些許不同 (殘差項(xiàng)本是帶權(quán)值的,但 ResNet 用恒等映射代替之)。
在上圖的殘差網(wǎng)絡(luò)結(jié)構(gòu)圖中,通過(guò) “shortcut connections (捷徑連接)” 的方式,直接把輸入 x 傳到輸出作為初始結(jié)果,輸出結(jié)果為 H(x)=F(x)+x,當(dāng) F(x)=0 時(shí),那么 H(x)=x,也就是上面所提到的恒等映射。于是,ResNet 相當(dāng)于將學(xué)習(xí)目標(biāo)改變了,不再是學(xué)習(xí)一個(gè)完整的輸出,而是目標(biāo)值H(X) 和 x 的差值,也就是所謂的殘差 F(x) := H(x)-x,因此,后面的訓(xùn)練目標(biāo)就是要將殘差結(jié)果逼近于 0,使到隨著網(wǎng)絡(luò)加深,準(zhǔn)確率不下降。
這種殘差跳躍式的結(jié)構(gòu),打破了傳統(tǒng)的神經(jīng)網(wǎng)絡(luò) n-1 層的輸出只能給 n 層作為輸入的慣例,使某一層的輸出可以直接跨過(guò)幾層作為后面某一層的輸入,其意義在于為疊加多層網(wǎng)絡(luò)而使得整個(gè)學(xué)習(xí)模型的錯(cuò)誤率不降反升的難題提供了新的方向。
下圖的網(wǎng)絡(luò)結(jié)構(gòu)圖中,從左到右分別是 VGG,沒(méi)有殘差的 PlainNet,以及有殘差的 ResNet,從這張圖中可以感受到當(dāng)年 ResNet 對(duì) VGG 的統(tǒng)治力。

03.2 通道維度不同如何解決?
可以看到里面的殘差網(wǎng)絡(luò)結(jié)構(gòu)有些是實(shí)線,有些是虛線,有何區(qū)別?因?yàn)榻?jīng)過(guò) “shortcut connections (捷徑連接)” 后,H(x)=F(x) + x,如果 F(x) 和 x 的通道相同,則可直接相加,那么通道不同怎么相加呢。上圖中的實(shí)線、虛線就是為了區(qū)分這兩種情況的:
- 實(shí)線的 Connection 部分,由于通道相同,所以計(jì)算方式是 H(x)=F(x)+x。
- 虛線的的 Connection 部分,由于通道不同,采用的計(jì)算方式為 H(x)=F(x)+Wx,其中 W 是卷積操作,用來(lái)調(diào)整 x 維度的。
03.3 兩層殘差結(jié)構(gòu)和三層殘差結(jié)構(gòu)的不同

兩種結(jié)構(gòu)分別針對(duì) ResNet34(左圖)和 ResNet50/101/152(右圖),其目的主要就是為了降低參數(shù)的數(shù)目。
左圖是兩個(gè) 3x3x256 的卷積,參數(shù)數(shù)目: 3x3x256x256x2 = 1179648,右圖是第一個(gè) 1x1 的卷積把 256 維通道降到 64 維,然后在最后通過(guò) 1x1 卷積恢復(fù),整體上用的參數(shù)數(shù)目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,右圖的參數(shù)數(shù)量比左圖減少了 16.94 倍,因此,右圖的主要目的就是為了減少參數(shù)量,從而減少計(jì)算量。
對(duì)于常規(guī)的 ResNet,可以用于 34 層或者更少的網(wǎng)絡(luò)中(左圖);對(duì)于更深的網(wǎng)絡(luò)(如101層),則使用右圖,其目的是減少計(jì)算和參數(shù)量。
03.4 實(shí)驗(yàn)結(jié)果
作者對(duì)比了 18 層的神經(jīng)網(wǎng)絡(luò)和 34 層的神經(jīng)網(wǎng)絡(luò),發(fā)現(xiàn)殘差結(jié)構(gòu)確實(shí)解決了網(wǎng)絡(luò)退化問(wèn)題:

左圖為平原網(wǎng)絡(luò),34 層的網(wǎng)絡(luò)比 18 層的網(wǎng)絡(luò)誤差率更高;右圖為殘差網(wǎng)絡(luò)結(jié)構(gòu)模型,深層網(wǎng)絡(luò)比淺層網(wǎng)絡(luò)誤差率更低。
04 總結(jié)
ResNet 在 ILSVRC 2015 競(jìng)賽中驚艷亮相,一下子將網(wǎng)絡(luò)深度提升到 152 層,將錯(cuò)誤率降到了3.57,在圖像識(shí)別錯(cuò)誤率和網(wǎng)絡(luò)深度方面,比往屆比賽有了非常大的提升,ResNet 毫無(wú)懸念地奪得了 ILSVRC 2015 的第一名。如下圖所示:

在 ResNet 的作者的第二篇相關(guān)論文《Identity Mappings in Deep Residual Networks》中,提出了 ResNet V2。ResNet V2 和 ResNet V1 的主要區(qū)別在于,作者通過(guò)研究 ResNet 殘差學(xué)習(xí)單元的傳播公式,發(fā)現(xiàn)前饋和反饋信號(hào)可以直接傳輸,因此 “shortcut connection”(捷徑連接)的非線性激活函數(shù)(如 ReLU)替換為 Identity Mappings。同時(shí),ResNet V2 在每一層中都使用了 Batch Normalization。這樣處理后,新的殘差學(xué)習(xí)單元比以前更容易訓(xùn)練且泛化性更強(qiáng)。
如果您覺(jué)得文章對(duì)您有幫助,歡迎點(diǎn)贊,轉(zhuǎn)發(fā),評(píng)論,關(guān)注個(gè)人公眾號(hào)。
