ResNet (Residual Neural Network幼衰,殘差網(wǎng)絡(luò))由微軟研究院何凱明等人提出的,通過在深度神經(jīng)網(wǎng)絡(luò)中加入殘差單元(Residual Unit)使得訓(xùn)練深度比以前更加高效谦絮。ResNet在2015年的ILSVRC比賽中奪得冠軍,ResNet的結(jié)構(gòu)可以極快的加速超深神經(jīng)網(wǎng)絡(luò)的訓(xùn)練洁仗,模型準(zhǔn)確率也有非常大的提升层皱。
ResNet V1
在ResNet之前,瑞士教授Schimidhuber提出了Highway Network,其原理與ResNet非常相似。通常認(rèn)為神經(jīng)網(wǎng)絡(luò)的深度對(duì)其性能非常重要坠非,但是網(wǎng)絡(luò)越深訓(xùn)練越困難免糕,Highway Network的目標(biāo)就是解決極深的神經(jīng)網(wǎng)絡(luò)難以訓(xùn)練的問題。
Highway Network相當(dāng)于修改了每一層激活函數(shù),此前激活函數(shù)只是對(duì)輸入做一次非線性變換y=H(x, Wh), 而Highway Network則允許保留一部分比例的原始輸入x,即y=H(x, Wh)* T(x , Wt)+x*C(x, Wc),其中T為變換系數(shù)钉赁,C為保留系數(shù),論文中令C=1-T携茂。這樣前面一層的信息你踩,有一定比例可以不經(jīng)過矩陣乘法和非線性變換,直接傳輸?shù)较乱粚踊淇啵路鹨粭l信息高速公路带膜,因此得名Highway Network。
ResNet和Highway Network非常相似鸳谜,也是允許原始輸入信息直接輸出到后面的層中膝藕。ResNet最初的靈感出自這樣一個(gè)問題:在不斷加深的網(wǎng)絡(luò)中,會(huì)出現(xiàn)一個(gè)Degradation的問題咐扭,即準(zhǔn)確率會(huì)先升然后達(dá)到飽和芭挽,在持續(xù)加深網(wǎng)絡(luò)反而會(huì)導(dǎo)致網(wǎng)絡(luò)準(zhǔn)確率下降。而且這并非是由于過擬合導(dǎo)致的蝗肪,因?yàn)槠洳粌H在測(cè)試集上誤差增大袜爪,訓(xùn)練集本身誤差也會(huì)增大。假設(shè)有一個(gè)比較淺的網(wǎng)絡(luò)達(dá)到了飽和的準(zhǔn)確率薛闪,在后面加上幾個(gè)y=x的全等映射層辛馆,起碼誤差不會(huì)增加,即更深的網(wǎng)絡(luò)不應(yīng)該帶來訓(xùn)練集上的誤差上升豁延,而這里提到的使用全等映射直接將前一層輸出傳到后面的思想昙篙,就是ResNet的靈感來源腊状。假定某神經(jīng)網(wǎng)絡(luò)的輸入是x,期望輸出是H(x)苔可,如果我們直接把輸入x傳到輸出作為初始結(jié)果缴挖,那么此時(shí)我們需要學(xué)習(xí)的目標(biāo)就是F(x) = H(x) - x。一個(gè)殘差學(xué)習(xí)單元(Residual Unit)如下圖所示硕蛹,ResNet相當(dāng)于將學(xué)習(xí)目標(biāo)改變了醇疼,不再是學(xué)習(xí)一個(gè)完整的輸出H(x),只是輸出和輸入的差別H(x) - x法焰,即殘差。下面我們?cè)倏匆幌耉GG19倔毙,一個(gè)34層深的普通卷積網(wǎng)絡(luò)和34層深的ResNet網(wǎng)絡(luò)的對(duì)比圖埃仪。可以看到普通直連的卷積網(wǎng)絡(luò)和ResNet的最大區(qū)別在于陕赃,ResNet有很多旁路的支線將輸入直接連到后面的層卵蛉,使得后面的層可以直接學(xué)習(xí)殘差,這種結(jié)構(gòu)也被稱為shortcut或skip connections么库。
傳統(tǒng)的卷積層或全連接層在傳遞信息時(shí)傻丝,或多或少會(huì)存在信息丟失、損耗等問題诉儒。ResNet在某種程度上解決了這個(gè)問題葡缰,通過直接將輸入信息繞道傳到輸出,保護(hù)信息的完整性忱反,整個(gè)網(wǎng)絡(luò)只需要學(xué)習(xí)輸入泛释、輸出差別的那一部分,簡(jiǎn)化學(xué)習(xí)目標(biāo)和難度温算。 殘差學(xué)習(xí)單元可以有不同的層數(shù)怜校,如下圖所示。兩層殘差單元中包含兩個(gè)相同輸出通道數(shù)(因?yàn)闅埐畹扔谀繕?biāo)輸出減去輸入注竿,因此輸入輸出維度需保持一致)的3*3卷積茄茁;而3層的殘差網(wǎng)絡(luò)則使用了1*1卷積,并且是在中間3*3的前后都使用了1*1卷積巩割,有先降維在升維的操作裙顽。
此外,ResNet論文中還提到了針對(duì)輸出和輸入維度不同時(shí)的做法喂分。當(dāng)輸入輸出相同時(shí)使用的是恒等快捷連接(Identity shortcuts)锦庸,當(dāng)輸入輸出維度不同時(shí)使用的是投影快捷連接(下圖2)和填充零。
如上所示蒲祈,投影快捷連接相當(dāng)于對(duì)原始輸入做了一個(gè)線性映射變換維度使得其維度與F(x, W)維度相同甘萧。 ResNet論文中作者嘗試了3種不同的殘差單元快捷連接方式:(A)零填充快捷連接用來增加維度萝嘁,這時(shí)所有的快捷連接仍然都是沒有參數(shù)的;(B)投影快捷連接用來增加維度扬卷,其他的快捷連接是恒等的牙言;(C)所有的快捷連接都是投影連接。比較結(jié)果見下圖怪得。
結(jié)果顯示徒恋,B比A略好蚕断,這是因?yàn)锳中的零填充確實(shí)沒有殘差學(xué)習(xí)。而C比B稍好入挣,這是由于投影快捷連接引入了額外參數(shù)亿乳。但A、B径筏、C之間的細(xì)微差異表明投影連接對(duì)于解決退化問題不是至關(guān)重要的葛假,而不/少使用投影連接可以減少內(nèi)存/時(shí)間復(fù)雜性和模型大小。而且無參數(shù)恒等快捷連接對(duì)于瓶頸架構(gòu)(3層殘差學(xué)習(xí)單元)尤為重要滋恬,因?yàn)槠款i架構(gòu)中層具有較小的輸入輸出聊训,快捷連接是連接到兩個(gè)高維端,此時(shí)恒等快捷連接無需參數(shù)恢氯,而使用投影的話則會(huì)顯示時(shí)間和模型復(fù)雜度加倍带斑。因此,恒等快捷連接可以為瓶頸設(shè)計(jì)得到更有效的模型酿雪。
最后遏暴,作者嘗試了更深的1000層以上的神經(jīng)網(wǎng)絡(luò),發(fā)現(xiàn)神經(jīng)網(wǎng)絡(luò)仍然能夠較好的學(xué)習(xí)指黎,但是其測(cè)試誤差比100多層的殘差網(wǎng)絡(luò)要差朋凉,而訓(xùn)練誤差則與100多層的殘差網(wǎng)絡(luò)相似,作者認(rèn)為這可能是由于過擬合導(dǎo)致的醋安,可通過加大正則化來解決這一問題杂彭。
ResNet V2
在ResNet V1中,作者研究通過加入殘差單元使得訓(xùn)練深度達(dá)到上百層的神經(jīng)網(wǎng)絡(luò)成為可能吓揪,解決了梯度消失/爆炸的問題亲怠。而在ResNet V2中作者進(jìn)一步證明了恒等映射(Identity mapping)的重要性。同時(shí)作者還提出了一種新的殘差單元(采用了預(yù)激活)使得訓(xùn)練變得更簡(jiǎn)單柠辞,同時(shí)還提高了模型的泛化能力团秽。
在ResNet V2中,作者提出了不止在殘差單元內(nèi)部,而是在整個(gè)神經(jīng)網(wǎng)絡(luò)中都創(chuàng)建了‘直接’的計(jì)算傳播路徑习勤。在ResNet V1中踪栋,殘差學(xué)習(xí)單元的
其中h(x) = x。而通過遞歸图毕,對(duì)于任意深的單元L和任意淺的單元l夷都,可以得到:
上式同樣表明了在一個(gè)mini-batch中不可能出現(xiàn)梯度消失的現(xiàn)象党饮,因?yàn)樯鲜角髮?dǎo)的第二部分對(duì)于一個(gè)mini-batch來說,不可能所有樣本其導(dǎo)數(shù)都為-1笆焰,因此劫谅,可能會(huì)出現(xiàn)權(quán)重很小的情況,但是不會(huì)出現(xiàn)梯度消失的情況嚷掠。
作者研究了使用不同函數(shù)來代替殘差單元中的恒等映射:通過研究這些不同的快捷連接,作者發(fā)現(xiàn)大部分快捷連接方式無法很好地收斂荞驴,其中很大部分是由于使用這些快捷連接后或多或少會(huì)出現(xiàn)梯度消失或者梯度爆炸的現(xiàn)象不皆,最后結(jié)果顯示恒等映射效果最好。
雖然恒等映射在這些方法中表寫結(jié)果最好熊楼,仍需引起注意的是1×1的卷積捷徑連接引入了更多的參數(shù)霹娄,本應(yīng)該比恒等捷徑連接具有更加強(qiáng)大的表達(dá)能力。事實(shí)上鲫骗,shortcut-only gating 和1×1的卷積涵蓋了恒等捷徑連接的解空間(即犬耻,他們能夠以恒等捷徑連接的形式進(jìn)行優(yōu)化)。然而执泰,它們的訓(xùn)練誤差比恒等捷徑連接的訓(xùn)練誤差要高得多枕磁,這表明了這些模型退化問題的原因是優(yōu)化問題,而不是表達(dá)能力的問題术吝。
同時(shí)作者還研究了在殘差單元中不同位置使用激活函數(shù)的效果计济,如激活是在BN之前還是在BN之后等,如下圖所示:在上圖b中沦寂,采用先加后BN再激活的方法,此時(shí)f(x)就包含了BN和ReLU淘衙。這樣的結(jié)果比原始a要差传藏。這主要是因?yàn)锽N層改變了流經(jīng)快捷連接的信號(hào),阻礙了信息的傳遞。
在c中毯侦,ReLU在相加之前哭靖,此時(shí)f(x)=x,為恒等映射叫惊。此時(shí)殘差單元中的F(x)輸出經(jīng)由ReLU后變?yōu)榉秦?fù)款青,然而一個(gè)“殘差”函數(shù)的輸出應(yīng)該是(?∞,+∞) 的。造成的結(jié)果就是霍狰,前向傳遞的信號(hào)是單調(diào)遞增的抡草。這會(huì)影響表達(dá)能力,結(jié)果也變得更差了蔗坯。
在d康震、e中分別使用了ReLU的預(yù)激活和全激活(其BN和ReLU都放在權(quán)重層前面)。而且在這兩種方式中宾濒,激活函數(shù)對(duì)于任意的l腿短,僅對(duì)F路徑造成影響:結(jié)果顯示,只使用ReLU預(yù)激活(d)的結(jié)果與原始ResNet結(jié)果很接近绘梦,這個(gè)與ReLU層不與BN層連接使用橘忱,因此無法獲得BN所帶來的好處。而當(dāng)BN和ReLU都使用在預(yù)激活上時(shí)(e)卸奉,結(jié)果得到了可觀的提升钝诚。
預(yù)激活的影響有兩個(gè)方面:第一,由于f(x)也是恒等映射榄棵,相比于V1優(yōu)化變得更加簡(jiǎn)單凝颇;第二,在預(yù)激活中使用BN能提高模型的正則化疹鳄。
對(duì)于f(x)為恒等映射的好處:一方面若使用f= ReLU拧略,如果信號(hào)是負(fù)的時(shí)候會(huì)造成一定的影響,無法傳遞有用的負(fù)信號(hào)瘪弓,而當(dāng)殘差單元很多時(shí)垫蛆,這個(gè)影響將會(huì)變得尤為突出;另一方面當(dāng)f是一個(gè)恒等映射時(shí)杠茬,信號(hào)在兩個(gè)單元間能夠很直接的傳遞月褥。
ResNext
在ResNet V1中作者提出了殘差學(xué)習(xí)單元,并從理論和實(shí)驗(yàn)上證明使用直連的shortcuts有助于解決深度達(dá)到上百層的神經(jīng)網(wǎng)絡(luò)的訓(xùn)練問題瓢喉。而在ResNet V2中作者證明了在shortcuts中使用直接映射(即H(x) = h(x) + F(x)中h(x) = x)得到的效果最好宁赤。在ResNext中作者將bottleneck拆分成多個(gè)分支,提出了神經(jīng)網(wǎng)絡(luò)中的第三個(gè)維度(另外兩個(gè)維度分別為depth栓票,神經(jīng)網(wǎng)絡(luò)層數(shù)深度决左,width愕够,寬度,channel數(shù))佛猛,命名為Cardinality
惑芭,并在多個(gè)數(shù)據(jù)集中證明了將bottleneck拆分能夠降低訓(xùn)練錯(cuò)誤率和提高準(zhǔn)確率。
ResNext的靈感來源于VGG/ResNet和Inception:(1)在VGG继找、ResNet中遂跟,作者使用了相同結(jié)構(gòu)的卷積層進(jìn)行了堆疊,構(gòu)建了層數(shù)很深但是結(jié)構(gòu)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)婴渡;(2)而在Inception中幻锁,提出了一種叫做split-transform-merge
的策略,將輸入(采用1x1 卷積核)分裂為幾個(gè)低維 embedding边臼,再經(jīng)過一系列特定卷積層的變換哄尔,最后連接在一起。
而在ResNet中柠并,作者將原ResNet bottleneck中的一條path拆分為多個(gè)分支(multi branch)岭接,以此分支數(shù)量提出神經(jīng)網(wǎng)絡(luò)中的第三個(gè)重要維度——Cardinality。這一想法結(jié)合了VGG中的相同結(jié)構(gòu)堆疊和Inception中的split-transform-merge策略臼予,即如上圖所示鸣戴,每個(gè)bottleneck 拆分為多個(gè)分支進(jìn)行堆疊,這些分支的結(jié)構(gòu)相同(這里借鑒了VGG的思想)粘拾,而具體到分支的結(jié)構(gòu)時(shí)又采用了Inception的split-transform-merge策略葵擎。與Inception不同的是Inception的每個(gè)分支結(jié)構(gòu)都是需要認(rèn)為的設(shè)計(jì),而在ResNext中每個(gè)分支結(jié)構(gòu)都相同半哟。最終每個(gè)bottleneck的輸出就變成了:
這些所有的bottlenecks結(jié)構(gòu)都遵循兩個(gè)原則:
- (i) if producing spatial maps of the same size, the blocks share the same hyper-parameters (width and filter sizes). 如果生成的相同的feature map寓涨,則此block應(yīng)有相同的結(jié)構(gòu)(channel數(shù)量和卷積核大小)氯檐;
- (ii) each time when the spatial map is downsampled by a factor of 2, the width of the blocks is multiplied by a factor of 2. 每次當(dāng)feature map進(jìn)行1/2下采樣時(shí)戒良,blocks的寬度都要增加兩倍,即channel變?yōu)閮杀豆谏恪_@一條保證了所有blocks的計(jì)算量相同糯崎。
作者提出了 三種效果相同的ResNext的表示方法,如下圖所示:
其中a,b 結(jié)構(gòu)相似河泳,只是在merge這一步的地方不同沃呢,而c則借鑒了AlexNet中分組卷積的思想,將輸入和輸出都分為多個(gè)組拆挥。
作者首先評(píng)估權(quán)衡了cardinality和width的關(guān)系薄霜。
在保證相同模型復(fù)雜度(參數(shù))和計(jì)算量的前提下,作者評(píng)測(cè)了cardinality和width的重要度。接著打月,作者又評(píng)估了使用增加cardinality和depth/width來增加模型復(fù)雜度后的效果:
- (i) Going deeper to 200 layers. We adopt the ResNet-200队腐,增加深度;
- (ii) Going wider by increasing the bottleneck width奏篙,增加寬度(channel)柴淘;
- (iii) Increasing cardinality by doubling C,增加cardinality(path數(shù)量).
最后为严,作者還研究了shortcuts對(duì)于ResNext的重要性,在ResNet-50中肺稀,不使用shortcuts準(zhǔn)確率下降了7%第股,而在ResNext-50中準(zhǔn)確率也下降了4%,說明shortcuts對(duì)于殘差網(wǎng)絡(luò)來說確實(shí)是非常重要的话原。
簡(jiǎn)言之夕吻,增加cardinality比增加depth和width效果要好,同時(shí)繁仁,shortcuts對(duì)于模型的準(zhǔn)確率也是至關(guān)重要的涉馅。
參考:
Deep Residual Learning for Image Recognition.
Aggregated Residual Transformations for Deep Neural Networks.
Identity Mappings in Deep Residual Networks.
ResNet論文翻譯——中文版
Identity Mappings in Deep Residual Networks(譯)
TensorFlow實(shí)現(xiàn)經(jīng)典卷積網(wǎng)絡(luò). 黃文堅(jiān),唐源