반응형

towardsdatascience.com의 기사를 정리함.

A Simple Guide to the Versions of the Inception Network

    인셉션(Inception) 네트워크는 CNN 분류기 개발에서 중요한 단계이다. 인셉션 이전에는 대부분의 유명한 CNN은 단지 더 나은 성능을 바라면서 합성곱 레이어를 계속 깊게 쌓는 것 뿐이었다.

    인셉션 네트워크는 다른 한편으로 복잡하다.(굉장히 공학적이다.). 인셉션은 성능을 올리기 위한 많은 기술(trick)을 사용한다. (속도와 정확도 모두에서). 이것의 끊임없는 진화는 네트워크의 몇가지 버전을 탄생시켰다. 유명한 버전은 아래와 같다.

    각 버전은 이전 버전을 반복적으로 개선한 것이다. 개선을 이해하는 것은 속도와 정확도 모두에서 최적화된 커스텀 분류기를 만들 수 있게 한다. 또한 데이터에 따라서 더 낮은 버전이 더 좋은 성능을 보일 수도 있다.

    이 글은 인셉션 네트워크의 진화를 설명한다.


Inception V1

 모든 인셉션의 출발점으로 이것이 풀었다고 알려진 문제를 분석하고 어떻게 풀었는지 보자. [논문]

The Premise(전제)

  • 이미지에서 가장 중요한 부분은 크기에서 극단적으로 큰 편차를 갖을 수 있다는 것이다. 예를 들면, 강아지 이미지는 아래 이미지중 하나일 수 있다. 강아지가 포함되는 영역은 각 이미지마다 다르다.



    From left: A dog occupying most of the image, a dog occupying a part of it, and a dog occupying very little space (Images obtained from Unsplash).

  • 정보 위치의 커다란 편차 때문에, 합성곱 연산을 위한 올바른 커널 크기를 고르는 것이 애매해진다. 더 큰 커널은 더 전역적으로 분포된 정보를 선호하고 더 작은 커널은 더 지역적으로 분포된 정보를 선호한다.

  • 매우 깊은 네트워크는 오버피팅되기 싶다. 또한 전체 네트워크에 걸쳐 기울기 업데이트(gradient update)를 전달하기 어렵다.

  • 대규모 합성곱 연산을 naive하게 쌓는 것은 비싸다.

    Greedy algorithm : 그 순간에 최적이라고 판된되는 것을 선택해 나가는 방식

    Naive algorithm : 전체를 스캔하여 최적을 찾음.

The Solution:

    동일 레벨에서 동작하는 여러 크기를 갖는 필터는 왜 안될까? 네트워크는 근본적으로 더 깊은 것보다 약간 더 넓다. 저자는 이를 반영하기 위해 인셉션 모듈을 설계했다.

    아래 이미지는 naive인셉션 모듈이다. 이것은 입력에서 3가지 다른 크기의 필터(1 X 1, 3 x 3, 5 X 5)로 합성곱을 수행한다. 게다가 max-pooling 또한 수행한다. 출력을 이어 붙여서 다음 인셉션 모듈로 보낸다.



The naive inception module. (Source: Inception v1)

    전에 언급한 것처럼, 심층 신경망은 (계산적으로) 비싸다. 이를 줄이기 위해서, 저자는 3 X 3 과 5 X 5 합성곱 전에 추가적인 1 X 1 합성곱을 추가하여 입력 채널의 수를 제한했다. 비록 추가적인 연산으로 직관적이지 않게 보일지라도, 1 X 1 합성곱은 5 X 5 합성곱 보다 훨씬 저렴하고 감소된 입력 채널의 수 또한 도움이 된다. 하지만, 1 X 1 합성곱이 map-pooling 이전보다 이후에 도입되었다는 것은 기억하자.



Inception module with dimension reduction. (Source: Inception v1)

    차원이 축소된 인셉션 모듈을 사용하여 신경망 구조가 만들어졌다. 이는 GoogLent으로 유명해 졌다.(Inception V1). GoogLeNet의 구조는 아래와 같다.



GoogLeNet. The orange box is the stem, which has some preliminary convolutions. The purple boxes are auxiliary classifiers. The wide parts are the inception modules. (Source: Inception v1)

    GoogLeNet은 이러한 선형으로 쌓여진 인셉션 모듈을 9개 갖는다. 이는 22레이어 깊이이다. (Pooling 레이어를 포함하면 27레이어이다.) 마지막 인셉션 모듈의 끝에서는 global average pooling을 사용한다.

    말할 필요도 없이, 이는 꽤 깊은 분류기이다. 매우 깊은 네트워크를 갖는 다른 것들과 마찬가지로 vanishing gradient problem의 대상이다.

    네트워크의 중간 부분이 절멸(dying out)되는 것을 방지하기 위해, 저자는 두개의 보조 분류기(auxiliary classifier - 위 그림에서 보라색 박스)을 도입했다. 보조 분류기는 기본적으로 인셉션 모듈 두개의 출력에 softmax를 적용하고 동일 레이블에 대해 보조적인 손실(auxiliary loss)를 계산했다. 총 손실 함수(total loss function)은 보조적인 손실과 실제 손실의 가중치가 적용된 합계이다. 가중치 값은 논문에서 각각의 보조적인 손실에 대해 0.3인 값을 사용했다.


# The total loss used by the inception net during training.
total_loss = real_loss + 0.3 * aux_loss_1 + 0.3 * aux_loss_2

    당연히, 보조적인 손실은 순수하게 훈련 목적으로 사용되고 추론에서는 무시된다.


Inception V2

    인셉션 V2와 V3는 동일 논문에 게제되었다. 저자는 계산 복잡도가 줄고 정확도가 증가된 몇가지 향상된 방안을 제시했다. 인셉션 V2를 아래 항목처럼 살펴보자.

The Premise:

  • 표현적 병목현상 감소. 신경망은 합성곱이 철저하게 신경망을 바꾸지 못했을 때 더 잘 동작한다. 너무 많이 차원을 감소시키는 것은 표현적 병목현상(representational bottleneck)으로 알려진 정보의 손실을 유발할 수 있다.
  • 스마트 인수분해 방법(smart factorization method) 사용. 합성곱은 계산 복잡도면에서 더 효율적으로 만들어 질 수 있다.

The Solutions:

  • 계산 속도 개선을 위해 5 X 5 합성곱을 두개의 3 X 3 합성곱 연산으로 인수분해(factorize). 비록 이 방법이 직관적이지 않아도 5 X 5 합성곱은 3 X 3 합성곱보다 2.78배 더 비싸다. 따라서 두개의 3 X 3 합성곱을 쌓는 것은 성능 향상으로 이어진다. 아래 그림은 인셉션 V1에서 5 X 5 합성곱 레이어가 두개의 3 X 3 합성곱 레이어로 대체된 것을 보여준다.



The left-most 5x5 convolution of the old inception module, is now represented as two 3x3 convolutions. (Source: Incpetion v2)

  • 게다가, n X n 크기의 필터 합성곱을 1 X n 과 n X 1 합성곱 조합으로 인수분해한다. 예를 들면, 3 X 3 합성곱은 처음 1 X 3 합성곱을 수행하고 이 출력에 3 X 1 합성곱을 수행한 것과 같다. 이 방법은 하나의 3 X 3 합성곱보다 33% 더 저렴해진다. 아래 그림은 이를 나타낸다.



Here, put n=3 to obtain the equivalent of the previous image. The left-most 5x5 convolution can be represented as two 3x3 convolutions, which inturn are represented as 1x3 and 3x1 in series. (Source: Incpetion v2)

  • 모듈내 필터 뱅크(filter banks)는 표현적 병목현상을 제거하기 위해 확장되었다.(더 깊어지는 것 대신 더 넓게 만들었다.) 만약 모듈을 더 깊게 만들면, 차원의 지나친 감소가 발생하고 따라서 정보의 손실이 발생한다. 아래 그림은 위의 인셉션 모듈을 더 넢게 만든 것을 나타낸다.



Making the inception module wider. This type is equivalent to the module shown above. (Source: Incpetion v2)

  • 위 3개의 이론은 각기 다른 3가지 인셉션 모듈로 만들어 졌다.(각각의 모듈을 소개한 순서대로 A, B, C 라고 하자. - 아래 표에서는 순서대로 figure 5, figure 6, figure 7로 나타난다.) 각각의 구조(architecture)는 아래와 같다.



Here, “figure 5” is module A, “figure 6” is module B and “figure 7” is module C. (Source: Incpetion v2)


Inception V3

The Premise:

  • 저자는 정확도가 포화에 가까울 때, 보조 분류기(auxiliary classifier)가 훈련 과정이 끝날때 까지 크게 기여하지 못한다는 것에 주목했다. 그들은 특히 BathNorm 또는 Dropout 연산이 있으면 정규화로써 기능을 수행한다고 주장했다.
  • 모듈을 크게 바꾸지 않고 인셉션 V2를 개선하기 위한 가능성은 조사되어야 한다.

The Solution

  • Inception Net V3는 인셉션 V2에 대해 업급된 위의 개선부분 모두를 포함하고 추가로 아래의 기술도 사용한다.
    1. RMSProp Optimizer
    2. 인수분해된 7 X 7 합성곱
    3. 보조 분류기내 BatchNorm
    4. Label Smoothing (오버피팅을 방지하기 위해 손실 수식에 추가된 컴포넌트를 정규화하는 한 형태)

Inception V4

    인셉션 V4와 Inception-ResNet은 동일 논문에서 소개되었다. 여기서는 각각 별도로 설명한다.

The Premise

  • 모듈을 더 통일하여 만듦. 저자는 또한 몇몇 모듈이 필요보다 더 복잡해졌다는 것을 알았다. 이는 이러한 동일된 모듈의 추가로 성능을 향상시킬 수 있게 한다.

The Solution

  • 인셉션 V4의 스탬(stem)은 수정되었다. 여기서 스탬은 인셉션 블록(block)을 도입하기 전에 수행되는 초기 연산 셋을 나타낸다.



The top image is the stem of Inception-ResNet v1. The bottom image is the stem of Inception v4 and Inception-ResNet v2. (Source: Inception v4)

  • 인셉션 V4는 A, B, C로 이름지어진 주요 인셉션 모듈이 3개 있다.(인셉션 V2와는 다르게, 이 모듈은 실제로 A, B, C로 이름지어졌다.). 인셉션 V4는 인셉션 V2 (또는 V3)와 유사하다.



(From left) Inception modules A,B,C used in Inception v4. Note how similar they are to the Inception v2 (or v3) modules. (Source: Inception v4)

  • 인셉션 V4는 특수한 감소 블록(Reduction Blocks)를 도입했다. 이는 그리드의 너비와 높이를 바꾸기 위해 사용된다. 이전버전은 명시적인 감소블록을 갖지 않았지만, 기능적으로 구현되었다.



(From Left) Reduction Block A (35x35 to 17x17 size reduction) and Reduction Block B (17x17 to 8x8 size reduction). Refer to the paper for the exact hyper-parameter setting (V,l,k). (Source: Inception v4)


Inception-ResNet V1 and V2

    ResNet의 성능에 의한 영감으로 하이브리드 인셉션 모듈이 제안되었다. 인셉션 레스넷(Inception ResNet)은 v1, v2로 이름 지어진 두개의 하위 버전이 있다. 두 하위 버전간 차이는 이래와 같다.

  • V1은 인셉션 V3와 비슷한 계산 비용을 갖는다.
  • V2는 인셉션 V4와 비슷한 계산 비용을 갖는다.
  • V1과 V2는 인셉션 V4의 그림에서와 같이 다른 스탬을 갖는다.
  • 두 하위버전 모두 모듈 A, B, C와 감소 블록에 대해 동일한 구조를 갖는다. 유일한 차이점은 하이퍼파라미터 설정이다. 여기서는 구조에만 집중한다. 정확한 하이퍼파라미터 설정은 논문을 참고하자.(이미지는 V1의 것이다.)

The Premise

  • 입력에 인셉션 모듈의 합성곱 출력을 더하는 잔차 연결(residual connection) 도입

The Solution

  • 잔차 합산(residual addition)이 동작하기 위해, 입력과 합성곱 이후 출력은 반드시 동일 차원이어야 한다. 따라서, 원래 깊이를 맞추기 위해 원래 합성곱 이후 1 X 1 합성곱을 사용한다.



(From left) Inception modules A,B,C in an Inception ResNet. Note how the pooling layer was replaced by the residual connection, and also the additional 1x1 convolution before addition. (Source: Inception v4)

  • 메인 인셉션 모듈내 풀링 연산은 잔차연결로 교체되었으나, 잔차 블록에 여전히 이 연산이 남아 있다. 감소 블록 A는 인셉션 V4의 것과 동일하다.



(From Left) Reduction Block A (35x35 to 17x17 size reduction) and Reduction Block B (17x17 to 8x8 size reduction). Refer to the paper for the exact hyper-parameter setting (V,l,k). (Source: Inception v4)

  • 만약 필터의 수가 1000개를 초과하면 구조(architecture)에서 더 깊은 잔차 유닛을 가진 네트워크가 네트워크를 죽였다. 따라서 안성정을 증가시키기 위해, 저자는 0.1에서 0.3 정도의 값으로 잔차 활성화(residual activation)을 조절했다.



Activations are scaled by a constant to prevent the network from dying. (Source: Inception v4)

  • 원래 논문에서는 단일 GPU상에서 모델을 훈련하기 위한 합산(summation)이후 BatchNorm을 사용하지 않았다.(단일 GPU상에서 전체 모델을 맞추기 위해서)
  • 인셉션-레스넷 모델이 너 적은 에폭(epoch)에서 더 높은 정확도를 달성할 수 있음을 발견했다.
  • 인셉션 V4와 인셉션-레스넷 양쪽에 대한 최종 네트워크 레이어는 아래와 같다.



The top image is the layout of Inception v4. The bottom image is the layout of Inception-ResNet. (Source: Inception v4)

반응형

+ Recent posts