GoogLeNet 논문보기

아키텍처? 학습방식? 성능개선전략?
구글넷 목적: 층을 늘려서 다양성을 증가시킨다. 층을 늘리는 것은 기울기 소실문제를 가져온다.(보조 head사용) 층을 늘리면 파라미터가 늘어난다. (인셉션_sparse구조, 1x1 conv)

구글넷 성능 개선 전략

모델 아키텍쳐

  • 인셉션:
    • sparse 구조(파라미터 수 줄임)
    • 다양성 증가
  • 1 x 1 conv:
    • 리덕션(파라미터 수 줄임)
    • 비선형성 1층 추가
  • Average pooling
    • 다른 데이터셋 adapting, fine tuning 용이성
    • 파라미터 수 줄임
  • Aux classifier (보조 head)
    • 기울기 소실 문제 완화

오버핏 해소 전략

  1. Augmentation(증강) - 데이터 수 높인다. Random crop, RGB shift
  2. Drop-out - 동일 모델로, 실제 학습에 참여한 파라미터의 조합이 바뀐다.

디테일 파라미터 3가지

  1. 모멘텀 - 0.9
  2. Weight decay
  3. 초기화: 정규분포 - std:0.01
  4. Learning rate 스케줄: reduce LR on pleatu - 0.4

추가전략 2가지

  1. 앙상블: 7개의 버전, 데이터셋을 바꾼다.
  2. 미세조정(Fine-tuning)

Abstract

  • Inception: 새로운 깊은 CNN
  • 컴퓨팅 자원 효율적인 활용: 크래프트 아키텍처 디자인
  • 아키텍처 디자인: 깊이(22층)와 너비를 늘리면서, 연산량은 유지했다.

insight

22층, 크래프트 디자인? (깊이와 너비가 늘어났지만, 연산량은 유지 -> 파라미터 수는 절감?)

알렉스넷과 비교해보자. (알렉스넷은 8층인데, 6천만개의 파라미터를 갖고 있다.)


Introduction

  • architecture of Krizhevsky(알렉스넷) 보다 12배 적게 쓴다. (5백만개의 파라미터 사용)

  • 모델 안에 작은 모델을 넣는다. (밈 we need to go deeper, 영화이름 Inception 꿈 속의 꿈)


Related Work

R-CNN(2stage)를 사용한다. ROI를 구하고, 해당 영역을 crop해서 CNN으로 추론한다.


Motivation and High Level Considerations

increasing their size(depth, width)시 단점.

  • 사이즈가 커지면, 파라미터(모델복잡도)가 커지는 단점으로 오버핏 발생. 훈련데이터가 제한적인 경우(좋은 훈련데이터는 구하기 어렵다.), 훈련데이터를 늘릴 수 없다. 그러면, 사이즈는 커지면서, 파라미터를 안 늘리는 방법은?

  • 컴퓨터 자원이 증가된다.

  • 사이즈는 커지면서, 파라미터를 안 늘리는 방법
    • fully connected 를 sparsely connected 구조로 변경:
      • 1. fc: fc 줄이기
      • 2. conv: sparsely한 conv (inception)


Architectural Details

5 x 5 convolutions 는 파라미터 수가 더 많다. ( 파라미터 = w x h x c x n )

Convolutiond은 필터 갯수를 늘려서, 다양한 피처맵을 만드는 것이 목적이다.

이때, 필터의 사이즈는 동일해야 할까? 사이즈가 다양하면 좋지 않을까?


naive version

input: 32 x 32 x 3

filter1: conv 1x1, N=24

filter2: conv 3x3, N=48

filter3: conv 5x5, N=16

filter4: pooling 3x3, stride=1, same-padding


dimension reductions (sparsely한 conv)

1x1은 뭘까? 단순, R + G + B 다. 피처맵에 적용하면, 채널을 줄이는(합치는) 역할을 한다. 

1 x 1 convolutions의 이점

  • 파라미터 수가 줄어듬
  • rectified linear activation (ReLU, 비선형 함수 추가), 층이 늘어남. 
input: 28x28x192
filter1: 1x1x192, 96 > 28x28x96
filter2: 1x1x192, 16 > 28x28x16
filter3: ...
filter4: ...


GoogLeNet

22층 분석하기. pool으로 나눠서 보자
  • 224 x 224 x 3
  • 1단락:
    • conv: 7 x 7, n=64, stride=2
    • pool: 3 x 3, stride=2, padding=1(실제: 0.5 영향)
  • 56 x 56 x 64
  • 2단락:
    • reduce: 1 x 1, n=64, valid-padding
    • conv: 3 x 3, n=192
    • pool: 3 x 3, stride=2
  • 28 x 28 x 192
  • 3단락:
    • 3a
      • reduce, pool:
        • 0
        • 1 x 1, n=96
        • 1 x 1, n=16
        • p: 3 x 3
      • conv, reduce: 
        • 1 x 1, n=64
        • 3 x 3, n=128
        • 5 x 5, n=32
        • r: 1 x 1, n=32
    • 3b
      • reduce:
        • 0
        • 1 x 1, n=128
        • 1 x 1, n=32
        • p: 3 x 3
      • conv, pool: 
        • 1 x 1, n=128
        • 3 x 3, n=192
        • 5 x 5, n=96
        • r: 1 x 1, n=64
    • pool: 3 x 3, stride=2
  • 14 x 14 x 480
  • 4단락:
  • 5단락:
  • 7 x 7 x 1024
  • 6단락:
    • avg pool: 7 x 7, stride=1, 원래는 in_feature을 조절하기 위함.
    • avg pool을 사용하지 않았다면, parameter = 7 x 7 x 1024.
    • avg pool을 사용하면서, parameter = 1 x 1 x 1024. 


1. avg pool: parameter수를 줄이기 위해서 한 건데, 정확도가 0.6% 미세하게 올라감.

2. head가 3개: 

  • Main head
  • Aux head 1, Aux head 2: 학습용임. (추론할 때 사용 안함)
    • 층이 많아지면, 기울기 소실 문제가 발생함. (역전파 과정에서 weight 업데이트가 제대로 되지 않음.)
    • W - @*(G + 0.3*g1 + 0.3*g2)


댓글 쓰기

다음 이전