본문 바로가기
컴퓨터비전/CNN

[딥러닝] ResNet 모델의 개요 및 특징

by PIAI 2022. 3. 20.

개요

 

앞서 소개한 VGG, AlexNet에서 층이 깊어질수록 모델이 좋아진다는 것이 증명되었습니다. 하지만 무작정 계속 늘리면 늘릴수록 좋을까요?? 그렇지 만은 않습니다.

 

위 그림을 보면 56층을 갖는 구조가 20층을 갖는 모델보다 더 에러가 많이 나왔습니다. ResNet저자들은 깊이를 늘릴 방법을 연구했고, input을 x라고 하고, 최적 함수를 H(x)라고 했을 때 H(x) = x 가 나오는 Convolution Layer가 identity 역할을 하게 생성하면 층을 계속 늘려도 성능이 저하되지는 않을 것이라고 추측하였습니다. 

 

H(x) = x

위의 그림을 보면 Identity block을 이렇게 구성하면 될 것 같은데 ReLU와 같은 비선형 Layer로 인하여 identity mapping이 어렵습니다. 그래서 나온 방법이 아래와 같은 그림입니다.

 

H(x) = F(x) + x

기존의 신경망은 x를 타겟값 y로 매핑하는 함수 H(x)를 얻는 것이 목적이었다면, ResNet은 F(x) + x를 최소화하는 것을 목적으로 합니다. x는 input 값으로 변할수 없으니까 F(x)를 0에 가깝게 만드는 것이 목적입니다. F(x)가 0에 가까워질수록 H(x) = x가 됩니다. 위와 같이 H(x)가 비선형 구조인 Identity block을 만드는 것은 힘들지만, 0을 학습하는 것은 상대적으로 쉽습니다. F(x)를 최소 롤 해준다는 것은, F(x) = H(x) - x 즉, H(x) - x를 최소로 하는 것과 동일한 의미를 가집니다. 여기서 H(x) - x 를 잔차(Residual)라고 합니다. 그래서 위의 그림을 Residual block이라고 부르고, ResNet이라는 이름이 붙게 됩니다. F(x)의 마지막 Activation은 적용하지 않고, 기존 x(shortcut)과 더해 Activation을 적용합니다.

 

구조

 

ResNet은 기본적으로 VGG-19의 구조를 기본으로 가져갑니다. 거기에서 어떻게 하면 층을 더 늘려갈지 고안하다가 나온 방법입니다. 위의 구조를 보면 처음에 7x7을 적용한 것을 제외하고는 3x3사이즈의 커널을 사용했습니다. 중간중간에 보면 사이즈를 반으로 줄일 때가 있는데 그때는 strides를 2로 주고 채널의 깊이를 2배로 늘렸습니다. 아래의 그림을 보면 확실히 ResNet을 적용하면서 Layer의 깊이를 늘려 갔을 때 에러가 줄었음을 알 수 있습니다.

 

ResNet은 이밖에도 18, 50, 101, 152층이 더 있습니다. 당연히 152층 깊이의 모델이 가장 뛰어난 성능을 보였지만 더 깊이 내려가 봤자 성능 향상은 별로 없었기 때문에 152층이 최종 모델입니다. 아래에 모델별로 구조를 보겠습니다.

50층 이상부터는 1x1 Convolution을 적용하였습니다. 이것을 적용한 이유는 아무래도 층이 깊어질수록 파라미터수가 많아질것이고 연산속도도 오래 걸리기 때문에 파라미터 개수를 효과적으로 줄이려고 사용하였습니다. 바로 이어지는 Stage로 연결될 때마다 Feture Map Size는 2배로 줄고, 채널의 깊이는 2배로 증가(strides=2)합니다.

 

댓글