ResNet在2015年被提出,在ImageNet比賽classification任務上獲得第一名邑蒋,因為它“簡單與實用”并存偎痛,之后很多方法都建立在ResNet50或者ResNet101的基礎上完成的决左,檢測撒踪,分割,識別等領域都紛紛使用ResNet浦箱,Alpha zero也使用了ResNet吸耿,所以可見ResNet確實很好用。
下面我們從實用的角度去看看ResNet酷窥。
1.ResNet意義
隨著網(wǎng)絡的加深咽安,出現(xiàn)了訓練集準確率下降的現(xiàn)象,我們可以確定這不是由于Overfit過擬合造成的(過擬合的情況訓練集應該準確率很高)蓬推;所以作者針對這個問題提出了一種全新的網(wǎng)絡妆棒,叫深度殘差網(wǎng)絡,它允許網(wǎng)絡盡可能的加深,其中引入了全新的結構如圖1糕珊;
殘差指的是什么动分?
其中ResNet提出了兩種mapping:
- 一種是identity mapping,指的就是圖1中”彎彎的曲線“红选。identity mapping顧名思義澜公,就是指本身,也就是公式中的xx纠脾。
- 另一種residual mapping玛瘸,指的就是除了”彎彎的曲線“那部分蜕青。而residual mapping指的是“差”苟蹈,也就是y?xy?x,所以殘差指的就是F(x)F(x)部分右核。
所以最后的輸出是 y=F(x)+xy=F(x)+x
為什么ResNet可以解決“隨著網(wǎng)絡加深慧脱,準確率不下降”的問題?
理論上贺喝,對于“隨著網(wǎng)絡加深菱鸥,準確率下降”的問題,Resnet提供了兩種選擇方式躏鱼,也就是identity mapping和residual mapping氮采,如果網(wǎng)絡已經(jīng)到達最優(yōu),繼續(xù)加深網(wǎng)絡染苛,residual mapping將被push為0鹊漠,只剩下identity mapping,這樣理論上網(wǎng)絡一直處于最優(yōu)狀態(tài)了茶行,網(wǎng)絡的性能也就不會隨著深度增加而降低了躯概。
2.ResNet結構
ResNet使用了一種連接方式叫做“shortcut connection”,顧名思義畔师,shortcut就是“抄近道”的意思娶靡,如圖1所示。
我們可以看到一個“彎彎的弧線“這個就是所謂的”shortcut connection“看锉,也是文中提到identity mapping姿锭,這張圖也詮釋了ResNet的真諦,當然大家可以放心伯铣,真正在使用的ResNet模塊并不是這么單一呻此,文章中就提出了兩種方式:
這兩種結構分別針對ResNet34(左圖)和ResNet50/101/152(右圖),一般稱整個結構為一個”building block“懂傀。其中右圖又稱為”bottleneck design”趾诗,目的一目了然,就是為了降低參數(shù)的數(shù)目,第一個1x1的卷積把256維channel降到64維恃泪,然后在最后通過1x1卷積恢復郑兴,整體上用的參數(shù)數(shù)目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的話就是兩個3x3x256的卷積贝乎,參數(shù)數(shù)目: 3x3x256x256x2 = 1179648情连,差了16.94倍。
對于常規(guī)ResNet览效,可以用于34層或者更少的網(wǎng)絡中却舀,對于Bottleneck Design的ResNet通常用于更深的如101這樣的網(wǎng)絡中,目的是減少計算和參數(shù)量(實用目的)锤灿。
3.ResNet50和ResNet101
圖3中一共提出了5種深度的ResNet挽拔,分別是18,34但校,50螃诅,101和152,首先看圖3的最左側状囱,我們發(fā)現(xiàn)所有的網(wǎng)絡都分成5部分术裸,分別是:conv1,conv2_x亭枷,conv3_x袭艺,conv4_x,conv5_x叨粘,之后的其他論文也會專門用這個稱呼指代ResNet50或者101的每部分猾编。
以101-layer為列,我們先看看101-layer是不是真的是101層網(wǎng)絡宣鄙,首先有個輸入7x7x64的卷積袍镀,然后經(jīng)過3 + 4 + 23 + 3 = 33個building block,每個block為3層冻晤,所以有33 x 3 = 99層苇羡,最后有個fc層(用于分類),所以1 + 99 + 1 = 101層鼻弧,確實有101層網(wǎng)絡设江;
注:101層網(wǎng)絡僅僅指卷積或者全連接層,而激活層或者Pooling層并沒有計算在內(nèi)攘轩;
這里我們關注50-layer和101-layer這兩列叉存,可以發(fā)現(xiàn),它們唯一的不同在于conv4_x度帮,ResNet50有6個block歼捏,而ResNet101有23個block稿存,差了17個block,也就是17 x 3 = 51層瞳秽。
[1] 代碼參考