Deep Residual Learning for Image Recognition
1.背景
深度學(xué)習(xí)發(fā)展過程中最有名的一個(gè)問題就是反向傳播過程中梯度消失或爆炸的問題(往前回傳梯度越來越小箩祥,導(dǎo)致前層參數(shù)不更新)双戳。
但是目前也已經(jīng)通過標(biāo)準(zhǔn)化輸入(Normalized Initialization)以及中間層標(biāo)準(zhǔn)化(Batch Normalization)桶唐,采用隨機(jī)梯度下降解決了該問題赋元。
雖然解決了梯度消失或爆炸的問題,但是作者通過實(shí)驗(yàn)發(fā)現(xiàn)了新問題瘾婿,由經(jīng)驗(yàn)來說網(wǎng)絡(luò)越深瞄勾,特征表示應(yīng)該越好,學(xué)習(xí)效果應(yīng)該越好辛掠。通過20層和56層網(wǎng)絡(luò)的表現(xiàn)來看谢谦,網(wǎng)絡(luò)越深train和test反而都很差释牺,所以這個(gè)問題并不是由于過擬合而發(fā)生的退化。
作者提出假設(shè):這個(gè)問題是一個(gè)優(yōu)化問題回挽,越深的模型越難優(yōu)化没咙,起碼56層模型應(yīng)該能和20層模型表現(xiàn)一樣好,只需要56層模型的前20層和20層模型的參數(shù)一樣千劈,后面的網(wǎng)絡(luò)層參數(shù)只執(zhí)行一個(gè)恒等映射把x映射為x的策略就可以表現(xiàn)和20層模型效果一樣好祭刚。
2.殘差學(xué)習(xí)
作者基于恒等映射的思路提出了殘差學(xué)習(xí)框架以解決退化問題。假設(shè)當(dāng)前層輸入為x墙牌,通過網(wǎng)絡(luò)層之后映射為H(x)涡驮,現(xiàn)在不直接學(xué)習(xí)映射為H(x)的權(quán)重,通過一個(gè)快捷連接把映射后的結(jié)果F(x)和輸入x相加做為輸出的H(x)喜滨,這樣學(xué)習(xí)的F(x)=H(x)-x捉捅,只需要學(xué)習(xí)一個(gè)殘差即可與直接學(xué)習(xí)H(x)的映射參數(shù)達(dá)到一樣的效果。只要F(x)趨近于0虽风,就構(gòu)成了一個(gè)映射H(x) = x. 把殘差推至0和把此映射逼近另一個(gè)非線性層相比要容易的多棒口。
作者在ImageNet數(shù)據(jù)集上做了很多實(shí)驗(yàn)來證實(shí)退化問題,并且基于殘差學(xué)習(xí)的框架辜膝,評(píng)估自己的方法无牵。發(fā)現(xiàn)很深的殘差網(wǎng)絡(luò)也是容易優(yōu)化的,而且可以享受深度增加帶來的精度增加厂抖,成功地解決了層數(shù)增加時(shí)的退化問題茎毁。
3.相關(guān)的工作
殘差表示(Residual?Representations):
在圖像識(shí)別任務(wù)中,VLAD是基于詞典的殘差向量進(jìn)行編碼忱辅,被證明比編碼原始向量效果更好七蜘。
在低級(jí)視覺和計(jì)算機(jī)圖形學(xué)中,求解偏微分方程(PDE)耕蝉,通常是使用多重網(wǎng)格(Multigrid)法崔梗,把系統(tǒng)重建成多尺度的子問題,每個(gè)子問題負(fù)責(zé)求解出粗糙與精細(xì)尺度之間的殘差垒在,除此之外蒜魄,另一種求解PDE的方法是基于表達(dá)兩個(gè)尺度之間殘差的向量進(jìn)行的。結(jié)果證明了這些用殘差的解法收斂速度都比不用殘差的普通解法要快的多场躯。
快捷連接(Shortcut Connections):
快捷連接相關(guān)的實(shí)驗(yàn)和理論由來已久谈为。。在多層感知器網(wǎng)絡(luò)的早期實(shí)踐中就有添加少量的連接層用于解決梯度消失/爆炸的問題踢关。
Highway networks也使用了帶有門函數(shù)(gating functions)的快捷連接伞鲫。但是這些門函數(shù)需要參數(shù),而ResNet的快捷連接不需要參數(shù)签舞。而且當(dāng)Highway networks的門函數(shù)的快捷連接關(guān)閉時(shí)秕脓,相當(dāng)于沒有了殘差函數(shù)柒瓣,但是ResNet的快捷連接一直不會(huì)關(guān)閉,殘差函數(shù)能不斷學(xué)習(xí)吠架,優(yōu)化芙贫,當(dāng)層數(shù)增加后ResNet的表現(xiàn)效果也很好。
4.兩種恒等映射
自身連接:當(dāng)輸入輸出維度一致時(shí)傍药,構(gòu)造塊可這樣定義:
投影連接:當(dāng)輸入輸出維度不一致時(shí),可以對輸入進(jìn)行一個(gè)線性投影來匹配維度拐辽,構(gòu)造塊可這樣定義:
5.網(wǎng)絡(luò)結(jié)構(gòu)
設(shè)計(jì)原則:
對于輸出feature map大小相同的層拣挪,有相同數(shù)量的filters;
進(jìn)行pooling操作后俱诸,filters數(shù)量翻倍菠劝;
維度匹配用實(shí)線表示,維度不匹配用虛線表示乙埃。維度不匹配時(shí)闸英,可用zero padding來增加維度;或者乘以投影矩陣介袜。
減少了FC全連接層,參數(shù)比VGG-Net少了很多出吹,計(jì)算復(fù)雜度也降低了很多遇伞。
實(shí)現(xiàn):
采用BN,大小為256的mini-batch進(jìn)行隨機(jī)梯度下降捶牢,學(xué)習(xí)率0.1鸠珠,并進(jìn)行范圍搜索,迭代了600000次秋麸,權(quán)重衰減指數(shù)為0.0001渐排,動(dòng)量系數(shù)為0.9,沒有使用dropout灸蟆。
6.更深的瓶頸結(jié)構(gòu)
使用與GoogleNet相似的瓶頸層來提升效率可缚。結(jié)合自己的理解舉個(gè)例子說明一下(有錯(cuò)誤的話請指正)。假如input為28*28*256斋枢,使用三層連接塊的話帘靡,先用64個(gè)1*1*256的filters進(jìn)行卷積降維,然后只用一個(gè)3*3的filter瓤帚,最后用256個(gè)1*1*64的filters進(jìn)行升維描姚。
兩種設(shè)計(jì)具有相似的時(shí)間復(fù)雜度涩赢,如果把自身連接換成投影連接,時(shí)間復(fù)雜度和模型尺寸都會(huì)翻倍轩勘,瓶頸設(shè)計(jì)可以為自身連接帶來更高的效率谒主。
7.想法
從AlexNet霎肯,VGGNet,GoogleNet榛斯,ResNet一些列進(jìn)步可以看出認(rèn)清問題并敢于嘗試可能的解決辦法才是進(jìn)步的源泉观游,這個(gè)領(lǐng)域的實(shí)驗(yàn)當(dāng)然離不開硬件設(shè)備的支持,否則都無法進(jìn)行實(shí)驗(yàn)驮俗。雖然目前沒有很好的理論來解釋深度學(xué)習(xí)懂缕,但是可以不斷通過實(shí)驗(yàn)結(jié)果來反饋算法細(xì)節(jié)的可行性,這個(gè)領(lǐng)域還有很大的空間去進(jìn)行創(chuàng)新王凑。
參考資料:
文章地址:《Deep Residual Learning for Image Recognition》?arXiv.1512.03385
CS231n的課程視頻關(guān)于Resnet的一節(jié)? ? ? https://www.bilibili.com/video/av17204303/index_20.html?t=3629