---
# System prepended metadata

title: ResNet
tags: [paper, 已公開]

---

# ResNet
###### tags: `paper` `已公開`


[toc]

<font color=red>一句話說明ResNet：在每個block加入idenetity shortcut </font>

## Abstract


更深的神經網絡更難訓練。我們提出了一個殘差學習框架來簡化比以前深層網絡的訓練。我們(參考層的輸入)明確地將**層重新建構為學習殘差函數，而不是學習未引用的函數**。我們提供了全面的實驗證明，表明這些**殘差網絡更容易優化，並且可以從顯著增加的深度中獲得準確性**。在 ImageNet 數據集上，我們評估深度高達 152 層的殘差網絡**比 VGG 網絡深 8 倍，但仍然具有較低的複雜性**。這些殘差網絡的集合在 ImageNet測試資料集上實現了 3.57% 的錯誤率。 這個結果在ILSVRC 2015分類任務中獲得了第一名。我們還介紹了具有100和1000層的CIFAR-10的分析。表示的深度對於許多視覺識別任務至關重要。僅僅由於我們極深的表示，我們在 COCO 對象檢測數據集上獲得了 28% 的相對改進。


![](https://i.imgur.com/uw1klUm.jpg)

## Introduction
深度卷積神經網絡為圖像分類帶來了一系列突破。**深度網絡以端到端的多層方式自然地集成了低/中/高級特徵和分類器，並且特徵的"level"可以通過堆疊層的數量來豐富**。最近研究表明網絡深度至關重要，在具有挑戰性的 ImageNet 數據集上的領先結果都利用了“非常深”的模型，深度為 16 到 30。許多其他視覺識別任務也從非常深的模型中受益匪淺。

在深度的重要性的驅動下，**出現了一個問題：學習更好的網絡是否與堆疊更多層一樣容易**？回答這個問題的一個障礙是臭名昭彰的**消失問題/梯度爆炸**，從一開始就阻礙了收斂。然而，**這個問題已經在很大程度上通過Normalized Initialization 和Intermediate Normalization得到解決**，這使得具有數十層的網絡能夠開始收斂以進行反向傳播的隨機梯度下降。 

當更深的網絡能夠開始收斂時，**退化問題就暴露出來了：隨著網絡深度的增加，準確率會飽和然後迅速下降**。 沒想到，這種**退化並不是過擬合造成的**，在適當深度的模型中增加更多層會導致更高的訓練誤差，正如我們的實驗所驗證的那樣。:sob: 

> 過擬合: 用過多的參數去表示網路，會產生訓練集資料上表現特別好，測試集(沒看過的資料)資料表現特別不好。

![](https://i.imgur.com/hEpTjcS.png)
:::info
:sob: 經由實驗發現，深層網路經過訓練後，根本無法逼近于恆等映射。
由圖一，照理來說56層的網路結構只要後面36層通是恆等映射(identity mapping)，就可以讓整個網路表現的跟20層一樣好，但實驗卻發現，經過訓練我們根本無法達到那樣的狀態，也就是說，要讓一個網路經過學習，逼近恆等映射幾乎不太可能。


:::



退化問題指出並非所有網路都同樣易於優化。讓我們考慮在淺的架構上添加更多層的更深層次的對應物。**有一個現存的解決方案，通過構造更深層模型： the added layers are identity mapping,and the other layers are copied from the learned shallower model.  添加的層，是identity mapping(identity mapping)，而其他層是從學習的較淺層模型中複製的**。 該構造解決方案表示，**較深的模型與其較淺的模型相比，不會產生更高的訓練誤差**(額外的層數權重都是0就相當於淺模型)。 但是我們實驗表明，現有的解決方案無法找到與構建的解決方案相當或更好的解決方案。在本文中，我們通過**引入深度殘差學習框架來解決退化問題**。與其希望每個堆疊的層直接 fit 所需的底層映射，我們希望這些層去 fit residual mapping。 將所需的底層映射表示為 $H(x)$，我們讓堆疊的非線性層擬合另一個映射(resiudal mapping) $F(x):=H(x)−x$。 原始映射被重鑄為 $F(x)+x$。 ==我們**假設優化residual mapping比優化原始的、未引用的映射$H(x)$更容易**== 。在極端情況下，如果identity mapping是最優的，那麼將residual mapping 逼近於0比通過非線性層堆疊擬合identity mapping更容易。:bulb:


:::info
:bulb: 假設$F(x) =H(x)-x$ 比$H(x)$更容易優化。如果identity mapping是最優的，那麼相當於$F(x) \to 0$，i.e. $H(x) \to x$
:bulb: 我們都知道 $H(x) \to x$ 很難，試試$H(x)-x \to 0$，我們將網路結構從$H(x)$ 轉成$F(x)=H(x)-x$表示。

在數學上我們都知道， $H(x) \to x$  因為兩邊都有未知數，要求解比較難，所以在數學上會做移項的動作。

Note: 
$H(x) \to x$ 表示 學習identity mapping
$F(x) \to 0$ 表示 學習讓網路輸出為0

目前只說明殘差函數(residual mapping) $F(x)$ 比原始映射$H(x)$在極端狀況下比較容易學習。尚未說明其他狀況下，其他狀況會用整篇論文來說明。
:::

![](https://i.imgur.com/Xo67I5n.png)

![](https://i.imgur.com/sApgOur.png)
**$F(x)+x$ 的公式可以通過具有“shortcut connections”的前饋神經網絡來實現（圖 2).shortcut connections是那些跳過一層或多層的連接。 在我們的例子中，shortcut connections只是簡單地執行identity mapping，它們的輸出被添加到堆疊層的輸出中（圖2）。 identity mapping連接既不增加額外參數，也不增加計算複雜性。** 整個網絡仍然可以通過反向傳播的 SGD 進行端到端的訓練，並且可以使用公共庫(Caffe, pyTorch, etc)輕鬆實現，而無需修改求解器

> shortcut connections不單單只是 $+x$ 這動作，而是結合淺層的資訊，或者是說shortcut connections 可以是 $+x$ 、 $+Wx$等

我們在 ImageNet 上全面的實驗來展示退化問題並評估我們的方法。 我們表明：
1）**我們的極深殘差網絡很容易優化，但是當深度增加時，對應的plain net表現出更高的訓練誤差**
2）**我們的深度殘差網絡可以很容易從大大地增加的深度中獲得準確度，產生的結果比以前的網絡要好得多**


類似的現像也出現在 CIFAR-10 集上，表明我們方法的優化和效果不僅僅類似於特定的數據集。我們在這個超過 100 層的數據集上展示了成功訓練的模型，並探索了超過 1000 層的模型

在 ImageNet 分類數據集上，我們通過極深的殘差網絡獲得了很好的結果。我們的 152 層殘差網絡是有史以來在 ImageNet 上呈現的最深的網絡，同時仍然比 VGGnets 具有更低的複雜性。我們的系統在ImageNet測試集上的前5個錯誤的錯誤率為3.57％，並在ILSVRC2015分類比賽中獲得第一名。極深的表示在其他識別任務上也具有出色的泛化性能，並帶領我們在 ILSVRC & COCO 2015 競賽中進一步在 ImageNet 檢測、ImageNet 定位、COCO 檢測和 COCO 分割上獲得第一名。這個強有力的證據表明殘差學習原理是通用的，我們希望它適用於其他視覺和非視覺問題。

## Related Work
### Residual Representations
殘差表示。在圖像識別中，[VLAD](https://hal.inria.fr/inria-00633013/document/) 是由殘差向量相對於字典進行編碼的表示，[Fisher 向量](https://ieeexplore.ieee.org/abstract/document/4270291)可以表示為 VLAD 的概率版本。它們都是用於圖像檢索和分類的非常有用的表示。對於向量量化，encoding residual vectors比encoding original vectors更有效。

在低級視覺和計算機圖形學中，經常使用偏微分方程求解，Multigrid Method 將多尺度任務切成多個子問題，其中每個子問題可視為求解尺度間的殘差解。 另一種 Multigrid 的一種替代方法是分層基礎預處理(Hierarchical Basis Preconditioning)，它依賴於兩個尺度間殘差向量的變量。 

這些方法的收斂速度比其他不依賴殘差性質的標準方法快得多。 這些方法表明， good reformulation or preconditioning 都可以簡化優化過程。

### Shortcut Connections
Shortcut Connections的實踐和理論已經被研究了很長時間。**訓練多層感知器的早期實踐是添加一個從網絡輸入連接到輸出的線性層。在 GoogLeNet 中，一些中間層直接連接到 auxiliary  classifiers，用於處理消失/爆炸梯度**。許多論文提出了通過shortcut connections實現的(layer responses)中層響應、梯度和傳播誤差的方法。在[Going deeper with convolutions](https://arxiv.org/pdf/1409.4842.pdf) 中，“inception”層由一個shortcut分支和一些更深的分支組成。
> Going deeper with convolutions 就是 Inception paper名稱

![](https://paperswithcode.com/media/methods/GoogleNet-structure-and-auxiliary-classifier-units_CM5xsxk.png)
![](https://i.imgur.com/KPIAYt8.png)

[Highway network](https://arxiv.org/pdf/1507.06228.pdf)提供具有gate 的shortcut connection。這些gate 是 與資料相關且有帶參數的(由輸入控制)。這與我們的**identity shortcut connection that are parameter-free** 方式形成對比。在highway，When a gate shortcut is closed (approaching zero) , 就相當於沒有residual功能。相反的，我們總是學習殘差函數；我們的identity shortcut connection 永遠不會關閉，所有**信息可以進行跨層的傳輸**。此外，highway network目前還未表現出隨著深度的極大增加而提高準確度。

![](https://i.imgur.com/oP0mhUq.png)

## Deep Residual Learning
### Residual Learning

讓我們考慮有一個映射H(x) be fited by 一些堆疊的層，其中 x 表示這些層中的第一個的輸入。**如果假設多個非線性層可以漸近逼近複雜的函數(這假設到現在還是個open question )**，那麼就相當於假設它們可以漸近逼近殘差函數，即 $H(x)-x$。而不是期望堆疊層逼近 $H(x)$，我們讓這些層近似殘差函數$F(x):= H(x)-x$。原來的函數就變成了$F(x)+x$。儘管兩種形式都應能夠漸近地逼近所需的函數，但學習的難易程度可能有所不同。

![](https://i.imgur.com/TNwzuNP.png)



這樣的重構是因為退化問題的發生有違反直覺現象而激發的想法（圖 1左）。正如我們在導言中討論的那樣，將多餘的層(往後的層)構造為identity mapping，則較深的模型應具有不大於其較淺的對應部分的訓練誤差。但是**退化問題表明難以通過多個非線性層逼近identity mapping**。為此殘差學習重新制定，如果identity mapping是最優的，求解器可以簡單地將多個非線性層的權重逼近零以接近identity mapping。

:::info
如前面所述，退化問題，深層網路應該比淺層效果好，但事實卻不是如此。
:bulb: 前面提出一個想法，如果往後的層數，能讓網路學習成identity mapping 不就解決了。
所以問題變成，如何做到identity mapping，並動態決定是否為identity mapping，
1. identity mapping 相當於讓 $H(x) \to x$，但前面說過直接讓原始映射$H(x)\to x$這樣很難訓練，所以轉成讓$H(x)-x \to 0$，所以令$F(x) := H(x)-x$
2. 將$F(x) = H(x)-x$ 帶入原式子，得到 $x+ F(x) \to x$

這樣同時可以考慮identity mapping不是最佳解。
因為讓網路參數決定，而且不限定只能讓網路前半段或後半段趨近於identity mapping。
:::

**在實際情況下，identity mapping不太可能是最佳的**，但我們的重新表述可能有助於預處理這個問題。如果最優函數更接近identity mapping而不是零映射，則求解器來說參考identity mapping找到擾動，應該比將函數作為新函數學習更容易。 我們通過實驗展示（圖。7) 學習到的殘差函數通常具有較小的響應(這邊指標準差)，這表明identity mapping提供了合理的預處理(preconditioning)。

:::success
:see_no_evil:
如果最優函數接近identity mapping ，那$F(x) + x$ 比 函數作為$H(x)$ 更容易學習，因為可以參考x找到擾動(perturbations)

:::
### Identity Mapping by Shortcuts

我們對每幾個堆疊層採用殘差學習。一個 building block 如(圖2)。在本文中，我們考慮定義的 block：

$$
y = F(x, {W_{i}}) + x   \tag{1} 
$$ 
x, y 代表 input vector and output vector, 函數$F(.)$ 表示可以被學習的residual mapping。對於(圖2) $F = W_{2}\sigma(W_{1}x)$ ，$\sigma$ 表示ReLU，為了簡化表示 biases被省略。 **$F+x$ 這操作被shortcut connection 和 element-wise addition 實現。我們在$2^{nd}$ non-linear layer與identity mapping做加法後，做ReLU**。

> ReLU 激發函數 = max(x,0)
> 激發函數 是神經網路能實現非線性輸出的關鍵，因為倒傳遞關係，激發函數必須可微分
> 一般來說，ReLU x=0時微分直接給定0

等式(1) 中的shortcut connections。既不引入額外參數也不引入計算複雜度。這不僅在實踐中很有吸引力，而且在我們比較plain net和殘差網絡時也很重要。我們可以相當地比較同時具有相同數量的參數、深度、寬度和計算成本的普通/殘差網絡（除了可以忽略不計的element-wise addition）
在等式(1)，**x維度必須要和F相同。如果不相同(改變input/output channels)，必須對shortcut connection 做線性投影以匹配維度**。
$$
y = F(x, {W_{i}}) + W_{s}x \tag{2} 
$$
**在等式(1) 也可以用正方形矩陣$W_{s}$。但是我們將通過實驗證明identity mapping足夠解決退化問題，並且是economical(經濟實惠的)，因此$W_{s}$僅在維度匹配時使用**。


殘差函數的形式很有彈性。本文中的實驗涉及具有兩層或三層的函數F（圖5)。而更多的層也是可能的。 但是如果F 只有一層，類似於線性層：$y=W_{1}x+x$，對此我們沒有觀察到優勢。我們還注意到，雖然上面的符號為簡單起見是全連接層，但它們適用於卷積層。函數F可以代表多個卷積層。逐個通道在兩個特徵圖上執行逐元素添加

### Network Architectures
我們已經測試了各種普通/殘差網絡，並觀察到了一致的現象。 為了後續討論，我們描述了 ImageNet 的兩個模型如下。

#### Plain Network
我們的plain baseline（圖3，中間）主要受到 VGG 網絡哲學的啟發（圖 3左）。卷積層大多有 3×3 filters，並遵循兩個簡單的設計規則：
1. 對於相同的輸出特徵圖大小的層具有相同數量的filter； 
1. 如果特徵圖大小減半，則過濾器的數量增加一倍，以保持每層的時間複雜度。
  
我們直接通過具有stride = 2的捲積層執行下採樣，網絡末端有一個global average pooling layer 和一個具有 softmax 的 1000-way(輸出1000-dim) fully-connected layer。(圖3，中間)weighted layers總數為 34。 

值得注意的是，我們的模型比 VGG 網絡具有更少的過濾器和更低的複雜性。我們的 34 層baseline 有 36 億次FLOPs ，僅為 VGG-19 的 18% 
![](https://i.imgur.com/8ze52C1.png)
:::info
:bulb: FLOPs = floating point operations 浮點數運算次數
:bulb: FLOPS = floating point operations per second 每秒浮點數運算次數
:::

#### Residual Network

基於上述plain network，我們加入了short connections （圖3，右）將網絡變成其對應的殘差版本。當輸入和輸出的維度相同時，可以直接使用identity shortcuts（圖3的實線快捷方式）。 當尺寸增加時（圖3虛線快捷方式），我們考慮兩個選項：
* (a) shortcut connection 採用identity mapping，增加的維度採用zero padding。 這個選項沒有引入額外的參數；
* (b) 等式(2)中的projection shortcut connection。用於匹配尺寸(denote by 1x1 convolutions)。

對於兩個選項，當shortcut connection 穿過兩個大小的特徵圖時，它們的步長都為2。


### Implementation
我們對 ImageNet 的實現遵循了實踐。 

- scale augmentation 從縮放區間[256,480]中隨機採樣進行尺寸增強
- crop 從圖像或其水平翻轉，隨機crop 224×224 的裁剪。
- initalizal normalization。對每個pixel減去每個像素的平均值。
- color augmentation 使用標準顏色增強。 
- Batch Normalization(BN) 每次卷積之後和激活之前採用BN。
- weight initailization 採用[He initial](https://arxiv.org/pdf/1502.01852.pdf)初始化權重並從頭開始訓練所有plain/residual network。 
- batch size。小批量大小為256的SGD。
- learning rate。 學習率從 0.1 開始，
- learning scheduler。當誤差平穩時除以 10，模型最多訓練 $60×10^4$ 次迭代。 
- wight decay 。使用 0.0001 的權重衰減
- momentum 。0.9的動量。
- without dropout

:::info
He initial
$$
\frac{1}{2}n_{l}Var[w_{l}] = 1,      \forall l
$$
zero-mean gaussian distribution whose standard deviation(std) is $\sqrt{\frac{2}{n_{l}}}$. Initialize b = 0.For first layer l=1, we should have  $n_{1}Var[w_{1}]$=1

:::

在測試中，
- standard 10-crop testing。 
- 全卷積形式
- 多個尺度上平均分數。(images are resized such that the shorter side is in{224,256,384,480,640})

:::success
standard 10-crop testing : 取（左上，左下，右上，右下，正中）以及它们的水平翻轉。所有crops的預測輸出的平均作為整個模型對當前測試圖像的輸出。
:::
## Experiments
基本上，
1. 比較其他模型，說明他的好。
2. 在不同的比賽中比較，說明模型泛化性。
3. 在更深的模型做了(reduce dimensions)優化。bottleneck
###  ImageNet Classification
我們在包含 1000 個類的 ImageNet 2012 分類數據集上評估我們的方法。模型在 128 萬張訓練圖像上進行訓練，並在 5 萬張驗證圖像上進行評估。 我們還獲得10萬 試圖像的最終結果。我們評估了 top-1 和 top-5 錯誤率
:::info 
:bulb:  top-5 error：模型會輸出５個預測結果，全錯才算錯
:::
#### plain networks
我們首先評估 18 層和 34 層的plain nets。 18層plain net也是類似的形式[表 1]。 
![](https://i.imgur.com/z2CEJhP.png)
[表 2 ]中的結果表明，較深的 34 層plain net 比較淺的 18 層plain net 具有更高的驗證錯誤。 
![](https://i.imgur.com/r2BaBMm.png)
![](https://i.imgur.com/r8x4th1.png)
為了揭示原因，在[圖4]。我們在訓練過程中比較他們的訓練/驗證錯誤。 我們觀察到退化問題， 34 layer plain net在整個訓練過程中具有更高的訓練誤差，即使 18 layer plain net的解空間是 34 layer plain net的subspace。

我們認為這種優化困難不太可能是由梯度消失引起的。這些plain net使用 BN 進行訓練，確保forward propagated 信號具有非零方差。 我們還驗證了反向傳播的梯度對 BN 表現出健康的規範。因此，前向或後向信號都不會消失。事實上，34層的plain net仍然能夠達到具有競爭力的準確度，這說明slover 在一定程度上是有效的。 我們推測deep plain nets可能呈指數級的低收斂度，這會影響訓練誤差的減少。這種優化困難的原因將在以後研究。

#### Residual  Networks
我們評估 18 層和 34 層殘差網絡。 baseline架構與上述plain net相同，期望在每對 3×3 filter中添加一個shortcut connection。 在第一次比較中（表 2 和圖 4右），我們對所有shortcut connection使用identity mapping，對增加維度使用zero padding (option a)。因此，與plain net相比，它們沒有額外的參數。
我們從表 2 和圖 4 中獲得了三個主要觀察結果。
- 首先，通過殘差學習得到，34 層 ResNet 優於 18 層 ResNet。 更重要的是，34層ResNet表現出低得多的訓練誤差，並且可以推廣到驗證數據。 這表明在這種情況下退化問題得到了很好的解決，我們設法從增加的深度中獲得了更高的準確度
- 其次，與plain net相比，34 層 ResNet 將 top-1 錯誤減少了 3.5%（表 2），這是由於成功減少了訓練錯誤。 (圖4 右與左）。 **這種比較驗證了殘差學習在極深系統上的有效性**。 
- 最後，我們還注意到 18 層普通/殘差網絡相當準確，但 18 層 ResNet 收斂得更快（表 2 圖4）。當網絡“不太深”時，當前的 SGD 求解器仍然可以找到plain net的良好解決方案。 在這種情況下，**ResNet 通過在早期提供更快的收斂來簡化優化**。

#### Identity vs.  Projection  Shortcuts

我們已經證明無參數的身份shortcut有助於訓練。 接下來我們研究projection shortcut方式(等式２)。 
![](https://i.imgur.com/x7YKM01.png)
在(表 3) 中我們比較了三個方式：
**A)zero padding shortcut用於增加維度，並且所有shortcut都是無參數的（與表 2 和圖 4 相同）。 
B) projection shortcut用於增加維度，其他是identity shortcut； 
C) all shortcut are projection。**


:::success
:bulb:以上三種，有就是流傳的**ResNet A、ResNet B、ResNet C**
:::
(表 3) 顯示所有三個選項都比普通選項好得多。 
B 略好於 A。我們認為這是因為A中的零填充維度沒有殘差學習。 
C 略好於 B，我們將此歸因於許多projection shortcut方式引入的額外參數。 
但是 A/B/C 之間的微小差異表明投影捷徑對於解決退化問題並不是必不可少的。 
所以我們在本文的其餘部分不使用選項 C，以減少內存/時間複雜度和模型大小。 
identity shortcut 方式對於不增加下面介紹的瓶頸架構的複雜性特別重要


#### Deeper Bottleneck Architectures

接下來我們來談談更深的網絡。由於擔心我們可以負擔得起的訓練時間，我們將block 修改為bottleneck。對於每個殘差函數 F，我們使用 3 層的stack 而不是 2 層（圖 5）。 這三層分別是 1×1、3×3 和 1×1 conv，其中 1×1 層負責先減少或增加維度， 3×3 層則成為輸入/輸出維度較小的瓶頸。 (圖５)顯示了一個示例，其中兩種設計具有相似的時間複雜度。
![](https://i.imgur.com/nlcByHo.png)

parameter-free的identity shortcut 方式對於瓶頸架構尤其重要。 如果圖5中的identity shortcut方式用projection shortcut 代替，可以看出時間複雜度和模型大小都增加了一倍，因為shortcut是連接到兩個高維端的。因此，identity shortcut為bottleneck 設計帶來了更有效的模型。

:::success
:bulb: 參數量更少
:::


##### 50-layer ResNet
我們用這個 3 層 bottleneck block 替換 34 層網絡中的 2 層塊，從而產生 50 層 ResNet。我們使用選項 B 來增加維度。 該模型有 38 億 FLOP。

##### 101-layer and 152-layer ResNets
我們通過使用更多的 3 層塊構建 101 層和 152 層 ResNet。值得注意的是，儘管深度顯著增加，但 152 層 ResNet 的複雜度仍然低於 VGG-16/19 網絡。 50/101/152 層 ResNet 比 34 層 ResNet 準確度有相當大的差距。我們沒有觀察到退化問題，而且顯著隨著深度增加中獲得顯著的精度提升。[表 3、4]所有評估指標都見證了深度的好處 
![](https://i.imgur.com/yyoKoAi.png)
#### Comparison with state-of-the-art methods
在表 4 中，我們與之前最好的單模型結果進行了比較。我們的基線 34 層 ResNets 已經實現了非常有競爭力的準確性。 我們的 152 層 ResNet 具有 4.49% 的單模型top-5驗證錯誤。 這個單一模型的結果優於之前所有的集成結果。 
我們將六個不同深度的模型組合成一個集成。這導致測試集上有 3.57% 的 top-5 錯誤。這個集成為我們在 ILSVRC 2015 中獲得了第一名。
![](https://i.imgur.com/bs3MDb5.png)


### CIFAR-10 and Analysis
我們對 CIFAR-10 數據集進行了更多研究，該數據集由 10 個類別的 50k 訓練圖像和 10k 測試圖像組成。我們展示了在訓練集上訓練並在測試集上進行評估的實驗。 我們專注於極深網絡的行為，而不是推動最先進的結果，因此我們有意使用如下簡單架構。

普通/殘差架構遵循圖3中的形式。 網絡輸入是 32×32 的圖像，減去每個像素的平均值。 第一層是 3×3 卷積。 然後我們在大小特徵圖上分別在feature maps size ={32,16,8}使用具有3×3卷積的6n層堆棧，每個特徵圖大小使用2層。

過濾器的數量是分別是{16,32,64}。 subsampling 由步長為2的 conv。網絡最後以全局平均池化、10-way 全連接層和 softmax 結束。 總共有 6n+2 個堆疊的weight layer。 

![](https://i.imgur.com/r7wtjMY.png)
當使用shortcut connections時，它們連接到成對的 3×3 層。在這個數據集上，我們在所有情況下都使用identity shortcut (option A)，因此我們的殘差模型與普通模型具有完全相同的深度、寬度和參數數量。我們使用 0.0001 的權重衰減和 0.9 的動量，並採用權重初始化和BN但沒有dropout。 這些模型在兩個 GPU 上以 128 的小批量大小進行訓練。 我們從 0.1 的學習率開始，在 32k 和 48k 次迭代時將其除以 10，並在 64k 次迭代時終止訓練，這是在 45k/5k train/val split 上確定的。 我們按照簡單的數據增強進行訓練：每邊填充 4 個像素，從填充圖像或其水平翻轉中隨機採樣 32×32 的裁剪。為了測試，我們只評估原始 32×32 圖像的單一視圖




我們比較n={3,5,7,9}，也就是20、32、44 和 56 層網絡。 如圖６。 顯示了plain net的行為。 deep plain net受到深度增加的影響，並且在更深時表現出更高的訓練誤差。 這種現像類似於 ImageNet和 MNIST上的現象(圖4, left)  ，表明這種優化難度是一個基本問題。 
(圖6) 顯示了 ResNets 的行為。 也類似於 ImageNet 的情況（圖4, 右），我們的 ResNets 克服了優化困難，並在深度增加時證明了準確性的提高。我們進一步探索 n = 18的110 層 ResNet。 

在這種情況下，我們發現 0.1 的初始學習率有點太大而無法開始收斂。所以我們用0.01來warm up the training，直到訓練誤差低於80%(大約400 iterations)，然後回到0.1繼續訓練。其餘learning schedule 部分與以前一樣。這個 110 層的網絡收斂性很好（圖 6）。 它比 [FitNet](https://arxiv.org/pdf/1412.6550.pdf) 和[Highway](https://arxiv.org/pdf/1505.00387.pdf) 等其他深而薄的網絡具有更少的參數，但卻是最先進的結果之一。

![](https://i.imgur.com/JILlByw.png)


#### Analysis of Layer Responses

![](https://i.imgur.com/jKMGGGN.png)
如圖7，顯示層響應的標準偏差。響應是每個 3×3 層的輸出，在 BN 之後和其他非線性之前。對於 ResNets，這個分析揭示了殘差函數的響應強度。 表明 ResNet 的響應通常比它們的普通對應物小。 這些結果支持了我們的基本動機，即**殘差函數可能通常比非殘差函數更接近於零**。 **我們還注意到更深的 ResNet 具有更小的響應幅度**，如 ResNet-20、56、和圖 110。 圖7. 當有更多層時，ResNets 的單個層往往對信號的修改更少。
:::info
:bulb:圖7是利用 CIFAR-10 針對各層做 Batch Normalization 之後的輸出值，可以觀察到 ResNet 在各層的標準差 ( Standard deviations, std ) 都比一般網路 ( plain Net ) 來的低，這說明了各層的輸出都更集中在 0 附近，也就是最優解會更接近恆等映射而非零映射的證據。

:::

#### Exploring Over 1000 layers
![](https://i.imgur.com/CPsA0ui.png)

我們探索了一個超過 1000 層的極深度模型。我們設置 n=200的1202 層網絡，其訓練如上所述。 我們的方法沒有優化困難，該$10^3$層網絡能夠實現<0.1％的訓練誤差（圖6，右）。它的測試誤差還是相當不錯的(7.93%,表６)。

**但是在這種激進的深度模型上仍然存在未解決的問題**。 **這個 1202 層網絡的測試結果比我們 110 層網絡的測試結果差**，儘管兩者都有相似的訓練誤差。 我們認為這是由於過度擬合。 對於這個小的數據集，1202層網絡可能會不必要地大。 可以採用強正則化（例如 maxout 或 dropout）以在此數據集上獲得最佳結果。 在本文中，我們沒有使用 maxout/dropout，只是簡單地通過設計的深和薄架構強加正則化，而不會分散我們對優化困難的關注。但是結合更強的正則化可能會改善結果，我們將在未來研究
:::info
**這個 1202 層網絡的測試結果比我們 110 層網絡的測試結果差**
因為這問題後續有更多的研究，針對這問題作延伸(DenseNet, iResNet)。
:::
### Object Detection on PASCAL and MS COCO
![](https://i.imgur.com/5cY7wxr.png)

**我們的方法在其他識別任務上具有良好的泛化性能**。 表 7 和表 8 顯示了在 PASCAL VOC 2007 和 2012 和 COCO 上的目標檢測基線結果。 我們採用Faster R-CNN作為檢測方法。 在這裡，我們對使用ResNet-101代替VGG-16的改進感興趣。使用兩種模型的檢測實現是相同的，因此收益只能歸因於更好的網絡。最值得注意的是，在具有挑戰性的 COCO 數據集上，我們獲得了 COCO 標準指標 6.0% 的增長，這是 28% 的相對改進。這種增益完全是由於學習到的表示


基於深度殘差網絡，我們在 ILSVRC & COCO 2015 比賽中獲得了多個比賽的第一名：ImageNet 檢測、ImageNet 定位、COCO 檢測和 COCO 分割。 







## 參考資料
1. [[論文] Deep Residual Learning for Image Recognition](https://allen108108.github.io/blog/2019/10/29/[%E8%AB%96%E6%96%87]%20Deep%20Residual%20Learning%20for%20Image%20Recognition/#fn_%E8%A8%BB1)
2. [Deep Residual Learning for Image Recognition](https://arxiv.org/pdf/1512.03385.pdf)
3. [pytorch-code](https://github.com/a920604a/CNN_backbone/blob/main/CNN/ResNet.py)