無處不在的殘差網(wǎng)絡(luò) (Residual Nets Family)
2020/05/05 更新:
Residual Nets Family 新增一位王者——ResNeSt!被譽(yù)為目前最強(qiáng)的 ResNet 改進(jìn)版,有興趣了解的朋友們可以繼續(xù)關(guān)注我們“深藍(lán)學(xué)院”的文章~
全文大綱:
i) 殘差家族的宗師 — ResNet
ii) 進(jìn)化 — ResNetv2
iii) 分工合作 — ResNeXt
iv) 做事需有“輕重之分” — SE-ResNet & SE-ResNeXt
v) 更強(qiáng)大、更細(xì)致、更專一 — Residual Attention Net
以下為正文內(nèi)容,全是干貨,建議收藏加關(guān)注,定期推送獨(dú)家好文!
(作者簡(jiǎn)介位于文末)

前言
ResNet絕對(duì)算得上是深度學(xué)習(xí)模型中的網(wǎng)紅,哦不,應(yīng)該是名流了,自從2015年它在ImageNet比賽的分類任務(wù)中拿下冠軍后便一炮而紅,而且至今“久盛不衰”,幾乎各類視覺任務(wù)都能見到它的身影。
這時(shí)候大伙就難免有疑問了——這種模型怎么這么紅呢?
筆者也有過這樣的疑問,下功夫研究了一番后,發(fā)現(xiàn)這貨的殘差結(jié)構(gòu)確實(shí)簡(jiǎn)單好使,解決了深度學(xué)習(xí)歷程中的一個(gè)重大難題(若這個(gè)問題沒解決,可能深度學(xué)習(xí)就“不能那么深”了),而且還能很方便地集成到各種其它網(wǎng)絡(luò)架構(gòu)中,同時(shí)也沒有額外增加多少參數(shù)量。
由于這種模型好用,因此很搶手,許多煉丹者們對(duì)它進(jìn)行了五花八門的改造,玩出了各種花樣,小有名氣的有使用分組卷積(Group Convolution)的 ResNeXt 以及加入了空間注意力(Channel Attention)機(jī)制的 SE-ResNet 和 SE-ResNeXt。
另外還有加入混合注意力(Spacial & Channel Attention)機(jī)制的 Residual Attention Net 等一批想混出名堂的年輕人,CW也都“查了它們的身份證”,對(duì)它們進(jìn)行了學(xué)習(xí),為了加深理解,基于Pytorch框架對(duì)這些模型的源碼實(shí)現(xiàn)都手?jǐn)]了一遍并進(jìn)行了訓(xùn)練。
注意到本文標(biāo)題沒?帶了個(gè)'family',意義很明確,即本文接下來要介紹的這批網(wǎng)絡(luò)模型和ResNet?都是一個(gè)家族的,它們都對(duì)原生的殘差網(wǎng)絡(luò)進(jìn)行了改造,目的是為了更好地解決不同類型的任務(wù)。當(dāng)然,文章首先會(huì)對(duì)大咖? ResNet 進(jìn)行介紹,其中若有不妥之處歡迎各路高手反饋與指點(diǎn),感恩!
1、殘差家族的宗師 —— ResNet
Paper:?Deep Residual Learning for Image Recognition
談到深度學(xué)習(xí),這個(gè)“深”可是很有代表性意義的,更深的網(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)好,但實(shí)驗(yàn)發(fā)現(xiàn),網(wǎng)絡(luò)加深了,準(zhǔn)確率卻下降了,或許大家都下意識(shí)地認(rèn)為可能是梯度消失/爆炸或過擬合造成的,然而并非這樣。

由上圖可以知道,深層網(wǎng)絡(luò)在訓(xùn)練集上的表現(xiàn)并不如淺層網(wǎng)絡(luò),因此這不是過擬合造成的。那么看來是梯度消失/爆炸咯?對(duì)不起,讓你失望了,也不是!這個(gè)小case早已通過各種權(quán)重初始化(最常用的有?Xavier?和?Kaming?初始化)和 中間層歸一化(如?Batch Normalization)方法很大程度上解決了,不然幾十層的網(wǎng)絡(luò)在反向傳播時(shí)早就玩不下去了(無法收斂)。
那到底是為啥呢?其實(shí)說來也有點(diǎn)“玄”。網(wǎng)絡(luò)更深,層數(shù)更多,需要訓(xùn)練的東西也就更多,各層的參數(shù)和數(shù)據(jù)在訓(xùn)練過程中需要相互協(xié)同,即各層參數(shù)會(huì)基于輸入數(shù)據(jù)產(chǎn)生輸出,通過反向傳播計(jì)算誤差進(jìn)行更新,輸入輸出分布在經(jīng)過各層處理后分布可能改變,而各層的輸入是前一輪的輸出。
這意味著下一輪前向反饋過程中各層的輸入數(shù)據(jù)分布可能改變,于是這一輪擬合好的參數(shù)在下一輪反向傳播時(shí)更新的“方向”(這一輪叫你去北極,下一輪卻改口叫你去南極...)可能發(fā)生改變,訓(xùn)練難度更大,因此一昧地加深網(wǎng)絡(luò)反而導(dǎo)致了退化。
這就成了一個(gè)優(yōu)化問題,既然網(wǎng)絡(luò)加深了,那么至少也得不差于淺層網(wǎng)絡(luò)吧,不然多尷尬呀,于是ResNet 拿出了它的大招——?dú)埐顚W(xué)習(xí),構(gòu)造一個(gè)表現(xiàn)至少與對(duì)應(yīng)的淺層模型相當(dāng)?shù)纳顚幽P蛠磉M(jìn)行學(xué)習(xí),具體說來,是這樣:
假如淺層的輸出是x,經(jīng)過深層后,輸出為H(x),通常來說其它網(wǎng)絡(luò)模型的做法是訓(xùn)練擬合H(x),但是 ResNet 比較有個(gè)性,它把H(x)看作兩部分,即H(x) = x + F(x),然后再訓(xùn)練擬合這兩部分。
你可能會(huì)說,這不是多此一舉嗎?你別看這操作簡(jiǎn)單,但在優(yōu)化層面上可是有實(shí)質(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(捷徑連接),簡(jiǎn)稱shortcut,通常僅執(zhí)行恒等映射,這種情況下,既沒有額外參數(shù),也不增加計(jì)算的復(fù)雜性;另一種情況就是x經(jīng)過中間各層后產(chǎn)生的F(x)的通道數(shù)與x不一致,此時(shí)的shortcut通常會(huì)包含卷積層將x的尺寸與通道數(shù)映射到與F(x)一致,使得兩者可進(jìn)行element-wise add。
ResNet 中的殘差學(xué)習(xí)模塊有兩種形式,如下左圖的形式稱作 buliding block,用于層數(shù)較少的模型,右圖的形式稱作bottleneck,降低參數(shù)數(shù)目(想一探究竟的朋友們可以自行了解下1x1卷積降低參數(shù)的原因),減少計(jì)算量,使得模型能進(jìn)一步加深。

一起來看看使用了不同層數(shù)的 ResNet 結(jié)構(gòu),如下圖,其中 ResNet18 和 ResNet34 用的是building block,而ResNet50、ResNet101和ResNet152用的是 bottleneck,這些家伙里面“最愛拋頭露面”的是 ResNet50 和 ResNet101。
最后提一點(diǎn),這里ResNet的名稱比如ResNet101并不是指其有101層,101指的僅僅是卷積層和全連接層的數(shù)目,諸如池化層、歸一化層和激活層等這些家伙(內(nèi)心獨(dú)白:我們就不配擁有地位嗎!?)并沒有算進(jìn)去,計(jì)算一下便可知:101 = 1 + (3 + 4 + 23 + 3) x 3 + 1,首尾的兩個(gè)1分別對(duì)應(yīng)開頭的 conv1 和末尾的 fc,中間是 conv2_x,conv3_x,conv4_x 和 conv5_x 總共的卷積層數(shù)目。

2、進(jìn)化 —— ResNetv2 vs ResNet
Paper:?Identity Mappings in Deep Residual Networks
ResNet 是一個(gè)很有個(gè)性的家伙,2015年成名后,它進(jìn)行了一年的修煉,對(duì)自己最為得意的殘差結(jié)構(gòu)進(jìn)行了各種魔改,然后進(jìn)行實(shí)驗(yàn),根據(jù)實(shí)驗(yàn)結(jié)果選取最優(yōu)秀的那個(gè),最終于2016年進(jìn)化成ResNetv2。

在學(xué)習(xí)過程中,相比結(jié)果,過程才是最重要的,這才是成長(zhǎng)的時(shí)刻。因此先拋開結(jié)果不談,一起來看看上圖中的各種殘差模塊,你知道哪個(gè)是 ResNet 最開始用的么,你認(rèn)為各種結(jié)構(gòu)的合理/不合理性哪里?
一眼看去,貌似中間的(3)很合理,殘差中使用的是 weight(也就是卷積Conv)->BN->ReLU,屬于我們的常規(guī)操作,但是你仔細(xì)想想,由于最后是ReLU,這樣殘差中出來的結(jié)果就是非負(fù)的,經(jīng)過多次的前向反饋后

可能會(huì)單調(diào)遞增,影響網(wǎng)絡(luò)的表征能力,因此我們希望殘差出來后的結(jié)果分布均勻。
OK,明白了,那試著把(3)中殘差里最后的 BN+ReLU 移到恒等映射和殘差加和之后像(2)一樣呢?這樣的話其實(shí)相當(dāng)于抵消殘差學(xué)習(xí)的作用了,把 H(x) = x + F(x) 變成了 H(x) = G(x + F(x)),實(shí)質(zhì)上就是擬合一個(gè) G(x') 了,和 H(x) 本質(zhì)無異。
更具體地來說明下,在 ResNet 里,

,通過遞歸計(jì)算,對(duì)于深層的第L(L > l)層,
,相應(yīng)地,反向傳播為:

?
以上這個(gè)式子揭示了重要信息:
1). 深層
的梯度得以傳遞回淺層

;
2).?
的梯度不會(huì)輕易消失,由以上化簡(jiǎn)結(jié)果可知,括號(hào)內(nèi)右邊通常不會(huì)持續(xù)輸出-1
因此,要達(dá)到以上效果,我們得盡量保持

為恒等映射以及不要改變 addition 之后的分布。
這么一來,就剩下(1)、(4)和(5)了。
先看(1),addition 之后是 ReLU,沒有參數(shù),反向傳播推導(dǎo)出來與上式一樣,殘差中是 Conv + BN + ReLU,常規(guī)操作,并且最后沒有ReLU,沒毛病,ResNet中用到的就是它。
(4)和(5)呢?貌似看不出所以然,光看無用,要用實(shí)踐證明。ResNet 在修煉過程中通過實(shí)驗(yàn)發(fā)現(xiàn),(4)和(1)效果差不多,而(5)表現(xiàn)最好,可能是把 BN 放在殘差的最開始起到了正則化的作用。(5)這種結(jié)構(gòu)也稱作?Pre-Activation,意思是激活層放在卷積層前面,如 BN -> ReLU -> Conv,相對(duì)地,常規(guī)操作是 Conv -> BN -> ReLU,稱作?Post-Activation。
最終,ResNet 采用了(5)這種新型殘差模塊,進(jìn)化為ResNetv2。

3、分組合作 ——?ResNeXt
Paper:?Aggregated Residual Transformations for Deep Neural Networks
ResNet 的結(jié)構(gòu)是堆疊式的,即一層層模塊串行堆疊,借鑒了VGG的做法,而 GoogleNet 和 Inception 等流派通過實(shí)驗(yàn)證明,在設(shè)計(jì)網(wǎng)絡(luò)時(shí)使用 split->transform->merge 的策略能取得很好的效果,于是 ResNeXt 將兩者的思想融合到一起,作為“集大成者”于2017年出道。
?

ResNeXt 提到一個(gè)概念——Cardinality(簡(jiǎn)寫C),稱為自由度,paper原文的解釋是變換集的數(shù)目(the size of the set of transformations),ResNeXt 的名稱也源于此,'X' 指的是 neXt dimension。
如上圖右邊是 ResNeXt 的 block,其中C=32,將原輸入分成(split)32個(gè)分支進(jìn)行卷積變換(transform)后合成(merge)到一起,最后再加上shortcut構(gòu)成殘差模塊。注意這32個(gè)分支的結(jié)構(gòu)是一樣的,這樣就不需要對(duì)每個(gè)分支都設(shè)計(jì)對(duì)應(yīng)的深度以及卷積核的超參,從而避免網(wǎng)絡(luò)加深時(shí)超參迅速膨脹。
另外,每個(gè)分支先把輸入通道數(shù)(上圖是256d)壓縮到 xd(上圖是4d),經(jīng)transform后在merge前再恢復(fù)至原來的通道數(shù),使用類似上圖右邊這樣形式的 block 的 ResNeXt 稱作 ResNext32x4d,即將輸入分成32組,每組通道數(shù)壓縮至4。
為了保持與ResNet相當(dāng)?shù)膮?shù)量(而不額外增加),可以利用如下公式計(jì)算C和d,拿上圖舉例:

之所以說 ResNeXt 是集大成者,原因在于其不僅局限于上圖這一種形式,它利用堆疊和split-transform-merge的思想可產(chǎn)生許多變形結(jié)構(gòu),可玩性很高。

(a)是 ResNeXt 使用的原始形式,(b)是 類似于GoogleNet 和 Inception-ResNet 的等效形式,(c)是使用了分組卷積(Group Convolution)的等價(jià)形式,通過實(shí)驗(yàn)證明,(c)性能最好(速度最快),而且結(jié)構(gòu)最為簡(jiǎn)單,相比于 ResNet 幾乎不需做太多改造,主要是將bottleneck 中間那一層3x3卷積層改為使用分組卷積,通常 ResNeXt 多使用的是(c)。
4、做事需有“輕重之分”?
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),即每個(gè)通道的 feature map 都分配不同的權(quán)重,但同一個(gè)通道的各像素權(quán)重是相同的。

簡(jiǎn)單說下這里通道注意力是怎么生成的,如其名,主要分為兩部分:
1) Squeeze:把 feature map 的 空間維度(H x W)壓縮至 1 x 1,可通過全局(平均/最大)池化完成;
2) Exitation:通過一系列 FC(Fully Connected Layer)和 ReLU 并最終通過 Sigmoid 學(xué)到每個(gè)通道的注意力因子(系數(shù)),可理解為權(quán)重系數(shù),通常第一個(gè) FC 會(huì)將通道數(shù)壓縮,以減少計(jì)算量。

最終將各通道的注意力系數(shù)與對(duì)應(yīng)通道的 feature map 相乘便萬事大吉。
在 SE-ResNet 與 SE-ResNeXt 中,SE block 用在 殘差分支后,其中 SE-ResNet 的如下所示。

5、更強(qiáng)大、更細(xì)致、更專一?
Residual Attention Net
Paper:?Residual Attention Network for Image Classification
上一節(jié)談到的 SE-R esNet 和 SE-ResNeXt 可能會(huì)讓你覺得并無創(chuàng)新點(diǎn),那么本節(jié)介紹的這家伙——?Residual Attention Net?(后文簡(jiǎn)稱?Res-Atn-Net?吧,名字太長(zhǎng)了...)就比較有意思了。
它的結(jié)構(gòu)主要分為兩部分,包括?主干(Trunk)和?軟掩膜分支(Soft Mask Branch),主干是殘差操作,軟掩膜用于生成注意力因子,然后與主干的輸出相乘,接著,采用了殘差學(xué)習(xí)的思想把主干的輸出與結(jié)合了注意力的結(jié)果相加(相當(dāng)于這里把主干的輸出看作是恒等映射x,而軟掩膜輸出與主干輸出相乘的結(jié)果看作是殘差映射F(x)),最終構(gòu)成這樣的一個(gè)個(gè)注意力模塊,堆疊起來。
記主干的輸出為T(x),軟掩膜分支的輸出為M(x),那么整個(gè)注意力模塊的輸出為:
T(x) + T(x)?*?M(x) = (1 + M(x))?*?T(x)

(Res-Atn-Net 結(jié)構(gòu))
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)的操作,先對(duì)輸入執(zhí)行幾次池化以快速增加感受野,達(dá)到最低分辨率后,通過一個(gè)對(duì)稱的網(wǎng)絡(luò)結(jié)構(gòu)使用插值將特征放大回去,然后接2個(gè)1×1卷積層,最后通過sigmoid層將輸出歸一化到 [0, 1] 區(qū)間 。
另外,在下采樣和上采樣之間還添加了跳躍連接(skip connections),以融合不同比例 feature map 的特征信息。
3、Mix Attention (空間注意力 + 通道注意力)
這里的注意力“更細(xì)致、更專一”,不像上一節(jié)的 SE-ResNet 和 SE-ResNeXt 只使用通道注意力,而是把空間注意力也結(jié)合上了,即不僅僅每個(gè)通道的 feature map 的注意力系數(shù)不同,而且同一通道內(nèi)每個(gè)像素的注意力系數(shù)也都不同。
作者通過實(shí)驗(yàn)發(fā)現(xiàn),與單純地使用空間注意力和通道注意力相比,這種混合注意力機(jī)制的效果最好,操作起來也簡(jiǎn)單,直接對(duì)每個(gè)位置的像素點(diǎn)使用 Sigmoid:

?4、Attention Residual Learning (注意力殘差學(xué)習(xí))
通過實(shí)驗(yàn)發(fā)現(xiàn),單純地疊加注意力模塊會(huì)導(dǎo)致模型性能的下降,原因主要是 Soft Mask 的輸出在 [0, 1] 區(qū)間,與 Trunk 輸出相乘后會(huì)使得輸出響應(yīng)變?nèi)?,多層疊加的話容易使得最終輸出的特征圖每一點(diǎn)的值都變得很小。
另外,Soft Mask 也有可能破壞 Trunk 中學(xué)到好的特征。于是,Res-Atn-Net 再次用上殘差大法,將得到的注意力特征圖與主干特征圖進(jìn)行 element-wised add:
其中,

?為 Soft Mask 的輸出,

為 Trunk 的輸出,前者可作為選擇器,使主干輸出特征圖中的有效特征增強(qiáng),而噪聲被抑制。
同時(shí),如果選擇器的選擇不好,那么相乘的部分可以被push趨向至0,保留主干輸出的結(jié)果,使得主干不至于被破壞。于是,不斷地疊加這樣的注意力模塊便可以逐漸提升網(wǎng)絡(luò)的表達(dá)能力,也就更“強(qiáng)大”。
另外,Soft?Mask 在反向傳播中還可起到梯度過濾的作用:

結(jié)合注意力后反向傳播中主干參數(shù)的更新
其中 θ 是 Soft Mask Branch 的參數(shù),φ 是 Trunk 的參數(shù),由于 Soft Mask 的輸出與 Trunk 的梯度相乘,因此可以減弱由于噪聲標(biāo)簽而產(chǎn)生的錯(cuò)誤梯度更新 Trunk 參數(shù)的程度,使得網(wǎng)絡(luò)對(duì)噪聲標(biāo)簽更具魯棒性。
這貨的亮點(diǎn)主要包含以上4部分,最后附上 Res-Atn-Net 的整體結(jié)構(gòu):


6、end
我覺得世界真的很有意思,許多道理在各個(gè)領(lǐng)域都是通用的,像殘差學(xué)習(xí)就告訴了我們不要遺忘歷史,殘差連接將淺層連接到深層,形象地來看,就是把以往學(xué)到的東西保留下來,從歷史中汲取經(jīng)驗(yàn),去其糟粕而取其精華,這樣才能有所創(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
作者簡(jiǎn)介?
CW,廣東深圳人,畢業(yè)于中山大學(xué)(SYSU)數(shù)據(jù)科學(xué)與計(jì)算機(jī)學(xué)院,畢業(yè)后就業(yè)于騰訊計(jì)算機(jī)系統(tǒng)有限公司技術(shù)工程與事業(yè)群(TEG)從事Devops工作,期間在AI LAB實(shí)習(xí)過,實(shí)操過道路交通元素與醫(yī)療病例圖像分割、視頻實(shí)時(shí)人臉檢測(cè)與表情識(shí)別、OCR等項(xiàng)目。目前也有在一些自媒體平臺(tái)上參與外包項(xiàng)目的研發(fā)工作,項(xiàng)目專注于CV領(lǐng)域(傳統(tǒng)圖像處理與深度學(xué)習(xí)方向均有)。