본문 바로가기
CV(Computer Vision)

GoogLeNet (Going Deeper with Convolutions)

by namduhus 2026. 5. 21.

[논문 정보]

Christian Szegedy et al. | arXiv:1409.4842 | 2014년 9월
논문명: Going Deeper with Convolutions
핵심 키워드: GoogLeNet, Inception Module, 1×1 Convolution, Dimension Reduction, Multi-scale CNN, ImageNet, ILSVRC 2014


1. 서론

이 논문은 컴퓨터 비전 딥러닝 역사에서 매우 중요한 전환점이 된 GoogLeNet, 즉 Inception v1 구조를 제안한 논문이다. 당시 CNN 성능 향상은 주로 네트워크를 더 깊고 넓게 만드는 방향으로 이루어졌다. AlexNet 이후 ImageNet 성능 경쟁이 본격화되면서, 더 많은 convolution layer, 더 많은 channel, 더 큰 fully connected layer를 사용하는 방식이 자연스러운 선택처럼 여겨졌다.

 

하지만 논문은 단순히 모델을 크게 만드는 방식에는 두 가지 문제가 있다고 지적한다. 첫째, 파라미터 수가 증가하면 과적합 위험이 커진다. 둘째, 계산량이 급격히 증가하여 실제 서비스나 대규모 데이터 처리에 적용하기 어려워진다. 특히 convolution layer가 연속될 때 필터 수를 균일하게 늘리면 연산량은 거의 제곱 수준으로 증가할 수 있다.

 

GoogLeNet의 핵심 문제의식은 여기서 출발한다. 저자들은 정확도만 높이는 거대한 모델이 아니라, 제한된 계산 자원 안에서 더 깊고 넓은 모델을 효율적으로 구성하는 방법을 찾고자 했다. 실제로 논문은 GoogLeNet이 AlexNet 계열 ILSVRC 2012 우승 모델보다 12배 적은 파라미터를 사용하면서도 더 높은 정확도를 달성했다고 설명한다.

 

이 논문의 핵심 아이디어는 Inception module이다. Inception module은 하나의 layer에서 1×1, 3×3, 5×5 convolution과 pooling을 병렬로 수행한 뒤, 그 결과를 channel 방향으로 이어 붙인다. 즉, 한 가지 크기의 convolution만 고정적으로 사용하는 것이 아니라, 여러 receptive field 크기를 동시에 활용해 다양한 공간적 패턴을 포착한다.

 

여기서 중요한 설계는 1×1 convolution이다. 이 논문 이전에도 Network-in-Network에서 1×1 convolution의 표현력 증강 효과가 제안되었지만, GoogLeNet은 1×1 convolution을 단순한 비선형 변환이 아니라 차원 축소 도구로 적극 사용했다. 3×3, 5×5 convolution 앞에 1×1 convolution을 넣어 channel 수를 줄이면, 큰 kernel convolution의 계산량을 크게 줄일 수 있다. 논문은 이를 통해 네트워크의 깊이와 폭을 늘리면서도 계산 예산을 통제할 수 있다고 설명한다.

 

논문에서 제안된 GoogLeNet은 ILSVRC 2014 classification과 detection에서 모두 우수한 성능을 보였다. Classification에서는 top-5 error 6.67%로 1위를 달성했고, detection에서는 mAP 43.9%로 1위를 기록했다.


2. 문제 정의

그림과 같이 이 논문이 다루는 문제는 단순히 "이미지 분류 정확도를 높이자"가 아니다. 보다 정확히는 다음 문제다.

제한된 계산량과 메모리 안에서, CNN을 더 깊고 넓게 만들면서도 과적합과 연산 폭증을 피할 수 있는 구조를 어떻게 설계할 것인가?

 

기존 CNN 구조는 대체로 convolution layer를 순차적으로 쌓고, 중간에 pooling을 넣은 뒤 마지막에 fully connected layer를 붙이는 방식이었다. LeNet, AlexNet, ZFNet, VGG 계열이 이런 흐름에 속한다. 이 구조는 단순하고 강력하지만, 네트워크를 크게 만들수록 파라미터 수와 계산량이 급격히 증가한다.

 

예를 들어 어떤 convolution layer의 입력 channel이 많고, 그 위에 5×5 convolution을 다수 적용하면 연산량이 매우 커진다. 5×5 convolution은 3×3보다 kernel area가 크기 때문에 계산 부담이 크고, 입력 channel과 출력 channel이 모두 커질수록 비용은 더욱 커진다. 따라서 단순히 “큰 kernel을 많이 쓰자”는 방식은 현실적인 선택이 아니다.

 

또 다른 문제는 어떤 크기의 convolution이 최적인지 사전에 알기 어렵다는 점이다. 이미지 안에는 작은 엣지나 질감처럼 국소적인 패턴도 있고, 보다 넓은 영역에서 드러나는 형태나 부품 관계도 있다. 낮은 layer에서는 작은 receptive field가 유리할 수 있고, 높은 layer에서는 더 넓은 receptive field가 필요할 수 있다. 단일 kernel 크기만 사용하는 구조는 이러한 multi-scale 특성을 충분히 반영하기 어렵다.

 

GoogLeNet은 이 문제를 병렬 multi-scale 처리로 해결한다. 하나의 module 안에서 1×1, 3×3, 5×5 convolution과 pooling 경로를 동시에 둔다. 이렇게 하면 네트워크가 각 위치에서 작은 패턴, 중간 크기 패턴, 큰 패턴, pooling 기반 요약 정보를 함께 사용할 수 있다.

 

하지만 단순히 병렬 경로를 많이 만들면 channel 수가 증가해 다음 layer의 계산량이 폭발한다. 따라서 논문은 병렬 구조와 함께 dimension reduction을 필수적으로 도입한다. 이때 사용되는 것이 1×1 convolution이다. 즉, GoogLeNet의 문제 정의는 multi-scale 표현력과 계산 효율성을 동시에 만족하는 CNN 구조 설계 문제라고 볼 수 있다.


3. 제안 방법론

3.1 핵심 아이디어

GoogLeNet의 핵심 아이디어는 다음 한 문장으로 요약할 수 있다.

CNN 내부의 계산 자원을 더 효율적으로 사용하기 위해, sparse한 최적 연결 구조를 dense 연산으로 근사하는 Inception module을 설계한다.

논문은 이 아이디어를 이론적으로는 Hebbian principlesparse representation 관점에서 설명한다. 이상적으로는 모든 뉴런이 모든 이전 feature와 연결되는 dense 구조보다, 서로 관련 있는 feature끼리만 연결되는 sparse 구조가 더 효율적일 수 있다. 하지만 당시 하드웨어와 라이브러리는 비정형 sparse 연산보다 dense matrix 연산에 훨씬 최적화되어 있었다.

 

따라서 저자들은 완전한 비정형 sparse network를 직접 구현하기보다, sparse 구조의 장점을 여러 개의 dense convolution branch로 근사한다. 이것이 Inception module의 출발점이다.


3.2 Inception module의 기본 구조

Inception module의 기본 구조는 하나의 입력 feature map에 대해 다음 연산을 병렬로 적용한다.

Conv 역할
1×1 convolution channel 간 조합, 국소 feature 변환
3×3 convolution 중간 크기 spatial pattern 포착
5×5 convolution 더 넓은 receptive field 포착
3×3 max pooling 위치 변화에 강한 요약 feature 제공

각 branch(Conv)의 출력은 channel 방향으로 concat된다. 논문 5쪽의 Figure 2(a)는 이러한 naive Inception module을 보여준다. 여기서는 1×1, 3×3, 5×5 convolution과 max pooling이 병렬로 배치되고, 마지막에 filter concatenation이 수행된다.

이 구조의 장점은 명확하다. 네트워크가 하나의 scale에 고정되지 않고, 여러 scale의 시각 정보를 동시에 처리할 수 있다. 작은 물체나 질감은 1×1 또는 3×3 경로에서, 더 넓은 형태 정보는 5×5 경로에서 포착될 수 있다.


3.3 native Inception의 문제

하지만 naive Inception module에는 심각한 문제가 있다. 입력 channel 수가 큰 상태에서 3×3, 5×5 convolution을 그대로 적용하면 계산량이 매우 커진다. 특히 5×5 convolution은 연산량이 크기 때문에, branch(Conv)를 병렬로 많이 둘수록 전체 computation budget이 빠르게 증가한다.

Computation budget: 인공지능(AI)이나 기계학습 모델을 학습시키거나 구동할 때 사용할 수 있는 최대 컴퓨팅 자원의 한계를 뜻합니다.

 

따라서 Inception module을 단순히 쌓기만 하면, 몇 stage 지나지 않아 channel 수와 연산량이 폭발한다. 논문은 이러한 문제를 피하기 위해 1×1 convolution을 사용한 차원 축소를 도입한다.


3.4 1x1 convolution을 통한 dimension reduction

GoogLeNet에서 1×1 convolution은 매우 중요한 역할을 한다. 1×1 convolution은 spatial resolution은 유지하면서 channel 수를 줄이거나 변환할 수 있다.

 

예를 들어 입력 feature map의 channel 수가 192라고 하자. 여기에 바로 5×5 convolution으로 32개의 출력을 만들면, 각 위치마다 5×5×192×32개의 연산이 필요하다. 하지만 먼저 1×1 convolution으로 channel을 16개로 줄인 뒤 5×5 convolution을 적용하면, 큰 kernel convolution의 입력 channel이 192가 아니라 16이 된다. 이로 인해 전체 연산량이 크게 줄어든다.

이 방식은 단순한 압축이 아니다. 1×1 convolution 뒤에는 ReLU가 적용되기 때문에, channel 축 방향의 비선형 조합도 가능하다. 즉, 1×1 convolution은 계산량 감소와 표현력 증가를 동시에 수행한다.

 

논문은 이러한 구조를 Figure 2(b)에서 보여준다. 3×3 convolution과 5×5 convolution 앞에 각각 1×1 reduction layer가 들어가고, pooling branch 뒤에도 1×1 projection layer가 추가된다.


3.5 GoogLeNet 전체 구조

GoogLeNet은 Inception module을 여러 개 쌓아 만든 22-layer deep network다. 논문은 parameter가 있는 layer만 세면 22개, pooling까지 포함하면 27개 layer라고 설명한다. 또한 전체 building block 수는 구현 시스템에 따라 약 100개에 달한다고 말한다.

 

Stage 주요 구성
초기부 7×7 convolution, max pooling, 3×3 convolution
중간부 Inception 3a, 3b
중간-고층부 Inception 4a~4e
후반부 Inception 5a, 5b
분류부 global average pooling, dropout, linear, softmax

예를 들어 Inception 3a는 출력 크기가 28×28×256이고, Inception 3b는 28×28×480이다. 이후 max pooling을 통해 14×14 resolution으로 줄이고, Inception 4a~4e를 거치며 channel 수를 점진적으로 확장한다. 마지막 Inception 5b에서는 7×7×1024 출력이 만들어지고, 7×7 average pooling으로 1×1×1024 벡터를 얻는다.


3.6 Fully Connected layer 대신 Average Pooling

GoogLeNet은 기존 AlexNet이나 VGG처럼 큰 fully connected layer에 강하게 의존하지 않는다. 마지막 classifier 앞에서 average pooling을 사용해 spatial dimension을 줄인다.

 

논문은 fully connected layer를 average pooling으로 바꾸는 것이 top-1 accuracy를 약 0.6% 개선했다고 언급한다. 다만 dropout은 fully connected layer를 줄인 이후에도 여전히 중요했다고 설명한다.  

 

이 설계는 파라미터 수를 크게 줄인다. AlexNet이나 VGG의 경우 마지막 FC layer가 전체 파라미터의 상당 부분을 차지한다. 반면 GoogLeNet은 global average pooling 계열 구조를 사용해 classifier head를 가볍게 만든다. 이 덕분에 전체 모델은 깊지만 파라미터 수는 상대적으로 작다.


3.7 Auxiliary Classifier

GoogLeNet은 네트워크가 깊기 때문에 gradient가 중간 layer까지 잘 전달되는지가 중요한 문제였다. 이를 해결하기 위해 저자들은 중간 Inception module인 Inception 4aInception 4d 출력에 auxiliary classifier를 붙였다.

 

Auxiliary classifier는 학습 중에만 사용된다. 중간 feature map에서 별도의 작은 classifier를 만들어 loss를 계산하고, 이를 main loss에 더한다. 논문에서는 auxiliary loss에 0.3의 weight를 부여했다고 설명한다. 추론 시에는 이 auxiliary classifier를 제거한다.  

 

이 설계의 목적은 두 가지다. 첫째, 중간 layer가 더 discriminative한 feature를 학습하도록 유도한다. 둘째, gradient signal을 중간 layer에 직접 제공해 깊은 네트워크 학습을 안정화한다.

 

Auxiliary Classifier 구조는 다음과 같다.

Average pooling 5×5 filter, stride 3
1×1 convolution 128 filters, ReLU
Fully connected 1024 units, ReLU
Dropout 70% dropout
Linear + Softmax 1000-class classification

4. 핵심 통찰 및 의의

이 논문의 가장 큰 의의는 깊이와 폭을 무작정 키우는 것이 아니라, 계산 자원을 어디에 어떻게 배분할 것인가가 중요하다는 점을 분명히 보여준 것이다. GoogLeNet은 AlexNet보다 훨씬 깊지만, 파라미터 수는 훨씬 적다. 이는 CNN 설계의 중심이 단순 scale-up에서 architecture efficiency(아키텍처 효율)로 이동하는 계기가 되었다.

 

두 번째 통찰은 1×1 convolution의 재해석이다. 1×1 convolution은 단순히 channel mixing을 위한 작은 convolution이 아니라, 큰 convolution 앞에서 channel 수를 줄이는 bottleneck 역할을 할 수 있다. 이 아이디어는 이후 ResNet bottleneck block, MobileNet 계열, EfficientNet 계열 등 다양한 architecture 설계에 큰 영향을 주었다.

 

세 번째 통찰은 multi-scale feature processing이다. Inception module은 서로 다른 kernel size를 병렬로 사용한다. 이는 CNN이 이미지의 다양한 scale 정보를 동시에 처리할 수 있도록 만든다. 작은 texture, 중간 크기 part, 큰 object-level pattern이 모두 중요할 수 있기 때문에, 여러 receptive field를 동시에 두는 것은 직관적으로도 타당하다.

 

네 번째 통찰은 sparse한 이상적 구조를 dense operation으로 근사한다는 점이다. 저자들은 이론적으로 sparse connectivity가 효율적일 수 있지만, 실제 하드웨어에서는 비정형 sparse 연산이 비효율적이라고 보았다. 그래서 여러 dense branch를 조합하는 방식으로 sparse 구조의 장점을 현실적인 연산 형태로 구현했다. 논문 결론에서도 이러한 dense building block 기반 sparse structure approximation이 컴퓨터 비전 네트워크 개선에 유효하다고 정리한다.  

 

마지막으로 GoogLeNet은 단순한 classification model을 넘어 detection backbone으로도 강력했다. R-CNN 계열 pipeline과 결합했을 때도 높은 성능을 보였고, bounding box regression 없이도 경쟁력 있는 결과를 냈다. 이는 backbone architecture의 표현력이 downstream task 성능에 얼마나 중요한지를 보여준다.


5. 한계점 및 향후 연구

첫 번째 한계는 구조 설계가 상당히 수작업에 의존한다는 점이다. Inception module 내부의 channel 수, reduction 비율, 3×3과 5×5 branch(Conv)의 비중 등은 모두 사람이 세밀하게 조정해야 했다. 논문도 이러한 knobs and levers가 계산 자원과 성능을 조절할 수 있게 해주지만, 당시에는 careful manual design이 필요하다고 언급한다.

 

두 번째 한계는 최종 classification 성능이 상당 부분 test-time augmentation과 ensemble에 의존한다는 점이다. 단일 모델, 단일 crop 기준 top-5 error는 10.07%였지만, 최종 제출 성능 6.67%는 7개 모델과 144 crop을 사용한 결과다. 따라서 실제 deployment 환경에서는 논문 제출 성능과 운영 성능 사이에 차이가 있을 수 있다.

 

세 번째 한계는 detection pipeline이 여전히 R-CNN류의 multi-stage 구조에 의존한다는 점이다. GoogLeNet 자체는 효율적인 backbone이지만, detection에서는 region proposal, crop, classification ensemble 등이 결합되어 전체 pipeline은 복잡하다. 이후 Faster R-CNN, YOLO, SSD처럼 end-to-end 또는 one-stage detection 구조가 발전하면서 이 한계는 다른 방향으로 해결되었다.

 

네 번째 한계는 이론적 동기와 실제 성능 향상 사이의 인과관계가 완전히 증명된 것은 아니라는 점이다. 논문도 Inception architecture가 성공적이었지만, 그 성공이 제안된 guiding principle 때문인지 확인하려면 더 철저한 분석이 필요하다고 말한다. 즉, Hebbian principle이나 sparse approximation 관점은 설계 동기로 중요하지만, 실험적으로 모든 선택이 이론에 의해 직접 검증된 것은 아니다.

 

향후 연구 방향으로는 자동 architecture search와 더 refined sparse structure 설계가 자연스럽게 이어진다. 실제로 이후 Inception v2/v3/v4, Xception, NASNet, EfficientNet 등은 이 문제의식을 이어받아 더 효율적인 CNN 구조를 탐색했다.


6. 결론

GoogLeNet 논문은 CNN 구조 설계에서 매우 중요한 메시지를 던진다. 성능을 높이기 위해 모델을 크게 만드는 것은 쉽지만, 현실적인 계산 예산 안에서 성능을 높이는 것은 훨씬 어려운 문제다. GoogLeNet은 이 문제에 대해 Inception module이라는 실용적인 해법을 제시했다.

 

Inception module은 여러 scale의 convolution과 pooling을 병렬로 적용하고, 1×1 convolution으로 계산량을 제어한다. 이 구조는 깊이와 폭을 동시에 확장하면서도 계산량과 파라미터 수를 억제할 수 있게 해준다. 그 결과 GoogLeNet은 ILSVRC 2014 classification과 detection에서 모두 1위를 달성했다.

 

이 논문의 영향력은 이후 CNN architecture 발전에 크게 남았다. 1×1 convolution을 통한 bottleneck 설계, multi-branch architecture, global average pooling, auxiliary classifier, efficiency-aware architecture design은 모두 이후 딥러닝 모델 설계의 중요한 구성 요소가 되었다.

References
논문 원문: Going Deeper with Convolutions
https://arxiv.org/abs/1409.4842