ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [PyTorchZerotoAll 내용정리] 11-2: ResNet [Deep Residual Learning for Image Recognition] CVPR 2016)
    ML&DL 이야기/Pytroch 2023. 11. 29. 21:04

    Residual Learning(ResNet)

    Deep Residual Learning for Image Recogintion

     

    Identity Mappings in Deep Residual Networks

    Deep residual networks have emerged as a family of extremely deep architectures showing compelling accuracy and nice convergence behaviors. In this paper, we analyze the propagation formulations behind the residual building blocks, which suggest that the f

    arxiv.org

    1. Abstract

    Is learning better networks as easy as stacking more layers?

    Abstract에서는 Depth의 중요성과 작성자들이 제안하는 residual learning Frame work에 관해 말한다. 

    역대 ILSVRC 대회 결과를 보면 depth의 깊이가 매우 중요함을 알 수 있다. 즉, visual recoginition task에서 Depth를 증가시키는 것은 매우 주요하다(더 추상적인 데이터를 받아들이고, 학습가능하다). 

    하지만 이전 Googlenet 관련 리뷰에서 밝힌 것과 같이, Depth의 증가는 Overfitting, Vanishing Gradient Problem, Computation Cost 문제를 발생시킨다. 즉, 위의 그림과 같이 layer가 더 깊은 모델이 더 안 좋은 성능을 보이는 경우도 있는것이다.

    deep layer is always best?

    추가적으로 본 논문에서는 training error와 test error가 deep layer model일때 모두 큰 상태이기에, 단순한 overfitting문제로 볼 수 없기에 training하기 어려운 form의 모델이 존재한다고 말한다(추가적으로 실험을 콩해 gradinet vanishing 문제도 발견하지 못했다고 말한다). 이를 Degradation problem이라고 한다.

    degradation problem: network의 depth가 커질수록 accuracy는 saturated (마치 뭔가 가득차서 현상태에서 더 진전이 없어져 버리는 상태)가 되어 학습이 더 이상 개선되지 않는 상태, optimize 자체가 복잡해 지는 상태를 의미

     

    이를 뒷받침하는 근거가 아래의 실험이다. 

    기존의 이론대로라면(모델의 layer가 추가될 수록 성능은 좋아진다) 더 얕은 모델에다가 Idnetity mappinbg layer만 추가해 더 깊은 모델을 만든다면, 학습이 더 잘되거나 최소한 똑같아야하지 않을까? 하지만 이 경우에도 동일하게 trianing error가 shallower한 모델보다 더 높게 나온다( But experiments show that our current solvers on hand are unable to find solutions that are comparably good or better than the constructed solution)

    Identity mapping이란?
    Identity mapping 이란 어떤 입력값(x)이 주어졌을 때, 해당 입력값이 그대로 출력값으로 매핑되는 것을 의미힌다. 다시 말해, F(x)=x 라는 것이다.

     

    그럼으로 본 논문에서는 degradation problem을 해결하기 위해  Deep Residual Learning을 통해 극복했다라고 밝히고 있다. 결과적으로 ResNet은 VGGNet의 8배인 152 layer를 자랑하며, 여기에 앙상블 기법을 적용해 오차를 3.75%까지 줄일 수 있었다.

    Residual Learning

    Residual Learning은 한국어로 해석하면 잔차 학습이다. 여기서 잔차란 쉽게 말해서 error와 비슷한 term으로 생각하면 되는데 예측값과 실제값의 차라고 생각하면 된다.  

     

    H (x)를 기본 매핑으로 간주하고 x 가 input 일때 다수의 비선형 레이어가 복잡한 함수를 생성하고, 이것이 x를 생성하는 함수로 점근적으로 근사 할 수 있다고 가정하면 잔차함수, 즉 H (x)-x를 무의식적으로 0으로 근사 할 수 있다는 말과 동일하다.

     

    기존 방법의 경우(Plain net) x라는 input을 Convoluion Layer에 통과시킨 후, relu를 거쳐서 다시 통과키는 과정을 연속적으로 반복하여, H(x)(desired underlying mapping)를 바로 학습시켰다. 하지만 논문에서는 이를 곧바로 학습하는 것이 어렵다고 한다(모델이 깊어질 수록).

     

    ResNet에서는 학습을 더 쉽게 하기 위해, 잔차를 최적화 시킬 함수로 정의하여, 학습을 더 잘 하도록 변형한다라는 것이 논문의 기본 골자이다.

    기존 통과시킨 값에 Input값인 x를 더한 H(x) = F(x) + x을 output으로 정의하여  F(x)(=H(x)-x)만을 학습하는 것으로 이를 해결하였다. 즉, optimal한 case에서 F(x)가 0이 되도록 하는 식으로 문제를 정의한 것이다(그래서 잔차학습이라고 이름을 붙였다)

    보다 자세히 설명하면, 극단적으로 identity mapping이 최적이라고 했을 때, 잔차를 0으로 만드는 것이 H(x)를 x에 맞게 학습시키는 것보다 쉬운데, 이는 Function에 대해 값을 맞추는 것 보다 0이라는 숫자로 값을 맞추는 것이 훨씬 쉽기 때문이다. 

    추가적으로, Input(X)과 ouput(F(x))의 dimension이 동일하다면 그냥 계산하면 되고, 아니라면 linear projection을 통해 값을 계산한다.

     

    Why Residual Learning is much faster?

    논문에서는 residual learning이 학습이 빠른 이유에 관해 설명하고 있는데(수식적으로 동일함에도 불구하고)

     그 이유는 위에서 말한 deep layer에 identity layer만 추가된 경우를 통해 설명한다.

    만일 identity mapping이 optimal한 경우라면, non linear layer 부분이 모두 0으로 가는 것과 같다(그냥 input == output), 하지만, 이런 case를 모델이 학습하기까지 어렵기에(degradation problem suggests that the solvers might have difficulties in approximating identity mappings by multiple nonlinear layers), 해당하는 case를 이미 내재하고 있는 residual learning 모델이 더 학습을 빠르고 쉽게 할 수 있다라고 한다(that the learned residual functions in general have small responses, suggesting that identity mappings provide reasonable preconditioning).

     

    추가) 최적함수가 zero인지 identity인지는 정확히는 모르고, real case에서 optimal이 identity라고 보기 어렵다.
    하지만 identity에 더 가깝다면 이렇게 로 근사하는게 도움이 된다. 그 이유는(precodintion이라 할 수 있는 이유) F(x) = 0에서 조금만 더 값을 변형하면 되지만, 해당 가정이 없다면 x를 찾고 이후에 H(x)를 변형시켜야한다.
    이전 입력값을 출력값에 더해줘서 identity mapping이 항상 수행된다 == 학습 난이도가 줄어든다

     

    Shortcut Connection(Skip connection)

    F(x) + x를 계산하는 과정을 Skip connection이라고 하고, 이는 하나 또는 그 이상의 layer를 skip하여 값을 이동시키는 것을 말한다. 이런 방법은 추가적인 layer나 파라미터가 필요하지 않고, 계산도 복잡하지 않다는 장점을 가진다.

     

    이후 논문은 아래의 2가지 목적을 달성했음을 보인다

    1) Our extremely deep residual nets are easy to optimize, but the counterpart “plain” nets (that simply stack layers) exhibit higher training error when the depth increases; == plain net과 다르게 residual net이 더 쉽게 최적화 되는 것 보이기
    2) Our deep residual nets can easily enjoy accuracy gains from greatly increased depth, producing results substantially better than previous networks. ==  residual net이 더 쉽게 accuracy를 높이는 것을 보이기

     

    ResNet Model(Network Archiectures with Plain(VGG))

    모델 구조

    Plain Network(34-layer plain)

    plain network의 경우 VGG net(2015 SOTA모델)을 참고하여 만들어 졌고, 모든 layer에서 계산복잡도가 같게 한다.

    이를 위해 

    1) 같은 output feature map 크기에는, 같은 수의 filter를 가진다
    2) feature map 크기가 반으로 줄어들면, filter의 수는 2배로 만들어 각 layer마다 time-complexity가 같도록 한다

    별도의 downsampling 없이 Conv layer 는 3 * 3의 filter, stride 2로 downsampling, global average pooling layer 를 사용했고, 마지막에는 softmax로 1000-way fully-connected layer를 통과시킨다. 

    최종 layer는 34개로 VGG net에 비하면 적은 filter와 복잡도를 가지고 VGG net 의 18%의 연산량(FLops)만을 가진다 한다.

    FLOPs란?
    딥러닝에서 주로 쓰이는 연산량 계산법이다.
    FLoating point Operation Per Seconds로 단위 시간(1s)당 얼마나 많은 floating 연산을 하는지를 나타낸다.
    연산량에 포함되는건 더하기, 빼기, 곱셈, 나눗셈... 등 다양하다.

     

    Residual Network

    위의 plain netwrok에 shortcut 연결을 더해서 만들었다.

    이때 

    1) 입력, 출력의 차원이 같을 때, Identity mapping 사용

    2) 차원이 증가하는 경우(네트워크 이미지에서 점선 화살표)
        (i) Zero entry를 추가로 padding해 차원을 맞추고 identity mapping을 했다.
        (ii)  projection shortcut을 진행한다.

    2)의 경우 어떤 방법을 선택하는지에 관해서는 밑에 비교한 결과가 논문의 실험단에 적혀있다.

    Implemenation 

    - 이미지는 scale augmentation을 위해 [256, 480]에서 무작위로 샘플링된 shorter side randomly resized 된다. 

    - 이미지나 horizontal flip된 이미지로부터 224*224 crop을 무작위로 sampling

    Result

     

     

     

    More?

    해당 논문 이후에 나온

    Identity Mappings in Deep Residual Networks(https://arxiv.org/abs/1603.05027)에서는 더 다양한 모델 아키텍쳐에 관한 실험을 진행하였다. 이에 관한 내용은 차후에 기회가 되면 포스팅 해보겠다..!

     Code Implementation

    https://colab.research.google.com/drive/17fl47NZSxfU9lMMsLDVI0eniziLFl0t9?usp=sharing

     

    ResNet.ipynb

    Colaboratory notebook

    colab.research.google.com

     

Designed by Tistory.