ResNet 구조 탐험대(1)

장준영·2021년 6월 1일
0

아키텍처

목록 보기
1/1
post-thumbnail

ResNet 개요?

ResNet, CVPR 2016에 나온 논문.
지금에서야 Detection Model의 Backbone외에도 여러 분야에 쓰이고 있는 구조이다.
사실 ILSVRC 2014 GoogLeNet의 대혁명이 있었으나, 1년뒤 후발주자인 ResNet 혁명또한 어마무시했다.. 사람의 Error Rate보다 낮은 확률을 기록한 첫번째 Arcitecture니까!
누가만들었냐?! 마이크로소프트에서 발표한 논문의 풀 네임은 "Deep Residual Learning for Image Recognition."
그렇다. 갓이크로갓프ㅌ...

당시 CNN 구조의 발전에서는 레이어를 많이, 레이어를 깊게 쌓아서 성능을 좋게 하는것이 최우선이였다. 2014년에 발표한 GoogLeNet의 Layer가 22층이였는데, 모델이 깊어질수록 최적화에 멀어지는 문제가 골칫덩이였다. 이를 Vanishing Gradient Problem이라고 했는데, ResNet은 발표당시 152 Layer 층을 가진 구조로 발표되었다.

엥? 모델이 깊어지면 Vanishing Gradient Problem이 생긴다더니, ResNet은 152 레이어? 그냥 무작정 Layer 깊게 많이 넣어버리는게 답이냐??

얼핏 생각하면 이런 질문이 도출될 수 있다고 생각한다.
이러한 의문점들을 가지는 분들이 있을까봐 논문에서 이에 관한 답을 찾을수 있었다

사진에서 보는것 처럼, 56layers와 20layers를 가진 임의의 Arcitecture를 비교하였을때 뭔가 차이가 나보인다. 그렇다. 56layers의 결과가 20layers보다 못한 성능을 내고 있음을 알 수 있다. Training Error, Test Error 둘 다 56layer의 성능이 20layer보다 안 좋은것을 알 수 있다.

그런데 ResNet은 152 layer임에도 성능이 좋은 이유는, 위에서 기술한 Vanishing Gradient Problem을 해결하는데에 초점을 두고 고안하였습니다.

Vanishing Gradient Problem

사진에서 보듯이, Backpropagation시 발생되는 문제이다. BackPropagation은 Cost Function, Gradient-Decent를 고려하여야 하는데 (나중에 BackPropagation에 대해 정리해서 올리면 이해하기 쉬움..!) , 이 모델이 위의 56,20 layer 예시와 같이 56layer처럼 모델이 깊어질수록 급격하게 Gradient의 영향력이 줄어드는것을 말한다.
레이어가 쌓이고 쌓일수록, 연산되는 미분값들이 증가함에 따라서 초기값과 멀어지며 오차가 커지게 된다. 이는 즉, CNN구조의 효율 저하를 야기하는것이다.
이러한 Vanishing Gradient Problem을 해결하고자 하는것이 당시에 주된과제였음이 당연했었겠구나 싶다!

Residual Block(BottleNeck Architecture)

위의 Vanishing Gradient Problem은 Residual Block을 통해서 말끔히 격파완료!하였다.
기존의 신경망은 입력값 x를 타겟값 y로 매핑하는 함수 H(x)를 얻는 것이 목적이었다. 그러나 ResNet은 F(x) + x를 최소화하는 것을 목적으로 한다. x는 현시점에서 변할 수 없는 값이므로 F(x)를 0에 가깝게 만드는 것이 목적이 된다. F(x)가 0이 되면 출력과 입력이 모두 x로 같아지게 된다. F(x) = H(x) - x이므로 F(x)를 최소로 해준다는 것은 H(x) - x를 최소로 해주는 것과 동일한 의미를 지닌다.
즉, Input이 x일때, Output은 Relu(F(x)+x)가 되며 레이어들이 많아짐에 따라 입력값이 잊혀지게 되어 위의 문제를 해결할 수 있게 된다.

Residual Block을 활용한 ResNet

ResNet은 기본적으로 VGG-19의 구조를 뼈대로 한다.

위 그림을 보면 알 수 있듯이 34층의 ResNet은 처음을 제외하고는 균일하게 3 x 3 사이즈의 컨볼루션 필터를 사용했다. 그리고 특성맵의 사이즈가 반으로 줄어들 때, 특성맵의 뎁스를 2배로 높였다.

Residual block들이 효과가 있는지를 알기 위해 CIFAR-10 데이터 셋을 가지고 실험한 결과 자료를 보자면,

위 그림의 왼쪽 그래프를 보면 plain 네트워크는 망이 깊어지면서 오히려 에러가 커졌음을 알 수 있다. 반면, 오른쪽 그래프의 ResNet은 망이 깊어지면서 에러가 낮아지는것을 볼 수 있다. Residual Block은 효과적이였다는 것이 증명된것이다.

밑의 그림에서는 각 Layer 층 수 별로 성능지표를 표로 제공하고 있는데, 152-Layer가 가장 성능이 좋다는 것을 알 수 있다.

추가적으로 ResNet-50, ResNet-110 등등.. 뒤의 붙는 숫자는 Layer의 수 임을 명심하자!
2편은 CIFAR-10 DataSet 활용 결과 및 코드 활용에 대해서 써보겠담

https://arxiv.org/pdf/1512.03385.pdf

  • ResNet 논문 원본이니 참고오!

https://www.youtube.com/watch?v=671BsKl8d0E

  • 유튜브 '동빈나'님 ResNet 정리글. 몹시 설명을 잘해주신다
profile
zZ.. zZ.. 🧑‍💻

0개의 댓글