ResNet,DenseNet,以及殘差家族

轉自:http://blog.csdn.NET/cv_family_z/article/details/50328175

CVPR2016
https://github.com/KaimingHe/deep-residual-networks

這是微軟方面的最新研究成果, 在第六屆ImageNet年度圖像識別測試中,微軟研究院的計算機圖像識別系統在幾個類別的測試中獲得第一名。

本文是解決超深度CNN網絡訓練問題,152層及嘗試了1000層。

隨着CNN網絡的發展,尤其的VGG網絡的提出,大家發現網絡的層數是一個關鍵因素,貌似越深的網絡效果越好。但是隨着網絡層數的增加,問題也隨之而來。

首先一個問題是 vanishing/exploding gradients,即梯度的消失或發散。這就導致訓練難以收斂。但是隨着 normalized initialization [23, 9, 37, 13] and intermediate normalization layers[16]的提出,解決了這個問題。

當收斂問題解決後,又一個問題暴露出來:隨着網絡深度的增加,系統精度得到飽和之後,迅速的下滑。讓人意外的是這個性能下降不是過擬合導致的。如文獻 [11, 42]指出,對一個合適深度的模型加入額外的層數導致訓練誤差變大。如下圖所示:
這裏寫圖片描述

如果我們加入額外的 層只是一個 identity mapping,那麼隨着深度的增加,訓練誤差並沒有隨之增加。所以我們認爲可能存在另一種構建方法,隨着深度的增加,訓練誤差不會增加,只是我們沒有找到該方法而已。

這裏我們提出一個 deep residual learning 框架來解決這種因爲深度增加而導致性能下降問題。 假設我們期望的網絡層關係映射爲 H(x), 我們讓 the stacked nonlinear layers 擬合另一個映射, F(x):= H(x)-x , 那麼原先的映射就是 F(x)+x。 這裏我們假設優化殘差映射F(x) 比優化原來的映射 H(x)容易。

F(x)+x 可以通過shortcut connections 來實現,如下圖所示:

這裏寫圖片描述

2 Related Work
Residual Representations
以前關於殘差表示的文獻表明,問題的重新表示或預處理會簡化問題的優化。 These methods suggest that a good reformulation or preconditioning can simplify the optimization

Shortcut Connections
CNN網絡以前對shortcut connections 也有所應用。

3 Deep Residual Learning
3.1. Residual Learning
這裏我們首先求取殘差映射 F(x):= H(x)-x,那麼原先的映射就是 F(x)+x。儘管這兩個映射應該都可以近似理論真值映射 the desired functions (as hypothesized),但是它倆的學習難度是不一樣的。

這種改寫啓發於 圖1中性能退化問題違反直覺的現象。正如前言所說,如果增加的層數可以構建爲一個 identity mappings,那麼增加層數後的網絡訓練誤差應該不會增加,與沒增加之前相比較。性能退化問題暗示多個非線性網絡層用於近似identity mappings 可能有困難。使用殘差學習改寫問題之後,如果identity mappings 是最優的,那麼優化問題變得很簡單,直接將多層非線性網絡參數趨0。

實際中,identity mappings 不太可能是最優的,但是上述改寫問題可能對問題提供有效的預先處理 (provide reasonable preconditioning)。如果最優函數接近identity mappings,那麼優化將會變得容易些。 實驗證明該思路是對的。

3.2. Identity Mapping by Shortcuts
圖2爲一個模塊。A building block
公式定義如下:
這裏寫圖片描述
這裏假定輸入輸出維數一致,如果不一樣,可以通過 linear projection 轉成一樣的。

3.3. Network Architectures
這裏寫圖片描述
這裏寫圖片描述

Plain Network 主要是受 VGG 網絡啓發,主要採用3*3濾波器,遵循兩個設計原則:1)對於相同輸出特徵圖尺寸,卷積層有相同個數的濾波器,2)如果特徵圖尺寸縮小一半,濾波器個數加倍以保持每個層的計算複雜度。通過步長爲2的卷積來進行降採樣。一共34個權重層。
需要指出,我們這個網絡與VGG相比,濾波器要少,複雜度要小。

Residual Network 主要是在 上述的 plain network上加入 shortcut connections

3.4. Implementation
針對 ImageNet網絡的實現,我們遵循【21,41】的實踐,圖像以較小的邊縮放至[256,480],這樣便於 scale augmentation,然後從中隨機裁出 224*224,採用【21,16】文獻的方法。

4 Experiments
這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

補充1:http://blog.csdn.Net/buyi_shizi/article/details/53336192

對ResNet的解讀

基本的殘差網絡其實可以從另一個角度來理解,這是從另一篇論文裏看到的,如下圖所示:
這裏寫圖片描述
殘差網絡單元其中可以分解成右圖的形式,從圖中可以看出,殘差網絡其實是由多種路徑組合的一個網絡,直白了說,殘差網絡其實是很多並行子網絡的組合,整個殘差網絡其實相當於一個多人投票系統(Ensembling)。下面來說明爲什麼可以這樣理解

刪除網絡的一部分

如果把殘差網絡理解成一個Ensambling系統,那麼網絡的一部分就相當於少一些投票的人,如果只是刪除一個基本的殘差單元,對最後的分類結果應該影響很小;而最後的分類錯誤率應該適合刪除的殘差單元的個數成正比的,論文裏的結論也印證了這個猜測。
下圖是比較VGG和ResNet分別刪除一層網絡的分類錯誤率變化
這裏寫圖片描述
下圖是ResNet分類錯誤率和刪除的基本殘差網絡單元個數的關係
這裏寫圖片描述

ResNet的真面目

ResNet的確可以做到很深,但是從上面的介紹可以看出,網絡很深的路徑其實很少,大部分的網絡路徑其實都集中在中間的路徑長度上,如下圖所示:
這裏寫圖片描述
從這可以看出其實ResNet是由大多數中度網絡和一小部分淺度網絡和深度網絡組成的,說明雖然表面上ResNet網絡很深,但是其實起實際作用的網絡層數並沒有很深,我們能來進一步闡述這個問題,我們知道網絡越深,梯度就越小,如下圖所示
這裏寫圖片描述
而通過各個路徑長度上包含的網絡數乘以每個路徑的梯度值,我們可以得到ResNet真正起作用的網絡是什麼樣的,如下圖所示
這裏寫圖片描述
我們可以看出大多數的梯度其實都集中在中間的路徑上,論文裏稱爲effective path。
從這可以看出其實ResNet只是表面上看起來很深,事實上網絡卻很淺。
所示ResNet真的解決了深度網絡的梯度消失的問題了嗎?似乎沒有,ResNet其實就是一個多人投票系統。


補充2:http://blog.csdn.net/u013698770/article/details/57977482

resnet是通過什麼方式來解決問題的

resnet的出現就是來解決這個問題的。
一般情況下我們的網絡如下圖所示,相較於resnet,我們稱之爲plaint net,經過兩個神經層之後,輸出的H(x)如下所示:
H(x)=relu(w2(relu(w1x)))
H(x)xH(x)=2x
這裏寫圖片描述

但是,在殘差的網絡中,用F(x)=relu(w2(relu(w1x)))
而輸出的H(x)=F(x)+x,那麼,爲什麼要這麼設置呢?
Residual Net 核心思想是,去擬合殘差函數 F(F=H(x)g(x)),選g(x)=x 時效果最好。
因此,F(x)=H(x)x

這裏寫圖片描述

補充3:blog.csdn.net/gavin__zhou/article/details/53445539

這篇博客講現在很流行的兩種網絡模型,ResNetDenseNet,其實可以把DenseNet看做是ResNet的特例
文章地址:
[1]Deep Residual Learning for Image Recognition,CVPR2015
[2]Densely Connected Convolutional Networks,CVPR2016

本篇博客不講論文的內容,只講主要思想和我自己的理解,細節問題請自行看論文


Introduction

When it comes to neural network design, the trend in the past few years has pointed in one direction:deeper. 但是問題是:

Is learning better networks as easy as stacking more layers ??

讓我們看看在ImageNet上分類winner的網絡的深度:

Depth in ImageNet

是不是我們通過簡單的stack的方式把網絡的深度增加就可以提高performance??
答案是NO,存在兩個原因

  • vanishing/exploding gradients
  • degradation problem

Residual

其實思想很簡單:

Instead of hoping each few stacked layers directly fit a desired underlying mapping, we explicitly let these layers fit a residual mapping. Formally, denoting the desired underlying mapping as H(x),we let the stacked nonlinear layers fit another mapping of F(x): H(x)-x. The original mapping is recast into F(x)+x.

那麼學習到的F(x)就是殘差.

Shortcut Connections

思想起源於HighWay Nets,shortcut的好處是:

a few intermediate layers are directly connected to auxiliary classifiers for addressing vanishing/exploding gradients.

通過shortcut的方式(Residual)進行stack的nets(ResNet),可以在加深layers上獲得更好的效果

Residual

對比在ImageNet上的效果:

再來個表格對比,更加明顯:

Result_ImageNet

DenseNet

一個詞概括網絡的結構特點就是Dense,一句話概括的話:

For each layer, the feature maps of all preceding layers are treated as separate inputs whereas its own feature maps are passed on as inputs to all subsequent layers.

結構如下所示:

DemseNet

和ResNet相比,最大的區別在於:

Never combine features through summation before they are passed into a layer, instead we provide them all as separate inputs.

對於此網絡來說,很明顯number of connections適合depth成平方的關係,所以問題是當depth很大的時候是不是已經無法訓練了?? 作者是這麼說的:

Although the number of connections grows quadratically with depth, the topology encourages heavy feature reuse.

對比ResNet來說:

Prior work has shown that there is great redundancy within the feature maps of the individual layers in ResNets. In DenseNets, all layers have direct access to every feature map from all preceding layers, which means that there is no need to re-learn redundant feature maps. Consequently, DenseNet layers are very narrow (on the order of 12 feature maps per layer) andonly add a small set of feature maps to the “collective knowledge” of the whole network.

在Cifar 10等上做分類的網絡模型是:

DenseNet with Cls

結果:

Result_DenseNet

Conclusion

其實無論是ResNet還是DenseNet,核心的思想都是HighWay Nets的思想:
就是skip connection,對於某些的輸入不加選擇的讓其進入之後的layer(skip),從而實現信息流的整合,避免了信息在層間傳遞的丟失和梯度消失的問題(還抑制了某些噪聲的產生).



下面是作者2016年更新的 ResNet,

論文題目:Identity Mappings in Deep Residual Networks

–Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun

Abstract

文章分析了 ResNet 中 Identity mapping 爲什麼比較好,爲何能讓梯度在網絡中順暢的傳遞而不會爆炸或消失,實驗方面 1001層的 ResNet 在CIFAR10上4.62%的錯誤率,在CIFAR100和ImageNet上也做了實驗。

Introduction

先回顧下ResNet中的 Residual Units:

Residual Units可以如下表示:上圖中的H與下面的h不是一個東西,別管上圖了,從兩篇文章截的圖,有點不一樣。

上面公式中:h 表示 shortcut 使用什麼形式的變換(Resdual Net論文[1]中給出了A,B,C3種,最後用的 Identity map,也就是 h(x)= x,這篇文章進一步分析了 Identity map 爲什麼好)

 F 是 residual function。F= y-h(x)

f 爲Residual Units輸出處使用的函數,[1] 中用的ReLU,即上圖中最下面那個relu。

本文提出 f 也該用 Identity map。y 爲原本應該擬合的輸出。

Residual Net 核心思想是,去擬合殘差函數 F (F = y - h(x)),選 h(x)=x 時效果最好。

 

本文分析得出:當 h(x) 和 f(y) 都取 Identity Map 時,signal could be directly propagatedfrom one unit to any other units, in bothforward and backwardpasses。這使訓練更容易。

文章實驗了各種 h(x) 的選擇(Figure 2),發現 Identity map 是最佳選擇,achieves the fastest error reduction and lowest training loss

右圖虛線是訓練誤差,實線是測試誤差。

Analysis of Deep Residual Networks

h(x) 和 f(y) 都取 Identity Map 時,有

L 爲 任意深的 Residual Units

公式(4)在反向求導的過程中有很好的特性:

     (5)

公式(5)有兩項:第一項直接把深層的梯度傳遞到任意淺層,可以看出淺層的梯度很難爲0,應該括號內第二項不可能一直爲 -1,所以不管參數多小,梯度也不會消失

注意:[1] 中有些 Residual Units 會增加或減少 feature map 數量,上面的公式就不成立了,這種層在 CIFAR上只有2個,ImageNet上只有3個,取決於圖片大小,作者認爲對本文結論影響不大。

On the Importance of Identity Skip Connections

本節主要是說明 shortcut 取其他非 Identity map 的變換時,爲什麼不好。

1.如果時:

 (6)

 (7)

 (8)

對比公式(8)和(5),第一項不再是 1 了,在很深的網絡中,如果 λ>1,括號內第一項會很大,如果 λ<1,會很小或者消失,然後就堵塞了 shortcut,

反向傳導的信號只能從第二項傳遞,網絡優化會困難很多(因爲第二項是複雜的非線性變換)

2.如果 h(x)取更復雜的變換,如 gating 或 1*1 卷積層 ,也會阻礙信號反向傳播的通暢。

Experiments on Skip Connections

1.  110-layer ResNet on CIFAR-10 ,包含 54個2層的Residual Units(每層爲3*3卷積層)。詳細實現見 論文appendix

跑了5次,取了準確率的中值。

儘管之前的分析是基於 f 爲 Identity 的,但是實驗取的 f 爲 ReLU as in [1],實驗分別證明了 Figure 2中的所有 h(x)的選擇都不如 Identity map :h(x)=x

實驗詳見論文。

補充一份:殘差家族的最新論文:http://blog.csdn.net/sunbaigui/article/details/51702563

在2015年殘差網絡Deep Residual Learning for Image Recognition出來之後,2016年出現了大批量的達到與之相應效果的加深網絡的方法。加深網絡會帶來如下三大類問題:1. 後向傳播梯度消失;2. 前向傳播信息量減少;3. 訓練時間加長。爲了緩解以上三大類問題,2016上半年已經有各式各樣的加深網絡的方法,讓我們來看下下面五篇文章,前四篇文章主要注重與如何去使用各種方法加深網絡,最後一篇文章對最近出現的殘差網絡家族做了一個深入的分析與思考,指出殘差與其說是加深網絡不如說是隱式的多網絡疊加。

一、Deep Networks with Stochastic Depth

該文章將CIFAR-100刷到了24.58。代碼:https://github.com/yueatsprograms/Stochastic_Depth。該文章基於Deep Residual Learning for Image Recognition做了實驗,提升效果如下表所示(重點看constant與stochastic的比較):


文章提出在層出現概率是線性衰減到0.5的情況下,如下圖所示:


則有L個block的network每次訓練時有期望3/4L個block參與訓練。在預測端也相應的需要做些改變如下:


。該加深網絡方法的缺點是:雖然減少了訓練的時間,但確不能減少前向的時間。不過它是一個非常有效的類似於dropout、drop connection的regularization的方法,能有效採用這樣的加深網絡的方式來提升模型性能。

 

二、FractalNet:Ultra-Deep Neural Networks without Residuals

該文章將CIFAR-100刷到了22.85。該文章不同與第一篇drop layer,它提出了分形網絡(fractal network)的概念,基於fractal network的基礎上,採用drop path來進行訓練。其樣例結構如下:


文章提出了的drop path方法如下:

1. local:join模塊一定概率drop每個輸入,但確保每個join至少一個輸入留下。

2. global:對分形網絡(fractal network)只留下一列

其示意圖如下:



三、Identity Mappings in Deep Residual Networks

該文將CIFAR-100刷到了22.71。代碼:https://github.com/KaimingHe/resnet-1k-layers。該文章主要對原文Deep Residual Learning for Image Recognition的殘差單元做了兩方面做了詳盡的實驗:1. shortcut類型 2. 激活函數順序。shortcut類型的實驗如下:


最後證明還是原先的第一種更好。激活函數順序的實驗如下:


最後證明是最後一種好,將激活函數都放在weight之前。

 

四、RESNET IN RESNET:GENERALIZING RESIDUAL ARCHITECTURES

該文章將CIFAR-100刷到了22.90。其核心結構如下:

 

五、Residual Networks are Exponential Ensembles of Relatively Shallow Networks

該文章提出了在殘差網絡風行的時候,給出了一個創新的觀點,並附上了一些理論+實驗觀測上的證明。具體的觀點如下:殘差網絡並不是一個真正意義上極深的網絡,而是隱式地由指數個大部分爲淺層網絡疊加而成的。由此該論文指出,查看網絡之後除了可以看width和depth,其實還有另外一個維度就是multiplicity。該文章中比較關鍵的一個理論證明插圖如下:


 


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