CNN의 주요 모델 - ResNet
오늘은 CNN의 주요 모델 중 하나인 ResNet에 대해서 다뤄보겠습니다. 지난 포스팅에서 다뤄던 VGGNet을 기억하시나요? VGGNet의 배경은 CNN의 깊이와 성능의 상관관계를 밝히는 것이었습니다. 연구 결과,16층 이상에서 매우 효과적인 성능이 나타나는 것을 확인할 수 있었습니다. 그렇다면 깊이를 무작정 늘리게 되면 더 좋은 결과를 만들 수 있을까요? 사실, 망이 깊어질수록 학습시키기가 어려워지기 때문에 깊이 조절을 무한정으로 할 수는 없습니다. 그 원인은 아래와 같습니다.
1. Gradient Vanishing(or Exploding): CNN에서 파라미터를 업데이트할 때, 기울기(Gradient) 값이 너무 작거나 크면 학습이 제대로 이루어지지 않을 수도있고, 학습 속도가 매우 느려질 수 있습니다. 이런 문제를 해결하기 위해 여러 개선 방법들이 고안되었지만, 망의 깊이가 일정 수준 이상 깊어지면 여전히 기울기 값에 대한 문제가 발생합니다.
2. Overfitting: 망이 깊어질수록 파라미터의 수가 늘어나게 되어 Overfitting의 문제가 생깁니다.
ResNet
ResNet 개발팀은 VGG 팀이 진행한 연구(19층)에서 더 나아가 100층 이상까지 모델을 만들어 성능 실험을 진행하였습니다. 그 결과 층이 깊어질수록 학습에서 더 높은 에러율을 보였습니다. 개발팀은 이런 결과를 얻으면서 깊이에 따라 학습 효율을 증가시킬 수 있는 방법에 대해 고민하였습니다. 이들이 고안해낸 대표적인 방법은 Residual Learning입니다.
Residual Learning
기존의 신경망은 i번째 층과 (i+1)번째 층의 연결로 구성되어있지만, ResNet은 i번째 층과 (i+r)층의 연결로 구성되어 있습니다. 그림을 보면 알 수 있듯이, Residual Learning에서는 정보 전달이 한 층을 건너 뛰게 됩니다. 즉, 지름길을 사용한다고 이해할 수 있는데, 이러한 연결 방식을 Shortcut Connection이라고 합니다. 이 방식을 사용하면 떨어진 두 개의 층을 연결하함으로써 오차 역전파 시 기울기가 쉽게 전파된다는 장점이 있습니다.
기존 방식은 이웃한 층과의 연결만 있고, 입력값(x)를 받아 H(x)를 출력합니다. CNN은 학습 과정에서 가중치를 변경해가며 최적의 값을 찾아냅니다. 이를 통해 최적의 H(x)를 찾는 것을 목표로합니다. Residual Learning은 여기서 조금 다른 방식을 사용합니다. 위 그림 중 오른쪽과 같이 목표치를 H(x)가 아닌 F(x)+x로 세웁니다. 그 방식은 아래와 같습니다.
1. 출력 결과를 H(x)가 아닌, H(x)와 입력값(x)의 차이로 설정한다. 즉, H(x) - x를 목표로 설정한다. 이를 F(x)라고 가정한다.
2. 따라서 H(x) = F(x) + x 입니다. 즉, Residual Learning 방식에서 얻고자 하는 출력값은 { F(x) + x }가 됩니다.
이 방식은 지름길을 통해 i층의 입력값 x를 (i+r)층의 출력값 F(x)에 더하는 연산만 추가되기 때문에 파라미터가 따로 필요 없어집니다. ResNet에서는 이 과정을 Identity Mapping이라고 정의했습니다.
ResNet의 구조
ResNet은 애초부터 VGG의 구조에 대한 의문에서 부터 시작되었기 때문에 VGG의 구조와 유사합니다. 예를들어, VGG19 구조에 합성곱 층을 추가하여 깊이를 늘리고, shortcut connection을 추가하면 ResNet의 가장 간단한 구조가 됩니다. 이 구조는 점점 발전하여 19 층에서 256 층까지 늘어났습니다.
위 그림 중 ResNet 구조를 보면 실선과 점선 두 종류의 선이 있는데, 이것은 shortcut connection을 나타낸 것입니다. 실선은 입력으로 들어온 특성맵의 크기를 변화시키지 않도록 Stride와 Zero padding을 1로 하고 (1x1) 크기의 필터를 사용하는 shorcut을 의미합니다. 점선은 특성맵의 크기를 줄일 때 사용되는 shortcut인데, 이것은 합성곱 필터의 깊이가 두배가 되는 시점에 사용됩니다.
오늘은 CNN의 모델 중 ResNet에 대해서 알아보았습니다.