Abstract
2014년 이미지넷 인식 대회에서 VGG를 누르고 1위를 차지한 모델입니다. VGG와 마찬가지로 깊은 층을 구성하여 성능을 향상시켰습니다. VGG19는 19개의 층을, GoogLeNet은 22개의 층으로 구성되어 있습니다. GoogLeNet은 연산을 하는데 소모되는 자원의 효율을 개선했다는 것이 특징입니다. 잘 설계된 구조를 통해 모델의 깊이나 폭을 늘려도 연산량이 증가하지 않는다고 합니다. GoogLeNet을 최적화하기 위해 Hebbian priciple과 multi-scale processing을 적용하였고, 이 구조를 GoogLeNet이라 부른다고 합니다.
1. Introduction
지난 3년간, 딥러닝의 발전 덕에 CNN 분야에서 큰 발전이 이루어져 왔습니다. 이러한 발전은 단지 더 좋은 하드웨어의 성능, 많아진 데이터셋, 커진 모델 때문이기보다는 새로운 아이디어와 알고리즘, 그리고 개선된 신경망 구조 덕분이라고 합니다.
즉, Google 팀에서도 소프트웨어 측면에서 이를 개선하기 위해 노력했고 이들이 개발한 GoogLeNet은 AlexNet보다 파라미터가 12배나 더 적음에도 불구하고 훨씬 정확했다고 합니다. 이러한 개선은 마치 R-CNN처럼 깊숙한 구조와 클래식한 컴퓨터 비전의 시너지 덕분이라고 합니다. 모바일 및 임베디드 환경에서는 전력 및 메모리 사용량 관점에서 효율적인 알고리즘의 중요성이 대두되고 있습니다. 해당 논문에서는 모델이 엄격하고 고정된 구조를 가지는 것보다는 유연한 구조를 가지게끔 했습니다. 또한, 추론 시간에 1.5 이하의 연산만을 수행하도록 설계하여 단순히 학술적인 호기심에 끝나는 것이 아니라 현실에서도 적절히 사용되게끔 설계했습니다.
GoogLeNet의 코드네임인 Inception이란 이름은 NIN(Network in Network)라는 논문에서 유래하였으며, 더 정확하게는 인셉션 영화의 대사인 "we need to go deeper"에서 착안하였다. 이때 "deep"은 두 가지 의미를 가집니다.
- " Inception module"의 형태로 새로운 차원의 구조 도입
- 두 번째는 네트워크 깊이가 증가하였다는 직접적인 의미
또한 , Inception model은 이론적 연구측면에서 Arora 논문을 통해 고안되었다고도 할 수 있습니다.
2. Related Work
LeNet-5를 시작으로 CNN은 일반적인 표준 구조를 가지게 되는데 이는 합성곱 층이 쌓이고 그 뒤에 1개 또는 그이상의 FC층이 따라오는 구조입니다. 또한, ImageNet과 같이 대용량 데이터에서의 요즘 트렌드는 층의 수와 사이즈를 늘리고 오버피팅을 해결하기 위해 dropout을 적용하는 것입니다. 따라서 GoogLeNet도 이와 같은 구조를 띈니다.
Network in Network는 신경망의 표현력을 높이기 위해 제안된 접근법이다. 이 방법은 1x1 합성곱 층이 추가되며, ReLU 활성화 함수가 뒤따른다. 이때, 1x1 합성곱 층은 두 가지 목적으로 사용됩니다.
- 병목현상을 제거하기 위한 차원 축소
- 네트워크 크기 제한
3. Motivation and High Level Considerations
심층 신경망의 성능을 개선시킬 수 있는 가장 간단한 방법은 신경망의 크기를 늘리는 것입니다. 이때, 크기를 늘리다는 것은 다음 두가지 의미를 뜻합니다.
- depth의 증가 (layer의 수 증가)
- width의 증가 (channel의 수 증가)
이는 좋은 성능의 모델을 얻을 수 있는 쉽고 안전한 방법이지만 두 가지 문제점이 있습니다.
- 첫 번째로 크기가 커진다는 것은 파라미터의 수가 늘어난다는 것인데 이는 특히 학습 데이터의 수가 적은 경우에 오버피팅이 일어나기 쉽습니다. 이는 주요한 병목현상이 될 수도 있는데 ImageNet처럼 세밀한 카테고리를 구별해야 하는 경우, 고품질의 학습 데이터셋을 생성하는 것은 독특하며 비용이 높기 때문입니다.
- 두 번째로 네트워크가 커질수록 컴퓨터 자원의 사용량이 늘어난다는 것입니다. 만약 두 합성곱층이 연결되어 있다면 필터의 수가 늘어날 때 연산량은 기하급수적으로 증가시키게 됩니다.
이러한 상황에서 컴퓨팅 자원은 한정적이므로 네트워크의 크기를 늘리는 것보다 컴퓨팅 자원을 효율적으로 분배하는 것이 더욱 중요합니다.
위 두 문제를 해결하는 방법은 밀집된 완전 연결 구조에서 희소 연결 구조로 변경하는 것입니다. 만약 데이터셋의 분배 확률을 희소하면서도 더 큰 신경망으로 표현 가능하다면 입력 층에서 출력 층으로 향하는 층간의 관계를 통계적으로 분석한 후 연관 관계가 높은 것들만 연결하여 최적의 희소한 네트워크를 만들 수 있습니다.
하지만, 오늘날의 컴퓨팅 환경은 균일하지 않은 희소 데이터 구조를 다룰 때 매우 비효율적입니다. 이러한 격차는 더욱 커졌는데, 밀집된 데이터는 꾸준히 개선되고 고도로 조정된 수치적인 라이브러리와 CPU 및 GPU의 사용으로 빠른 연산이 가능해진 반면 희소 데이터의 연산은 발전이 미미했습니다.
초기에는 대칭성을 깨기 위해 CNN에 희소 연결을 적용했었지만 병렬 컴퓨팅에 더 최적하기 위해 완전 연결로 트렌드가 다시 바뀌었습니다. 이와 더불어 균일한 모델 구조, 많은 필터수, 큰 배치 사이즈는 효율적인 조밀한 연산이 가능하게끔 했습니다.
이때, 희소 행렬 연산을 다룬 많은 문헌에서는 희소 행렬을 클러스터링하여 상대적으로 밀집한 부분행렬을 만드는 것을 제안하였고 이는 좋은 성능을 보였다고 합니다.
4. Architectural Details
Inception 구조의 주요 아이디어는 CNN에서 각 요소를 최적의 지역적 희소 구조로 근사화하고, 이를 dense한 구성 요소로 바꾸는 방법을 찾는 것이었습니다. 즉, 최적의 지역적 구성 요소를 찾고 이를 공간적으로 반복하면 됩니다. 이를 쉽게 말하자면 희소 행렬을 서로 묶어 클러스터링 하여 상대적으로 dense한 부분 행렬을 만든다는 것입니다.
이 때, 이전 층의 각 유닛이 입력 이미지의 특정 부분에 해당된다고 가정하였는데 입력 이미지와 가까운 층에서는 특정 부분에 연관된 뉴런들이 집중되어 있습니다. 이는 단일 지역에 많은 클러스터들이 집중된다는 뜻이기에 1x 1 합성곱으로 처리할 수 있습니다.
하지만, 몇몇 위치에서는 좀 더 넓은 영역의 합성곱 필터가 있어야 연관된 뉴런의 비율을 높일 수 있는 상황이 나타날 수도 있습니다. 따라서 특징 맵을 효과적으로 추출할 수 있도록 1x1, 3x3, 5x5 합성곱 연산을 병렬적으로 수행해야합니다.
또한, CNN에서 풀링 층의 성능은 이미 입증되었으므로 이와 함께 높이와 폭을 맞추기 위해 패딩도 추가해줍니다.
1x1, 3x3, 5x5 합성곱 필터의 수는 망이 깊어짐에 따라 달라지는데 만약 깊숙한 층에서만 포착될 수 있는 높은 추상적 개념의 특징이 있다면 공간적 집중도가 감소한다는 것을 의미합니다. 따라서 깊은 층을 향해 네트워크가 깊어짐에 따라 3x3과 5x5 합성곱 필터의 수도 늘어나야 합니다.
그런데 3x3 합성곱 필터 뿐만 아니라 5x5 합성곱 필터도 사용할 경우 연산량이 많아지는데 입력 특징 맵의 크기가 크거나 5x5 합성곱 필터의 수가 많아지면 연산량은 더욱 증가하게 됩니다.
따라서 이 문제를 해결하기 위해 1x1 합성곱 필터를 이용하여 차원을 축소했습니다. 3x3과 5x5 앞에 1x1을 두어 차원을 줄이는데 이를통해 여러 스케일 확보하면서도 연산량을 낮출 수 있었습니다. 합성곱 연산 이후에 추가되는 ReLU 활성 함수를 통해 비선형적인 특징을 더 추가할 수 있었습니다.
또한, 우리는 효율적인 메모리 사용을 위해 낮은 층에서는 기본적인 CNN 모델을 적용하고, 높은 층에서 Inception module을 사용하는 것이 좋다고 했습니다.
이러한 특징들을 가진 Inception module을 사용하면 두 가지 효과를 볼 수 있습니다.
- 과도한 연산량 문제없이 각 단계에서 유닛 수를 상당히 증가시킬 수 있습니다. 이는 차원 축소를 통해 다음 층의 입력값을 조절할 수 있기 때문입니다.
- 시각적 정보가 다양한 스케일로 처리되고 다음 층은 동시에 서로 다른 층에서 특징을 추출할 수 있습니다. 1x1, 3x3, 5x5 합성곱 연산을 통해 다양한 특징을 추출할 수 있기 때문입니다.
5.GoogLeNet
GoogLeNet이라는 이름은 LeNet으로부터 유래하였으며 이는 Inception 구조의 성체입니다.
Inception module 내부를 포함한 모든 합성곱 층에는 ReLU가 적용되어 있습니다. 또한, 입력의 크기는 224x224로 RGB 컬러의 3채널을 가지며 평균 차감을 적용했습니다.
위 표에서 3x3 reduce와 5x5 reduce는 3x3과 5x5 합성곱 층 앞에 사용되는 1x1 필터의 채널 수를 의미합니다. 그리고 pool proj 열은 최대 풀링 층 뒤에 오는 1x1 필터의 채널 수를 의미합니다. 여기서 모든 reduction 및 projection 층에 ReLU가 적용되었습니다.
모델이 깊어지면서 기울기를 효율적으로 역전파시키는 것은 중요한 문제가 되었습니다. 이에 GoogLeNet에서는 auxiliary classifier를 모델의 Inception 4a와 Inception4d 뒤에 추가했습니다. 학습중에는 auxiliary classifier의 출력의 0.3을 곱해서 전체 손실값에 더해지고 테스트 시에는 아예 auxiliary classifier를 사용하지 않았습니다.
Auxiliary classifier는 다음요소들로 구성되었습니다.
- Inception 4a와 Inception4d 뒤에 5x5, stride 3인 평균 풀링
- 필터의 수가 128인 1x1 합성곱 층 및 ReLU
- 유닛의 갯수가 1024개인 FC(Fully Connected) 층 및 ReLU
- p=0.7의 dropout
- 유닛의 개수가 1000개인 FC
위의 형태와 같이 GoogLeNet의 형태를 가집니다.