Going deeper with convolutions (GoogLeNet) - 2014

2021. 10. 11. 15:18Artificial Intelligence

 

 

 

 

Abstract

 

 

 

ILSVRC14에서 우승한 모델 GoogLeNet은 네트워크의 "width"와 "height"를 모두 확장하면서도 연산량을 constant하게 유지시킴으로써 연산효율을 높인 모델이라 설명한다. 이를 위해 Hebbian Principle과 Multi-Scale Processing을 적용했다고 한다. GoogLeNet은 총 22개의 레이어로 구성되어 있다. (2014년 논문이라 2015년 논문인 ResNet이 나오기 전이므로 Layer의 개수가 비교적 적다.)

 

 

Hebbian Principle: 헵의 이론이라고도 불리며 뇌의 시냅스 연결성은 경험에 의해 수정될 수 있고 시냅스 뉴런의 pre, post firing에 의해서도 영향을 받는다는 내용이다. 위 논문에서는 "– neurons that fire together, wire together –" 정도로 개념만 차용한 것으로 보이며 이와 관련된 수학적 알고리즘은 사용하지 않은 것 같다.

 

 

Introduction

 

 

 

2014년 기준으로 지난 3년동안(2011~2014를 의미하는 것으로 보여진다.) Convolutional Network의 많은 개선이 있었는데 이는 단순히 하드웨어의 개선, 데이터 셋과 더 큰 모델이 아닌 새로운 아이디어, 알고리즘, 그리고 개선되 네트워크 아키텍쳐라고 주장한다. GoogLeNet은 이러한 생각에 기반하여 2년전의 우승 모델(AlextNet)보다 훨씬 더 적은 파라미터(12분의 1(60M -> 5M))를 사용하면서도 더 높은 성능을 보였다고 주장하며, object-detection의 측면에서 Deep Architecture과 Classical한 Computer Vision (R-CNN과 같은) 모델의 시너지를 통해 성능 개선을 이뤄낼 수 있을 것이라고 주장한다.

 

 

 

GoogLeNet은 Inception 모듈을 사용해서 더 깊은 NN 아키텍쳐를 구현했는데 여기서 더 "깊다"라는 의미는 Inception 모듈이라는 새로운 개념 (width의 개념을 갖는)을 포함한다는 의미와, 실제로 더 깊어진 네트워크(height)의 두 가지 의미를 가진다. 이 GoogLeNet은 2014 ILSVRC에서 state of the art 모델을 outperform 했다고 한다.

 

 

 

Related Work

 

 

 

LeNet-5부터 CNN은 Stacked Convolutional Layer에 constrast normalization과 max-pooling이 적용되고, 그 뒤에 1개 이상의 FC레이어가 적용되는 양상을 띈다. 대용량 데이터셋에 대해서 Overfitting을 막기 위해 dropout을 사용하는 것이 그 당시의(2014년) 트렌드였기 때문에 GoogLeNet도 이와 같은 구조를 사용하였음을 주장하고 있다.

 

 

 

NIN(Network In Network)에 영향을 받은 GoogLeNet은 여기서 영감을 받아 1x1 convolution을 "heavily"하게 사용했다고 주장한다.

1x1 convolution의 주된 효과는 demension reduction으로 인한 파라미터 감소(그리고 이에 따른 연산량 감소)이다. 이는 네트워크의 깊이를 줄이고 큰 퍼포먼스 저하 없이 inception 모듈을 사용한 width 증가분에 대한 연산을 수행할 수 있도록 해준다.

 

 

Motivation and High Level Considerations

 

 

 

Deep Neural Network의 성능을 향상시키는 가장 명확한 방법은 그 크기 (width, depth)를 증가시키는 것이지만 여기에는 2가지 뚜렷한 단점이 존재한다. 하나는 큰 사이즈의 네트워크는 파라미터 개수의 증가를 의미하며, 이는 네트워크 자체를 Overfitting하도록 만드는 경향이 있다는 것이며, 다른 하나는 이렇게 "dramatically"하게 증가하는 파라미터의 개수는 너무 많은 Computing Power를 소모한다는 것이다. 

 

 

 

 

이러한 문제를 해결하기 위해서는 아키텍쳐내의 연결 구조를 Fully Connected에서 Sparely Connected하게 변경해야 한다. (여기서의 Fully Connected는 FC Layer를 말하는 것이 아니다. 레이어와 레이어사이의 관계가 n x m 인지 sparse한지를 의미하는 것으로 이는 Convolution Layer에도 동일하게 적용되는 개념이다.)

 

 

이를 위해 Hebbian principle의 개념을 차용하였는데(정확히는 가설을 뒷받침하는 근거로 사용하였다.), 함께 트리거되는 뉴런들은 함께 묶인다는 것이다. 이를 확률모델을 근거로 설명하고 있다. 만약 데이터셋의 확률분포가 Large & Sparse한 Deep Neural Network에 의해 잘 표현될 수 있다면(즉, 잘 구성될 수 있다면), 최적의 네트워크 구조(Sparse Network)는 레이어와 레이어 사이에서 높은 상관관계를 갖는 뉴런들을 클러스터링해서 구성할 수 있다는 것이다. 

 

 

 

 

하지만 CPU & GPU가 dense matrix의 병렬연산에 최적화되는 방향으로 진화해온 것과 다르게 sparse matrix의 연산으로는 발전이 더뎠고 이는 오늘날의 컴퓨팅 환경이 sparse data 구조를 다룰 때 비효율적이라는 것을 의미한다. 이 문제를 해결하기 위해  위 논문이 참고한 다수의 문헌에서는 sparse matrix들을 클러스터링해서 상대적으로 dense한 submatrix들로 만들어 연산하면 state-of-the-art performace를 보인다는 것을 주장하고 있고, GoogLeNet은 이러한 형태의 sparse structure를 시험하였으며, 결과적으로 Localization & Object-detection에서 좋은 성능을 보였다고 한다.

 

 

 

Architectural Details

 

본격적으로 아키텍쳐에 대한 설명으로 넘어가기 전에 앞서 살펴보았던 내용들을 간단하게 정리해보면 다음과 같다. GoogLeNet은 기존 state of the art(논문의 문맥상으로 봤을때는 AlexNet을 의미하는 것 같다)보다 더 깊은(width, height) 신경망을 12분의 1수준의 적은 파라미터로 학습시킬 수 있었으며, 더 좋은 성능을 나타내었다. 이를 위해 Dense Network가 아닌 Sparse Network를 Dense하게 구성하여 기존의 GPU 최적화를 적용할 수 있었으며, 1x1 convolution를 통해 dimension reduction(차원감소)를 수행함으로써 파라미러의 개수를 줄일 수 있었다.

 

 

 

GoogLeNet의 핵심이 되는 부분이 바로 Inception Architecture(이하 인셉션 모듈)이다. 기본 아이디어는 직역하면 "CNN에서의 optimal local sparse structure를 사용가능한 dense component로 근사하는것"인데, 뒤이어 나오는 문장에서 "All we need is to find the optimal local construction and to repeat it spatially"라고 하는 것을 보아 Sparse한 matrix를 묶어서 Dense 한 Submatrix를 만들고, 이를 연산한다는 의미로 해석할 수 있다. 

 

 

 

 

이는 실제로 인셉션 모듈의 개념도와 Filter Concatenation이 어떻게 구현되어 있는지를 보면 조금 더 확실하게 알 수 있는데, 이전 레이어에 1x1, 3x3, 5x5 Convolution 연산을 각각 수행하고, 3x3 max pooling도 수행한 이후에 이를 단순 concat으로 이어준다. 예를 들어서 Previous Layer가 28x28x192, 각각의 Convolution 연산의 결과물이 각각 28x28x64, 28x28x128, 28x28x32, 그리고 3x3 max-pooling의 결과물이 28x28x32라 했을 때 FilterConcatenation이 된 다음 레이어는 28x28x(64+128+32+32) = 28x28x256이 된다는 것이다.

 

 

이것이 갖는 semantic한 의미를 조금 생각해보면, 이전 레이어(input image와 가까운)에서 1x1 conv를 통해 지역적인, 즉 가까운 범위에서의 Feature를 모으고, 3x3, 5x5 conv를 통해 조금 더 넓은 범위에서의 Feature를 모은 뒤에 이를 합쳐주는 것이다. 이렇게 함으로써 sparse한 연산을 컴퓨팅머신(GPU리소스를 가진)이 dense하게 처리할 수 있게끔 하였으며 한 층에 conv연산을 여러번 하기 때문에 비선형적 관계를 조금 더 잘 처리할 수 있게 된다.

 

 

여기서 Sparse하다는 의미는 다음과 같다. 기존 방식(Alexnet)에서는 1x1, 3x3, 5x5 conv연산을 하나의 레이어가 아닌 3개의 레이어로 Fully-connected되어서 처리하기 때문에 "prev - 1x1 - 3x3 - 5x5 - next"와 같은 구조를 띄게 된다. 이렇게 될 경우 컴퓨팅 연산에는 적합하겠지만, 1x1과 3x3은 모두 연결되어 있으므로 sparse하지 않아 위에서 제시한 Overfitting & exploading number of parameter문제를 해결할 수 없다. 하지만 인셉션 모듈에서는 이를 각각 처리하고 prev - 1x1, prev - 3x3... 그냥 concat해주기만 하므로 sparse하면서 dense한 연산방식을 적용할 수 있는 것이다.

 

 

3x3, 5x5 filter는 조금 더 넓은 범위에서의 Correlation(상관관계)를 확인할 수 있기 때문에 조금 더 추상적인 내용을 담고 있는 higher layer에서는 위 두 필터의 사용 빈도가 늘어나게 된다. 

 

 

 

위의 인셉션 모듈(실제로 사용된 것은 1x1 필터가 사용된 b이다)은 1x1 conv연산을 한번씩 적용하고 있는데, 이는 차원 축소의 의도가 크다고 볼 수 있다. 차원을 축소하여 계산해야 할 파라미터를 줄이려는 의도라고 설명하고 있다.

 

 

GoogLeNet

GoogLeNet의 실제 구조는 다음과 같이 22개의 레이어로 구성되어 있으며 실제 레이어를 구성하는 파라미터들은 다음과 같다. 주목할만한 점은 #3x3, #5x5 레이어가 higher level layer로 갈수록 개수가 점점 증가한다는 점이다. 이는 앞서 살펴보았듯, 더 높은 레벨의 레이어에서는 더 추상적인 Feature들이 검출되기 때문에 이를 잘 잡아내기 위해 넓은 범위의 필터를 사용하는 것이다.

 

 

 

 

 

 

 

입력 이미지와 가까운 부분. 효율적인 메모리 사용을 위해 낮은 레이어에서는 기본적인 CNN 모듈만 적용되었다. Alexnet에서 사용된 LRM(Local Response Norm)을 사용하였다.

 

 

 

 

Inception 모듈로 위에서 설명하였다. 주목할만한 점은 MaxPooling 레이어가 Conv레이어 옆에 병렬로 구성된 것을 볼 수 있는데, 이는 그 당시 Maxpool 레이어를 넣으면 성능이 좋았기 때문이라고 한다. 

 

 

 

신경망 모델이 깊어지면서 생기는 gradient vanishing 문제를 해결하기 위해 2개의 axiliary classifier를 추가하여 gradient vanishing 문제를 완화하려고 시도했다. 모델 훈련시에만 사용되며 실제 성능을 평가하는 부분에서는 이 부분이 제거된다.

 

 

 

마지막 SoftMax를 통과하기전에 통상적으로 사용되었던 Fully Connected레이어 대신에  Average pooling Layer를 사용하였다. 이는 이전 레이어에서 추출된 Feature Map을 평균낸 것을 1차원 벡터로 만들어줌으로써, 파라미터의 개수를 줄이는 효과가 있다. (상당 부분의 NN파라미터가 FC레이어에서 나왔다고 한다.)

 

 

 

Reference

- [Hebbian Theory]

- [Paper]

- [Code]

 

반응형