【論文閱讀】【cnn】resnet

resnet解決的是網絡的退化問題。在vgg中提出,增加網絡深度可以增加模型的表達能力。但是人們發現深度達到一定之後,CNN網絡再一味增加層數並不能帶來分類性能的提高,甚至會讓網絡收斂變慢,測試集精度下降。訓練集精度下降可以說明這個不是過擬合的原因。因此resnet提出這是網絡的“退化問題”。

深度神經網絡可以擬合各種表示,按道理說,n+1層的cnn的解空間包含了n層的cnn的解空間,因此n+1層的精度不應該比n差,但是爲什麼精度反而下降呢?resnet認爲網絡中的表示方法可能存在問題。

resnet提出了 殘差學習 的思想。

若將輸入設置爲X,將某一有參網絡層設爲H,那麼以X爲輸入的此層的輸出將爲H(X)。一般的CNN網絡的學習方法是直接學習H的表達,也就是學習X->H(X).

殘差學習了輸入、輸出間的殘差,也就是F(X)=H(X)-X,也就是最開始的H(X)=F(X)+X,這麼做的原因是假設學習一個殘差映射比學習H(X)要更加容易。從極端上來講,如果某個映射是最優的,那麼直接把殘差部分置0相比於學習恆等映射更容易。

它有二層,如下表達式,其中σ代表非線性函數ReLU

然後通過一個shortcut,和第2個ReLU,獲得輸出y

當需要對輸入和輸出維數進行變化時(如改變通道數目),可以在shortcut時對x做一個線性變換Ws,如下式,然而實驗證明x已經足夠了,不需要再搞個維度變換,除非需求是某個特定維度的輸出,如文章開頭的resnet網絡結構圖中的虛線,是將通道數翻倍。

實驗證明,這個殘差塊往往需要兩層以上,單單一層的殘差塊(y=W1x+x)並不能起到提升作用。

實際中,考慮計算的成本,對殘差塊做了計算優化,即將兩個3x3的卷積層替換爲1x1 + 3x3 + 1x1, 如下圖。新結構中的中間3x3的卷積層首先在一個降維1x1卷積層下減少了計算,然後在另一個1x1的卷積層下做了還原,既保持了精度又減少了計算量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章