1. Introduction
CNN 모델의 발전은 image classification 문제를 해결하는데 매우 큰 영향을 영향을 미쳤다. CNN에 대한 다양한 Architecture들은 개발되었고, 여러 Architecture가 주목한 중요한 요소는 '깊이'였다. 16에서 30에 이르기까지 수많은 모델은 '깊이'를 깊게 함으로써 그 성능을 향상해왔다.
하지만, 깊이에 대한 중요한 의문점이 생겼다. 'Is learning better networks as easy as stacking more layers?' 이 질문에서 시사하는 중요한 문제는 바로 gradients vanishing/exploding 문제였다. 하지만 이러한 문제는 nomalized initialization, intermediate normalization layers을 통해서 해결이 가능하였다.
그러나 깊이 layer가 수렴할수록 오히려 정확도가 감소하는 degradation problem이 생기기 시작했다. 이는 overfitting으로 발생하는 문제가 아니었고 더 깊은 모델은 오히려 traing error를 증가시켰다. 하지만 이러한 현상은 논리적으로 맞지 않는 현상이다.
CNN에서 deep layer는 shallow layer의 정보를 기반으로 학습한다. 즉 deep layer에서는 shallow layer에 대한 정보가 포함됨으로 최소한 degradation problem이 발생할 수 없다. 따라서 이 논문의 저자는 degradation problem을 해결하기 위해 deep residual learning(ResNet) 모델을 제안하였다.
왼쪽은 일반적인 CNN 모델로 input x 가 들어왔을 때, 각 layers를 걸쳐 H(x) 값이 나오게 된다. 하지만 이 논문에서 저자가 제안한 ResNet은 H(x)를 바로 구하는 것이 아니라 H(x) := F(x) + x를 통해 구하는 것이다. 이렇게 'Identity shortcut connection'을 통해 ResNet은 기존의 모델에 비해 훨씬 optimize가 쉽고 추가적인 parameter와 계산 복잡도도 훨씬 낮았다. 또한 ImageNet 등의 대회에서도 매우 우수한 성과를 기록했다.
3. Deep Residual Learning
3.1 Residual Learning
앞서 살펴보았듯이 기존의 결과를 H(x)라 하였을 때 H(x) := F(x) + x라 표현할 수 있고 여기서 궁극적으로 우리가 학습해야 하는 부분은 F(x)이다. 간단하게 말해서 x라는 input이 들어왔을 때 완전히 새로운 H(x)를 구하는 것은 매우 어려울 것이다. 하지만 기존의 주어진 x에 우리가 추가적으로 구해야 할 F(x)만 구한다면 이는 완전히 새로운 H(x)를 구하는 것보다 훨씬 쉬울 것이고 저자는 그렇게 가정하였다.
3.2 Residual Learning by Shortcuts
각 블록은 다음과 같이 정의된다. x는 block의 input을 y는 block의 output을 의미한다.
F(x, {Wi})는 residual block을 의미하며, two layers인 경우 F = W2σ(W1x)이다. σ는 ReLU를 의미한다. x가 F와 동일한 차원인 경우 효율성이 가장 좋지만, 차원을 맞추기 위해 다음과 같이 나타낼 수 있다.
4. Experiments
전체적인 알고리즘 모델은 위의 표와 같습니다. 위의 표를 보면 50-layer 이상인 경우 3-layer block을 사용하고 있습니다. 이렇게 1X1 convolution을 활용하여 차원을 축소한 후 이를 다시 늘리는 과정을 BottleNeck 구조라고합니다. BottleNeck구조가 무엇인지 간단하게 살펴보도록 하겠습니다.
4.1Deeper Bottleneck Architectures
BottleNeck 구조를 이해하기 위해서는 우선 1X1 convolution의 역할을 알아야합니다. CNN에서 filter을 사용하는 이유는 이전에 설명하였듯이 공간적 특징을 추출하기 위해서입니다. 하지만 1X1 convolution은 공간적 정보를 추출할 수 없습니다. 그럼 왜 1X1 convolution를 사용하는걸까요?
바로 차원을 조절하기 위해서 입니다. 차원을 조절한다는 건 연산량과 큰 연관이 있습니다. 차원이 작을 수록 연산량이 적게 됩니다. 즉, 깊이가 깊어질 수록 자연스럽게 연산량이 급격하게 증가하게 되는데 이는 모델의 속도를 크게 낮추게 됩니다. 하지만 여기서 차원을 감소시킴으로써 연산량을 줄여주는 것이죠.
그럼 차원을 감소하는게 무조건 좋은걸까요? 꼭 그런것은 아닙니다. 차원을 감소하게되면 정보손실이 발생할 수 있습니다. 즉 차원 감소와 정보손실은 trade-off 관계에 있는것입니다.
ResNet은 여러 CNN 모델의 backbone으로 자주 사용되며
이후 Image classificasion에서 매우 핵심적인 역할을 합니다.
어떤 알고리즘을 만드는 것은 매우 복잡하고 논리적인 사고를 필요로한다고 생각했는데
ResNet을 통해 보다 단순한 계산과 쉬운 방법으로도
이렇게 극적으로 성능을 향상할 수 있다는 사실을 이번 논문을 통해 느낄 수 있었습니다.
논문을 읽는 경험이 많이 없다보니 아직 내용이 많이 부실하지만
다른 논문들도 성실히 리뷰해보도록 하겠습니다!!!
으라라라찻찻찻
https://coding-yoon.tistory.com/116