연구/논문 리뷰

[CVPR 2016] Deep Residual Learning for Image Recognition (ResNet)

xeskin 2020. 6. 14. 17:47
반응형

Introduction

이전 연구들(VGGNet, AlexNet, GoogLeNet)에서 레이어를 깊게 쌓을수록 데이터의 피쳐를 잘 추출할 수 있기 때문에 학습을 잘 할 수 있게 된다는 것을 알 수 있었다. 하지만, 레이어가 깊어지면 학습시키기가 어려워진다. 예를 들어, GoogLeNet의 경우 레이어가 깊어짐에 따라 'gradient vanishing'이 발생해 모델이 수렴하지 않거나 느리게 수렴하는 문제점을 갖고 있었다. 그래서 이를 해결하기 위해 'Auxillary Classifier'를 두어 해결하려는 시도를 했다. 뿐만 아니라 batch normalization layer를 둔다던가 초기값을 잘 설정(He Initialization, Xavier Initialization)하는 시도를 통해 해결하려고 했다. 하지만, 레이어가 깊어지는 것은 여전히 문제점이었다.

그리고 레이어가 깊어짐에따라 training error와 test error 모두 깊이 쌓은 모델이 더 큰 것을 확인할 수 있다. 저자는 이 부분을 짚으며 모델의 레이어를 깊게 쌓아도 잘 수렴할 수 있는 'residual learning'을 제안했다.

 

Residual Learning

Plain Network Block

일반적인 모델은 위의 그림과 같이 입력값 x를 받으면 두 개의 weight layer를 지나 최적의 출력값 H(x)를 학습한다. 학습 시에 backprop을 통해 weight layer 내에 있는 weight, bias를 업데이트 한다. 그런데, 여기서 입력값과 출력값의 차이(residue) H(x)-x를 학습하도록 하면 어떻게 될까? 차이를 학습한다는 것은 이를 최소화하겠다는 것이다. 이 residual function을 F(x)라고 하면 F(x)=H(x)-x가 되고 우리가 근사하고자 하는 출력값 H(x)는 F(x)+x가 된다. 그림은 다음과 같이 바뀐다.

Residual Learing Block

 

이때 입력에서 출력값으로 identity mapping을 하는 부분을 shortcut connection이라고 하며, 이는 출력값에 단순히 덧셈만 하는 것이기 때문에 추가적인 파라미터는 필요하지 않다. 이는 간단하지만 학습시 큰 이점을 가져다 준다. 학습을 pre-conditioning하는 것에 도움을 주기 때문이다. 그러면 무엇을 pre-conditioning하느냐? 일반적인 모델의 경우에 어떤 입력값 x가 있으면 그걸 타겟하는 값 y로 잘 근사하는 함수 H(x)를 학습하는 것이 목표다. 하지만, ResNet F(x)+x를 최소화하는 것을 목표로 한다. 그런데 각 residual block에서는 입력값 x는 이미 정해져있는 것이기 때문에 F(x)만 0으로 만들어 주면 된다. 그런데 F(x)는 입력과 출력의 차이(residue) H(x)-x였다. 그런 의미에서 이를 residual learning이라고 부른다.

 

W_s: linear projection to match dimension

이때 레이어를 지나며 identity mapping과 F(x)간의 dimension이 맞지 않을 수 있기 때문에 이를 맞춰주는 하이퍼파라미터가 필요하다.

 

Network Architecture

모델은 기본적으로 VGGNet을 골자로 하였다. Plain Network와 Residual Network는 shortcut connection이 있는 부분 빼고 같다.

- 모든 convolution layer는 3x3 필터를 사용했다.

- max pooling, dropout 등을 사용하지 않았다.

- 채널 수가 같은 경우, 동일한 수의 필터를 사용했다.

- 채널 수가 절반이 되는 경우, 필터의 개수를 두 배 늘렸다.

- 채널 수를 줄이는 경우, stride를 2로 설정했다. (downsampling)

Experiment

반응형