Abstract


신경망이 깊어질수록 학습하기는 어렵다. 이 논문에서는 이전의 네트워크보다 상당히 깊은 네트워크를 학습하기 용이하게 하기 위한 잔차 학습(residual learning)을 제시한다. 함수를 새로 만드는 것 대신 잔차를 학습에 사용하는 것으로 layer를 재구성한다. 이러한 다양한 실험을 통해 residual network가 상당히 깊은 네트워크에서 optimize 하기 더 쉽고, 높은 정확도를 얻을 수 있음을 보여준다.

결과적으로 resnet은 기존의 Vggnet보다 8배 깊은 152개의 레이어를 쌓아 ImageNet 데이터를 학습하였으며, 그 결과 복잡도는 줄이며 좋은 성능을 나타냈다.

Introduction


네트워크 깊이의 중요성은 다음과 같은 의문이 생긴다. “더 나은 네트워크를 배우는 것이 더 많은 층을 쌓는 것만큼 쉬운가?” 이 질문에 답하기 어려운 이유는 악명높은 그래디언트 소실과 폭주 때문이다. 이러한 그래디언트 문제들은 중간 layer를 normalization 함으로 해결되었다.

하지만, 네트워크가 깊어질수록 정확도가 떨어지는 성능 저하(degradation) 문제가 발생하는데, 이는 과적합으로 생긴 문제가 아니다. figure 1 을 보면 Cifar data의 error들을 볼 수 있는데 56-layer가 20-layer보다 train,test error가 높게 나타난 것을 볼 수 있다.

이러한 성능 저하 문제는 모든 시스템이 비슷하게 최적화되기가 쉽지 않은 것을 나타낸다. 따라서 논문에서는 해결책으로 identity mapping layer를 추가하고, 다른 layer는 학습된 얕은 모델을 복사하였다고 한다. 하지만, 이러한 방법으로는 문제를 해결할 수 없었다고 한다.

그래서 논문에서는 deep residual learning framework를 통해 성능 저하 문제를 해결하려 한다. residual learning framework는 쌓여진 레이어가 기존의 매핑 대신 residual mapping에 적합하도록 지정한다.

기존 매핑이 H(x)라면 residual mapping은 F(x) = H(x) - x 로 표현할 수 있으며 이를 재구성하면 H(x) = F(x) + x 로 표현할 수 있다. 우리의 가설은 residual mapping이 기존의 mapping보다 최적화 하기 쉽다고 가정한다. 극단적으로는 기존의 매핑이 최적인 경우 H(x)를 최적화 하는 것보다 residual(x)를 0으로 만드는 것이 더 쉽다고 가정한다.

F(x) + x 는 순전파에서 shortcut connection으로 표현할 수 있으며, 하나 이상의 레이어를 뛰어 넘을 수 있게 한다. 이 Shortcut connection은 추가적인 파라미터나 연산이 없는 것이 장점이다.

논문에서는 성능 저하 문제에 따른 방법을 검증하기 위해 두 가지 실험을 통해 다음과 같은 결과를 보여준다.

  1. 기존의 네트워크보다 극도로 깊은 residual 네트워크가 더 최적화 하기 쉽다
  2. 기존의 네트워크보다 residual 네트워크가 정확도 향상을 조금 더 쉽게 할 수 있다

Deep Residual Learning


성능 저하 문제를 해결하기 위해 ResNet에서는 입력값 x를 중간의 layer들을 뛰어넘어 곧 바로 출력에 더해서 H(x) = f(x) + x의 형태로 만들어 사용한다

하지만, 입력 값을 더해주어야 할때는 차원이 같아야 하는데, 여러개의 convolution layer를 거치고 나면 채널의 개수가 달라지기 때문에, 1x1를 이용해 채널의 수를 맞춰줌으로써 x를 더해준다

이후 F(x) = 0이 되도록 학습하면 H(x) = 0 + x를 미분하여 1이 되므로 기울기 소실 문제가 해결할 수 있게 되었다.

Architecture

Implementation


  1. augmentation

    1. Image resized : [256,480]
    2. RandomCrop : [224,224]
    3. HorizontalFlip
    4. Color는 Alexnet과 동일하게?
  2. 각 convolution layer 직후 activation 함수 전에 Batch Normalization 실시.

  3. HE 가중치 초기화 및 처음부터 훈련

  4. batch size : 256

  5. optimizer : SGD(momentum = 0.9 , weight_decay = 0.0001)

  6. learning rate : 0.1부터 시작하여 error가 줄어들지 않으면 1/10

이후 여러 실험을 보여주면서 bottleneck 구조를 사용했다고 한다.

  • Bottleneck architecture
  • Bottleneck architecture는 GoogleNet의 Inception block과 같으며, convolution layer 앞 뒤에 1x1 conv연산을 함으로써 연산량을 줄이는 역할을 한다.
  • 따라서, 1x1 convolution을 구조를 이용해 채널을 줄이게 되고 줄어든 채널을 3x3 convolution을 함으로써 recepted field를 키우고, 다시 1x1 convolution으로 원하는 채널을 맞춰줌으로써 모델을 깊게 쌓으면서 동시에 파라미터를 줄이는 것이 핵심 전략이다
  • 최종적으로 ResNet을 통해 네트워크를 훨씬 더 깊게 쌓아도 학습시킬 수 있는 가능성을 열어주었다.

Reference

https://arxiv.org/pdf/1512.03385.pdf

0개의 댓글