CNN based Models : Inception 모델에 대한 정리

Inception 개요

  • Inception model은 GoogLeNet이라고도 많이 알려져 있는 모델로서, 2014 ILSVRC14 에서 sota를 기록함

  • VGG의 계산 비효율성을 개선하고자 고안되었으며,  다양한 커널 크기와 병목 구조(bottleneck)를 적극 활용한 Inception module을 통해 파라미터 수를 절감할 수 있었다. 마지막 FC층도 Global Average Pooling으로 대체하여 모델 크기를 대폭 줄였다.

  • 네트워크 사이에서 컴퓨팅리소스의 활용을 증가시킴. Computing budget(컴퓨팅 예산)을 유지하면서도 네트워크의 깊이와 폭을 증가시키는 것을 통해 이를 가능하게 만들었다.

  • Inception v1, Inception v2, Inception v3, Inception v4, Inception-ResNet 등 다양한 개선에 따라 다양한 버전이 존재함.

  • Paper

Motivation

  • 딥 뉴럴 네트워크는 깊고 넓은 네트워크가 성능에 더 좋다라는 관점이 있었으나, 그것에 대한 단점으로 Overfitting, Vanishing Gradient Problem을 비롯하여 학습해야하는 파라미터의 수가 늘어나 총 학습시간, 연산속도 증가 등의 문제점이 발생함
  • 깊이(레이어 수)를 늘리는 것이 모델을 더 크게 만드는 유일한 방법은 아니다 계산을 일정한 수준으로 유지하면서 네트워크의 깊이와 너비를 모두 늘릴 수 있다
  • 1 x 1 컨볼루션을 이용해 채널의 수를 줄였다가 다시 늘리는 방법으로 파라미터의 수를 줄일 수 있다
  • matrix 연산을 dense하게 하여 연산을 효율적으로 할 수 있다
  • CNN 계열에서 가장 많은 연산이 필요한 것은 convolution filter(kernel)을 stride 만큼 옮겨가면서 feature와의 convolution 연산을 하는 것인데 이런 matrix 연산을 할 때, GPU의 성능을 최대화 하려면 matrix 자체가 dense 해야 한다는 것이다 (즉, matrix에 0이 많지 않고 유효한 숫자가 많아야 한다는 뜻)
  • overfitting이 덜 되는 general한 구조를 만들기 위해서는 sparse한 convolution을 도입하는 방법을 사용
  • matrix 자체는 dense하게 만들되 네트워크 자체는 sparse 하도록 만드는 것을 고민하였다

1 x 1 Convolution

Xception, Squeeze, Mobile 등 다양한 모델에서도 연산량 감소를 위해 1x1 Convolution을 적극적으로 채택하고 있다. 뿐만 아니라 Semantic Segmentation 연구에서도 채널(Channel) 또는 공간적(Spatial) 특성 파악을 위해 1x1 Convolution 방법 사용이 유의미하다는 것을 증명한 바 있다.

  1. 채널 수 조정 가능
    • 필터의 개수를 조정하여 출력 채널의 수를 늘리거나 줄일 수 있음
  2. 계산량 감소
    • (아래 그림에서 파라미터의 숫자로 표현된 것은 결과값을 크기를 의미함) +full
    • 위 그림처럼 Channel 수 조절은 계산량 감소에 직접적으로 영향을 주게 되어 네트워크를 구성할 때 좀 더 깊게 구성할 수 있도록 도움을 준다. 여기서 Channel 수를 줄였다가 다시 늘이는 부분을 Bottleneck 구조라고 표현하기도 한다.
  3. 비선형성 증가
    • 1x1 Conv 사용 후, 활성화 함수로 ReLU를 사용하여 모델에 비선형성을 증가시켜준다 (레이어가 깊어지기 때문) +full +full

Inception V1

Inception Module

+full

  • 기본 Inception module의 컨셉으로, feature를 효율적으로 추출하기 위해 1x1, 3x3, 5x5의 Convolution 연산을 각각 병렬로 수행한다. 3x3의 Max pooling 또한 수행하는데, 입력과 출력의 H, W가 같아야하므로 Pooling 연산에서 적절히 Padding을 추가해준다.
  • 이미지에서 local끼리는 correlation이 크니까 1x1 filter을 이용하자
  • 멀리 떨어진 correlation 있는 것들의 cluster를 3x3, 5x5 filter으로 나타내자
  • 3x3 max pooling은 이 당시에 이게 너무 잘되었어서 이것도 넣어보자 (convolution filter의 경우 이미지 내의 detail한 특성을 잡아낼 수 있고 MaxPooling 같은 경우 invariant한 특성을 잡아낼 수 있기 때문에)
  • 하지만 최종 출력층은 채널이 늘어날 수 밖에 없고, 각 컨볼루션 연산량이 너무 많아 비효율 적이다

+full

  • naive 버전의 Inception module 에서 1x1 convolution을 적용하여 채널의 수를 줄여 파라미터 수를 더 줄이는 방향으로 설계함
  • 연산량이 많은 3x3 및 5x5 convolution 전에 1x1 convolution을 적용하여 차원을 축소함
  • 맨 오른쪽의 maxpooling은 채널 수를 조절할 수 있는 방법이 없어서 이후에 1x1 convolution을 적용함

Model 전체 구조

+full

  • Inception module을 사용해 전체 모델을 구성하여 완성시킨 것이 Inception v1 (GoogLeNet)

  • 당시 유명했던 AlexNet의 1/12배 파라미터를 사용하여 더 적은 연산으로 나은 성능을 보임(VGGNet은 Alexnet의 3배)

  • 9개의 Inception module을 포함하고, 22개 레이어의 깊이를 가짐(풀링 레이어를 포함하여 27개)

  • auxiliary(보조의) classifier를 원활한 학습을 위해 추가함

  • 네트워크의 얕은 부분, 즉 입력과 가까운 부분에는 Inception 모듈을 사용하지 않았다. 논문에 따르면 이 부분에는 Inception의 효과가 없었다고 한다.

Auxiliary Loss

+full

  • 네트워크가 너무 깊다보니 ReLU를 사용했음에도 Gradient가 효과적으로 역전파되지않는 문제가 있음(vanishing gradient)
  • 이러한 문제를 해결하기 위해 중간에 Loss를 계산할 수 있는 layer를 추가적으로 만들어서 최종 loss에 반영하게함
  • 최종 output에 의해 계산된 loss가 더 중요하므로 가중치를 더 줘야 하는 것이 합당하므로, auxiliary loss에는 0.3의 가중치만큼 계산에 사용함
  • 여기서 사용된 auxiliary loss는 training 할 때에만 사용되고 inference할 때에는 사용되지 않으며 당연히 최종 출력은 하나만 나와야 하니 가장 중요한 최종 output을 사용함

Inception V2, V3

  • Inception v2Inception v3는 같은 논문에서 발표되었으며, 저자는 정확도를 높이고 계산 복잡성을 줄이는 여러 가지 업그레이드를 제안함
  • 일반적으로 Inception v1은 좋은 결과를 얻었지만 구조의 복잡성으로 인해 개선하기가 어렵다. 따라서 Inception v1을 최적화하기 위해 몇 가지 방법을 제공함

1. Decompose to a smaller convolution

  • 더 작은 컨볼루션으로 분해
  • VGG 모델의 핵심이었던 3x3 Factoring Convolution을 기존 Inception v1에 적용하여 파라미터 수와 연산량을 줄임
  • 아래는 원본 Inception 모델과의 비교

2. Decompose into asymmetric convolution

  • 비대칭 컨볼루션으로 분해
  • 일반적으로 n x n 의 형태로 Conv 를 수행하게 되는데, 이를 1xn과 nx1 과 같이 비대칭 모양의 Convolution으로 분해 할 수 있다 (Factorization)
  • 아래 그림 예시와 같이 3x3 convolution 필터를 적용해서 1x1 output feature를 만드는 데에 9개의 파라미터를 사용할 수도 있지만 3x1 convolution 필터와 1x3 convolution 필터를 이용하면 6개의 파라미터를 사용하여 동일한 출력을 만들어 낼 수 있음


  • Representational bottleneck을 제거하기 위해 모듈의 필터 뱅크를 확장(깊이 보단 넓게)
  • 아래 그림처럼 Filter back size를 확장하여 grid size가 가장 작아졌을 때를 사용함

Representational Bottleneck

CNN에서 주로 사용하는 Pooling으로 인해 Feature map의 크기가 줄어들면서 정보량이 줄어드는 현상

3. Use auxiliary classifiers

  • Traing 과정에서 Auxiliary Classifiers 를 도입하여 Gradient Vanishing 문제를 해결하려함
  • Inception v2에서 기존 2개 중 초반의 Auxiliary Classifiers는 성능에 영향이 없다고 판단하여 제거함

4. Efficient Grid Size Reduction

  • Feature Map의 크기를 효율적으로 줄이는 방법
  • 일반적으로 CNN에서는 Feature map의 크기를 줄이기 위해 pooling을 사용하지만 pooling은 연산량을 줄이는 대신 신경망의 representation 또한 감소시킨다는 문제가 있음

  • 이 문제를 해결하기 위해 convolution과 pooling의 순서를 바꾼다면 위 그림의 왼쪽과 같이 연산량은 줄어들지만 Representation이 낮아지고 Representational Bottleneck을 야기하함. 반대로 오른쪽은 연산량이 3배나 많다.
  • 따라서 논문에서는 Representational Bottleneck도 피하고 연산량도 줄일 수 있는 구조를 제안함

  • 위 그림과 같이 stride가 2인 pooling layer와 covolution layer를 병렬로 사용해 concatenate 하는 구조로 representation을 감소시키지 않고 25%만큼 연산량을 줄일 수 있다고함

5. Batch Normalization

  • 배치 정규화(BN)는 Inception V2/BN-Inception에서 도입되어 초기 파라미터에 대한 기울기의 의존성을 줄이는 등 local minima에 빠질 수 있는 가능성을 낮춤
  • ReLU는 Vanishing gradient / Exploding gradient 해결하기 위한 활성화 함수로 사용되지만 그것은 또한 출력을 더 불규칙하게 만든다  네트워크가 깊어지면 작은 변화가 증폭되기 때문에 시간이 지남에 따라 X의 분포가 고정된 상태로 유지되는 것이 유리함
  • BN은 학습의 안정성을 위하여 각각의 학습 데이터 batch의 평균과 분산을 구하여 normalization을 하고 학습을 통하여 normalization 한 결과에 곱할 scale과 더할 shift 값을 구함
  • BN은 Convolution filter를 적용하고 Activation을 적용하기 이전 그 사이에 사용 (convolution-BN-ReLU 순서)
  • 입력 에 가중치 를 곱하고 바이어스 를 더한 다음, 활성화 함수 를 거치면 출력 가 된다
    • BN을 적용하면,

Inception V2

위와 같은 주요 방법들을 결합하여 Inception V2 를 제안함

+full

Inception V3

  • Inception V2 의 대부분 기능들과 함께 아래의 방법들을 추가함
    • RMSProp 최적화 방법
    • 7x7 Factoring Convolution
    • auxiliary classifiers 의 BN
    • Label Smoothing

RMSProp

  • RMSProp는 많이 변화한 변수는 최적값에 근접했을 것이라는 가정을 하며, 업데이트 횟수에 따라 학습률을 조절하는 Adagrad에 지수 가중 이동 평균의 컨셉을 사용하여 최신 기울기들이 더 크게 반영되도록 한 것

7x7 Factoring Convolution

Label Smoothing

  • Hard label(One-hot encoded vector로 정답 인덱스는 1, 나머지는 0으로 구성)을 Soft label(라벨이 0과 1 사이의 값으로 구성)로 스무딩하는 것을 의미. 즉, 레이블을 부드럽게 깎아서 일반화 성능을 높이고자 하는 것이다.
  • 기존 Hard label 인덱스는 가장 큰 로짓과 다른 모든 로짓 간의 차이가 커지도록 조장하여 모델의 적응 능력을 감소시키며 과적합의 원인이될 수 있다.
  • 값이 0 인 레이블에 대해서도 아주 작은 값 e를 배분
  • K개의 클래스에 대해서, 스무딩 파라미터(Smoothing parameter)를 α라고 할 때, k번째 클래스에 대해서 다음과 같이 스무딩을 한다.
    • new_labels = (1 — ε) * one_hot_labels + ε / K (ε = 0.1, 하이퍼파라미터)

+full

Inception V2, V3 결과

  • 위에 보이는 표는 Inception-v2에서 한 칸 내려갈 수록 추가되는 기법만 명시하고 이전의 기법들은 기본적으로 사용하고있다. 성능이 제일 좋은(제일 아래에 있는) Inception-v2 BN-auxiliary는 RMSProp + Label Smoothing Factorized 7 x 7 + BN-auxiliary을 다 사용한 것이고 이 모델을 Inception v3라고 부른다.

Inception V4

  • 기존의 Inception 모델들은 뛰어난 성능을 인정받았지만 모델의 구조가 너무 복잡하다는 평가를 받았다. 때문에 더 좋은 성적을 보였던 Inception 계열의 모델 보다 VGGNet이 더 흔하게 사용되었다.

+full

요약

  • 논문에서는 Inception-ResNet-v1, Inception-ResNet-v2, Inception-v4 3가지 아키텍처 네트워크를 제안함
  • Residual Connection을 사용한 Hybrid Inception version 2가지와, 이것을 사용하지 않고 비슷한 성능을 낸 Inception-v4를 소개하며 자신들의 연구인 Inception에 대한 pride와 최신 연구인 ResNet과의 결합을 훌륭히 이루어냄

참고