背景
There exists a solution by construction to the deeper model: the added layers are constructed as identity mappings, and the other layers are copied from the learned shallower model. The existence of this constructed solution indicates that a deeper model should produce no higher training error than its shallower counterpart.
CNN可以提取到不同層級的特徵(low/mid/high level),且網絡層數越高,提取到的特徵語義信息越豐富。然而研究者發現,當網絡不斷加深時,網絡的training error與test error均增大。這並不是因爲過擬合,因爲過擬合的話應該是training error減小,test error增大,而且這種現象還會隨着深度加深而變差。這並不符合邏輯,因爲可以把深層網絡看做一個淺層網絡+由增加的層組成的恆等變換,深層網絡的訓練誤差至少也能達到與淺層網絡一樣的訓練誤差纔對。而深層網絡顯然沒有把這種恆等變換學習到。因此出現了ResNet,它的存在本質上就是學習到這個恆等變換。
ResNet
當一個深層網絡後面的那些層是恆等變換,那麼深層網絡就退化爲了一個淺層網絡。現在要解決的就是學習恆等變換函數了。多層的神經網絡理論上可以擬合任意函數,若直接讓一些層去擬合一個潛在的恆等變換函數H(x) = x比較困難,這可能就是深層網絡難以訓練的原因。但是,如果把網絡設計爲H(x) = F(x) + x,如下圖。我們可以轉換爲學習一個殘差函數F(x) = H(x) - x. 只要F(x)=0,就構成了一個恆等映射H(x) = x. 而且,學習F(x)=0的映射比學習一個F(x)=x的映射更容易。
這樣,既學習了恆等變換,又降低了訓練難度。
Identity Mapping(恆等變換)
集合S的一個變換η,如果把S的每個元素a對應到它自身,即η(a)=a,對於任意的a∈S,則稱η是S的恆等變換或單位變換,記作ε。 —— [ 百度百科 ]
ResNet爲什麼有效?
殘差的思想是去掉相同的主體部分,從而突出微小的變化。 —— [ 來自一知乎答主 ]
比如把5映射到5.1,那麼引入殘差前是F’(5)=5.1,引入殘差後是H(5)=5.1, H(5)=F(5)+5, F(5)=0.1。這裏的F’和F都表示網絡參數映射,引入殘差後的映射對輸出的變化更敏感。比如原來是從5.1到5.2,映射F’的輸出增加了1/51=2%,而對於殘差結構從5.1到5.2,映射F是從0.1到0.2,增加了100%。明顯後者輸出變化對權重的調整作用更大,所以效果更好。—— [ 來自一知乎答主 ]
因此ResNet有效解決了深層網絡的梯度消失問題。
前向傳播
反向傳播
如果shortcut mapping——h(x)不是恆等變換呢?
實驗結果顯示,只有在shortcut mapping爲恆等變換時纔可以得到最小的誤差。
設計規則
1.對於輸出feature map大小相同的層,有相同數量的filters,即channel數相同;
2. 當feature map大小減半時(池化),filters數量翻倍。(64——>128)
對於殘差網絡,維度相等的shortcut連接爲實線,反之爲虛線。維度不相等時,同等映射有兩種可選方案:
1.直接通過zero padding 來增加維度(channel)。這種方法並不增加參數。
2.乘以W矩陣投影到新的空間。實現是用1x1卷積實現的,直接改變1x1卷積的filters數目。這種會增加參數。
實驗結果
相比簡單疊加層構造的深度網絡,深度殘差網絡更容易優化,而且,training_error與test_error均有所下降。
實驗發現,如下結構的Resnet可以獲得較好的效果,同時,最好將f和h均選擇爲恆等變換。
Related Works
參考網址:
http://www.jianshu.com/p/e58437f39f65
http://icml.cc/2016/tutorials/icml2016_tutorial_deep_residual_networks_kaiminghe.pdf