📌 두번째 논문 리뷰는 GoogLeNet입니다. 이름부터 구글이 참여했다는 걸 알 수 있죠? GoogLeNet은 이전 글에서 리뷰한 AlexNet 처럼 CNN을 이용합니다. 앞으로 나올 거의 모든 논문에서 CNN을 사용하죠. GoogLeNet의 특징이라고 하면 바로 Inception module을 사용한다는 점이네요. 모델의 구조 자체가 병렬로 되어 있다는 느낌 입니다. AlexNet이 2개의 GPU를 써서 병렬처리 한 것과는 다르게, 모델의 구조 자체가 병렬입니다. 본문에서 자세히 알아보죠.
Inception module 이라고 하는 깊은 CNN 모델을 설계했다. 네트워크의 깊이와 넓이를 늘렸는데 연산량이 증가하지 않도록 설계하였으며,이 과정에서 Hebbian principle과 multiscale processing의 원리를 적용했다. 총 22개의 레이어를 가지며 2014년에 열린 ILSVRC에서 GoogLeNet이란 이름으로 참가하였다.
앞으로 나오는 대부분의 논문들은 기존의 있던 모델에서 깊이를 증가시키면서 적은 파라미터 수를 갖도록 설계하는 걸 목표로 합니다. GoogLeNet 또한 이런 연구를 했습니다. AlexNet에 비해 깊은 레이어를 가져 정확도를 높혔습니다. 그런데 파라미터 수는 더 적어 학습 속도 또한 빠르죠.
최근 3년간 딥러닝 분야, 특히 CNN 네트워크는 큰 발전을 이루었습니다. image recognition과 object detection의 퀄리티는 극적인 변화를 맞이 했습니다. 이는 뛰어난 성능의 하드웨어나 더욱 커진 데이터셋에 의한 것 만은 아닙니다. 주로 새로운 아이디어와 알고리즘, 향상된 네트워크 구조 덕분 입니다. 예를 들어 ILSVRC 2014에서 새로운 데이터가 사용되지 않았습니다. 저희는 2년전 우승한 AlexNet보다 12배 적은 파라미터를 이용했으며, 더 높은 정확도를 보였습니다.
주목할 만한 요소는 모바일과 임베딩을 위한, 전력과 메모리 용량에 있어서 효율적인 알고리즘입니다. 현실에서 사용할 수 있도록 인퍼런스 할 때 1.5billion 이하의 연산을 수행합니다. 이 논문에서 저희는 컴퓨터 비전을 위한 "inception" 이라는 효율적인 구조에 주목했습니다.
deep은 두가지 의미를 지닌다. 첫째는 "inception module" 형태의 새로운 차원구조, 둘째는 이름 그대로 더욱 깊어진 네트워크 구조이다.
AlexNet에 비해 얼마나 깊어졌는지 아래 사진을 통해 비교해봅시다.


구조가 얼마나 복잡해졌는지 한눈에 보이시죠? 훨씬 깊어졌는데 파라미터 수는 더욱 줄어들었다고 합니다. 파라미터 수는 convolution layer보다 fc layer에 의해 결정됩니다. AlexNet은 총 3개의 fc layer를 가지고 있고, GoogLeNet의 경우 최종 fc layer가 하나 밖에 없습니다.(GoogLeNet 중간 오른쪽에 있는 fc layer는 보조 분류기로, 학습 과정에서만 사용되는 것 입니다.) 이외에도 매우 혁신적인 아이디어로 파라미터 수를 줄였습니다. 본문 내용에서 자세히 알아봅시다.
Convolution layer(max pooling과 정규화가 뒤 따르는)는 뒤에 하나 이상의 fc layer층이 뒤따른다. 이 기본적인 디자인에서 변형은 여러 논문에 퍼져있으며 Mnist나 CIFAR 특히 ImageNet에 최상의 결과를 도출했다. 데이터의 수가 증가함에 따라 레이어의 수나 크기를 늘린다. max pooling이 정확한 공간 정보를 손실함에도 이 기본적인 구조는 위치 파악과 객체 탐지에도 성공적으로 사용되었다. GoogLeNet은 inception module이 여러번 반복되어 생성된다.
네트워크 안에 네트워크를 넣는 기법은 Lin et al이 제안하였다. 컨볼루션을 적용할 때, 선형 활성하 함수 뒤에 1x1 컨볼루션 계층을 넣는다. 1x1은 두가지의 목적을 가지고 있다. 가장 중요한 것은 계산 병목 현상을 제거하기 위해 사용되며, 깊이를 증가시키고 네트워크의 폭도 크게 증가시킬 수 있어 성능 저하가 없다.
Convolution을 할 때 1x1 conv를 사용하면 효율적으로 파라미터를 감소시킬 수 있습니다. 즉, conv를 1개 사용하는 것보다, conv을 하기전에 1x1conv를 넣어주면 파라미터 수가 줄어든 다는 것입니다.

1 : 첫번쨰 conv의 경우 28x28x128의 feature map이 입력으로 들어옵니다. 이 때 5x5 conv로 필터 수를 64개로 늘린다면, weight 파라미터의 개수는 128x5x5x64입니다.
2 : 두번째 conv의 경우 28x28x128의 feature map이 28x28x64가 되는 과정에 1x1 conv를 넣어주었습니다. 우선 1x1x32 conv를 할 때 weight 파라미터 개수는 128x1x1x32가 됩니다. 그 후 28x28x64로 만들기 위해 5x5x64 conv를 해주죠. 이 때 weight 파라미터의 개수는 32x5x5x64입니다. 즉, 총 파라미터의 개수는 (128x1x1x32)+(32x5x5x64)입니다.계산 결과
1번은 128x5x5x64=204,800
2번은 (128x1x1x32)+(32x5x5x64)=55,296분명 conv 레이어가 하나 더 들어가서 계산이 복잡해졌는데, 파라미터 수는 1/4배가 되었네요.
*참고로 그림에 나온 파라미터 계산법은 잘못된 것 입니다.더욱 정확한 예측을 하기 위해선 이미지의 특징을 찾기 위해 깊은 레이어를 쌓아야 합니다. 하지만 깊은 레이어를 쌓는다는 것은 파라미터의 수가 증가한다는 것이고, 과적합이 발생할 수 있다는 뜻 입니다.
1x1 conv를 사용하면, 파라미터의 수가 줄어들게 되어 과적합을 걱정할 필요없이 더 많은 레이어를 쌓을 수 있습니다.
심층 신경망의 성능을 향상시키는 가장 간단한 방법은 크기를 늘리는 것입니다. 여기에는 네트워크의 깊이와 너비를 증가시키는 것이 모두 포함됩니다. 이것은 특히 많은 양의 라벨링된 훈련 데이터의 가용성을 감안할 때 고품질 모델을 훈련하는 쉽고 안전한 방법입니다. 그러나 이런 해결책에는 두가지 단점이 있습니다.
더 큰 크기는 더 많은 수의 파라미터를 의미하며, 과적합을 쉽게 만듭니다. 또한 병목현상이 생길 수 있습니다. 균일하게 증가된 네트워크는 계산 자원의 사용이 극적으로 증가합니다. 예를 들어, 두 개의 컨볼루션 레이어가 연결되어 있을 때, 필터 수의 증가는 2차 증가를 초래하게 됩니다. 이 문제를 해결하는 방법은 fc layer를 드문드문 연결된 구조로 바꾸는 것 입니다. 우리는 인셉션 구조를 통해 이를 시도하였고, 두 번 반복한 후에야 약간의 이득을 볼 수 있었다. 그러나 이는 컴퓨터 비전에서만 성공한 것이다. 따라서 확실히 하려면 훨씬 철저한 분석과 검증이 필요하다.
인셉션 아키텍처의 주요 아이디어는 컨볼루션 네트워크에서 로컬 희소 구조가 최적의 조밀한 구성 요소에 희해 어떻게 근사화되고 커버될 수 있는지 알아내는 것이다. 우리에게 필요한 것은 최적의 지역구성을 찾고 공간적으로 반복하는 것 입니다.
우리는 이전 계층의 각 유닛이 입력 이미지의 일부 영역에 해당한다고 가정하고 이 유닛드을 필터 뱅크에 그룹화 합니다. 하위 층에서 상관 단위는 국소 영역에 집중된다. 이는 단일 영역에 많은 클러스터가 집중되고 다음 층에서 1x1 컨볼루션 층으로 덮일 수 있음을 의미한다. 인셉션 아키텍처의 필터 크기는 1x1, 3x3, 5x5로 구성되며, 이는 편의성에 기초했다. 출력 필터 뱅크가 다음 단계의 입력을 형성하는 단일 출력 벡터로 연결된 모든 계층의 조합임을 의미합니다. 또한 풀링 작업은 현재 네트워크 성공에 필수적이었기에 각 단계에서 대체 풀링 경로를 추가하는 것도 추가적인 유익한 효과를 가져온다.
이러한 인셉션 모듈이 서로 겹쳐짐에 따라 출력 상관 통계는 다양할 수 밖에 없습니다. 더 높은 추상의 특징이 더 높은 층에 의해 캡쳐됨에 따라 공간 집중도가 감소할 것으로 예상되며, 이는 더 높은 층으로 이동함에 따라 3x3, 5x5 컨볼루션의 비율이 증가해야함을 시사합니다. 위의 모듈의 큰 문제점은 적은 수의 5x5 필터라도 많은 수의 필터를 가진 컨볼루션 레이어에 사용한다면 비용이 매우 크다는 것 입니다. 풀링레이어와 컨볼루션레이어에서 나온 필터 수를 합친다면 필터의 수는 매 단계마다 증가하게 됩니다. 심지어 드문드문한 구조를 최적이도록 커버한다해도 매우 비효율적이 됩니다. 이것은 제안된 구조의 두번째 아이디어로 이어집니다. 우리는 대부분의 장소에서 표현을 희박하게 유지하고 신호를 일괄 집계해야 할 때만 압축하고자 한다. 즉 1x1 컨볼루션을 5x5나 3x3 컨볼루션 같이 값비싼 계산을 감소하는데 사용한다.
읿반적으로 인셉션 네트워크는 그리드의 해상도를 절반으로 줄이기 위해 스트라이드 2를 가진 max pooling레이어가 있는 모듈로 구성된 네트워크이다. 큰 컨볼루션을 하기전에 먼저 사이즈를 감소시킨다. 인셉션 아키텍처는 계산적으로 더 저렴한 버전을 만드는 것이다.

인셉션 모듈의 구조는 위 사진과 같습니다. 레이어를 많이 통과하여 output에 가까워지면 고차원의 특징들을 학습하게 됩니다. 하지만 고차원으로 갈수록 공간적 특징이 점차 사라지게 되죠. 이를 해결하기위해 3x3, 5x5같은 공간적 특징을 담아낼 수 있는 컨볼루션을 수행해야 합니다. 그런데 큰 필터를 사용하게 되면 당연히 비용이 많이 들게 됩니다. 이를 해결하기 위한 구조가 오른쪽 그림입니다. 컨볼루션을 수행하기 전에 1x1로 연산량을 감소시켜주죠.

구글넷 아키텍처 사이즈를 나타낸 표입니다. 우선 224x224사이즈에 평균을 뺀 RGB 이미지가 입력으로 들어온다고 하네요. 정규화 과정에서 RGB채널의 평균을 빼주는 것 같습니다. 표에서 4번쨰 칸 까지는 기본적인 CNN 모델의 구조입니다. 이제 괄호로 (3a), (3b), (4a), (4b)라고 표시된 부분이 인셉션 모듈을 적용한 부분입니다.

전체 그림을 보면서 알아보죠. 표에 괄호는 3, 4, 5가 있고 각각 a,b,c,d가 있습니다. (max pooling : 3x3, 2stride)인 빨간색 박스를 기준으로 3, 4, 5를 나눈거 같네요. 그리고 각 max pooling 사이에 인셉션 모듈 순서에 따라 a, b, c, d로 나눴습니다. 우선 표에서 Inception(3a)를 확인해봅시다. 아웃풋 사이즈가 28x28x256이네요. 그럼 이전 레이어의 아웃풋이 입력으로 들어올테니 입력사이즈는 28x28x192입니다. 사이즈는 변하지 않고 채널 수만 변하는걸 알 수 있습니다.
표에 #3x3 reduce라고 되어 있는 부분은 3x3컨볼루션 앞에 있는 1x1 컨볼루션을 나타냅니다. 3x3과 5x5 컨볼루션 하기전에 각각 1x1 컨볼루션이 있기 때문에 두개의 reduce가 있네요.
그럼 총 채널 수를 계산해봅시다.
- #1x1 : 64
- #3x3 : 128
- #5x5 : 32
- pool proj : 32
.
위 채널 수를 다 합치면 아웃풋 채널 수인 256이랑 똑같네요. 각 레이어가 끝난 뒤에는 ReLu를 적용합니다.그림에서 볼 수 있듯이 네트워크가 매우 깊어졌습니다. 그래서 역전파 과정에서 gradient가 소멸되지 않고 잘 전달되게 하도록 auxiliary classifier를 추가시켰습니다.
중간에 softmax를 하는 길을 따로 만들어준 것 입니다. 물론 학습에만 필요하기 때문에 테스트 시에는 사용하지 않습니다. auxiliary classifier를 통한 loss는 0.3을 곱해줍니다. 너무 큰 영향을 끼치게 하지 않기 위해서 입니다.
이번 논문에서는 GoogLeNet에 대해 알아보았습니다. 구글넷은 Inception_v1이라고도 불리는데요, 나중에 개선된 버전으로 Inception_v2와 v3까지 나옵니다. GoogLeNet에서는 다양한 크기의 conv 레이어가 사용되었습니다. 하지만 3x3레이어를 쓰는게 더 효율적이라는게 나중에 밝혀지면서 위 리뷰에서 사용된 5x5 레이어가 3x3 conv레이어 2개로 바뀐것이 Inception_v2 랍니다.