ResNet 是何凱明團隊的作品,對應的論文 《Deep Residual Learning for Image Recognition》是 2016 CVPR 最佳論文。ResNet 的 Res 也是 Residual 的縮寫,它的用意在於基於殘差學習,讓神經網絡能夠越來越深,準確率越來越高。
我們都知道,自 2012 年 AlexNet 在 ILSVRC 一戰成名後,卷積神經網絡便一發不可收拾,後續的各類競賽中各種神經網絡都大發異彩,除了更高的準確率之外,它們普遍的特徵就是,網絡的層級越來越深了。
這裏會產生一個問題,那就是神經網絡真的越深越好嗎?
但至少有證據表明,情況不是這樣的,如果神經網絡越來越深,這個神經網絡可能會出現退化(degradation) 的現象。這裏說的退化是指網絡層級加深後,訓練的準確率卻可能出現飽和的現象。
上面的圖片指示的是在 CIFAR-10 這個小型的數據集上,56 層的神經網絡的表現比不過 20 層的神經網絡。也就是前面說的層數越深,網絡卻反而退化了。
如何構建更深層的網絡?
前面提到的,當網絡層次更深時,反而會出現退化的現象,那麼有沒有辦法避免呢?
有一個解決方案是:
在一個的常規的比較淺的模型上添加新的層,而新的層是基於 identity mapping 的。
identity 是相同的意思,identity mapping 可以稱爲恆等變換,也就是輸入與輸出是相等的映射關係。
通俗來講,就是在一個淺層的網絡模型上進行改造,然後將新的模型與原來的淺層模型相比較,這裏有個底線就是,改造後的模型至少不應該比原來的模型表現要差。因爲新加的層可以讓它的結果爲 0,這樣它就等同於原來的模型了。這個假設是 ResNet 的出發點。
那麼如何做呢?
作者引入了 deep residual learning framework,也就是基於殘差的深度學習框架,實際上是需要對常規的神經網絡的改造。
我們都知道,目前流行的神經網絡都可以看成是卷積層的堆疊,可以用棧來表示,我們就叫它卷積棧好了.
輸入數據經過每個卷積層都會發生變化,產生新的 featuremap ,我們可以說數據在輸入與輸出間發生了映射,也就是 mapping。神經網絡中的權重參數一個作用就是去擬合這種輸入與輸出之間的 mapping。
ResNet 準備從這一塊動手,假設現在有一個棧的卷積層比如說 2 個卷積層堆疊,將當前這個棧的輸入與後面的棧的輸入之間的 mapping 稱爲 underlying mapping,現在的工作是企圖替換它引入一種新的 mapping 關係,ResNet 稱之爲 residual mapping 去替換常規的 mapping 關係。
意思是與其讓卷積棧直接擬合 underlying mapping,不如讓它去擬合 residual mapping。而 residual mapping 和 underlying mapping 其實是有關聯的。
將 underlyingmapping 標記爲
將經過堆疊的非線性層產生的 mapping 標記爲
所以,最原始的 mapping 就被強制轉換成
然後,作者假設對 residual mapping 的優化要比常規的 underlying mapping 要簡單和容易
而 在實際的編碼過程中,可以被一種叫做快捷連接的結構件來實現。
快捷連接通常會跳過 1 個或者多個層,在 ResNet 中快捷連接直接運用了 identity mapping,意思就是將一個卷積棧的輸入直接與這個卷積棧的輸出相加。
這樣有什麼好處呢?
- 並沒有增加新的參數
- 整個網絡也仍然可以由 SGD 進行訓練。
- 容易被通用的神經網絡框架實現。
並且, 表示殘差,最理想的情況是 identity mapping 是最優的輸出,那麼讓 爲 0 就好了,現實是不可能全爲 0,那麼這些多出來的東西就可以增強網絡的表達能力。
而 ResNet 依靠成績說話,它是 ILSVRC 2015 年圖像分類冠軍。而且 ResNet 的泛化變現也很卓越,在 ImageNet 目標檢測、ImageNet 目標定位、COCO 目標檢測、COCO 圖像分割等競賽中都取得了當年(2015)的冠軍。
並且,ResNet 是當年 ImageNet 參賽模型中層級最深的模型,達到了 152層。
這些證據證明了 ResNet 加深網絡後,性能比其他的模型更突出。
Deep Residual Learning
Residual Learning 的理論依據
我們可以將焦點放在 上。
理論上有一種假設,多層卷積的參數可以近似地估計很複雜的函數表達公式的值,那麼多層卷積也肯定可以近似地估計 這種殘差公式。
所以與其讓卷積棧去近似的估計 ,還不如讓它去近似地估計 , 而 就是殘差。
作者假設的是,殘差比原始的 mapping 更容易學習。
作者在他的另外一篇論文《Identity Mappings in Deep Residual Networks》中給出了詳細的討論。
一個殘差單元,它的輸入與輸出的關係可以用下面的公式表達:
代表層的意思, 代表當前這個殘差單元的信號輸入,代表輸出,同時也是神經網絡下一層的輸入。
代表的 identity mapping, 是這個單元的殘差, 是 ReLU 激活函數。
我們先整理一下思路,神經網絡訓練過程中反向傳播的梯度非常重要,如果梯度接近於 0 ,那麼信號就無法反向傳播了。
XL 代表任意的一個更深層次的輸入,而 Xl 可以代表相對的比較淺的層次的輸入,結合之前的公式,可以很容易遞推得到上面的公司。
引用鏈式求導法則。
代表的是 loss 方程
最激動人心的地方在於上面公式的括號部分,它是 1 加上某個值,只要這個值不恰好爲 -1,那麼梯度就不會爲 0,也就是說從 XL 到 Xl 的梯度就可以一直傳遞下去,梯度能夠有效傳遞,神經網絡的訓練過程纔會更加高效。
網絡結構
ResNet 的起始是從一個常規的比較淺的網絡上探求加層的過程。
這個常規的比較淺的網絡是大名鼎鼎的 VGG-19。
作者對 VGG-19 進行仿製與改造,得到了一個 34 層的 plain network,然後又在這個 34 層的 plain network 中插入快捷連接,最終形成了一個 34 層的 residual network。
我們回到這張圖上面, 要與 x 相加,那麼它們的維度就需要一樣。
而 ResNet 採用的是用 1x1 的卷積核去應對維度的變化,通過 1x1 的卷積核去對輸入進行升維和降維。
ResNet 作者做了大量的模型評估工作,網絡的層數從 18 到 152 都有試驗。
值得注意的是,從 50-layer 起,ResNet 採用了一種 bottleneck design 的手段。
1x1 的卷積核讓整個殘差單元變得更加細長,這也是 bottleneck 的含義,更重要的是參數減少了。
最終在 ImageNet 驗證集上的表現也證明了 ResNet 比當時其他網絡要強,並且 ResNet 本身層級越多準確率越高。
最後,爲了證明 ResNet 的泛化能力,作者也在 CIFAR-10 數據集上做了測試和分析,ResNet 甚至做到了 1000 層以上。
這證明了基於殘差學習可以讓網絡更深。
總結
1、ResNet 在當年大放異彩靠的是它優異的表現。
2、論文更多講述的是經驗,這些經驗靠實驗結果表現出了 ResNet 的高效,但後來的補充材料給出了理論依據,自此它才變得更加讓人信服。
3、ResNet 並非橫空出世,它是基於淺層網絡的探索性的結果,就如 VGG 是在 AlexNet 的基礎上探索得到的。
4、ResNet 驗證了大量的結構,並且進行了大量的橫向和縱向對比纔得到的最理想的結果,這份細緻和耐心值得我們每個人學習。