욱이의 냉철한 공부

[CNN 개념정리] CNN의 발전, 모델 요약정리 1 (AlexNet ~ GoogLeNet) 본문

데이터과학/개념 : CNN(OD), RNN

[CNN 개념정리] CNN의 발전, 모델 요약정리 1 (AlexNet ~ GoogLeNet)

냉철한 욱 2020. 4. 21. 19:43

* 참고자료 및 강의

- cs231n 우리말 해석 강의

https://www.youtube.com/watch?v=y1dBz6QPxBc&list=PL1Kb3QTCLIVtyOuMgyVgT-OeW0PYXl3j5&index=6

- Coursera, Andrew Ng교수님 인터넷 강의

 


 

* 목차

1. 모델 발전 개요

2. 모델1 : LeNet-5

3. 모델2: AlexNet

4. 모델3 : ZFNet

5. 모델4 : VGG

6. 모델5 : GoogLeNet

7. 모델6 : ResNet

8. 모델7 : DenseNet

 


1. 모델 발전 개요

- 모델 목표

더 깊은 네트워크를 만들면서, 성능을 높여간다.

- 모델 목표를 위해 중요한 것.

HOW?

어떻게 학습능력을 높여서 더 깊은 네트워크를 학습했는가?

- 어떻게 학습능력을 높이는가?

1. LeNet-5 : CNN 적용하면서, 깊은 네트워크(4Layer) 학습하여 성능 상승

2. AlexNet : GPU, ReLU함수 사용하면서, 깊은 네트워크(8Layer) 학습하여 성능 상승

3. ZFNet : 하이퍼파라미터 최적화하면서, 깊은 네트워크(8Layer) 학습하여 성능 상승

4. VGGNet : 작은 필터 수(3x3) 규칙적으로 적용하면서, 깊은 네트워크(19Layer) 학습하여 성능 상승

5. GoogleNet : Inception 모듈 적용하여 효율성 높이면서, 더 깊고 넓은 네트워크(22Layer) 학습하여 성능 상승

6. ResNet : Skip connection적용하여 기울기소실문제 해결하면서,

매우 깊은 네트워크(152Layer) 학습하여 성능 상승

7. DenseNet : 진화된 Skip connection과 bottleneck layers를 적용하면서,

알짜배기 Feature만 가진 매우 깊은 네트워크를 학습하여 성능 상승

2. 모델1 : LeNet-5

- 동기 (기존의 문제)

기존의 fully-connected neural network이 갖고 있는 한계

=> 파라미터 수 많고, 연산량 많다.

- 핵심 아이디어

CNN(Convolutional Neural Network)의 개념 활용.

- 모델 설명

파라미터 : 60,000개

연산량 : 34만개

convolution layer : 3개

sub-sampling layer : 2개

fully-connected layer : 1개

- 모델 특징

네트워크 깊어질수록 높이와 폭이 줄어짐, 채널수는 증가

시그모이드, tanh 사용

3. 모델2 : AlexNet

- 목표

더 깊은 네트워크를 만들면서, 성능을 높여간다.

- 동기 (기존의 문제)

고해상도 이미지에 대규모로 Convolutional Neural Network를 적용하기에는 여전히 많은 연산량 소모

이와 함께 적은 데이터셋 있으니, 과적합을 막아야 했다.

- 핵심 아이디어

1) 학습 최적화

-> ReLU 활성화 함수

-> 2개의 GPU 사용

2) 과적합 방지

-> Data Augmentation

-> Dropout

- 모델 설명

파라미터 : 약 6200만개

연산량 : 약 6억 3000만개

convolution layer : 5개

pooling layer : 3개

Local Response Normalization layer : 2개

fully-connected layer : 3개

총 layer : 8개

4. 모델3 : ZFNet

- 목표

더 깊은 네트워크를 만들면서, 성능을 높여간다.

- 동기 (기존의 문제)

AlexNet에서의 최적의 hyper-parameter의 조합을 찾아 성능 높여만 했다.

- 핵심 아이디어

1) hyper-parameter 최적화

-> CONV1 : 11X11(stride 4)필터크기를 7X7(stride 2)필터크기로 변환

-> CONV3, 4, 5 : 필터 384, 384, 256을 각각 512, 1024, 512로 변환

5. 모델4 : VGGnet

- 목표

더 깊은 네트워크를 만들면서, 성능을 높여간다.

- 동기 (기존의 문제)

더 깊은 네트워크를 형성하기 위해, 단순하고 작은 필터 크기를 적용해야만 했다.

그래야 파라미터 수가 즐어들고 학습속도 향상된다.

(하지만 16layer를 넘어가면 별 이득이 없음.)

- 핵심 아이디어

1) 단순한 네트워크 구조

-> 모든 convolution layer에 "3x3 (stride 1, pad 1)" 필터 적용

-> 모든 pooling layer에 "2x2 (stride 2)" 적용

2) 높이, 너비는 작아지는데, 필터는 2배로 계속 규칙적 상승 => 비율 체계적

3) 기울기 소실 문제 해결

먼저 11-layer의 비교적 간단한 구조-A를 학습시킨 후,

더 깊은 나머지 구조(16-layer)를 학습할 때는 처음 4 layer와 마지막 fully-connected layer의 경우는 구조-A의 학습 결과로 초기값을 설정한 후 학습

- 모델 설명

파라미터 : 1억 3800만개

convolution layer : 13개

pooling layer : 5개

fully-connected layer : 3개

총 layer : 16개

- 모델 단점

파라미터 개수가 너무 많다.

특히 fully-connected layer에서의 파라미터는 너무 많다.

해결책 : Avg pooling layer 사용 <- GoogleNet에서 적용

6. 모델5 : GoogLeNet

- 목표

더 깊고, 넓은 네트워크를 만들면서, 성능을 높여간다.

깊은 네트워크 : layer의 수 상승

넓은 네트워크 : unit의 수 상승

- 동기 (기존의 문제)

더 깊고, 넓은 네트워크를 형성하기 위해, 효율성(연산비용 감소)을 가져야만 했다.

더 깊고 넓은 네트워크(파라미터 증가)를 형성하면 overfiting, 연산량(연산비용) 증가 등의 문제가 생긴다.

=> 이를 위해 Inception(1x1사용) 개념을 적용

- 핵심 아이디어

1) inception module : Optimal local sparse 개념

cnn자체가 dense한 fully-connected 구조에서 sparse한 connected 구조로 변환

이를 통해 연산량을 줄이고 더 깊은 네트워크를 형성

inception module은 더 발전해서 지역적으로 최적의 sparse한 구조(효율성 상승)를 형성한다고 할 수 있음.

어떻게 할 수 있냐? : 다양한 지역의 피쳐를 추출할 수 있는 스케일을 적용

=> 1x1 conv,3x3 conv, 5x5 conv, 혹은 3x3 pool 중 누가 최적일지, 혹은 그들의 어떤 조합의 구성이 최적의 구성일지 학습.

2) inception modeul : 1x1 conv "bottleneck" layers 사용

첫째 목적 : 파라미터, 연산량 감소

1x1 Convolution을 수행하면, 여러 개의 feature-map으로부터 비슷한 성질을 갖는 것들을 묶어낼 수 있고,

결과적으로 feature-map의 개수를 줄일 수 있으며, 연산량도 줄일 수 있게 되고, 연산량이 줄어들면 망을 더 깊게 할 수 있는 여지가 생김.

둘째 목적 : 활성화 함수(reLu) 더 많이 적용, 비선형성 추가로 획득

* 최종 inception module

3) 전체 모델 측면 아이디어 : auxillary classifier, 보조분류기 (남색 박스)

사용목적 : 기울기 소실 문제 해결

auxillary classifier에서 계산되어진 큰 값의 역전파 결과가 중간마다 더해지기 때문에,

전체모델의 기울기 작아지는 문제를 해결 할 수 있음

즉 Regularizer와 같은 역할

4) 전체 모델 측면 아이디어 : Global average pooling 사용 (보라색 박스)

사용목적 : 파라미터수 감소

CNN의 최종단에 있는 fully-connected NN은 전체 free parameter 중 90% 수준에 육박하기 때문에, 많은 파라미터의 수로 인해 overfitting에 빠질 가능성이 아주 높음, 이를 해결하기 위해 원래 “dropout” 기법을 적용했지만 한계가 있음.

하지만 GoogleNet에서는 average pooling만으로 classification을 수행 할 수 있기 때문에, overfitting 문제 현저히 극복

- 전체 모델 설명

파라미터 : 약 500만개

총 layer : 22개

총 unit : 약 100개

(Alexnet에 비해 파라미터 1/12 수준, 연산 2배 빠름, top5 error 10%까지 감소)