본 논문은 CVPR 2014에 게재된 논문입니다. (저자 소속: Google)
논문 링크: https://arxiv.org/abs/1409.4842
1. GoogLeNet
GoogLeNet은 ILSVRC-2014에서 우승한 모델입니다.
본 논문에서 Inception 모듈이란 것을 처음으로 제안합니다.

전체적인 GoogLeNet 모델 구조입니다. (Inception-v1으로도 불립니다.)
GoogLeNet 모델의 특징을 요약하자면 다음과 같습니다.
- Inception module: 다양한 사이즈의 filter와 pooling 레이어로 이루어진 구조
- 1x1 convolutional layer: 차원 감소를 위한 레이어
- Auxiliary classifier: 효율적인 backpropagation을 위한 장치
2. Naive Inception Module

Inception module은 이처럼 구성되어 있습니다.
각각의 convolutional 레이어에서 다른 크기의 filter를 사용했기 때문에 더 다양한 정보를 얻을 수 있었습니다.
하지만, Inception module에는 한 가지 문제점이 있었습니다.

바로 convolutional 레이어의 연산량만 하더라도 다 합쳐서 845M이 된다는 것이었죠.
연산량을 줄이기 위해 사용한 것이 바로 1x1 convoltuions입니다.
3. Why 1x1 Convolutions?

1x1 Convolution을 한 개 사용했을 떄 입력 feature의 채널이 1로 압축됩니다.
모든 차원에 대한 정보를 압축해서 하나의 값에 저장한다는 말로 해석할 수 있습니다.
1x1 Convolution을 원하는 개수(N)만큼 사용한다면, 연산 후 feature의 채널은 N 만큼의 사이즈를 갖겠죠.

1x1 convolution 연산 후 정보가 압축되기 때문에 이 레이어를 bottleneck layer 라고도 부릅니다.
Inception module에서는 이 같은 변환 과정을 거쳐 feature를 압축한 후에 convolution 연산을 진행합니다.
그러므로 자연스럽게 연산량이 감소되는 효과를 얻게 됩니다.

변환 이후의 연산량은 358M으로, 변환 이전 854M과 비교했을 때 약 58% 감소한 것을 확인할 수 있었습니다.
다른 모델들에서도 데이터 압축을 위해 1x1 convolutions를 많이 사용하니 이 부분 잘 이해하시고 넘어가면 좋겠습니다. 😊
4. Auxiliary Classifiers

GoogLeNet에는 2개의 Auxiliary Classifiers가 붙어있습니다.
Auxiliary Classifiers는 최종 레이어가 아닌 중간에 있는 두 개의 레이어에서 나온 결과를 이용해 loss를 계산합니다.
Auxiliary Classifiers는 그래디언트 소실 문제를 완화하기 위해 중간 레이어의 그래디언트를 하위 계층으로 전달하는 역할을 합니다.
(이를 통해 성능을 향상시켰다고 하지만..!
후속 논문에서 사실 Auxiliary Classifiers는 성능 향상에 그렇게 도움이 되지 않았다-! 라는 사실을 밝힙니다.)

참고로 Auxiliary Classifier는 이같은 구조를 가집니다.
다음 포스팅에서는 유명한 Backbone 모델인 ResNet에 대해 다룰 예정이니 참고 바랍니다!
저의 글이 언제나 여러분께 도움이 되길 바라겠습니다. 👍
궁금한 내용 댓글 남겨주시면 빠르게 답변해 드리도록 하겠습니다. 😍
