DL

4가지 CNN 살펴보기: AlexNET, VGG, GoogLeNet, ResNet

HAN___ 2022. 10. 12. 17:11

레이어의 수가 많아지면 성능이 좋아질 여지가 많아진다.
일반적으로 레이어를 100개, 1000개 쌓는다고 성능이 좋아지지는 않는다.
레이어를 딥하게 쌓으면서 성능을 좋아지게 만드는 방법은?


1. AlexNet

논문으로 짚어보는 딥러닝의 맥

  • 파라미터의 수가 몇개인지를 먼저 알아야 한다
  • 11x11 convolution, channel이 3
  • 11, 11, 3, 48 ...
  • 두 개로 나눠져 있는 이유, GPU가 좋지 않아서.

ReLU(Rectified Linear Unit)
- 웬만하면 ReLU를 쓰는 게 성능이 좋다는 게 현재 중론

LRN(Local Response Normalization)
- 어떤 convolution feature map에 일정 부분만 값을 높게 갖고, 나머지는 값을 낮게 해주고 싶은 것.

(모든 값을 같게 해주는 게 아니라)

[ Regularization ]
1) data augmentation: 데이터를 늘린다
- label preserving transformation이 중요하다
- 분류하고 싶은게 물체가 아니라 숫자라면 Flip augmentation을 하면 안 된다
내가 찾고 싶은 물체가 어떤 것인지, 도메인을 분명하게 알고 찾아야 한다
- Smaller Patch(224 x 224)
- Color variation
- rgb 이미지이기 때문에 각각의 값에 특정 값을 더한다
2) Dropout: 학습 시에 해당 노드를 0으로 만들어 주는 것, 알렉스넷에서는 output에 0.5만큼 곱하는 방법 사용

Conv2D

논문으로 짚어보는 딥러닝의 맥

- 파라미터의 수를 잘 계산할 줄 알아야 한다


2. VGG

https://jisuhan.tistory.com/147

  • 합성곱 계층과 풀링 계층으로 구성되는 '기본적'인 CNN
  • VGG 16, 19를 많이 활용(레이어가 16, 19)
  • 3x3의 작은 필터를 사용한 합성곱 계층을 연속으로 거친다
  • 합성곱 계층을 2~4회 연속으로 풀링 계층을 두어 크기를 절반으로 줄이는 처리를 반복
  • 마지막에는 완전연결 계층을 통과시켜 결과를 출력

3. GoogLeNet

https://bskyvision.com/entry/CNN-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EB%93%A4-GoogLeNetinception-v1%EC%9D%98-%EA%B5%AC%EC%A1%B0

- Google + LeNet
- 22layers
인셉션 모듈(가로 방향에 '폭'이 있다)을 잘 활용

[ Inception module ]

논문으로 짚어보는 딥러닝의 맥

- Naive inception module

- Actual inception module

- 차이점: 1x1 convolution 추가 된 것이 전부

[ one by one convolution ]
- 채널의 수를 중간에 한 번 줄였을 때, 이 네트워크를 정의하는 파라미터의 수가 줄어든다

- 레이어가 오히려 하나 더 쓰였는데 파라미터의 수가 줄어든다
- 어떻게 가능할까? convolution레이어의 파라미터를 정의하는 건 input 채널과 output채널

googLeNet
- 계속 그게 반복되는 구조
채널을 줄였기 때문에 굉장히 좋은 아이디어

인셉션 모듈이 가지는 장점이 한 가지 더 있다
여러 개의 갈림길로 인해 생기는 장점
- 어떤 neural net이 있을때, receptive field
- 항상 동일한 크기의 이미지를 보고 숫자를 취합해서 얻어진 숫자
- 내가 찾고 싶은 물체의 크기가 어떤건 되게 크고 작을 수 있다

- 그런데 receptive field 크기가 고정 되어 있으면, 고정된 receptive field 크기 때문에 제대로 연산이 되지 않을 수 있다
입력 이미지에 취합된 정보가 미치는 repective field가 다양해질 수 있다
- 훨씬 더 deep한 네트워크를 쌓았는데도 불구하고 성능을 많이 올릴 수 있다

- VGG 네트워크: 19단, 구글넷: 22단
- 여기에 사용된 파라미터의 수는 구글넷이 VGG보다 절반 이상 훨씬 더 파라미터가 적다
네트워크는 훨씬 더 딥해졌는데 그 네트워크를 정의하는 파라미터의 수는 훨씬 더 적어졌다 >> dimension reduction
- 동일한 테크닉이 Resnet에도 들어가 있다

Inception v4

논문으로 짚어보는 딥러닝의 맥

- 비교적 최근에 발표된 모델

- 파라미터를 줄이기 위해서 어디까지 노력했냐? 확인가능
- inception v4에서는 5x5가 더 이상 등장하지 않는다
- 7x1, 1x7, 번갈아가면서 쓴다


4. ResNet(Residual Network)

https://velog.io/@junyoung9696/ResNet-%EA%B5%AC%EC%A1%B0-%ED%83%90%ED%97%98%EB%8C%801

- residual connection 사용
- 152 layers
- 동일한 네트워크가 여러 가지에 1등을 했다 >> 범용적으로 사용할 수 있다
- 네트워크가 딥한 게 항상 좋냐? >> 딥하다고 잘 되지 않는다: degradation
- vanishing gradients 문제

- 이를 해결하기 위해 스킵 연결(skep connection) 도입

  • 층의 깊이에 비례해 성능을 향상시킬 수 있게 한 핵심
  • 입력 데이터를 '그대로 흘린다' : 기울기의 소실 줄여준다
  • 역전파 때 스킵 연결이 신호 감쇠를 막아준다

https://deep-learning-study.tistory.com/473

- 합성곱 계층을 2개 층마다 건너뛰면서(skip connection) 층을 깊게 한다 >> 152 layers

 

[ Residual Learning building block ]
- 입력을 출력에 더한다: 입력과 출력의 dimension이 같아야 한다
중간에 있는 레이어는 입력과 아웃풋 사이의 차이(residual)만을 학습
- y = y + shortcut
- residual: 쉽고 잘 된다

 

Deeper bottle architecture

논문으로 짚어보는 딥러닝의 맥

- 파라미터를 줄인다
- 1x1 convolution 사용
- 왜 마지막에 1x1? 처음에는 채널을 줄인다, 마지막에는 더해줘야 하니까 다시 256채널로 복원이 되어야 한다

논문으로 짚어보는 딥러닝의 맥

- 100단 짜리랑 1202레이어, 성능의 차이가 없다
- 20단보다는 100단짜리가 훨씬 성능이 좋아졌는데, 1000개가 넘어가면 성능의 차이가 없어졌다

 


출처1: edwith <논문으로 짚어보는 딥러닝의 맥> by 최성준

https://www.edwith.org/deeplearningchoi/lecture/15296?isDesc=false 

 

[LECTURE] 4가지 CNN 살펴보기: AlexNET, VGG, GoogLeNet, ResNet : edwith

학습목표 최신 CNN 구조 중 AlexNet, VGG, GoogLeNet, ResNet 이렇게 4가지 구조에 대해서 알아보겠습니다. 위 4가지 구조들은 일반적으로 딥러닝의 유명한 ... - 커넥트재단

www.edwith.org

출처2: 밑바닥부터 시작하는 딥러닝) 8장 딥러닝