Paper Review

[논문 리뷰] ResNet

슈넌 2022. 8. 15. 21:13

Deep Residual Learning for Image Recognition


Abstract

 

모델이 깊어질수록 학습을 하는 것도 더 어려워진다. 이를 해결하기 위해 이 논문에서는 Residual Learning Framework를 소개한다. 이를 통해 모델의 깊이가 깊어지면서 정확도도 상승하게 되었다. 152개의 Layer를 쌓았음에도 VGG보다 복잡도가 낮았다. ImageNet Dataset에 대해서 3.57% Error를 달성하며 ILSVRC 2015 Classification Task에서 1등을 차지하였다.


1. Introduction

딥러닝 모델은 Image Classification에 돌파구를 마련했다. 모델의 Layer수가 증가할수록 학습할 수 있는 Feature가 달라지게 된다. 그렇기 때문에 모델의 깊이는 중요한 요소이다. 깊이의 중요성은 알겠으나, layer를 그냥 쌓는다고 해서 항상 성능이 좋아지는 가에 대해 질문이 생기게 된다. Vanishing or Exploding Gradients Problem이 대표적인 반례이다. 이를 해결하여 Converge가 되었다고 해도 성능이 악화되는 경우가 발생하는데, Overfitting이 발생한 것이다. 또한, 모델의 Layer가 추가되면 Training Error도 커지게 된다. 성능 악화가 일어난다는 것은 모델이 Optimize (최적화)가 안 되었다는 뜻이다. 본 논문에서는 Deep Residual Learning Framework를 통해 해결하고자 한다. 이는 Residual Mapping을 시도하는 것인데, 원래의 Underlying Mapping에 Input인 x를 더한 것이다. 이것을 우리는 Shortcut Connection이라고 부른다.

Shortcut Connection

이때 Shortcut Connection은 두 개의 Layer를 건너뛰므로 Skip Connection으로 부르기도 한다. x는 Indentity Mapping을 거치고, 이후 나온 결과를 F(x)에 더해준다. 이는 계산을 늘리거나 parameter 수를 증가시키지 않는다. 이것을 ImageNet에 실험하여 다음과 같은 효과를 검증하였다.

 

1) Deep Residual Networks는 Optimize하기 쉽다.

2) Depth가 증가하면서 정확도의 증가를 얻었다.

 

Optimize가 잘 되는 것을 보이기 위해 100개가 넘는 Layer에 대해서도 학습을 성공하였고, 심지어 1000개가 넘는 Layer에서도 성공적으로 학습하였다. 152개의 Layer를 쌓은 모델이 모델 복잡도도 VGG보다 낮았고, 정확도도 훨씬 높았다.  ImageNet Dataset에 대해서 3.57%의 Top-5 Error를 달성하면서 ILSVRC에서 1등을 차지하였다.


2. Related Work

 

Residual Representations

Image Recognition에서 VLAD는 Residual Vector를 이용하여 Encoding 하는 방법이다. Low-level의 비전과 그래픽스 분야에서 편미분 방정식을 풀기 위해 여러 개의 Scale로 Subproblems를 재구성하는 Multigrid Method를 사용하였다. 여러 스케일을 잇기 위해 Residual Vector를 사용하였다.

 

Shortcut Connections

이전 연구에서도 MLP에서 Linear Layer에 Input과 Output을 연결해주는 방법이 존재하였다. Auxiliary Classifier을 통해서 Vanishing Gradients를 해결한 방법이 있었고, Inception Module에서도 shortcut branch로 구성되어 있다. Highway Networks가 Shortcut Connection을 발표하였고, gating function을 이용하였다. 하지만 이는 Parameter 수를 증가시켰고, 이 논문에서 제안한 identity shortcut은 parameter를 가지고 있지 않다. 또한 gate를 열고 닫는 방식이 아니라 항상 Gate가 열려있는 방법을 사용한다.


3. Deep Residual Learning

1. Residual Learning

H(x)를 몇개의 Layer에 대한 Underlying Mapping이라고 생각하고, x를 입력이라고 가정해보자. Nonlinear한 Layer가 쌓여가면서 복잡한 함수를 Approximate하는 것은 다른 말로 하면 H(x) - x와 같은 Residual Function을 Approximate할 수 있다는 것과 같다. 이때 Residual Function을 F(x) = H(x) - x라고 하면 원래 H(x) 함수의 경우 F(x) + x로 정의된다. 따라서 Residual Function에 입력을 더한 것을 Approximate하는 과정이 되는 것이다. 이것의 아이디어는 성능 저하 문제로 인해 나온 것인데, x를 더해주는 것과 같은 Layer를 Identity Mapping을 이용해 추가해주면 Training Error가 Shallower 보다 낮을 것이기 때문이다. 성능 저하 문제는 Identity Mapping을 Approximate 하는 데에 어려움이 있을 것을 암시하는데, Residual Learning을 이용하면 이를 해결할 수 있다. 만약에 Inentity Mapping이 적합하다면 기존의 여러 개의 nonlinear layers의 weights들을 모두 0으로 만들어 버리고 Identity Mapping이 되도록 만들 것이다. 즉, 기존의 Convolution Layer를 따라서 입력이 전달되는 것이 아니라 새로 추가된 Skip Connection을 타고 Indentity Mapping이 적용된 결과가 Output으로 나오는 것이다. 사실 현실적인 부분에서 Identity Mapping이 적합한 경우는 많지 않다. 하지만 이러한 방법은 전제 조건을 주는 것이다. 적합한 함수가 Identity Function과 유사할 때, 즉 Zero Mapping을 하는 것이 아닐 때, 작은 변화에 더 쉽게 반응할 수 있을 것이다.

 

2. Identity Mapping by Shortcuts

여기서 Residual Block의 정의를 다음과 같이 하였다.

x와 y는 각각 입력과 출력이고, 함수 F는 Residual Mapping Function이다. F + x의 경우 Element-wise addition을 사용하였다. 즉, 각각의 Element끼리 더한다는 뜻이다. 그리고 합친 후에 Nonlinear function을 거친다. 이와 같은 Shortcut Connection은 Parameter 수와 계산 복잡도를 증가시키지 않는다는 장점이 있다. 이것이 Plain networks와의 차이점이다. 또한, Identity Mapping에 Linear Projection을 추가할 수 있다. x의 Dimension과 F를 거친 결과의 Dimension이 다를 수 있기 때문이다.

Ws는 Linear Projection에 사용되는 Matrix이다. F는 여러개의 Layer가 될 수 있지만, 만약 한 개의 Layer일 경우에는 이점을 얻기가 어렵다. 왜냐하면 그렇게 되는 경우 Layer에 대한 식을 y = W1x + x로 정의할 수 있는데, 이는 y = (W1+1)x와 같은 식이며 그저 weight값에 1을 더한 Linear Layer와 다를 것이 없다.

 

3. Network Architectures

먼저 Plain Networks와 Residual Networks를 비교하고자 한다.

 

Plain Network

Baseline으로는 VGG에서 영감을 받은 34개의 Layer를 가진 모델을 준비하였다. 대부분의 경우 3x3 Filter로 이루어져 있으며, Feature Map Output Size가 동일하고, Filter의 Dimension이 두배가 될 때, Feature Map Size가 절반이 된다. 이는 Layer 당 복잡도를 유지하기 위해서이다. Stride 2를 가진 Convolution을 이용해 Downsampling을 진행하였다. 이것만 해도 VGG보다 복잡도도 낮고 Parameter 수도 적다.

모델 구조도

가장 왼쪽 사진이 VGG19이고, 중간이 Plain Network이다.

 

Residual Network

위에 소개되었던 사진의 가장 오른쪽 모델이다. Plain Network에 기반을 하였고, 중간에 Shortcut Connection이 추가되었다. Input과 Output이 같은 Dimension이면 더하는데 문제가 없지만, Convolution 결과가 Dimension이 2배 증가되었을 때는 두 가지의 옵션이 있다. Identity Mapping은 그대로 진행하고 나머지 Dimension을 0으로 채우는 방법이 있고, 앞에서 소개한 Projection Shortcut을 사용하는 것이다. 그리고 두 가지 옵션 모두 Feature Map의 크기를 맞추기 위해 Stride를 2로 한다.

 

4. Implementation

ImageNet에 사용할 때, Image의 크기를 256x480으로 Resize하고 Random Crop을 통해서 224x224의 Image를 생성하였다. Horizontal Flip을 이용하여 좌우 반전을 줘서 Data Augmentation을 진행하였다. Convolution과 Activation Function 사이에 Batch Normalization을 추가하였고, Weight Intialization을 직접 손으로 진행했다. SGD Optimizer를 사용하였고, 256의 mini-batch를 사용하였다. Learning Rate는 0.1부터 시작하여 Error가 수렴할 때마다 10으로 나눠주었다. Weight Decay는 0.0001을 사용하였고, Momentum은 0.9를 사용하였다.


4. Experiments

1. ImageNet Classification

1000개의 Class로 이루어진 2012 ImageNet Classification Dataset으로 실험을 진행하였다.

 

Plain Networks

18개 Layer로 이루어진 모델과 34개 Layer로 이루어진 모델을 사용하였다. 아래 사진은 각 모델의 구조를 보여준다.

34개의 Layer를 가진 Plain 모델은 18 Layer를 가진 Plain Network 보다 높은 Validation Error를 보였다. 이 이유는 아래 사진에서 확인할 수 있다. 아래 사진을 보면 성능 악화 문제를 발견할 수 있다.

34개의 Layer를 가진 모델이 전체 학습 과정에서 Training Error가 높은 것을 볼 수 있다. 이것을 통해 Vanishing Gradients로 인해 Optimization이 어렵다는 것을 알 수 있다. 이를 논문에서는 더 깊은 Plain Network가 아주 작은 Convergence Rates를 가져서 Training Error가 줄어드는 것이 약하다고 추측하고 있다.

 

Residual Networks

다음으로 이번에도 18개 Layer와 34개의 Layer를 비교한다. 이번에는 Residual Network를 이용하였다. 첫 번째 옵션으로는 Identity Mapping을 할 때, Dimension을 늘리기 위해 Zero Padding을 사용하였다. 아래 사진을 보면 알 수 있듯이 34개의 Layer를 가진 모델이 18개의 Layer를 가진 모델보다 Error가 작았다. 이것을 통해 모델이 깊어지면서 생기는 성능 악화 문제는 해결하였다고 볼 수 있다. 그리고 다음 표를 보았을 때 ResNet이 Plain Network보다 3.5% 낮은 Error를 보였다. 이것을 통해 Residual Learning의 효과를 검증할 수 있었다. 마지막으로 ResNet이 Plain Network보다 초반 단계에서 빠르게 convergence 되는 것을 확인할 수 있었다.

 

Identity vs. Projection Shortcuts

지금까지 우리는 Dimension 증가를 위해 Zero Padding을 했지만, 이번에는 Projection을 사용해볼 예정이다. 먼저 3가지 경우로 나눌 수 있다. (A) Zero Padding을 통해 Dimension 증가를 하는 것과 (B) Projection을 통해 Dimension을 증가시키는 것, (C) 모든 Shortcut을 Projection 하는 것으로 나눌 수 있다. 아래 표를 보면 알 수 있듯이 모든 3가지 경우는 Plain Network보다 성능이 좋았고, B의 경우 A보다 살짝 성능이 좋았다.

이 이유는 A의 경우 Residual Learning을 하지 않아서 이고, C의 경우 B보다 성능이 좋았다. 이것은 Extra Parameter가 Projection Shortcut에 생겼기 때문이다. 하지만 이 세 가지 모두 성능 악화 문제와는 큰 상관이 없다. 이 논문에는 성능 악화 문제를 해결하기 위한 것으로 속도와 모델 복잡도가 큰 C를 굳이 사용하지 않았다.

 

Deeper Bottleneck

이제 여기서는 모델을 더 깊게 만드려고 한다. 하지만 문제는 학습 시간이 오래 걸린다는 것이다. 이를 충당하기 위해 Bottleneck 구조를 제안한다. 각 Residual Function마다 2개의 Layer 대신 3개의 Layer를 사용하였고, 이는 각각 1x1, 3x3, 1x1 Convolution으로 이루어져 있다. 1x1 Layer는 Dimension을 줄였다가 키우는 역할을 한다. 이유는 3x3 Layer의 Input과 Output Dimension을 작게 만들기 위해서이다. 아래 사진은 Bottleneck 구조의 예시이다. Layer가 1개 더 많음에도 불구하고 Time Complexity는 둘이 비슷하다.

 

여기서 Identity Shortcuts은 중요한 역할을 한다. 만약에 Identity Shortcut이 Projection으로 바뀐다면 Time Complexity와 모델의 크기는 두배가 된다. 따라서 Identity Shortcut은 Bottleneck 구조에서 효율적인 구조를 위해 꼭 필요하다.

 

50-layer ResNet

원래 34 모델에서 2개로 이루어진 Layer Block을 3개 Layer로 이루어진 Bottleneck Block으로 바꾸었고, Dimension 증가 방법을 Option (B)를 선택하였다.

 

101-layer and 152 layer ResNets

3개로 이루어진 Layer Blocks를 더 사용하며 101과 152개의 Layer를 사용한 모델을 만들었다. Depth가 크게 증가하였지만 VGG16/19보다 더 적은 복잡도를 가지고 있다. 각 모델들은 34개 Layer 모델보다 더 높은 정확도를 보였고, 이 과정에서 모델이 깊어지면서 생기는 성능 악화 문제를 찾을 수 없었다.

 

Comparisons with State-of-the-art Methods

아래 표를 확인하면 이전의 좋은 성능을 보였던 모델보다 ResNet이 더 좋은 성능을 보인 것을 알 수 있다. 또한 Emsemble Learning을 이용하여 더 낮은 Error를 달성하였다.

2. CIFAR-10 and Analysis

ImageNet 뿐만 아니라 CIFAR-10 Dataset에 대해서도 실험을 진행하였다. 앞에서 나왔던 34 Layer로 구성된 모델과 비슷한 구조로 모델을 구성하였고, 첫 번째 Layer는 3x3, 32x32 Output Size에 대해서는 1+2n개의 Layer를 쌓았고, 16x16에 대해서는 2n개, 8x8에 대해서도 2n개를 쌓았다.

Shortcut Connection이 사용될 때에는 3x3 layer로 연결하였다. 이때 n을 3, 5, 7, 9일 때로 나눠서 성능을 실험하였고 각각 20, 32, 44, 56개의 Layer로 이루어진 모델이 나왔다. 아래 표를 통해 알 수 있듯이 ResNet이 모델의 깊어질수록 더 좋은 성능을 보이는 것을 확인하였다.

n = 18인 경우 즉 Layer가 110개인 경우에는 Initial Learning Rate가 학습하기에는 0.1이라는 값이 너무 큰 값이어서 잘 학습을 못한 것으로 예상되어 0.01으로 줄이고 Error가 80% 이하가 되면 다시 0.1로 돌아가도록 하였다. 그렇게 한 결과 모델은 Converge가 잘 된 것을 확인할 수 있었다. 이 모델의 경우 다른 FitNet이나 Highway보다 적은 파라미터 수를 가졌고, 더 높은 성능을 보였다.

 

Analysis of Layer Responses

이 파트는 표준 편차를 확인하여 Layer Response를 확인한다는 것인데, 각 3x3 Layer의 Outputs을 확인하는 것이다. 이것을 ResNet에 적용하였을 때, ResNet은 일반적으로 Plain Net보다 작은 Response를 보였다. 이것을 통해 앞서 얘기했던  non-residual function보다 residual function이 0에 더 가깝다는 것을 말해준다. 즉, Identity Mapping이 되도록 Weight가 0이 되도록 학습이 되었다는 것이다. 그리고 깊은 모델일수록 Response의 크기가 작았다. Layer가 증가할수록 신호의 변화가 줄어드는 경향을 보인다.

 

Exploring Over 1000 Layers

그렇다면 모델의 Layer를 계속해서 늘리면 더 좋은 성능을 얻는 것이 아닐까 생각이 들게 된다. 물론 이 논문의 저자들도 그런 생각을 했을 것이다. 그리고 1202개의 Layer를 가진 모델을 실험하였고, Optimization 과정의 문제는 없었다. 위에 나왔던 Table 6을 보면 꽤 괜찮은 성능을 보이고 있다. 하지만 여기에도 문제들이 있었다. Training Error는 두 모델이 비슷했지만, 1202 Layer의 모델이 110 Layer 모델보다 성능이 좋지 않았다. 그 이유를 여기서는 Overfitting을 이야기한다. 1202 모델은 ImageNet을 학습하기에는 너무나도 큰 모델이다. 여기서 말하는 큰 모델은 파라미터 수가 많다는 것이다. Regularization Method(Dropout, maxout)을 사용해보지는 않았다고 한다. 여기서는 모델이 깊어지면 Overfitting이 발생하기 쉽다는 것을 말해주고 싶기 때문이다. 이것에 대해서는 이후 연구해볼 예정이라고 한다.

 

3. Object Detection on PASCAL and MS COCO

이 연구는 Classification 뿐만 아니라 다른 Recognition Task에도 일반적인 성능 향상을 보였다. 아래 표를 보면 알 수 있듯이 Object Detection 과제에서도 PASCAL VOC 2007, 2012, COCO Dataset에 대해 좋은 성능을 보였다. Faster R-CNN 모델을 사용하여 Backbone을 VGG-16을 ResNet-101로 교체하였다. 그리고 다른 모델들보다 더 높은 성능을 보였다. 이것을 통해 Backbone인 ResNet이 Representation을 잘 학습하여 성능이 향상된 것을 확인할 수 있다.

 

ResNet은 정말 기본 중의 기본이 되는 모델이다. 여기서 말하고 싶은 것은 모델이 깊어지면서 생기는 문제들을 해결했다는 것이고, Skip Connection의 역할이 무엇인지 파악해야 한다. Overfitting과 Degradation Problem은 헷갈리지 않을 필요가 있다.

 

질문은 언제나 환영입니다:)