논문 리뷰(8)- Deep Residual Learning for Image Recognition

이준학·2024년 7월 19일
0

논문 리뷰

목록 보기
9/15

    이번에 리뷰해 볼 논문은 2015년에 나온 "Deep Residual Learning for Image Recognition" 이다. 우리에게 ResNet이라고 알려진 CNN 구조를 다룬 논문이다.

1. 저자가 이루려고 한 것

    논문이 나올 당시에는 ImageNet dataset에 16-30 layer의 네트워크를 적용해 문제를 해결하고 있었다. 이 정도 layer들을 가진 네트워크를 very deep model이라고 불렀다. 저자들은 여기서 '더 좋은 네트워크를 배우는 것이 layer를 더 쌓는 것만큼 쉬운가?' 라는 의문을 품게 되었다. 당연히 layer를 더 많이 쌓게 되면 vanishing, exploding gradient 문제에 직면하게 된다. 또한, accuracy가 좋아지다가 saturation이 일어나고, 그 이후에 급격히 성능이 안 좋아지는 degradation problem도 일어나게 된다. 저자들은 이러한 문제를 해결하고 더 깊은 네트워크를 높은 정확도로 훈련시키기 위해 Residual learning이라는 방법을 제안한다. 이를 이용해 논문에서는 ResNet-18,34,50,101,152,1202 까지 보여주었고, 모두 높은 depth 치고 상당히 좋은 training error를 보여준다. 얘기가 너무 길어지는 것 같다. 저자가 이루고자 한 것을 한 마디로 요약하면, "Residual learning을 통한 deep network의 좋은 성능 유지와 overfitting 방지" 이다.

2. 주요 내용

    앞서 언급했듯이, 당시 네트워크들의 depth를 키우기 위해 해결해야 하는 문제는 vanishing/exploding gradient problem과 degradation problem이었다. vanishing/ exploding gradient problem의 경우는 normalized initialization과 중간 layer들을 normalize하는 것으로 어느 정도 해결할 수 있었다. 그러나 degradation problem은 해결되지 않았다. 이 현상은 overfitting에 의한 현상은 아니다. 그래서 저자들은 shallow network와 shallow network에 layer를 쌓은 네트워크를 비교한다. 이때 추가로 쌓은 네트워크는 identity mapping layer이다.

1) shallow net(A) VS shallow net+ identity mapping layers(B)

    앞으로 편의성을 위해 shallow net을 A, shallow net+ identity mapping layer 네트워크를 B라고 부르겠다. B는 A에서 훈련된 layer들의 세팅을 그대로 가져오고, 그 위에 identity layer만 얹은 것이다. 이러한 세팅은 B가 A보다 더 높은 training error를 얻을 이유가 없다. A의 layer들을 가져오고, 그 뒤에 새롭게 추가된 layer들은 그냥 input을 받아서 내보내는 역할만 하기 때문이다. 그러나 당시의 solver들은 A와 비슷하거나 더 낮은 training error를 얻지 못했다. 이는 solver가 identity mapping을 근사하는데에 어려움이 있음을 의미한다. 저자는 이러한 문제를 deep residual learning framework를 통해 해결한다.

2) Residual Learning

    Residual Learning의 기본적인 아이디어는 원래의 mapping(논문에서는 이를 H(x)H(x)라고 표현한다.)을 fitting 시키지 말고, F(x)=H(x)xF(x)=H(x)-x로 정의되는 F(x)F(x)를 fitting 하자는 것이다. 만약 H(x)H(x)가 복잡한 공식들을 근사할 수 있다면,그 잔차인 F(x)F(x)도 residual function을 근사할 수 있을 것이라고 생각해 볼 수 있다. 잔차를 학습하겠다는 아이디어에서 residual learning이라는 이름이 붙은 것이다. F(x)F(x)가 정의되는 방식에 따라 우리가 원래 학습하던 값은 H(x)=F(x)+xH(x)=F(x)+x로 표현할 수 있다. 저자는 residual을 학습하는 것이 원래의 값을 학습하는 것보다 최적화하기 쉬울 것이라고 가설을 세웠다.
  여기서 등장하는 또 하나의 중요한 개념이 shortcut connection, 혹은 skip connection이다. 하나 이상의 layer를 뛰어넘는 connection을 의미한다. 위의 사진에서는 오른쪽에 identity라고 써 있는 긴 화살표가 shortcut connection을 나타낸다.     ResNet에서는 skip connection으로 identity mapping을 선택했다. identity mapping의 장점은 parameter가 추가로 필요하지 않고, computation이 추가로 사용되지 않는다는 것이다. 저자는 이러한 구조를 가진 deep residual net과 그와 똑같은 구조를 가지고 있지만 shortcut connection이 없는 plain net을 비교하며 deep residual net의 성능을 알아본다. 결과적으로, deep residual net이 plain net보다 더 낮은 training error를 가지고, depth가 크게 증가했음에도 이전에 소개된 네트워크들보다 훨씬 좋은 성능을 내준다. 이제 수식을 통해 building block에 대해 알아보자.

x,yx,y는 input, output vector를 뜻하고, F(x,Wi)F(x,{W_i})가 모델이 배워야 할 residual mapping을 뜻한다. 위의 Figure2의 경우, layer가 두개 있으니, F 식은 아래와 같이 표현될 수 있을 것이다.

    앞서 얘기했듯이, shortcut connection은 새로운 parameter와 추가적인 computation이 필요하지 않다. 이러한 점이 shortcut connection과 plain network를 비교할 때의 정확성을 높여준다. 하나 짚고 넘어가야 할 점은, xxFF의 차원이 같아야 한다는 점이다. 마지막에 더해주어야 하기 때문에 당연한 이야기이다.
위의 식에서는 fully connected layer에 대해서만 다루었지만, convolutional layer들에도 당연히 적용이 가능하다. 이제 구체적인 ResNet의 Architecture를 살펴보자.

3) Network Architecture

    논문에서는 위에서 말했던 plain net과 residual learning을 진행한 network를 비교한다. 아래 사진이 34-ResNet과 34-plain net의 구조도이다.

    기본적인 plain net의 구조는 VGGNet에서 따왔다. Conv layer들은 대부분 3x3 filter를 가지며, plain net과 ResNet 모두 두 가지 규칙에 따라 설계되었다.

i) layer에서 생산되는 feature map의 크기가 같다면, layer들의 filter 개수는 동일하다.
ii) feature map 크기가 절반이 된다면, filter의 개수는 이전의 두 배로 늘려 layer당 time complexity를 보존한다.

    이렇게 써놓으면 헷갈리겠지만, 예시를 보면 금방 이해가 가능하다. plain net과 ResNet의 초반부의 보라색 layer들을 보자. 모두 3x3 filter를 64개씩 사용하고 있다. 그러다가 초록색 부분으로 넘어오면서 feature map의 크기가 반으로 줄자, filter의 개수는 64x2=128이 되었음을 알 수 있다. 위에 적은 두 가지 규칙에 모두 부합한다. 그냥 이러한 규칙을 따라서 네트워크를 구성했다는 정도로 이해하면 될 것 같다. 크기를 반으로 줄이는 연산은 Conv layer를 통한 downsampling으로 진행된다. 네트워크의 끝에는 average pool- FC1000-softmax의 구조가 있다. 이렇게 34-layer로 만들어도, VGGNet보다 복잡도가 낮다. 논문의 baseline 모델은 VGG-19의 FLOP의18%정도 밖에 사용하지 않는다. 위의 구조도에서 ResNet의 경우, shortcut connection이 점선으로 있는 부분은 dimension increase가 일어나는 부분이다.
논문에서 dimension increase를 하는 방법도 두 가지가 있다.

i) identity mapping: 늘어나야 하는 차원의 원소를 모두 0으로 채운다.
ii) projection shortcut: 1x1 convolution을 통해 이루어진다. FC layer 버전의 notation은 아래의 식으로 표현될 수 있다.

추가적인 weight matrix W_s를 만들어 차원을 늘려주는 방법이다.

4) Implementation

    네트워크 구현을 어떤 식으로 했는지에 대한 부분이다. 번호를 매겨가면서 정리해보겠다.

i) scale augmentation: [256,480]의 범위에서 랜덤하게 resizing을 진행하고, 거기서 224*224 crop을 랜덤하게 뽑는다. 이때, horizontal flip된 버전도 뽑힐 수도 있다.
ii) per-pixel mean subtraction: 전처리로 진행한다.
iii) Batch normalization: Conv-BN-ReLU의 순서로 진행된다.
iv) SGD+momentum(0.9): batch size=256을 사용하고, learning rate는 0.1에서 시작해 error가 plateau될 때마다 10으로 나누어준다.
v) weight decay:0.0001로 사용되고, dropout은 사용하지 않는다.

    또한, test time때는 10-crop testing을 사용한다. 10-crop testing이란, image의 4개 코너와 가운데서 1개씩 crop하고, 이를 horizontal flip한 버전도 같이 사용해 한 이미지당 총 10개의 crop을 만들어내는 방식을 말한다. 최고의 성능을 위해 Fully convolutional form을 택하고, 다양한 scale의 이미지들에서 얻은 score를 평균 내서 계산한다.

5) Experiment

    논문은 주로 ImageNet 2012 dataset을 사용했다. 아래 표가 사용한 네트워크들의 구조를 나타낸다.

    depth가 18-152까지 있는 것을 알 수 있다. 아래의 그래프는 plain network와 ResNet의 error rate를 나타낸 것이다. 굵은 선이 validation error, 얇은 선이 training error를 뜻한다.

    그래프를 보면 plain net은 34-layer net이 더 높은 training error를 가지는 것을 확인할 수 있다. BN을 이용해 훈련시켰기 때문에 vanishing gradient problem은 아닐 것이라고 저자들은 예측한다. layer가 깊어질수록 network의 convergence rate이 크게 낮아지고, 이것이 training error를 줄이는데 영향을 준다고 추측된다고 한다. 반면에 ResNet은 더 깊은 34-layer 모델이 더 낮은 training error를 얻는 것을 확인할 수 있다. 또한 validation data에서도 좋은 generalization 성능을 보인다. 이를 통해 degradation problem이 해결되었고, 우리가 depth를 늘리면서 기대했던 accuracy gain도 얻을 수 있다.
  34-layer plain net과 34-layer ResNet을 보면, top-1 error가 약 3.5%정도 줄었다. ResNet의 효율성과 우수성을 확인할 수 있는 수치이다.

ImageNet validation set에 대한 top-1 error rate

    추가로, 논문에서 왜 identity shortcut을 선택했는지에 대한 이야기도 한다. 나는 이 부분이 상당히 흥미로웠다. 저자들이이 projection shortcut으로도 ResNet을 만들어 실험을 해보며 identity shortcut과 비교해본 것이다. 아래 표에서 ResNet-A,B,C에 주목하자.

    표에서 A,B,C는 identity shortcut과 projection shortcut을 비교하기 위해 세팅을 다르게 한 네트워크들을 의미한다.

  • 방법 A:

    dimension increasing시에는 zero padding(앞서 언급한 identity mapping), 그 외의 shortcut들은 parameter free인 identity mapping 사용. (위의 plain net과 ResNet을 비교할 때 사용한 세팅)
  • 방법 B:

    dimension increasing시에는 projection shortcut, 그 외의 shortcut에는 identity를 사용.
  • 방법 C:

    모든 shortcut에 projection을 사용한다.
    위의 표를 보면, 셋 중에는 C>B>A 순으로 성능이 좋음을 알 수 있다. 그러나 성능의 차이가 그렇게 크다고 볼 수는 없다. 또한, C는 추가적인 계산을 요구하기 때문에 얻을 수 있는 성능의 차이 대비 가성비가 떨어진다. 이러한 이유로 논문에서는 projection shortcut만 있는 C 방법은 사용하지 않는다.

    마지막으로 살펴볼 Architecture는 34-layer보다 더 깊은 network이다. 네트워크가 깊어짐에 따라, building block에도 살짝 수정이 이루어진다.

    위와 같이 layer 3개당 하나의 skip connection이 사용되고, 계산량을 줄이고자 3x3 conv layer 앞 뒤로 1x1 conv layer을 사용해 3x3 conv 전에 차원을 줄이고, 3x3 conv 후에 차원을 다시 늘리는 방식을 택한다. 저자는 오른쪽 구조를 "bottleneck design"이라고 표현한다. 앞서 언급한 A,B,C 중에서는 B 방법이 사용된다. 만약 여기서 C 방법을 택한다면 계산량과 모델 사이즈가 두 배가 되기 때문에 좋지 않다. identity shortcut을 이용하면 더 효율적인 모델을 만들 수 있는 것이다. 더 깊은 layer network들의 구조는 위의 표를 보면 확인할 수 있다. ResNet-152는 VGG16/19 보다 훨씬 많은 layer를 쌓았음에도 불구하고 더 낮은 FLOP을 갖고 있다는 점은 굉장히 인상적이다. 이렇게 layer가 많이 깊어짐에도 degradation problem은 나타나지 않는다.
  훈련된 ResNet-152는 앙상블 없이 top-5 validation error 4.49%를 기록했으며, 이는 이전에 나온 앙상블 모델의 error rate보다 낮은 수치이다. 그리고 6개의 모델을 앙상블한 결과 최종적으로 3.57%의 top-5 test error를 얻으며 ILSVRC 2015에서 1위를 차지하였다.
  그리고 CIFAR-10 dataset에서도 실험해본 결과 마찬가지로 우수한 성적을 얻었고, 심지어 1202 layer 네트워크까지 만들어 나쁘지 않은 결과를 뽑아냈다.

3. 논문 내용의 실용성

내가 많은 논문을 읽어본 것은 아니지만, CNN Architecture 논문 중에서 가장 압도적인 퍼포먼스를 내는 architecture인 것 같다. VGGNet도 많은 성과를 이루었지만, 16/19 layer에 불과했다. 그런데 ResNet은 152 layer까지 확장하고, 이전 모델들보다 복잡도는 낮추면서 더 좋은 성능을 냈다는 것에 큰 의미가 있다고 생각한다. 심지어 이전에 문제가 되었던 vanishing gradient problem이나 degradation problem도 해결했기 때문에 상당히 중요한 architecture인 것 같다.

4. 찾아볼 레퍼런스

  1. Fully Convolutional Layers
  2. fisher vectors
profile
AI/ Computer Vision

0개의 댓글