[논문리뷰] Deep Residual Learning for Image Recognition (ResNet)

jaeyeon_lee·2023년 6월 6일

Paper Review

목록 보기
1/3
post-thumbnail

Deep Residual Learning for Image Recognition (ResNet)


Introduction

ResNet 논문을 보기 앞서, CNN에 대해 간단히 살펴보겠습니다.

cnn은 이미지의 공간 정보 를 유지한 상태로 학습이 가능한 네트워크입니다.
CNN에서 가장 중요하게 쓰이는 개념인 Convolution은 Filter를 사용하여 이미지의 공간적 정보를 유지한 채 학습하는 과정을 뜻합니다.

위 그림에서 볼 수 있듯이 전체 이미지에서 filter를 사용해 특정 부분의 값을 뽑아냅니다.
CNN은 위와같은 Convolution 과정 뿐만 아니라, Pooling등의 과정을 거쳐 학습을 합니다.
이렇게 학습하는 layer가 쌓여 하나의 큰 네트워크가 만들어지는 것입니다.

이미지분류에 관한 여러 연구에서 깊은 layer를 가지고 있는 cnn모델들이 좋은 결과를 거두고는 했습니다.

이와 관련해 이 논문에서는 layer를 많이 쌓을수록 좋은 결과를 얻을 수 있을까? 에 관한 이야기로 시작합니다.

이 질문에 대해 가장 먼저 고려해야 하는 문제는 Vanishing, Exploding Gradients 문제가 있습니다.
해당 문제는 layer 가 깊어짐에 따라 gradient가 사라지거나 너무 커지는 문제입니다. 하지만 이는 다양한 방법으로 해결이 가능합니다.

그렇다면 무작정 layer를 많이 쌓으면 좋은 성능을 가질까요?

다음 그림을 보면, 56-layer가 더 깊은 네트워크 임에도 불구하고 20-layer보다 낮은 성능을 보이고 있음을 알 수 있습니다.

본 논문에서는 overfitting의 문제가 아닌, 많은 layer를 쌓은 것이 낮은 성능으로 이끌었다고 말합니다.

그래서 이 논문에서는 이러한 문제점을 해결하기 위해 제시한 새로운 개념이 Deep Residual Learning입니다.

layer에서 학습하는 양을 줄여 최적화 과정을 더 쉽게 만드는 개념입니다.


Deep Residual Learning

기존 방식은 이웃한 층과의 연결만 있고, 입력값 x를 받아 H(x)를 출력합니다.
CNN은 학습 과정에서 가중치를 변경해가며 최적의 값을 찾아냅니다.
이를 통해 최적의 H(x)를 찾는 것을 목표로 합니다.

하지만 Residual Learning은 여기서 조금 다른 방식을 사용합니다.

위 그림과 같이 출력 결과를 h(x)가 아닌 h(x)와 입력값(x)의 차이로 설정하여 얻고자 하는 출력값 을 f(x)+x로 설정합니다.

또한, Residual Learning에서는 정보 전달이 한 층을 건너 뛰게 됩 니다. 즉, 지름길을 사용한다고 이해할 수 있는데 이러한 연결 방식을 Shortcut Connection 이라고 합니다.

따라서 F(x)+x 는 Residual Block에 속하는 layer들에 대한 학습결과와 그 전 까지 학습된 결과를 더해준 값이 됩니다.

layer가 깊어질수록 연산되는 미분들이 많아져서 초기값과 멀어지기때문에 vanishing gradient가 생깁니다.

ResNet에 경우 Skip Connection을 사용해 Gradient가 최소 1이상의 값을 갖게해 이러한 문제점들이 해결됩니다.
F(x)값이 0으로 가까워져도 x값이 남아있어 gradient값을 적정하게 유지시켜줘서 F(x)+x를 사용하게됩니다.

이 과정을 Resnet에서는 Identity Mapping이라고 정의했습니다.

이러한 과정을 수식으로 표현하면 다음과 같습니다.

Input, Output 채널을 변경할 때와 같이 x와 f(x)의 차원이 같지 않으면 linear Projection을 추가하여 아래 식(2)를 사용해 차원을 일치시킵니다.


Network Architectures

본 논문에서 예시로 만든 Imagenet을 위한 네트워크입니다.

중간은 Residual learning을 적 용하지 않은 Plain Network이며 오른쪽은 Residual learning을 적용한 Residual network, 즉 ResNet입니다.


Experiments

ImageNet Classification

위의 표는 18-layer부터 152-layer까지의 ResNet의 구조를 나타낸 표입니다.

표를보면, 50-layer부터는 구조가 살짝 다른 것을 볼 수 있습니다.
이는 layer가 깊어질수록 Dimension의 크기가 커져 Parameter수가 많아지고 복잡도가 증가하게 됩니다.

이를 해결하기 위해 Bottleneck 아키텍쳐를 사용한 것입니다.


Bottleneck Architectures

Bottleneck Architecture는 1x1 filter를 사용하여 Dimension의 크기를 줄인 후 다시 1x1 filter를 사용하여 Dimension의 크기를 늘립니다.

위 그림처럼 왼쪽은 64크기의 차원이 input으로 들어오고, 오른쪽 그림은 256크기의 차원이 input으로 들어왔습니다.

하지만, bottlenect 아키텍쳐를 사용했기 때문에 시간복잡도는 두 개가 비슷합니다.
이러한 Bottleneck 아키텍처를 Resnet에 사용했기 때문에 Resnet은 layer의 수가 많아지더라도 모델의 크기가 다른 모델들보다 작게됩니다.


Experiments

Plain & Residual Network

이번에는 실험 결과를 통해 ResNet이 실제 어떠한 효과가 있는지 살펴보겠습니다.

위 그림은 PlainNet과 ResNet 모델의 서로 다른 깊이 모델에서 학습 데이터셋에 대한 성능 그래프를 왼쪽 그래프는 18층, 34층의 Plain 모델을, 오른쪽 그래프는 ResNet 모델을 나타내고 있습니다.

Plain 모델에서는 앞서 살펴본 바와 같이 34층 모델이 18층 모델보다 오히려 학습 데이터셋에 대한 에러가 높은 모습을 보입니다.

즉, 모델의 깊이는 깊어졌지만 학습이 제대로 이루어지지 않는 모습을 볼 수 있습니다.

반면 ResNet 모델에서는 34층 모델 에서의 에러가 18층 모델에서의 에러보다 더 작은 모습을 볼 수 있습니다.

위 그림은 마찬가지로 Plain 모델과 ResNet 모델의 깊이에 따른 ImageNet Validation 데이터셋 에러를 정리한 표입니다.

먼저 Plain 모델을 보면 학습 데이터셋에서와 마찬가지로 더 깊은 모델의 에러가 더 큰 모습을 볼 수 있습니다.

반면 ResNet 모델에서는 더 깊은 모델의 에러가 더 작아진 모습을 볼 수 있죠.

또한 18층 모델과 34층 모델 모두가 ResNet 구조를 적용하면서 Plain 모델보다 성능이 개선된 모습을 볼 수 있습니다.

Bottleneck Architectures

위 그림은 다양한 모델과 다양한 깊이의 ResNet 모델의 이미지 분류 성능을 나타낸 표입니다.

34층까지는 기존의 Residual Block을 사용하고, ResNet-50, ResNet-101, ResNet-152는 Bottleneck Block을 적용한 모델들입니다.

깊이가 깊어질수록 ImageNet 성능이 향상되는 모습을 볼 수 있습니다.
이는 ‘Bottleneck Block 구조를 적용하여 매우 깊은 모델도 효과적으로 학습할 수 있게 되었다.’라고 할 수 있습니다.


Conclusion

논문에는 classification 이외에 다양한 목적의 computer vision task의 실험을 하고, 결과를 보여줍니다.

결론을 정리해보면, 일반 CNN은 layer가 깊어질수록 오히려 에러가 증가하는 모습을 보여주었는데, ResNet 은 Residual learning을 도입한 Deep Residual Learning Framework를 통해 깊이가 증가함에 따라 에러가 감소하고 Plain Network보다 훨씬 더 좋은 성능을 보여주었습니다.

profile
🙋🏻‍♀️

0개의 댓글