6 x 6 x 32 크기의 데이터가 있다고 해봅시다. 1 x 1 x 32 크기의 필터로 1 x 1 Convolution을 진행한다는 것은, 32개 채널의 (m, n) 값에 임의의 필터값 k를 곱해서 다 더한 다음 결과 행렬 (m, n)에 위치시킨다는 것을 의미합니다. 이때 필터의 개수가 몇 개냐에 따라 결과 행렬의 채널의 수가 달라지겠지요.
이렇게 1 x 1 Convolution을 통해 채널의 수를 임의로 조절할 수 있다는 장점이 있습니다.
28 x 28 x 192 크기의 데이터를 32개의 5 x 5 필터로 컨볼루션 연산을 수행하면 28 x 28 x 32 x 5 x 5 x 192 = 약 1.2억번의 연산이 필요합니다. 그런데 1 x 1 필터 16개로 채널을 16개로 줄이는 과정을 선행하면, 연산의 수를 28 x 28 x 32 x 5 x 5 x 16 = 약 1천만번으로 줄일 수 있습니다.
CNN을 구현할 때 필터의 크기를 1 x 1으로 할지, 3 x 3으로 할지, 5 x 5으로 할지 고민될 수 있습니다. Inception Network에서는 고민하지 말고 다 사용하라고 이야기합니다.
28 x 28 x 192 크기의 데이터가 있다고 합시다. 64개의 1 x 1 필터로 컨볼루션하면 28 x 28 x 64 의 결과가 생성됩니다. 128개의 3 x 3 필터로 동일합성곱(Same Convolution)을 하면 28 x 28 x 128 의 결과가 생성되는데, 이를 1x1 합성곱 결과 앞에 쌓습니다(stack). 또 그 앞에는 32개의 5 x 5 합성곱 결과를 쌓고, 마지막에는 MAX pool 동일 합성곱(stride = 1)의 결과를 쌓습니다.
그렇게 하면 채널의 수는 64 + 128 + 32 + 32 = 256이 되고, 결과적으로 32x32x256의 결과를 반환하게 됩니다.
이러한 Inception Network의 문제는 바로 연산량입니다.
28 x 28 x 192 데이터를 32개의 5 x 5 필터로 동일 합성곱하면, 28 x 28 x 32 x 5 x 5 x 192 = 120m(1.2억)의 연산횟수가 요구됩니다.
이러한 연산량을 극복할 수 있는 방법이 바로 1 x 1 Convolution입니다. 만약 28 x 28 x 192 데이터에 16개의 1 x 1 필터로 합성곱하는 전처리를 선행하면, 전처리에 28 x 28 x 16 x 192 = 2.4m 의 연산량이 필요하게 됩니다. 이 결과에 원래 32개의 5 x 5 필터로 합성곱을 하면, 28 x 28 x 32 x 5 x 5 x 16 = 10m의 연산량이 필요합니다. 즉 1x1 합성곱을 하지 않으면 120m의 연산량이 필요하던 것이 12.4m으로 줄어든 것입니다.
이때 1 x 1 합성곱한 결과를 Bottleneck Layer라고 이야기하기도 합니다.
GoogLeNet은 매우 깊은 신경망입니다. 매우 깊지만, Inception Module이라고 불리는 모듈의 연속으로 쌓아져 있습니다. Inception Module은 입력값에 대해 4가지 종류의 Convolution(pool)을 수행하고, 4개의 결과를 채널 방향으로 쌓습니다. 이러한 인셉션 모듈이 GoogLeNet에 총 9개가 있습니다.
4가지 종류의 Convolution은 다음과 같습니다.
1) 1x1 CONV
2) 1x1 CONV + 3x3 CONV
3) 1x1 CONV + 5x5 CONV
4) 3x3 MAXPOOL + 1x1 CONV
그리고 이 결과를 Channelwise로 합쳐줍니다(concatenate). 하나도 아니고 여러 종류의 필터에 대해서 합성곱 연산을 수행하므로 많은 Computational Resource를 사용하게 됩니다. 이러한 연산량을 극복하기 위해서 3x3, 5x5 합성곱 전과 3x3 맥스풀 이후에 1x1 합성곱을 적용해주는 것입니다.

이러한 인셉션 모듈이 9번 중첩된 구글넷 모델을 보면 중간에 개의 Auxiliary Classifier(사진의 노란색 부분)가 존재한다는 것을 확인할 수 있습니다. 이는 Softmax로 클래스 분류를 위한 것입니다. 신경망이 깊기 때문에 역전파가 모든 레이어로 잘 흘러가지 않을 수 있다고 판단하여 신경망 중간에 예측 결과를 출력한 것입니다. 이 결과는 0.3의 가중치가 곱해져서 최정 Error 값에 더해진다고 합니다.