티스토리 뷰

1. Intro

ResNet 발표 전 존재했던 기존 CNN(AlexNet, VGGNet 등) 모델에서는 깊은 Layer를 쌓을수록 Gradient 소실 및 폭발 문제가 발생했다. ResNet은 이를 해결하기 위해 나온 네트워크로 Skip/Shortcut Connection을 사용하는 것이 주요 특징이다.

 

참고로 ResNet은 Residual Network의 약자로 Skip Connection을 사용하여 Input과 Output의 잔차를 학습하는 것이 특징이다.

 

2. Skip Connection in Residual Network (ResNet)

Skip Connection의 원리를 나타내는 Diagram

기존에는 출력값 자체를 학습한다고 하면 ResNet은 Layer 통과 전 Input을 Output에 더해줘 Input과 Output의 차이(Residual)를 학습하는 원리이다. 이를 통해 Layer를 더 깊게 쌓을 수 있고, identity map을 사용했기 때문에 계산이 더 복잡해지거나 parameter가 많이 늘지도 않는다는 장점이 있다. 

 예를 들어, input 값과 output값이 똑같다면 잔차만 계산하면 되기 때문에 가중치는 그냥 0이 된다. 또한 input과 output이 거의 가깝다면 weight는 작은값으로 찾기 더 쉬워진다. 즉, 측정이 더 쉬워진다고 말한다. 

 또한 Skip Connection의 존재로 인하여 backpropagation 계산시 기존 shallow 구조보다 다양한 gradient가 곱해지고 더해져 vanishing 확률이 낮아지며, Block 단위로 Shallow network의 앙상블 효과까지 겹쳐서 기존 Network보다 더 깊고 더 높은 성능과 Genenralization을 보여준다.

Skip Conncetion 식

1. x와 F의 dimension이 같은 경우

 

Skip Connection 식

단순 element-wise add 연산을 하게되어 계산 복잡도도 오르지 않고, 추가 parameter도 없다.

 

2. x와 F의 channel dimension이 다른 경우

input에 대해서 layer 통과 후 output의 channel 수가 달라지는 경우로 수학적으로는 linear projection을 수행하여 dimension을 맞춰준다. 논문에서는 1x1 conv layer로 처리하도록 언급했으며 Pytorch 코드의 torch.nn.conv2d 메서드를 활용해 쉽게 dimension을 맞춰줄 수 있다.

 

논문에서는 block당 2~3 layer로 구성되어 있으나 더 깊게 구성할 수 있고, Fully-Connected Layer 기준으로 언급되었으나, Convolution에서도 똑같이 적용가능하다.

 

3. Architecture

VGG-19 / 34-Layer Plain CNN / ResNet34 Architecture 비교 (아래부터 차례대로)

Skip Connection은 3가지 유형이 존재

1. identity mapping에 zero padding을 추가

input, output의 dimension을 유지하고 추가적인 parameter 증가도 없으며 block 내에서 적용되는 방법이다.

 

2. Projection 적용

block에서 다음 block으로 넘어갈 때 시작되는 Layer의 Skip Connection에 대해서 1x1 Conv를 사용해 dimension을 맞춰주는 방법이다.

 

3. 모든 Skip Connection에 Projection을 적용하는 방법

모든 Skip Conncection에 추가 Parameter가 발생하기 때문에 사용하지 않는다.

 

ResNet과 Plain을 비교하면 기울기 소실문제로 Plain Network는 18-layer가 34-layer보다 성능이 좋지만, ResNet의 경우 34-Layer의 성능이 더 좋다는 실험결과를 논문에서는 언급하고 있다.

 

4. Bottleneck

Layer 깊이 별로 구성되는 Conv 및 parameter 개수를 나타내는 table

18, 34-Layer는 각 block마다 2개의 conv로 stack을 쌓았으나 50, 101, 152는 더 깊게 쌓기위해 bottlenect 형태의 block으로 구성하였다. 기존 block은 3x3 conv 2개로 구성되었지만, bottleneck은 1x1, 3x3, 1x1으로 구성되어 있으며 3x3 위 아래로 1x1 conv를 쌓은 형태이다. 위의 1x1은 어떤 input dimension이 들어와도 특정 dimension으로 고정하며, 아래 1x1 conv를 통해 channel dimension을 증가시켜준다.

왼쪽은 기존의 block 구성, 오른쪽은 bottleneck 구조

 

1x1 Conv를 추가하여 parameter수를 줄이는 효과와 함께 Skip Connection을 같이 적용하여 더 깊은 Layer를 쌓을 수 있다.

실제로 VGG16보다 더 깊은 layer 를 가진 ResNet152의 연산속도가 더 빠르다. Block의 layer가 2개에서 3개로 증가했으며 1x1을 사용해 parameter수를 줄이는 효과까지 보여주기 때문이다.

 

논문 : https://openaccess.thecvf.com/content_cvpr_2016/html/He_Deep_Residual_Learning_CVPR_2016_paper.html

 

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