IT Repository

(7) ResNet (Residual Connection) 본문

CNN/Study

(7) ResNet (Residual Connection)

IT찬니 2020. 1. 14. 19:37

 

 

 

 

 

 

 

ResNet (2015)

ResNet은 2015년도 ILSVRC 에서 우승을 차지한 모델입니다.
총 152개의 레이어를 가진 Ultra-deep한 네트워크입니다.

 

Difficulty of Training Deep CNN

2014년도에 CNN의 Depth와 Structure을 폭발적으로 발전시킨 이후에 많은 사람들이 Deep CNN에 대한 연구를 시작했습니다.
그러나 우리가 알고 있는 사실과 정반대의 현상들이 관찰되기 시작되었습니다.

아래의 그래프를 먼저 보겠습니다.


위 그래프는 ResNet을 발표한 논문에서 저자가 이 문제를 설명하기 위한 그래프입니다.
이를 보면 더 Deep한 Network가 오히려 더 Shallow한 Network보다 낮은 성능을 기록하는 문제를 확인할 수 있습니다.

생각을 해보면 20 + 36 Layer의 네트워크는 최소한 Training에서라도 20 Layer의 네트워크와 비슷한 성능이거나 더 좋아야 합니다.
Model Capacity가 크기 때문에 (Overfitting이 발생하더라도) 더 좋은 성능이 당연할 것이나 위의 그래프는 Training과 Test에서 모두 Shallow한 네트워크가 더 좋은 성능을 보입니다.

이는 결국 Optimization의 문제라고 생각할 수 있습니다.
즉, 네트워크가 더 깊어질 수록 Optimize(Train)하는 것이 더 어렵기 때문에 Deep 네트워크는 Shallow 네트워크 만큼의 퍼포먼스를 보이지 않는다고 볼 수 있습니다.

ResNet은 이 문제를 해결하고 더 깊은 156 Layer의 네트워크를 훈련시키는 데에 성공합니다.

 

ResNet의 특징

  1. Residual Connection
 

Residual Connection (Skip Connection)

왼쪽은 "Plane" layer를 설명하는 그림이고, 오른쪽은 Residual Block을 설명하는 그림입니다.

 

두 구조의 차이점은 한 가지입니다.
동일한 연산을 하고 나서 Input x를 더하는 것(Residual Block)더하지 않는 것(Plane layer)입니다.

단순하게 Input x를 더하는 것만으로 레이어는 Direct로 학습하는 것 대신에,
Skip Connection을 통해 각각의 Layer(Block)들이 작은 정보들을 추가적으로 학습하도록 합니다. (= 각각의 레이어가 배워야 할 정보량을 축소)

Plane Layer
레이어의 아웃풋인 Feature vector를 y라고 할 때
$y = f(x)$가 Direct로 학습하는 위의 왼쪽 그림을 설명하는 수식이라고 할 수 있습니다.
여기에서 아웃풋인 y는 x를 통해 새롭게 학습하는 정보입니다.
즉, 기존에 학습한 정보를 보존하지 않고 변형시켜 새롭게 생성하는 정보입니다.

이 경우에 NN(Neural Network)가 고차원적인 Feature vector로의 Mapping을 학습한다는 개념으로 생각했을 때,
층이 깊어질수록 한번에 학습해야 할 Mapping이 너무 많아져 학습이 어려워 집니다.

Residual Block
반대로 오른쪽 그림을 설명하는 수식은 $y = f(x) + x$ 입니다.
여기에서의 y는 x가 그대로 보존되므로 기존에 학습한 정보를 보존하고, 거기에 추가적으로 학습하는 정보를 의미하게 됩니다.

즉, Output에 이전 레이어에서 학습했던 정보를 연결함으로써 해당 층에서는 추가적으로 학습해야 할 정보만을 Mapping, 학습하게 됩니다.

 

예)
이해가 어렵다면 이렇게 생각해봅시다.

(1) 오픈북이 불가능한 시험
(2) 오픈북이 가능한 시험

(1)의 경우에는 시험의 범위가 많아질수록(= 층이 깊어지고 한번에 학습할 Mapping이 많은 경우) 공부하기가 어렵겠죠.
반면에 (2)의 경우에는 이미 배웠던 내용(x)가 제공되기 때문에 추가적으로 학습해야 할 정보만을 공부할 것입니다.

 

Residual Connection with Bottle Neck Layer

또한 ResNet은 Deep Network에서의 연산량을 줄이기 위해 GoogLeNet에서 사용했던 Bottle Neck Layer를 사용한 Residual Block을 사용합니다.

왼쪽은 Bottle Neck을 사용하지 않은 Residual Block이고 오른쪽은 Bottle Neck을 사용한 Residual Block입니다.
(ResNet50 이상에서는 Bottle Neck을 사용한 Block을 사용했습니다.)

오른쪽 그림을 확인하면 Input x의 Dimension 을 64로 축소한 후에 $f(x)$를 연산하고 마지막에 다시 256으로 높여주는 것을 확인할 수 있습니다.

 

Training ResNet in Practice

  • Batch Normalization after every Conv Layer
  • Xavier/2 initialization from He et al.
  • SGD + Momentum (0.9)
  • lr: 0.1, divided by 10 when validation err plateaus
  • Mini-batch size: 256
  • Weight decay of 1e-5
  • No dropout used

'CNN > Study' 카테고리의 다른 글

(9) GCN - Architecture of GCN  (0) 2020.01.17
(8) GCN - What is Graph  (0) 2020.01.17
(6) GoogLeNet (Inception Module & BottleNeck Layer)  (0) 2020.01.14
(5) VGGNet (Small Filters with Deeper Networks)  (0) 2020.01.14
(4) AlexNet  (0) 2020.01.14
Comments