논문/Image&Video Recognition

[논문 - ResNet] Deep Residual Learning for Image Recognition

바보1 2023. 8. 3. 22:57

논문

 

https://arxiv.org/abs/1512.03385

 

Deep Residual Learning for Image Recognition

Deeper neural networks are more difficult to train. We present a residual learning framework to ease the training of networks that are substantially deeper than those used previously. We explicitly reformulate the layers as learning residual functions with

arxiv.org


0. Abstract

 

 

  • 깊은 신경망은 학습하기가 어려움 
  • 저자는 기존에 사용한 방법보다 더 깊은 신경망에서 학습이 잘 되는 Residual Learning Framework를 제시한다.
    • Residual은 잔차라는 의미로, 쉽게 말해서 어떤 값과 정답 사이의 차이라고 생각하면 될 것 같다.

 

  • 참조되지 않은 함수를 학습하는 대신에, 참조된 인풋과 함께 Residual 함수를 학습하도록 의도적으로 변환시켰음.
    • 기존의 신경망은 x -> y의 방법을 새로 학습해야 하지만, 인풋을 참조하며 Residual 함수를 학습하는 것은 쉽다는 의미다.

 

  • VGG보다 8배나 더 깊은 층인 152층에서도 VGG19보다 복잡성을 덜 가진다.
    • 뒤에서 나오는 내용인 BottleNeck 구조를 사용하므로 가능하다.

 

  • 이후 내용은 표현의 깊이가 여러 분야(Detection, Localization, Segmentation)에도 좋다는 내용

1. Intoduction

 

 

  • 층의 스택의 개수로 특징의 수준은 풍부해진다.
    • 층이 쌓일수록 low/mid/high 레벨의 특징이 쌓이고, 통합되면서 더 많은 양의 특징을 얻을 수 있다.

 

  • 아래의 문장에서는 결국 층의 깊이가 매우 중요하다는 것을 말하며, 다양한 분야에서도 깊이가 중요하다는 것을 말한다.
  • 깊이가 중요하다는 것은 알았지만, 중요한 질문이 남았는데, 층이 깊어질수록 네트워크가 더 잘 학습을 할 것인가? 이다.
  • 여기서 중요한 두 가지 문제점이 생긴다.
    • Convergence Problem
      • Vanishing/Exploding Gradient로 발생되는 이 문제는 시작부터 학습의 수렴에 큰 영향을 끼친다.
      • 하지만 해당 문제는 normalized initialization, intermediat normalization layer로 다룰 수 있다고 한다.
    • Degradation Problem
      • 네트워크가 수렴하기 시작하면, 해당 degradation 문제가 발생한다.
      • 깊이가 깊어질수록, 정확도는 정체되기 시작하고, 급격히 하강한다.
      • 해당 문제는 Overfitting 때문이 아니다. -> overfitting이 문제였다면 깊어질수록 학습 데이터에 대해서는 정확도가 올라가야 함.
      • 또한 깊은 모델은 더 높은 학습 에러를 보인다.

  • 해당 Degradation Problem을 확인하기 위해 실험을 하였다.
  • 얕은 모델 하나와, 깊은 모델을 준비했다. 깊은 모델의 얕은 부분은 얕은 모델에서 복사하였고, 나머지는 identity mapping을 하였다.
    • identity mapping을 어떻게 했는지는 구체적인 방법이 나와있지 않음.

 

  • 결론적으로 깊게만 쌓는다고 해결되는 것이 아니다.
  • 따라서 논문에서는 Deep Residual Learning Framework를 제시한다.

  • 해당 구조에 대해 간략한 설명을 하자면, F(x)는 매핑 함수이고, H(x)는 원하는 매핑 함수이다.
  • 즉 F(x)를 H(x)에 맞게 학습하는 것이 관건이다.
  • 몇 개의 층으로 F(x)를 H(x)에 맞게 학습하는 것보다, F(x)를 H(x) - x로 학습하는 것이 Residual의 핵심이다.
    • 따라서 F(x)는 정답(H(x)) - x를 학습하면 되는 것이다.
    • 10이 정답이고, 9가 인풋이라면 F(x)는 9에서 10을 만드는 방법이 아닌, +1을 하는 방법을 배우면 된다.

 

  • 저자는 정답 함수인 H(x)는 이제 F(x) + x가 되고, 이는 기존 모델보다 최적화하기 더 쉬울 것이라고 가정한다.
    • 이미 x가 정답이라고 가정해 보자. 기존의 매핑 함수는 여러 비선형 연산을 통해 x -> x로 다시 매핑해야 한다.
    • 이것은 결코 쉬운 과정이 아니다. 비선형 연산을 통해 인풋을 그대로 갖다 놓는 것은 쉽지 않다.
    • 하지만 Residual에서는 단순히 F(x)를 0으로 하면 된다. 따라서 기존 모델보다 최적화하기 더 쉽다.

 

  • 이때 바로 통과하는 x는 shortcut connection이라 하고, identity mapping 즉, 항등 매핑이라고 한다.
  • identity mapping은 어떤 파라미터나 계산 복잡도도 증가시키지 않는다.
  • 아래는 좋다는 내용임.

2. Related Work

 

 

  • 생략

3. Deep Residual Learning

3.1 Residual Learning

 

 

  • 저자는 degradation problem이 여러 비선형 층을 통해 identity mapping을 하기 힘들기 때문이라고 주장한다.
  • 마지막 문단의 내용이 조금 어렵다.
  • 만약 최적의 함수가 zero mapping보다 identity mapping에 가깝다면, 모델은 새로운 함수를 배우는 것보다 identity mapping을 참조하여 혼란을 더 잘 찾아낼 것이다.
    • zero mapping -> 여러 비선형 층을 통해 정답 -> 비선형 -> 정답을 의미한다.
    • identity mapping -> F(x)를 0으로 하는 것을 의미한다.
    • 따라서 새로운 함수인 zero mapping은 정답 -> 정답을 해야 하므로 중간에 발생하는 혼란, 불안 요소를 잘 캐치하지 못하는 반면에 F(x) -> 0으로 하는 함수는 목표가 0이므로 혼란을 더욱 잘 캐치한다는 의미로 해석하였다.

3.2 Identity Mapping by Shortcuts

 

 

  • 함수는 아래와 같다.

  • 이때 F(x)는 다음과 같다.

  • sigma는 ReLU 함수이다.
  • 이런 형태는 plain 네트워크와 residual 네트워크를 비교하기 용이하다.
    • plain 네트워크는 일반적은 모델, 즉 Residual이 없는 모델을 의미한다. 
    • 단순히 x를 더하였으므로, 네트워크 구조는 plain과 동일하다.

 

  • 다만 (1)번 수식은 y와 x의 차원이 같을 때 사용할 수 있다.
  • 따라서 두 개의 차원이 다를 때는 아래의 함수를 사용한다.

  • x를 projection 하여 차원을 맞춘다.
  • 다만 F(x)는 2~3개의 층으로 이루어져 있는데, 1개의 층은 사용하지 않았다.
  • 이유는 y = Wx + x가 되면 이는 선형 층과 비슷해지기 때문이다. -> 즉 비선형성을 추가하기가 힘들다는 의미

3.3 Network Architectures

 

  • 맨 좌측이 VGG-19이고, 중간이 34-Layer Plain, 우측이 34-Layer Residual이다.
  • 앞서 말한 것처럼 비교가 용이하다.
  • 여기서 중요하게 짚고 넘어가야 하는 부분이 있는데, shortcut connection을 보면 차원이 달라지는 부분이 있다. (점선)
  • 두 가지 방법이 있다.
    • 첫 번째는 추가되는 차원에 대해서만 zero entries를 추가하는 것이다. -> 어떻게 하는 건지 잘 모르겠다.
    • 두 번째는 앞서 설명한 것처럼 1 * 1 conv로 projection 시키는 것이다.

 

  • 또한 Pooling을 사용하지 않고, stride = 2로 설정하여 다운샘플링 하였다.

3.4 Implementation

 

 

  • imge의 짧은 부분을 256~480으로 맞추고, 거기서 224 * 224를 crop 하였다.
  • 그 외에는 논문을 보면 쉽게 알 수 있는 내용이다.

4. Experiments

4.1 ImageNet Classification

 

 

  • Plain은 깊이가 깊어질수록 에러가 증가하는 반면, ResNet은 깊이가 증가할수록 에러가 감소한다.

  • 왼쪽은 Plain, 오른쪽은 Residual이다. 마찬가지로 깊이가 깊은 것이 반복될수록 더 에러가 낮아진다.

  • 두 번째 큰 행을 보면 ResNet A/B/C가 있다.
  • 이것은 shortcut을 어떻게 구성했느냐에 따라 달라진다.
    • A : 증가하는 차원은 zero-padding으로 shortcut을 하였음 -> 어떻게 구현한 건지 모르겠다. 아시는 분은 댓글 부탁드립니다.
    • B : 증가하는 차원에 대해서만 Projection, 나머지 증가하지 않는 차원(실선)에서는 그대로
    • C : 모든 shortcut에 Projection 하였음 -> 이는 파라미터 증가와 학습 시간 증가로 이어짐

 

  • 해당 옵션은 근데 degradation 문제를 해결하는데 중요한 요소가 아니다.
  • 저자는 시간, 공간 복잡도를 위해 B를 채택하였다.

 

 

 

  • 이제 Bottlenect Architecture에 대한 설명이다.

  • Bottleneck은 우측과 같다.
  • 3 * 3 층 두 개 대신에, (1 * 1, 3 * 3, 1* 1)을 사용하였다.
  • 1 * 1은 파라미터를 크게 차지하지 않고, 차원을 바꾸는데 주로 사용된다.
  • 논문에서는 학습 시간을 걱정하여 해당 구조를 사용했다고 말한다.
  • 50층 이상 모델부터는 해당 Bottleneck 구조를 사용하였다.
  • 구현은 아래의 표를 참고하면 된다.
    • 참고로 Bottleneck을 사용한 50층의 경우, 두 번째 conv2_x에서는 Bottleneck을 3개 사용한다.
    • 이때 첫 번째 Residual 층은 64차원이 들어와 256차원이 나간다.
    • 두 번째 Residual 층은 256차원을 받아서, 다시 64차원으로 축소한 뒤, 256 차원을 확장시켜 내보낸다.

  • 아래 내용은 생략하겠음.

마무리

 

 

추후 연구에서는 깊어질수록 Vanishing Gradient 즉, 기울기 손실이 문제인 것으로 밝혀졌다.

(아니라면 댓글 부탁드립니다.)

shortcut을 통해 기울기를 효율적으로 역전파 할 수 있으므로 이런 결과가 나타난 것으로 보인다.

Overfitting과 더불어 중요한 문제인 Gradient Vanishing 문제를 해결한 논문을 봐서 좋았다.

 

다만 Introduction에서 얕은 모델과 깊은 모델을 비교하는 방식, 그리고 차원이 달라질 때 zero-padding을 더하여 차원을 추가하는 방식이 자세히 나와있지 않아서 매우 궁금하다.