Date: 2020/02/28
Author: CW
前言:
殘差網(wǎng)絡(luò)(ResNet)絕對算得上是深度學(xué)習(xí)模型中的網(wǎng)紅,哦不颖医,應(yīng)該是名流了位衩,自從2015年它在ImageNet比賽的分類任務(wù)中拿下冠軍后便一炮而紅,而且至今“久盛不衰”熔萧,幾乎各類視覺任務(wù)都能見到它的身影糖驴。
這時候大伙就難免有疑問了——這貨憑啥這么紅這么火啊佛致?真有那么6嗎贮缕?
CW剛開始也有這樣的疑問,于是下功夫研究了一番俺榆,發(fā)現(xiàn)這貨的殘差結(jié)構(gòu)確實簡單好使感昼,解決了深度學(xué)習(xí)歷程中的一個重大難題(若這個問題沒解決,可能深度學(xué)習(xí)就不能那么深了)罐脊,而且還方便集成的各種其它網(wǎng)絡(luò)模型中定嗓,同時沒有額外增加多少參數(shù)量。
由于這貨好使爹殊,因此很搶手蜕乡,許多煉丹者們對它進(jìn)行了五花八門的改造,玩出各種花樣梗夸,小有名氣的有使用分組卷積(Group Convolution)的 ResNeXt 以及加入了空間注意力(Channel Attention)機(jī)制的 SE-ResNet 和 SE-ResNeXt,另外還有加入混合注意力(Spacial & Channel Attention)機(jī)制的 Residual Attention Net 等一批想混出名堂的年輕人号醉,CW也都“查了它們的身份證”反症,對它們進(jìn)行了學(xué)習(xí)辛块,為了加深印象,基于pytorch框架對這些模型都手?jǐn)]了一遍铅碍,并且測試能跑通润绵,也進(jìn)行了訓(xùn)練,感興趣的朋友們可以私聊我分享一波胞谈。
注意到本文標(biāo)題沒尘盼?帶了個'family',意義很明確烦绳,即本文接下來介紹的這批網(wǎng)絡(luò)模型和 ResNet 都是一個家族的卿捎,它們都對原生的殘差網(wǎng)絡(luò)進(jìn)行了改造,以針對性更好地解決不同類型的任務(wù)径密。當(dāng)然午阵,文章首先會對大咖? ResNet 進(jìn)行介紹,其中若有不妥之處歡迎各路高手反饋與指點享扔,感恩底桂!
2020/05/05 更新:
Residual Nets Family 新增一位王者——ResNeSt!被譽(yù)為目前最強(qiáng)的 ResNet 改進(jìn)版惧眠,有興趣了解的朋友們可閱讀 CW 的這篇文:你的 ResNet 是時候更新了 —— ResNeSt 來也籽懦!
Outline
i). 殘差家族的宗師 —— ResNet
ii). 進(jìn)化 —— ResNetv2
iii). 分工合作 ——?ResNeXt
iv). 做事需有“輕重之分” —— SE-ResNet & SE-ResNeXt
v). 更強(qiáng)大、更細(xì)致氛魁、更專一 ——?Residual Attention Net
殘差家族的宗師 —— ResNet
Paper:?Deep Residual Learning for Image Recognition
談到深度學(xué)習(xí)暮顺,這個“深”可是很有代表性意義的,更深的網(wǎng)絡(luò)通常能學(xué)習(xí)到更豐富的特征呆盖,深度神經(jīng)網(wǎng)絡(luò)在許多圖像任務(wù)上取得了一系列的突破拖云,這些現(xiàn)象都表明了網(wǎng)絡(luò)深度的重要性。
這么說來应又,更深的網(wǎng)絡(luò)應(yīng)該比淺的網(wǎng)絡(luò)表現(xiàn)好宙项,但實驗發(fā)現(xiàn),網(wǎng)絡(luò)加深了株扛,準(zhǔn)確率卻下降了尤筐,或許大家都下意識地認(rèn)為可能是梯度消失/爆炸或過擬合造成的,然而并非這樣洞就。
由上圖可以知道盆繁,深層網(wǎng)絡(luò)在訓(xùn)練集上的表現(xiàn)并不如淺層網(wǎng)絡(luò),因此這不是過擬合造成的旬蟋。那么看來是梯度消失/爆炸咯油昂?對不起,讓你失望了,也不是冕碟!這個小case早已通過各種權(quán)重初始化(最常用的有 Xavier 和 Kaming 初始化)和 中間層歸一化(如 Batch Normalization拦惋,想要更多的了解可以看看CW的這篇文?來,讓你get到 Batch Normalization 的精髓安寺!)方法很大程度上解決了厕妖,不然幾十層的網(wǎng)絡(luò)在反向傳播時早就玩不下去了(無法收斂)答憔。
那到底是為啥呢雁佳?其實說來也有點“玄”。網(wǎng)絡(luò)更深扳缕,層數(shù)更多迎捺,需要訓(xùn)練的東西也就更多举畸,各層的參數(shù)和數(shù)據(jù)在訓(xùn)練過程中需要相互協(xié)同,即各層參數(shù)會基于輸入數(shù)據(jù)產(chǎn)生輸出破加,通過反向傳播計算誤差進(jìn)行更新俱恶,輸入輸出分布在經(jīng)過各層處理后分布可能改變,而各層的輸入是前一輪的輸出范舀,這意味著下一輪前向反饋過程中各層的輸入數(shù)據(jù)分布可能改變合是,于是這一輪擬合好的參數(shù)在下一輪反向傳播時更新的“方向”(這一輪叫你去北極,下一輪卻改口叫你去南極...)可能發(fā)生改變锭环,訓(xùn)練難度更大聪全,因此一昧地加深網(wǎng)絡(luò)反而導(dǎo)致了退化。
這就成了一個優(yōu)化問題辅辩,既然網(wǎng)絡(luò)加深了难礼,那么至少也得不差于淺層網(wǎng)絡(luò)吧,不然多尷尬呀玫锋,于是ResNet 拿出了它的大招——殘差學(xué)習(xí)蛾茉,構(gòu)造一個表現(xiàn)至少與對應(yīng)的淺層模型相當(dāng)?shù)纳顚幽P蛠磉M(jìn)行學(xué)習(xí),具體說來谦炬,是這樣:
假如淺層的輸出是x,經(jīng)過深層后节沦,輸出為H(x)键思,通常來說其它網(wǎng)絡(luò)模型的做法是訓(xùn)練擬合H(x),但是 ResNet 比較有個性甫贯,它把H(x)看作兩部分吼鳞,即H(x) = x + F(x),然后再訓(xùn)練擬合這兩部分叫搁。你可能會說赔桌,這不是多此一舉嗎供炎,搞毛線?你別看這操作簡單纬乍,但在優(yōu)化層面上可是有實質(zhì)性不同的碱茁,假如x已是最優(yōu)裸卫,那么f(x)在訓(xùn)練過程中將被push趨近于0仿贬,這樣,繼續(xù)加深網(wǎng)絡(luò)的話墓贿,網(wǎng)絡(luò)也一直處于最優(yōu)狀態(tài)而不輸于淺層網(wǎng)絡(luò)了茧泪。在這里,F(xiàn)(x) = H(x) - x 被稱為“殘差映射”(residual mapping)聋袋,而 x 則稱為 恒等映射(identity mapping)队伟。
上圖中的曲線連接稱作 shortcut connections(捷徑連接),簡稱shortcut幽勒,通常僅執(zhí)行恒等映射嗜侮,這種情況下,既沒有額外參數(shù)啥容,也不增加計算的復(fù)雜性锈颗;另一種情況就是x經(jīng)過中間各層后產(chǎn)生的F(x)的通道數(shù)與x不一致,此時的shortcut通常會包含卷積層將x的通道數(shù)映射到與F(x)一致咪惠,使得兩者可進(jìn)行加和(當(dāng)然击吱,它們的尺度也得一致)覆醇。
ResNet 中的殘差學(xué)習(xí)模塊有兩種形式炭臭,如下左圖的形式稱作 buliding block鞋仍,用于層數(shù)較少的模型凿试,右圖的形式稱作bottleneck板甘,降低參數(shù)數(shù)目(想一探究竟的朋友們可以自行了解下1x1卷積降低參數(shù)的原因)盐类,減少計算量在跳,使得模型能進(jìn)一步加深猫妙。
一起來看看使用了不同層數(shù)的 ResNet 結(jié)構(gòu),如下圖剪菱,其中 ResNet18 和 ResNet34 用的是building block,而ResNet50茫因、ResNet101和ResNet152用的是 bottleneck冻押,這些家伙里面“最愛拋頭露面”的是 ResNet50 和 ResNet101洛巢。
最后提一點稿茉,這里ResNet的名稱比如ResNet101并不是指其有101層漓库,101指的僅僅是卷積層和全連接層的數(shù)目,諸如池化層彪薛、歸一化層和激活層等這些家伙(內(nèi)心獨白:我們就不配擁有地位嗎!城侧?)并沒有算進(jìn)去嫌佑,計算一下便可知:101 = 1 + (3 + 4 + 23 + 3) x 3 + 1歧强,首尾的兩個1分別對應(yīng)開頭的 conv1 和末尾的 fc肤京,中間是 conv2_x,conv3_x棋枕,conv4_x 和 conv5_x 總共的卷積層數(shù)目。
進(jìn)化 —— ResNetv2 vs ResNet
Paper:?Identity Mappings in Deep Residual Networks
ResNet 是一個很有個性的家伙窥浪,2015年成名后漾脂,它進(jìn)行了一年的修煉,對自己最為得意的殘差結(jié)構(gòu)進(jìn)行了各種魔改姜钳,然后進(jìn)行實驗辙浑,根據(jù)實驗結(jié)果選取最優(yōu)秀的那個例衍,最終于2016年進(jìn)化成ResNetv2佛玄。
在學(xué)習(xí)過程中般贼,相比結(jié)果哼蛆,過程才是最重要的腮介,這才是成長的時刻叠洗。因此先拋開結(jié)果不談,一起來看看上圖中的各種殘差模塊腾节,你知道哪個是 ResNet 最開始用的么荤牍,你認(rèn)為各種結(jié)構(gòu)的合理/不合理性哪里救湖?
一眼看去鞋既,貌似中間的(3)很合理,殘差中使用的是 weight(也就是卷積Conv)->BN->ReLU棕兼,屬于我們的常規(guī)操作靶衍,但是你仔細(xì)想想颅眶,由于最后是ReLU铡原,這樣殘差中出來的結(jié)果就是非負(fù)的燕刻,經(jīng)過多次的前向反饋后可能會單調(diào)遞增,影響網(wǎng)絡(luò)的表征能力忌怎,因此我們希望殘差出來后的結(jié)果分布均勻孽惰。
OK坦报,明白了片择,那試著把(3)中殘差里最后的 BN+ReLU 移到恒等映射和殘差加和之后像(2)一樣呢字管?這樣的話其實相當(dāng)于抵消殘差學(xué)習(xí)的作用了,把 H(x) = x + F(x) 變成了 H(x) = G(x + F(x))信不,實質(zhì)上就是擬合一個 G(x') 了嘲叔,和 H(x) 本質(zhì)無異。
更具體地來說明下抽活,在 ResNet 里硫戈,,通過遞歸計算下硕,對于深層的第L(L > l)層丁逝,
汁胆,相應(yīng)地谢谦,反向傳播為:
以上這個式子揭示了重要信息:
1). 深層的梯度得以傳遞回淺層
;
2).?的梯度不會輕易消失喜滨,由以上化簡結(jié)果可知辜膝,括號內(nèi)右邊通常不會持續(xù)輸出-1
因此忱辅,要達(dá)到以上效果,我們得盡量保持為恒等映射以及不要改變 addition 之后的分布。
這么一來签舞,就剩下(1)搂鲫、(4)和(5)了擦酌。
先看(1),addition 之后是 ReLU,沒有參數(shù)秋麸,反向傳播推導(dǎo)出來與上式一樣可缚,殘差中是 Conv + BN + ReLU,常規(guī)操作朝扼,并且最后沒有ReLU搂捧,沒毛病,ResNet中用到的就是它垒拢。
(4)和(5)呢仓技?貌似看不出所以然,光看無用雷袋,要用實踐證明蛋勺。ResNet 在修煉過程中通過實驗發(fā)現(xiàn)抱完,(4)和(1)效果差不多,而(5)表現(xiàn)最好纳账,可能是把 BN 放在殘差的最開始起到了正則化的作用。(5)這種結(jié)構(gòu)也稱作 Pre-Activation,意思是激活層放在卷積層前面棒旗,如 BN -> ReLU -> Conv喘批,相對地,常規(guī)操作是 Conv -> BN -> ReLU铣揉,稱作 Post-Activation饶深。
最終,ResNet 采用了(5)這種新型殘差模塊老速,進(jìn)化為ResNetv2粥喜。
分組合作 ——?ResNeXt
Paper:?Aggregated Residual Transformations for Deep Neural Networks
ResNet 的結(jié)構(gòu)是堆疊式的,即一層層模塊串行堆疊橘券,借鑒了VGG的做法额湘,而 GoogleNet 和 Inception 等流派通過實驗證明,在設(shè)計網(wǎng)絡(luò)時使用 split->transform->merge 的策略能取得很好的效果旁舰,于是 ResNeXt 將兩者的思想融合到一起锋华,作為“集大成者”于2017年出道。
ResNeXt 提到一個概念——Cardinality(簡寫C)箭窜,稱為自由度毯焕,paper原文的解釋是變換集的數(shù)目(the size of the set of transformations),ResNeXt 的名稱也源于此磺樱,'X' 指的是 neXt dimension纳猫。
如上圖右邊是 ResNeXt 的 block,其中C=32竹捉,將原輸入分成(split)32個分支進(jìn)行卷積變換(transform)后合成(merge)到一起芜辕,最后再加上shortcut構(gòu)成殘差模塊。注意這32個分支的結(jié)構(gòu)是一樣的块差,這樣就不需要對每個分支都設(shè)計對應(yīng)的深度以及卷積核的超參侵续,從而避免網(wǎng)絡(luò)加深時超參迅速膨脹倔丈。另外,每個分支先把輸入通道數(shù)(上圖是256d)壓縮到 xd(上圖是4d)状蜗,經(jīng)transform后在merge前再恢復(fù)至原來的通道數(shù)需五,使用類似上圖右邊這樣形式的 block 的 ResNeXt 稱作 ResNext32x4d,即將輸入分成32組轧坎,每組通道數(shù)壓縮至4宏邮。
為了保持與ResNet相當(dāng)?shù)膮?shù)量(而不額外增加),可以利用如下公式計算C和d眶根,拿上圖舉例:
之所以說 ResNeXt 是集大成者蜀铲,原因在于其不僅局限于上圖這一種形式,它利用堆疊和split-transform-merge的思想可產(chǎn)生許多變形結(jié)構(gòu)属百,可玩性很高记劝。
(a)是 ResNeXt 使用的原始形式,(b)是 類似于GoogleNet 和 Inception-ResNet 的等效形式族扰,(c)是使用了分組卷積(Group Convolution)的等價形式厌丑,通過實驗證明,(c)性能最好(速度最快)渔呵,而且結(jié)構(gòu)最為簡單怒竿,相比于 ResNet 幾乎不需做太多改造,主要是將bottleneck 中間那一層3x3卷積層改為使用分組卷積扩氢,通常 ResNeXt 多使用的是(c)耕驰。
做事需有“輕重之分” —— SE-ResNet & SE-ResNeXt
Paper:?Squeeze-and-Excitation Networks?(此處是 SENet 的paper)
自從2017-2018年期間不知哪位在業(yè)界喊了聲“注意力大法好”之后,深度學(xué)習(xí)領(lǐng)域的許多工作都轉(zhuǎn)向基于注意力(Attention)機(jī)制去研究录豺,SE-ResNet 和 SE-ResNeXt 就是把 SENet(Squeeze-And-Exitation Networks)那套給搬過來朦肘。另外,這里的注意力指的是通道注意力(Channel-Wise Attention)双饥,即每個通道的 feature map 都分配不同的權(quán)重媒抠,但同一個通道的各像素權(quán)重是相同的。
簡單說下這里通道注意力是怎么生成的咏花,如其名趴生,主要分為兩部分:
1). Squeeze:把 feature map 的 空間維度(H x W)壓縮至 1 x 1,可通過全局(平均/最大)池化完成昏翰;
2). Exitation:通過一系列 FC(Fully Connected Layer)和 ReLU 并最終通過 Sigmoid 學(xué)到每個通道的注意力因子(系數(shù))苍匆,可理解為權(quán)重系數(shù),通常第一個 FC 會將通道數(shù)壓縮棚菊,以減少計算量锉桑。
最終將各通道的注意力系數(shù)與對應(yīng)通道的 feature map 相乘便萬事大吉。
在 SE-ResNet 與 SE-ResNeXt 中窍株,SE block 用在 殘差分支后民轴,其中 SE-ResNet 的如下所示。
更強(qiáng)大球订、更細(xì)致后裸、更專一 ——?Residual Attention Net
Paper:?Residual Attention Network for Image Classification
上一節(jié)談到的 SE-ResNet 和 SE-ResNeXt 可能會讓你覺得并無創(chuàng)新點,那么本節(jié)介紹的這家伙—— Residual Attention Net (后文簡稱 Res-Atn-Net 吧冒滩,名字太長了...)就比較有意思了微驶,它的結(jié)構(gòu)主要分為兩部分,包括?主干(Trunk)和 軟掩膜分支(Soft Mask Branch)开睡,主干是殘差操作因苹,軟掩膜用于生成注意力因子,然后與主干的輸出相乘篇恒,接著扶檐,采用了殘差學(xué)習(xí)的思想把主干的輸出與結(jié)合了注意力的結(jié)果相加(相當(dāng)于這里把主干的輸出看作是恒等映射x,而軟掩膜輸出與主干輸出相乘的結(jié)果看作是殘差映射F(x))胁艰,最終構(gòu)成這樣的一個個注意力模塊款筑,堆疊起來。記主干的輸出為T(x)腾么,軟掩膜分支的輸出為M(x)奈梳,那么整個注意力模塊的輸出為:
T(x) + T(x)M(x) = (1 + M(x))
T(x)
1、Trunk(主干)
Res-Atn-Net 采用 Pre-Activation 形式的 ResNeXt 的 bottleneck解虱,把它們堆疊起來構(gòu)成 Trunk攘须。
2、Soft Mask(軟掩膜)
Soft Mask 包含 快速前饋掃描(fast feed-forward sweep)和 自上而下反饋(top-down feedback)步驟殴泰。前者用作快速收集圖像的全局信息于宙,后者用于將全局信息與原始特征圖相結(jié)合。具體來說艰匙,類似于 FCN(Fully-Convolutional Network)的操作限煞,先對輸入執(zhí)行幾次池化以快速增加感受野,達(dá)到最低分辨率后员凝,通過一個對稱的網(wǎng)絡(luò)結(jié)構(gòu)使用插值將特征放大回去署驻,然后接2個1×1卷積層,最后通過sigmoid層將輸出歸一化到 [0, 1] 區(qū)間 健霹。
另外旺上,在下采樣和上采樣之間還添加了跳躍連接(skip connections),以融合不同比例 feature map 的特征信息糖埋。
3宣吱、Mix Attention (空間注意力 + 通道注意力)
這里的注意力“更細(xì)致、更專一”瞳别,不像上一節(jié)的 SE-ResNet 和 SE-ResNeXt 只使用通道注意力征候,而是把空間注意力也結(jié)合上了杭攻,即不僅僅每個通道的 feature map 的注意力系數(shù)不同,而且同一通道內(nèi)每個像素的注意力系數(shù)也都不同疤坝。作者通過實驗發(fā)現(xiàn)兆解,與單純地使用空間注意力和通道注意力相比,這種混合注意力機(jī)制的效果最好跑揉,操作起來也簡單锅睛,直接對每個位置的像素點使用 Sigmoid:
4、Attention Residual Learning (注意力殘差學(xué)習(xí))
通過實驗發(fā)現(xiàn)历谍,單純地疊加注意力模塊會導(dǎo)致模型性能的下降现拒,原因主要是 Soft Mask 的輸出在 [0, 1] 區(qū)間,與 Trunk 輸出相乘后會使得輸出響應(yīng)變?nèi)跬蓿鄬盈B加的話容易使得最終輸出的特征圖每一點的值都變得很小印蔬。另外,Soft Mask 也有可能破壞 Trunk 中學(xué)到好的特征甜无。于是扛点,Res-Atn-Net 再次用上殘差大法,將得到的注意力特征圖與主干特征圖進(jìn)行 element-wised add:
其中岂丘,?為 Soft Mask 的輸出陵究,
為 Trunk 的輸出,前者可作為選擇器奥帘,使主干輸出特征圖中的有效特征增強(qiáng)铜邮,而噪聲被抑制。同時寨蹋,如果選擇器的選擇不好松蒜,那么相乘的部分可以被push趨向至0,保留主干輸出的結(jié)果已旧,使得主干不至于被破壞秸苗。于是,不斷地疊加這樣的注意力模塊便可以逐漸提升網(wǎng)絡(luò)的表達(dá)能力运褪,也就更“強(qiáng)大”惊楼。
另外,Soft?Mask 在反向傳播中還可起到梯度過濾的作用:
其中 θ 是 Soft Mask Branch 的參數(shù)秸讹,φ 是 Trunk 的參數(shù)檀咙,由于 Soft Mask 的輸出與 Trunk 的梯度相乘,因此可以減弱由于噪聲標(biāo)簽而產(chǎn)生的錯誤梯度更新 Trunk 參數(shù)的程度璃诀,使得網(wǎng)絡(luò)對噪聲標(biāo)簽更具魯棒性弧可。
這貨的亮點主要包含以上4部分,最后附上 Res-Atn-Net 的整體結(jié)構(gòu):
#最后
我覺得世界真的很有意思劣欢,許多道理在各個領(lǐng)域都是通用的棕诵,像殘差學(xué)習(xí)就告訴了我們不要遺忘歷史裁良,要把以往學(xué)到的東西保留下來,從歷史中汲取經(jīng)驗校套,看到其不足的同時趴久,去其糟粕而取其精華,這樣才能有所創(chuàng)新搔确。
參考:
https://cloud.tencent.com/developer/article/1405301
https://blog.csdn.net/lanran2/article/details/79057994
https://blog.csdn.net/lanran2/article/details/80247515
https://blog.csdn.net/c_chuxin/article/details/82948733
https://www.cnblogs.com/Matrix_Yao/p/9563063.html#resnet-v2-2016-jul