본문 바로가기
AI 논문 리뷰(AI Paper Review)/컴퓨터비전(Computer Vision)

[논문정리] ResNet 개념 정리

by stevenkim_ 2023. 9. 1.

*본 내용은 논문의 상세한 분석이 아닌, 간단한 복기용 정리입니다.

 

 

Residual Learning

ResNet 핵심인 Residual Learning입니다.

기존 방식은 input으로 x 받아서 두개의 weight layer 거치고, 학습을 통해 최적의 출력 H(x) 구하는 것이 목표입니다.

근데 이제 단순히 H(x) 출력하는 기존의 방식에서, 출력인 H(x) 입력인 x 차이를 학습시키는 것을 목표하는 방식으로 목적을 바꾼 것이 Residual Learning입니다.

Residual Function F(x) = H(x) - x 최소화시켜야 하고 이것은 , 출력과 입력의 차를 줄인다는 의미가 됩니다.

여기서 x 값은 도중에 바꾸지 못하는 입력 값이므로 F(x) 0 되는 것이 최적의 해이고, 결국 0 = H(x) - x H(x) = x 됩니. , H(x) x mapping 하는 것이 학습의 목표가 됩니다.

이전에는 알지 못하는 최적의 값으로 H(x) 근사 시켜야 하므로 어려움이 있었는데, 이제는 H(x) = x라는 최적의 목표값이 사전에 pre-conditioning으로 제공되기에 F(x) 학습이 쉬워지는 것입니다.

 


 

ShortCut

여기 보이는 것처럼 두개의 convolutional layer 뛰어넘는 인풋 feature map x output 더해주는 구조를 ShortCut이라고 부릅니다.

아래의 두 shortcut의 구조를 눈에 익히고 다음 step 으로 넘어가겠습니다.

 


이제 이 사진을 보시면, 방금 보신 것과 똑같이 Convolution layer 두개를 건너뛰는 x 더해주는 구조가 이어져 있고,

output feature map 개수가 두배로 변할 때마다 Convolutional layer 색이 변하는데, 이게 변할 때만 실선대신 점선이 보이는 것을 있습니다.

실선은 기본적으로 아까 설명한 것처럼 F(x) 인풋 x 더한 Identity ShortCut이고, 점선으로 표시된 부분에서 output 개수가 두배로 튀지만, 가로 세로 길이는 절반으로 줄어듭니다.

그래서 사이즈가 절반으로 줄어드니까, shortcut에서도 마찬가지로 feature map 사이즈를 줄여주어야 합니다. 그래서 이때는 identity shortcut 대신 Projection shortcut 사용하게 됩니다.

정리하면, 실선은 Identity Shortcut, 점선은 Projection Shortcut 입니다.

 

그리고 여기 밑에 있는 것들은, 방금 설명한 ResNet residual layer VGG-19 3x3 Convoluion 반복하는 기본 구조를 따랐고, 가운데는 VGG-19 layer 반복해서 많이 쌓은 모델입니다.

근데 이렇게 layer 많아져서 deep해지면 input 정보가 손실되는데, Shortcut 개념을 추가해서 이것을 방지한 것이 ResNet 구조입니다.

 


 

ResNet Structure

 

이제 여기 보이시는 것처럼 layer 얼마나 쌓느냐에 따라 ResNet 구조에 차이가 생깁니다. 

ResNet 네트워크에 layer 많이 쌓아서 연산량이랑 parameter 늘려주어 정확도를 높였습니다.

여기 보이는 152 layer 가장 좋은 성능을 보였고요, 여기 자세히 보시면 layer 개수가 50 이상인 경우에는 Bottle Neck 구조를 사용했습니다.

 


 

BottleNeck

 

왼쪽이 일반 Residual 구조이고, 오른쪽이 Bottle Neck residual 구조인데요. 

처음에 1x1 convolutional Filter 통해 dimension 축소시키고, 다시 마지막에 1x1 Filter 통해 다시 dimension 키워주는 매커니즘입니다.

처음에 1x1 연산을 수행하면 feature map 개수가 줄어들게 되고 이렇게 줄어든 feature map 개수로 가운데 layer에서 3x3연산을 수행하면, 기존의 Residual 구조에서처럼 그냥 3x3 연산을 진행하는 것보다 연산량을 훨씬 줄일 있습니다.