Data Science/논문 분석

[논문 분석] GoogLeNet (Going Deeper with Convolutions)

 

Going Deeper with Convolutions

We propose a deep convolutional neural network architecture codenamed "Inception", which was responsible for setting the new state of the art for classification and detection in the ImageNet Large-Scale Visual Recognition Challenge 2014 (ILSVRC 2014). The

arxiv.org

 

INTRODUCTION

이번에 소개할 논문은 Going Deeper with Convolutions라는 논문으로 GoogLeNet이라는 이름으로 많이 알려져 있다. 참여 연구원 대부분이 구글 연구원들이라 GoogLeNet이라는 이름을 붙여준 것 같다.

 

GoogLeNet은 2014년에 ImageNet에서 개최한 ILSVRC14 (ImageNet Large-Scale Visual Recognition Challenge 2014) 대회에서 우승을 차지하였으며(준우승 VGGNet) 2016년 GoogLeNet-v4로 한번 더 우승을 하기도 했다.

 

지금은 더 좋은 알고리즘들이 더 많이 나와있지만 당시에는 굉장히 각광받는 알고리즘이었으며 Detection 모델로 유명한 YOLO에서도 GoogLeNet을 변형하여 사용했을 정도로 인기가 많았다.

 

Figure source : Kaiming He

 

위 그림은 ImageNet Challenge에서 발표된 알고리즘들의 에러율과 layer의 깊이를 보여준다.

과거에는 얕은 층의 네트워크가 사용되었다가 2012년 AlexNet이 발표되면서 layer의 수는 8층으로, 에러율은 16.4로 대폭 감소하면서 큰 관심을 끌었다.

이후 2014년 VGGNet과 GoogleNet이 동시에 발표되면서 사람의 에러율인 5에 근접하는 수준을 보였다.

2015년에 발표되어 지금도 굉장히 많이 사용되고 있는 ResNet도 다음 기회에 다뤄보도록 하자.

 

Layer의 수를 늘린다고 해서 무조건 성능이 좋아지는가?

당연히 아니다. 네트워크의 깊이가 깊어진다는 것은 Layer의 수를 늘린다는 것이고 Layer의 수를 늘린다는 것은 그만큼 물체를 인식하는 과정에서 전달되는 파라미터들이 많아진다는 것이다. 파라미터들이 많아지면 당연히 연산 속도가 늘어날 것이고 컴퓨터 자원도 많이 잡아먹게 되며 과적합에 빠질 수 있는 문제도 발생할 수 있다.

 

 

GoogLeNet, 탄생 배경

Deep Neural Network에서 아키텍쳐가 넓고(뉴런이 많고) 깊으면(Layer 많으면) 인식률이 높아지는 것은 당연하지만 과적합(Overfitting)과 Vanishing Gradient Problem은 고려하지 않을 수가 없다. 또한 연산량이 많아지기 때문에 속도와 메모리 측면에서도 문제점을 가지게 된다.

 

GoogLeNet이 발표되던 당시 이런 네트워크의 문제점들을 Sparse Connection 구조로 해결하는게 트렌드였다.

여기서 Network를 Sparse하게 한다는 말은 정규화 기술 중 Droupout방식과 같이 Training 과정에서 모든 노드들의 Connection을 고려하는 것이 아닌 일부 노드들의 Connection만 고려하겠다는 것이다.

Dropout 방식은 여기서 무작위로 노드들을 제거하게 되는데 여기서는 관련성이 높은 노드들의 Connection만 고려한다.

 

(좌) Sparse Connection, (우) Dense Connection

 

이렇게 하면 연산량이 줄어들고 속도가 빨라지겠지?라고 생각했지만 Dense Matrix 연산 기술이 발전하고 오히려 Network를 Sparse하게 만드는 과정에서 더 많은 컴퓨팅 자원을 잡아먹게 되면서 새로운 문제로 떠올랐다.

 

GoogLeNet은 이러한 문제를 Inception Module을 통해서 해결했다.

논문 제목에서도 볼 수 있다시피 GoogLeNet은 네트워크를 아주 Deep하게 구성하기 위해 노력했으며 Inception이라는 용어에 그 의미가 내포되어 있다.

 

 

GoogLeNet, Inception Module?

먼저 GoogLeNet 모델의 구조를 살펴보자.

 

GoogLeNet에서 중요하겍 봐야할 것은 1x1 Conv이다. 그림에서 파란색 블럭이 모두 1x1 Conv이다.

 

왼쪽이 Inception 모듈의 초기 모델이라면 오른쪽이 GoogLeNet에서 제안 된 Inception 모듈이다.

초기 모델은 네트워크가 깊어지면 깊어질수록 연산량이 급격하게 늘어나게 될 것이다.

하지만 각 연산 과정에서 1x1 Conv를 함께 넣어주면서 dimensions reduction을 해주게 되면 연산량을 확 줄일 수 있다.