딥러닝

[논문리뷰] ResNet

김해리 2022. 3. 14. 09:00

Deep Residual Learning for Image Recognition

 

CVPR 2016 Open Access Repository

Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun; Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2016, pp. 770-778 Deeper neural networks are more difficult to train. We present a residual learning framework to ease

openaccess.thecvf.com

논문 소개

오늘 리뷰할 논문은 ResNet이라는 이름으로 알려진 네트워크에 대한 논문 "Deep Residual Learning for Image Recognition"입니다. Google Scholar에서 검색된 결과에 따르면 약 100,000회 이상 인용된 논문입니다. 뿐만 아니라, 저자는 He Initialization, Faster R-CNN, Mask R-CNN과 같은 연구를 통해 다른 많은 연구에 영향을 미쳤습니다. 

 

ResNet이라는 이름은 논문에서 제안한 Residual Learning에서 유래하였습니다. ResNet은 Shortcut(또는 Skip Connection)을 통해 이전 계층의 정보를 전달받아 현재 가지고 있는 정보와의 차이, 잔차(residual)를 학습하는 간단한 구조를 사용하여 degradation 문제를 해결할 수 있었습니다. 이 문제들을 해결하여, 깊은 네트워크의 훈련을 최적화하여 좋은 성능을 내도록 하였습니다.

 

Degradation

이미지 분류 작업에 사용되는 CNN은 네트워크 깊이에 따라 low-level부터 high-level의 특징을 표현할 수 있습니다. 네트워크의 깊이가 깊어지면 특징을 더 풍부하게 표현할 수 있고, 더 좋은 성능을 보인다는 것을 의미합니다. 이는 2014년, 2015년에 ImageNet 챌린지에서 우수한 성능을 보인 네트워크들이 많은 계층을 가지고 있다는 사실로도 확인이 가능합니다. 하지만 일반적으로 네트워크가 깊어질수록 성능은 좋아지지만, 훈련이 어려워진다고 알려져 있습니다. 이러한 어려움은 네트워크의 수렴(convergence)을 어렵게 만드는 기울기 소실(Gradient Vanishing) 또는 기울기 폭발(Gradient Exploding) 문제로 인한 것입니다. 기울기 소실/폭발 문제는 가중치 초기화 기법 또는 정규화 계층의 추가를 통해 해결할 수 있습니다. 하지만 네트워크가 수렴하여도 여전히 남아있는 문제가 있습니다. 네트워크가 깊어질수록 성능이 향상되지 못하고 특정 수치에 포화(saturated)되며, 결국엔 감소하는 degradation 현상입니다. (이러한 degradation 현상은 과적합(overfitting)으로 인해 발생하는 현상이 아닙니다. 네트워크가 깊어질수록, 훈련 데이터에 대한 오류가 증가하기 때문입니다. 이 논문에서는 제안하는 방법을 적용하지 않은 plain 네트워크를 이용한 실험을 통해 이를 보여주고 있습니다.)

 

얕은 네트워크가 존재할 때, 성능을 하락시키지 않으면서 깊이를 증가시키는 방법은 얕은 네트워크가 만들어낸 값을 그대로 전달하는 항등 매핑(Identity Mapping) 계층을 추가하는 것입니다. 네트워크가 깊어지더라도 얕은 네트워크에서 만들어낸 결과를 그대로 전달하기 때문에 적어도 얕은 네트워크만큼의 성능을 확보할 수 있을 것입니다. 하지만 논문 작성 당시 저자가 시도했던 방법들로는 추가되는 계층들이 identity mapping을 하도록 최적화할 수 없었고, degradation 문제는 네트워크가 깊어질수록 최적화가 어렵기 때문에 발생하는 현상이라고 말하고 있습니다. 논문의 저자는 degradation를 해결하기 위해 residual learning이라는 방법을 제안합니다.

 

Residual Learning

residual_block
Residual Block

ResNet을 구성하는 residual block의 형태는 위의 그림과 같습니다. Residual block에서는 하나 이상의 계층을 뛰어넘는 연결인 skip connection이 identity mapping의 역할을 수행합니다. F(x) + x의 결과를 H(x)라고 할 때, F(x) = H(x) - x로 표현할 수 있고 F(x)는 H(x)와 x의 차이 residual로 볼 수 있습니다. 저자는 identity mapping을 사용하는 것이 최적인 상황이라면(달리 말하면 F(x)가 아무런 일도 하지 않는 것이 최선인 상황이라면), 여러 계층들이 identity mapping 역할을 하도록 훈련하는 것보다 residual을 0으로 만드는 것이 더 쉬울 것이라고 말하면서, residual을 찾도록 학습하는 것이 최적화가 더 쉬울 것이라는 가정을 세웠습니다. 이렇게 residual을 학습하기 때문에 residual learning이라는 표현을 사용하였습니다.

 

Identity Mapping by Shortcuts

Identity Shortcut

Residual block은 위의 식과 같이 표현할 수 있습니다. 수식에서 F와 x의 차원이 같은 경우에는 문제가 되지 않지만, F를 거치고 나서 차원의 변화가 생기면 이 수식을 그대로 사용할 수 없습니다. 따라서 차원 일치를 위해 아래와 같이 projection이 포함된 수식을 추가로 정의합니다.

Projection Shortcut

 

ResNet Architecture

본 논문에서는 제안하는 방법을 비교하기 위한 baseline 네트워크를 설계할 때 VGGNet으로부터 영감을 받았습니다. 아래 그림과 같이 VGGNet과 채널의 수를 비슷하게 설정하면서 더 많은 convolution 계층을 포함하고 있습니다. 추가적으로 VGGNet과 다른 점이라면, convolution 계층 이후에 2개의 F.C. 계층 대신 Global Average Pooling 계층을 사용하고 있다는 점입니다. 논문에서는 VGGNet과 비교하여 더 많은 convolution 계층을 사용하였지만, 필요한 연산은 훨씬 적다는 점을 강조하고 있습니다(34-layer plain 모델의 FLOPS는 VGG-19의 약 18%에 불과합니다.)

Residual Block은 2개의 convolution 레이어로 구성되어 있으며, 차원이 일치하지 않는 경우에 대해서는 2가지의 방법을 적용하였습니다. 첫 번째는 차원 증가가 필요한 부분에 0을 채워 넣는 zero-padding으로 추가적인 학습이 필요하지 않습니다. 두 번째는 1x1 convolution 연산을 통해 차원을 일치시키는 방법으로 학습이 필요한 파라미터가 추가됩니다.

ResNet 아키텍처 일부분 (Bottom)

 

ResNet 아키텍처 일부분 (Top)

 

Implementation

훈련을 위한 설정은 AlexNet과 VGGNet 논문에서 사용된 방법들을 따랐습니다. 

Experiment

Residaul learning을 적용하지 않은 plain 네트워크는 계층의 수가 18개에서 34개로 증가했을 때, 훈련 데이터에 대한 오류가 증가하는 degradation 현상이 발생하였습니다. 저자는 네트워크에 Batch Normalization을 적용하였기 때문에 vanishing gradient로 인한 현상은 아닐 것이라고 주장하고 있습니다.

Residual learning을 적용한 네트워크는 계층의 수가 18개에서 34개로 증가했을 때, 훈련 데이터에 대한 오류가 감소하였습니다. 또한 ResNet-34의 경우 plain-34와 비교하여 훨씬 낮은 에러를 보였습니다. plain과 비교하여 차원 일치가 필요한 경우 zero-padding을 사용하였기에 학습 파라미터에는 차이가 없습니다.

Plain-34 & ResNet-34

 

Identity vs. Projection Shortcuts

앞선 실험에서는 shortcut에 zero-padding을 사용하여 추가적인 학습 파라미터가 존재하지 않았습니다. 이번 실험에서는 (A) zero-padding, (B) 차원 일치가 필요한 경우에는 projection을 적용하고, 나머지에는 identity를 적용하는 방법, (C) 모든 경우에 projection을 적용하는 방법, 총 3가지 방법을 비교하였습니다. 그 결과 어떤 방법을 적용하여도, 적용하지 않은 경우보다 좋은 성능을 보였습니다. 방법 A보다 방법 B가, 방법 B보다 방법 C가 더 좋은 성능을 보였지만, 추가 학습 파라미터가 너무 많아져 이후 실험에서는 방법 C를 사용하지 않았습니다.

 

Deeper Bottleneck Architectures

Residual block에 하나의 계층을 추가하고, 더 깊은 네트워크를 만드는 실험을 진행합니다. 하나의 block에 2개의 convolution 계층 구성에서, 3개의 convolution 계층으로 구성합니다. 3개의 convolution 계층은 각각 1x1, 3x3, 1x1입니다. 이렇게 구성한 block은 "bottleneck block"이라 명명하고 있습니다. 이 bottleneck block들로 구성한 ResNet-50, ResNet-101, ResNet-152는 ResNet-34와 비교하여 더 좋은 성능을 보였고, 더 깊어질수록 성능이 향상되었습니다.

 

Exploring Over 1000 layers

이후 추가 실험에서 눈에 띄는 점은 1,202개의 계층을 사용한 네트워크에서는 test 정확도가 떨어지는 경우가 존재한다는 것입니다. CIFAR-10 데이터셋에 대해 20개부터 1,202개까지 다양한 깊이의 네트워크에 대한 성능을 평가하였습니다. 110개까지는 안정적으로 성능이 증가하였으나, ResNet-1202는 오히려 성능이 감소하였습니다. 저자는 작은 데이터셋에 너무 큰 모델을 사용하여 오버피팅이 발생한 것이라고 주장합니다. Dropout과 같은 정규화를 적용하면 더 나은 성능을 보일 것으로 예상되나, 본 논문에서는 최적화의 어려움을 해결하는 것에만 집중하고 싶어 해당 실험은 진행하지 않았다고 합니다.

 

결론

본 논문은 shortcut connection을 적용하여 네트워크가 깊어지더라도 학습이 필요한 추가 파라미터가 없는(또는 적은 양의 추가 파라미터가 있는) 단순한 변경으로 최적화를 쉽게 만들었고, degradation 문제를 방지하며 성능 향상을 이룰 수 있었습니다.

* 이 논문에서는 "Conclusion"으로 분리된 결론이 존재하지 않습니다.


"Identity Mappings in Deep​ Residual Networks​"

논문의 저자는 ResNet에서 identity mapping의 역할을 자세히 분석하고 residual block의 구조를 변경하여 성능을 개선하는 내용을 담은 후속 논문을 작성합니다.

반응형