아키텍처? 학습방식? 성능개선전략?
구글넷 목적: 층을 늘려서 다양성을 증가시킨다. 층을 늘리는 것은 기울기 소실문제를 가져온다.(보조 head사용) 층을 늘리면 파라미터가 늘어난다. (인셉션_sparse구조, 1x1 conv)
구글넷 성능 개선 전략
모델 아키텍쳐
- 인셉션:
- sparse 구조(파라미터 수 줄임)
- 다양성 증가
- 1 x 1 conv:
- 리덕션(파라미터 수 줄임)
- 비선형성 1층 추가
- Average pooling
- 다른 데이터셋 adapting, fine tuning 용이성
- 파라미터 수 줄임
- Aux classifier (보조 head)
- 기울기 소실 문제 완화
오버핏 해소 전략
- Augmentation(증강) - 데이터 수 높인다. Random crop, RGB shift
- Drop-out - 동일 모델로, 실제 학습에 참여한 파라미터의 조합이 바뀐다.
디테일 파라미터 3가지
- 모멘텀 - 0.9
- Weight decay
- 초기화: 정규분포 - std:0.01
- Learning rate 스케줄: reduce LR on pleatu - 0.4
추가전략 2가지
- 앙상블: 7개의 버전, 데이터셋을 바꾼다.
- 미세조정(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)
Tags:
AI개발_교육