닫기

테크노트

배너

라온피플의 머신러닝 아카데미(11) - GoogLeNet (2)

  • 등록 2019.03.26 14:08:41
URL복사
[마감임박!! 무료] 생성형AI, 디지털트원, 제조AI, SaaS, 클라우드로 생산성 높이고, 비용절감 방안 제시.. AI자율제조혁신포럼 개최 (3/27~29, 코엑스3층 컨퍼런스룸 317~318호)

[첨단 헬로티]

 

머신비전산업에서 인공지능 기술(머신러닝, 딥러닝)이 빠르게 확산되고 있다. 인공지능 기술을 통해 기존의 컴퓨터비전 기술로는 어려웠던 검사가 가능해질 뿐만 아니라 ‘데이터의 자기 학습’으로 보다 빠르고 쉬우며 신뢰성과 유연성을 갖춘 머신비전 검사가 가능해졌다. 이에 따라 자연스럽게 인공지능 기술에 대한 관심이 높아지고 있다. 국내 대표적인 머신비전 전문업체인 라온피플은 ‘LAON PEOPLE’s 머신러닝 아카데미’를 통해 인공지능의 대표적인 기술인 머신러닝 기술에 대해 연재한다.

 

CNN(Convolutional Neural Network) – “GoogLeNet (part2)”
지난 호에서 구글의 GoogLeNet에 대하여 간단하게 살펴보았다.
그 동안 살펴본 LeNet-5, AlexNet, ZFNet 등은 그런대로 이해하는데 무리가 없을 것이라 생각되지만, 다소 괴상하게(?) 생긴 GoogLeNet은 왠지 부담스러울 것 같다. GoogLeNet에서는 망의 깊이 및 넓이가 모두 커지고, 중간에 분기되는 부분도 있고, “인셉션”이라는 생소한 모듈이 등장한다.

 

하지만, 이 모든 것들이 구글의 연구팀들이 최초로 개발한 것은 아니며, 이들 역시 타 연구자들의 연구와 자신들의 연구를 융합하여 발전시킨 결과이다. 구글은 자신들의 구조를 설계함에 있어 크게 2개의 논문을 참조하고 있으며, 그 중 인셉션 모듈 및 전체 구조에 관련된 부분은 싱가포르 국립 대학의 “Min Lin”이 2013년에 발표한 “Network In Network” 구조를 더욱 발전 시킨 것이다.
이번 호에서는 NIN(Network In Network)의 구조를 살펴보고, 이후 구글의 인셉션의 구조를 살펴볼 예정이다.

 

NIN(Network In Network) 구조와 설계 철학
NIN은 말 그대로 네트워크 속의 네트워크를 뜻한다.
일반적인 CNN 구조는 feature extraction 부분(conv + pooling layer)과 classifier 부분(fully connected neural network)으로 구성이 된다.
Convolutional layer와 pooling layer를 번갈아 사용하는 layer 군 여러 개를 사용하여 feature를 추출하고, 최종 feature vector를 classifier 역할을 하는 fully-connected neural network을 이용하여 처리 하였다.

 

NIN 설계자는 CNN의 convolutional layer가 local receptive field에서 feature를 추출해내는 능력은 우수하지만, filter의 특징이 linear하기 때문에 non-linear한 성질을 갖는 feature를 추출하기엔 어려움이 있으므로, 이 부분을 극복하기 위해 feature-map의 개수를 늘려야 하는 문제에 주목했다.필터의 개수를 늘리게 되면 연산량이 늘어나는 문제가 있다.
그래서 NIN 설계자는 local receptive field 안에서 좀 더 feature를 잘 추출해낼 수 있는 방법을 연구하였으며, 이를 위해 micro neural network를 설계하였다. 이들은 convolution을 수행하기 위한 filter 대신에 MLP(Multi-Layer Perceptron)를 사용하여 feature를 추출하도록 하였으며, 그 구조는 아래 그림1과 같다.

 

 

 

CNN은 filter의 커널을 입력 영상의 전체 영역으로 stride 간격만큼씩 옮겨가면서 연산을 수행한다. 반면에 NIN에서는 convolution 커널 대신에 MLP를 사용하며, 전체 영역을 sweeping 하면서 옮겨가는 방식은 CNN과 유사하다.
MLP를 사용했을 때의 장점은 convolution kernel 보다는 non-linear 한 성질을 잘 활용할 수 있기 때문에 feature를 추출할 수 있는 능력이 우수하다는 점이다. 또한 1x1 convolution을 사용하여 feature-map을 줄일 수 있도록 하였으며, 이 기술은 GoogLeNet의 인셉션에 그대로 적용이 된다. 1x1 convolution은 뒤에 좀 더 자세하게 설명을 할 예정이다.
NIN 이름이 붙은 이유는 망을 깊게 만들기 위해, mlpconv layer를 여러 개를 쌓아 사용을 하기 때문이며, 그래서 네트워크 안에 네트워크가 있다는 개념이 만들어지게 되었다. 
GoogLeNet에서도 인셉션 모듈을 총 9개를 사용하기 때문에 개념적으로는 NIN과 맥이 닿아 있다고 볼 수 있다.

 

 

위 그림2는 mlpconv layer 3개를 사용한 구조이다.
NIN 구조가 기존 CNN과 또 다른 점은 CNN의 최종단에서 흔히 보이는 fully-connected neural network이 없다는 점이다. (위 그림 참조)
Fully-connected NN 대신에 최종단에 “Global average pooling”을 사용하였다. 이는 앞에서 효과적으로 feature-vector를 추출하였기 때문에, 이렇게 추출된 vector 들에 대한 pooling 만으로도 충분하다고 주장을 하고 있다. Average pooling 만으로 classifier 역할을 할 수 있기 때문에 overfitting의 문제를 회피할 수 있고, 연산량이 대폭 줄어드는 이점도 얻을 수 있다.

 

CNN의 최종단에 있는 fully-connected NN은 전체 free parameter 중 90% 수준에 육박하기 때문에, 많은 파라미터의 수로 인해 overfitting에 빠질 가능성이 아주 높으며, 이를 피하기 위해서는 앞선 Class에서 이미 살펴 본 것처럼, “dropout” 기법을 적용해야 하지만, NIN의 경우는 average pooling 만으로 classification을 수행할 수 있기 때문에 overfitting에 빠질 가능성이 현저하게 줄어들게 된다.
물론 GoogLeNet에서도 global average pooling이 적용이 되어 있다.

 

1x1 Convolution이란?
Convolution은 local receptive field의 개념을 적용하기 때문에 7x7, 5x5, 3x3과 같이 주변 픽셀들의 정보를 같이 활용을 한다. 그런데 괴상한(?) 이름의 1x1 convolution 이라는 개념이 나온다.
1x1 convolution을 하는 결정적인 이유는 차원을 줄이는 것이다. GoogLeNet 소개 논문에 나오는 것처럼, Hebbian principle(Neurons that fire together, wire together)에 의해 차원의 줄일 수 있다.
1x1 convolution을 수행하면, 여러 개의 feature-map으로부터 비슷한 성질을 갖는 것들을 묶어낼 수 있고, 결과적으로 feature-map의 숫자를 줄일 수 있으며, feature-map의 숫자가 줄어들게 되면 연산량을 줄일 수 있게 된다. 또한 연산량이 줄어들게 되면, 망이 더 깊어질 수 있는 여지가 생기게 된다.

 

 

위 그림3에서 “C2 > C3”의 관계가 만들어지면, 차원을 줄이는 것과 같은 효과를 얻을 수 있기 때문에, GoogLeNet을 포함한 최신 CNN 구조에서는 1x1 convolution을 많이 사용한다.
1x1 convolution은 처음에는 개념적으로 쉽게 와닿지 않는다. 논문이나 설명 글을 참고할 때 1x1 convolution을 1-layer fully-connected neural network이라고도 하는데, 그 이유는 1x1 convolution이 fully-connected와 동일한 방식이기 때문이다. 만약에 입력 feature-map c2의 갯수가 4이고, 출력 feature-map c3의 갯수가 2인 경우를 가정해보면, 1x1 convolution은 아래 그림4와 같이 표현할 수 있다.

 

 

결과적으로 보면 4개의 feature-map으로부터 입력을 받아, 학습을 통해 얻어진 learned parameter를 통해 4개의 feature-map이 2개의 feature-map으로 결정이 된다. 즉, 차원이 줄어들게 되며, 이를 통해 연산량을 절감하게 된다. 또한, neuron에는 활성함수로 RELU를 사용하게 되면, 추가로 non-linearity를 얻을 수 있는 이점도 있다.
이상으로 1x1 convolution에 대한 간단한 설명을 마치고, 나중에 VGGNet을 설명할 때, convolution을 어떻게 구현할 것인가 및 차원을 어떻게 줄여갈 것인가에 대하여 자세히 설명할 예정이다.

 

구글의 인셉션(Inception)
구글은 인셉션에 대한 개발을 하면서 NIN 구조를 많이 참고하였다. Local receptive field에서 더 다양한 feature를 추출하기 위해 여러 개의 convolution을 병렬적으로 활용하려고 하였다.
원래 1x1 convolution, 3x3 및 5x5 convolution, 3x3 max pooling을 나란히 놓는 구조를 고안하였다.다양한 scale의 feature를 추출하기에 적합한 구조가 된다. 하지만 곧 문제에 부딪치게 된다. 3x3과 5x5 convolution은 연산량의 관점에서 보면, expensive unit(값 비싼 대가를 치러야 하는 unit)이 된다.
망의 깊이가 깊지 않을 때는 큰 문제가 아니나, 망의 깊이와 넓이가 깊어지는 GoogLeNet 구조에서는 치명적인 결과가 될 수도 있다.

 

 

그래서 아래의 그림6과 같이 3x3 convolution과 5x5 convolution의 앞에, 1x1 convolution을 cascade 구조로 두고, 1x1 convolution을 통해 feature-map의 개수(차원)를 줄이게 되면, feature 추출을 위한 여러 scale을 확보하면서도, 연산량의 균형을 맞출 수 있게 된다. GoogLeNet의 22 layer까지 깊어질 수 있는 것도 따지고 보면, 1x1 convolution을 통해 연산량을 조절할 수 있었기 때문에, 이렇게 깊은 수준까지 망을 구성할 수 있게 된 것이다.
3x3 max pooling에 대해서도 1x1 convolution을 둔다.

 

 

NIN에서는 MLP를 이용하여 non-linear feature를 얻어내는 점에 주목을 했지만, MLP는 결국 fully-connected neural network의 형태이고, 구조적인 관점에서도 그리 익숙하지 못하다. 반면에 구글은 기존의 CNN 구조에서 크게 벗어나지 않으면서도 효과적으로 feature를 추출할 수 있게 되었다.
요약하면, 인셉션 모듈을 통해 GoogLeNet 은 AlexNet에 비해 망의 깊이는 훨씬 깊은데 free parameter의 수는 1/12 수준이고 전체 연산량도 AlexNet에 비해 적다는 것을 알 수가 있다. 참고로 GoogLeNet에는 총 9개의 인셉션 모듈이 적용되어 있다.
이제 인셉션 모듈에 대한 이해를 하였으니, 다음 Class부터는 GoogLeNet의 전체 구조에 대한 설계 철학과 왜 이런 구조를 발전시키게 되었는지에 대해 상세하게 살펴볼 예정이다.

라온피플(주)



















주요파트너/추천기업