resnet在2015名聲大噪,而且影響了2016年DL在學術界和工業界的發展方向。下面是這個resnet的網絡結構,大家先睹為快。
它對每層的輸入做一個reference, 學習形成殘差函數, 而不是學習一些沒有reference的函數。這種殘差函數更容易優化,能使網絡層數大大加深。
我們知道,在計算機視覺里,特征的“等級”隨增網絡深度的加深而變高,研究表明,網絡的深度是實現好的效果的重要因素。然而梯度彌散/爆炸成為訓練深層次的網絡的障礙,導致無法收斂。
有一些方法可以彌補,如歸一初始化,各層輸入歸一化,使得可以收斂的網絡的深度提升為原來的十倍。然而,雖然收斂了,但網絡卻開始退化了,即增加網絡層數卻導致更大的誤差, 如下圖。 這種deep plain net收斂率十分低下。
的確,通過在一個淺層網絡基礎上疊加y=x的層(稱identity mappings,恆等映射),可以讓網絡隨深度增加而不退化。這反映了多層非線性網絡無法逼近恆等映射網絡。
但是,不退化不是我們的目的,我們希望有更好性能的網絡。 resnet學習的是殘差函數F(x) = H(x) - x, 這里如果F(x) = 0, 那么就是上面提到的恆等映射。事實上,resnet是“shortcut connections”的在connections是在恆等映射下的特殊情況,它沒有引入額外的參數和計算復雜度。 假如優化目標函數是逼近一個恆等映射, 而不是0映射, 那么學習找到對恆等映射的擾動會比重新學習一個映射函數要容易。從下圖可以看出,殘差函數一般會有較小的響應波動,表明恆等映射是一個合理的預處理。
殘差塊的結構如下圖,
它有二層,如下表達式,其中σ代表非線性函數ReLU
然后通過一個shortcut,和第2個ReLU,獲得輸出y
當需要對輸入和輸出維數進行變化時(如改變通道數目),可以在shortcut時對x做一個線性變換Ws,如下式,然而實驗證明x已經足夠了,不需要再搞個維度變換,除非需求是某個特定維度的輸出,如文章開頭的resnet網絡結構圖中的虛線,是將通道數翻倍。
實驗證明,這個殘差塊往往需要兩層以上,單單一層的殘差塊(y=W1x+x)並不能起到提升作用。
殘差網絡的確解決了退化的問題,在訓練集和校驗集上,都證明了的更深的網絡錯誤率越小,如下圖
實際中,考慮計算的成本,對殘差塊做了計算優化,即將兩個3x3的卷積層替換為1x1 + 3x3 + 1x1, 如下圖。新結構中的中間3x3的卷積層首先在一個降維1x1卷積層下減少了計算,然后在另一個1x1的卷積層下做了還原,既保持了精度又減少了計算量。
下面是resnet的成績單, 在imagenet2015奪得冠軍