Lec9) CNN Architectures

Temmie Chang (포인세티아)·2022년 2월 16일
0

Lenet

초기 모델 : 5X5필터, 컨볼루션 레이어 뒤에 FC레이어

AlexNet

최초의 큰 크기의 모델 ConvNet의 부흥을 일으킴
Conv-pooling-Narm
5개의 Conv, 2개의 FC레이어를 가진다..

첫 입력 데이터는 2272273
첫 conv의 경우 1111필터가 4stride로 96개 존재
-> 55
55 96의 차원을 가짐 ->
파라미터는 11
11963 = 35K

2번째 풀링레이어 3X3, stride 2
272796 파라미터는 없음 (그냥 차원축소만 담당)

이후 3개의 FC레이어를 가지고 Softmax를 통과함

Local response Normalization, ReLU를 사용했고
data augumentation을 엄청나게 사용함
SGD 모멘텀과, Dropout,
Learning rate 1e^-2를 사용하다 학습이 종료되는 시점에 1e^-10까지 떨어짐
앙상블도 사용

모델이 두개로 나뉘어 뉴런을 반반씩 사용 (GTX850 메모리 3G의 한계)

Imagenet 2012 우승!
다양한 전이학습에 사용됐으나 지금은 더 좋은 뛰어난 모델이 많다.

ZF net

2013 우승

AlexNet과 같은 구조이나 stride size, 필터 수와 같은 하이퍼파라미터 개선

2014년
googlenet VGGnet 우승
각각 22, 19개 레이어로 늘어남

VGGnet

아주 작은 필터 3X3필터만 사용함(레이어를 늘리고 파라미터가 작아짐)
필터를 겹쳐쌓으면 더 큰 Receptive Field를 가질 수 있다
Conv와 pooling 레이어의 반복은 비슷함

레이어가 많음(학습가능한 파라미터를 가진 레이어가 많음) = 깊은 모델
레이어가 깊으면 Spatial Area가 줄어드므로 필터를 많이쓰는경향이 있다
FC7의 능력이 좋다고 함

GoogLeNet

높은 계산량을 효율적으로 수행하도록 디자인
Inception Module
Local Networe를 만듬, 서로다른 필터들을 병렬적으로 구성해 출력을 합쳐 다음 레이어로 전달
높이와 폭은 일정하지만 Depth를 쌓는 방식으로 가능해짐
그러나 Depth가 점점 늘어나므로 연산량이 엄청나게 많아지는 문제가 있음
-> Bottleneck Layer를 사용 (입력의 Depth를 줄이는 층을 사용) 일부정보 손실은 일어나지만
선형 결합을 통해서 극복이 되는 편이고 도움이 된다.
보조 분류기를 통해 앙상블효과를 가지기도 함

FC레이어가 없음(파라미터 5M <-> VGG 60M보다 현저히 적음)
(FC레이어 (Dense)는 연산이 많으므로 최근에는 아예 안쓰기도 한다고함)

ResNet(2015년 대회 싹쓸이 우승자)

152레이어 사용 (엄청 깊다!)
Residual connections이라는 방법을 사용
과연 Conv, pooling만 계속 사용하면 성능이 늘어날까?
(아니었음 training error도 같이 증가함, overfitt의 문제가 아니었다)

연구결과 optimizer가 문제가 있다고 밝혀짐
깊은레이어 중 초반 레이어의 가중치를
후반부 레이어에 복사하면 최소 얇은 모델만큼의 성능은 나올것이다.!

또한 레이어를 단순하게 쌓지 않고 Residual(잔차) mapping을 사용
레이어가 직접 H(x)를 학습하는 것이 아니라
F(x)-x(잔차)를 학습하도록 함.
다시 말해 지속적으로 변화율을 계산하도록 학습한다.
평범한 H(x) 함수를 배우는거보단 입력받은 F(x)의 변화를 학습하는것이 쉽다.

단순가설임 진짜인지는 몰?루

Residual blocks은 2개의 3x3 conv layer로 구성된다
Depth가 50이상인 경우 Google처럼 Bottlenect Layer를 사용함
매 Conv Layer 이후엔 BatchNorm을 사용하고 Xavier로 초기화함
마찬가지로 Learning rate는 점점 줄여준다.

최종 Error는 3.6%로 인간의 판단 성능보다 좋았다.

성능 좋은 전이학습을 찾는다면 Rasnet은 아주 조음!
어러 버젼중 V4가 가장 좋은 모델

Nin(2014)

MLP conv layer 네트워크에 작은 네트워크 만들기
처음에 Conv가 있고 이후 FC가 연결된다.
FC-Layer는 1x1 conv와 비슷하고
이러한 Bottlenect layer의 선구자라 의미가 있음

ResNet과 관련된 최근 연구결과

1) Block path를 조절 (더 많이 건너뛰게함)

  • 더 앞으로 정보들이 잘 전달되고 Backp도 잘 일어나게 함

2) 사실 중요한것은 레이어 깊이가 아니라, residual network 일수도?

  • 더 많은 필터를 사용하는 것이 더 좋은 효과를 줄수도 있다.

3) ResNeXt

  • 지속적으로 병렬구조의 경로를 추가 (32개까지)

4) Stochastic Depth

  • 네트워크가 깊어지면 깊어줄수록 그레디언트소실이 잘 일어나는 문제...
  • Train time에 레이어 일부를 제거(short network를 만들어 그레디언트를 잘 전달함)
  • dropout과 비슷한 효과

FractalNet

Residual이 별로 중요치 않고 shallow/deep 네트워크 정보가 모두 중요
다양한 경로가 존재하지만 일부 경로만 이용하여 학습함

DenseNet

Dense block 여러 Layer의 출력이 하나의 concat layer에 들어가고
이것이 다시 conv레이어를 통과해 Feature를 잘 전달하도록 도와줌

SqueezeNet

효율적인 네트워크 구성 (파라미터를 많이 줄임)

'네트워크 구성과 연결구조는 활발하게 연구되는 분야임'
대부분 연결을 어떻게 구성할지, Depth를 어찌할지 고민함.

Model zoo가 있으니 어떻게 쓸지 잘 고민해보자

0개의 댓글