殘差網絡ResNet筆記


發現博客園也可以支持Markdown,就把我之前寫的博客搬過來了~ 歡迎轉載,請注明出處:http://www.cnblogs.com/alanma/p/6877166.html 下面是正文:

Deep Residual Learning for Image Recognition

1. 思想

作者根據輸入將層表示為學習殘差函數。實驗表明,殘差網絡更容易優化,並且能夠通過增加相當的深度來提高准確率。
核心是解決了增加深度帶來的副作用(退化問題),這樣能夠通過單純地增加網絡深度,來提高網絡性能。

  • 作者在ImageNet上實驗了一個152層的殘差網絡,比VGG深8倍,取得了3.57%的錯誤率。
  • 作者通過一系列實驗證明了表示的深度(即網絡的深度)對很多視覺識別任務都至關重要。僅僅由於使用了非常深的網絡,作者就在COCO目標檢測數據集上獲得了28%的相對提升。

2. 筆記

網絡的深度為什么重要?

因為CNN能夠提取low/mid/high-level的特征,網絡的層數越多,意味着能夠提取到不同level的特征越豐富。並且,越深的網絡提取的特征越抽象,越具有語義信息。

為什么不能簡單地增加網絡層數?

  • 對於原來的網絡,如果簡單地增加深度,會導致梯度彌散或梯度爆炸。

對於該問題的解決方法是正則化初始化中間的正則化層(Batch Normalization),這樣的話可以訓練幾十層的網絡。

  • 雖然通過上述方法能夠訓練了,但是又會出現另一個問題,就是退化問題,網絡層數增加,但是在訓練集上的准確率卻飽和甚至下降了。這個不能解釋為overfitting,因為overfit應該表現為在訓練集上表現更好才對。
    退化問題說明了深度網絡不能很簡單地被很好地優化。
    作者通過實驗:通過淺層網絡+ y=x 等同映射構造深層模型,結果深層模型並沒有比淺層網絡有等同或更低的錯誤率,推斷退化問題可能是因為深層的網絡並不是那么好訓練,也就是求解器很難去利用多層網絡擬合同等函數。

怎么解決退化問題?

深度殘差網絡。如果深層網絡的后面那些層是恆等映射,那么模型就退化為一個淺層網絡。那現在要解決的就是學習恆等映射函數了。 但是直接讓一些層去擬合一個潛在的恆等映射函數H(x) = x,比較困難,這可能就是深層網絡難以訓練的原因。但是,如果把網絡設計為H(x) = F(x) + x,如下圖。我們可以轉換為學習一個殘差函數F(x) = H(x) - x. 只要F(x)=0,就構成了一個恆等映射H(x) = x. 而且,擬合殘差肯定更加容易。

其他的參考解釋

  • F是求和前網絡映射,H是從輸入到求和后的網絡映射。比如把5映射到5.1,那么引入殘差前是F'(5)=5.1,引入殘差后是H(5)=5.1, H(5)=F(5)+5, F(5)=0.1。這里的F'和F都表示網絡參數映射,引入殘差后的映射對輸出的變化更敏感。比如s輸出從5.1變到5.2,映射F'的輸出增加了1/51=2%,而對於殘差結構輸出從5.1到5.2,映射F是從0.1到0.2,增加了100%。明顯后者輸出變化對權重的調整作用更大,所以效果更好。殘差的思想都是去掉相同的主體部分,從而突出微小的變化,看到殘差網絡我第一反應就是差分放大器...地址
  • 至於為何shortcut的輸入時X,而不是X/2或是其他形式。kaiming大神的另一篇文章[2]中探討了這個問題,對以下6種結構的殘差結構進行實驗比較,shortcut是X/2的就是第二種,結果發現還是第一種效果好啊(攤手)。

這種殘差學習結構可以通過前向神經網絡+shortcut連接實現,如結構圖所示。而且shortcut連接相當於簡單執行了同等映射,不會產生額外的參數,也不會增加計算復雜度。 而且,整個網絡可以依舊通過端到端的反向傳播訓練。

ImageNet上的實驗證明了作者提出的加深的殘差網絡能夠比簡單疊加層生產的深度網絡更容易優化,而且,因為深度的增加,結果得到了明顯提升。另外在CIFAR-10數據集上相似的結果以及一系列大賽的第一名結果表明ResNet是一個通用的方法。


相關的工作

  • 殘差表示
    VALD,Fisher Vector都是是對殘差向量編碼來表示圖像,在圖像分類,檢索表現出優於編碼原始向量的性能。
    在low-level的視覺和計算機圖形學中,為了求解偏微分方程,廣泛使用的Multigrid方法將系統看成是不同尺度上的子問題。每個子問題負責一種更粗糙與更精細尺度的殘差分辨率。Multigrid的一種替換方法是層次化的預處理,層次化的預處理依賴於兩種尺度的殘差向量表示。實驗表明,這些求解器要比對殘差不敏感的求解器收斂更快。
  • shortcut連接
    shortcut連接被實驗和研究了很久。Highway networks也使用了帶有門函數的shortcut。但是這些門函數需要參數,而ResNet的shortcut不需要參數。而且當Highway networks的門函數的shortcut關閉時,相當於沒有了殘差函數,但是ResNet的shortcut一直保證學習殘差函數。而且,當Highway networks的層數急劇增加時,沒有表現出准確率的上升了。總之,ResNet可以看成是Highway networks的特例,但是從效果上來看,要比Highway networks好。

深度殘差學習

  • 殘差學習
    根據多層的神經網絡理論上可以擬合任意函數,那么可以利用一些層來擬合函數。問題是直接擬合H(x)還是殘差函數,由前文,擬合殘差函數F(x) = H(x) - x更簡單。雖然理論上兩者都能得到近似擬合,但是后者學習起來顯然更容易。
    作者說,這種殘差形式是由退化問題激發的。根據前文,如果增加的層被構建為同等函數,那么理論上,更深的模型的訓練誤差不應當大於淺層模型,但是出現的退化問題表面,求解器很難去利用多層網絡擬合同等函數。但是,殘差的表示形式使得多層網絡近似起來要容易的多,如果同等函數可被優化近似,那么多層網絡的權重就會簡單地逼近0來實現同等映射,即F(x) = 0。
    實際情況中,同等映射函數可能不會那么好優化,但是對於殘差學習,求解器根據輸入的同等映射,也會更容易發現擾動,總之比直接學習一個同等映射函數要容易的多。根據實驗,可以發現學習到的殘差函數通常響應值比較小,同等映射(shortcut)提供了合理的前提條件。
  • 通過shortcut同等映射


F(x)與x相加就是就是逐元素相加,但是如果兩者維度不同,需要給x執行一個線性映射來匹配維度:

用來學習殘差的網絡層數應當大於1,否則退化為線性。文章實驗了layers = 2或3,更多的層也是可行的。
用卷積層進行殘差學習:以上的公式表示為了簡化,都是基於全連接層的,實際上當然可以用於卷積層。加法隨之變為對應channel間的兩個feature map逐元素相加。

  • 網絡結構
    作者由VGG19設計出了plain 網絡和殘差網絡,如下圖中部和右側網絡。然后利用這兩種網絡進行實驗對比。

key point:

設計網絡的規則:1.對於輸出feature map大小相同的層,有相同數量的filters,即channel數相同;2. 當feature map大小減半時(池化),filters數量翻倍。
對於殘差網絡,維度匹配的shortcut連接為實線,反之為虛線。維度不匹配時,同等映射有兩種可選方案:

  1. 直接通過zero padding 來增加維度(channel)。
  2. 乘以W矩陣投影到新的空間。實現是用1x1卷積實現的,直接改變1x1卷積的filters數目。這種會增加參數。
  • 實施
    key point:

訓練測試的multi-scale,BN,color augmentation. 測試時的10-cut.


實驗

key point:

  1. 實驗了plain-18和plain-34,展示了退化問題。說明了退化問題不是因為梯度彌散,因為加入了BN。另外也不能簡單地增加迭代次數來使其收斂,增加迭代次數仍然會出現退化問題。
  2. 實驗了ResNet-18和ResNet-34不會出現退化問題,ResNet-34明顯表現的比ResNet-18和plain-34好,證明了殘差學習解決了隨網絡深度增加帶來的退化問題。 而且同等深度的plain-18和ResNet-18,殘差網絡更容易優化,收斂更快。
  3. 對於同等映射維度不匹配時,匹配維度的兩種方法,zero padding是參數free的,投影法會帶來參數。作者比較了這兩種方法的優劣。實驗證明,投影法會比zero padding表現稍好一些。因為zero padding的部分沒有參與殘差學習。實驗表明,將維度匹配或不匹配的同等映射全用投影法會取得更稍好的結果,但是考慮到不增加復雜度和參數free,不采用這種方法。
  4. 更深的瓶頸結構:

    作者探索的更深的網絡。 考慮到時間花費,將原來的building block(殘差學習結構)改為瓶頸結構,如上圖。首端和末端的1x1卷積用來削減和恢復維度,相比於原本結構,只有中間3x3成為瓶頸部分。這兩種結構的時間復雜度相似。此時投影法映射帶來的參數成為不可忽略的部分(以為輸入維度的增大),所以要使用zero padding的同等映射。
    替換原本ResNet的殘差學習結構,同時也可以增加結構的數量,網絡深度得以增加。生成了ResNet-50,ResNet-101,ResNet-152. 隨着深度增加,因為解決了退化問題,性能不斷提升。
    作者最后在Cifar-10上嘗試了1202層的網絡,結果在訓練誤差上與一個較淺的110層的相近,但是測試誤差要比110層大1.5%。作者認為是采用了太深的網絡,發生了過擬合。
  5. 最后作者把ResNet用到了其他比賽上,拿了很多冠軍...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM