본문 바로가기

boostcamp AI tech/boostcamp AI

AlexNet, VGGNet, GoogleLeNet, ResNet, DenseNet

728x90

1. AlexNet

- Image Classification task에서 당시 매년 1등을 차지했던 모델이다.

- 당시에는 더 많은 파라미터를 학습시키고 싶ㅇgpu 메모리 크기의 한계 때문에 모델을 반으로 나눠서 각 gpu에 학습을 시켰다.

- ReLU activation, drop, data augmentation 등 지금에서는 많이 익숙한 기법이지만 당시에는 새로운 시도였다.

- 현재에 와서는 일반적으로 잘 되는 모델의 standard를 만들었다고 볼 수 있다.

- sigmoid, tanh에서 발생하는 vanishing gradient 문제를 ReLU를 통해 극복했다.

 

2. VGGNet

The architecture of VGG16 — uploaded by  Max Ferguson  in ResearchGate

- 특징을 뽑자면 3 by 3 kernel을 사용했고 dropout(0.5)를 사용했다.

- alexnet이 11 by 11을 사용한거랑 비교해보면 receptive field가 줄었다고 볼 수 있다.

- 동일한 input에 대해 (3,3)을 두번 사용했을 때, receptive field는 (5,5)를 한번 사용했을 때랑 같다.

- 그런데 (3,3)을 두번 사용했을 때 파라미터 수를 계산해보면 3*3*128*128 + 3*3*128*128 = 294,912인데

- (5,5) 한번 사용했을 때 파라미터 수는  5*5*128*128 = 409,600로 훨씬 많다.

- 즉 네트워크는 깊게 쌓으면서도 파라미터수는 줄일 수 있게 된다.

 

3. GoogleLeNet

GoogLeNet architecture with nine inception modules( image source )

- 이번에는 중간중간 (1,1) convolution을 잘 활용함으로써 전체 파라미터 수를 줄였다. 

https://medium.com/@jubergandharv/googles-lenet-inception-net-f256c2976955

- inception block이 중간중간 들어가는데 input에 대해 서로 다른 receptive field를 가진 convolution을 거친 정보들을 잘 합친다는 특징이 있다.

- 가장 주목할 점은 1x1 conv를 통해 channel의 깊이를 줄임으로써 파라미터 수를 줄였다는 점이다.(channel-wise dimention reduction)

- width-height에 대한 spatitial dimention은 그대로 두고 channel의 깊이를 확 줄였다.

- 동일한 input, output에 대해 파라미터 수를 확 줄였다.

 

4. ResNet

https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/He_Deep_Residual_Learning_CVPR_2016_paper.pdf

- trainset에서 loss가 줄어든다고해서 testset에서도 잘 동작한다는 보장은 없다. 특히 parameter수가 많을 수록 Overfitting의 위험이 크다.

- 그런데 55층으로 구성된 모델1과 22층으로 구성된 모델2 모두 train, test에서 둘다 loss가 줄어드는 상황이라고 해보자. 

- 55층으로 구성된, 파라미터 수가 더 많은 모델1은 모델2보다 학습시키기가 더 어렵다. (즉 네트워크가 커질 수록 loss를 줄이기가 더 어렵다)

 

https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/He_Deep_Residual_Learning_CVPR_2016_paper.pdf

 

- ResNet에서는 이 문제를 residual connection을 추가함으로써 해결했다. (skip connection, add identity map)

- input x의 결과, f(x)에 x 자체를 더해준다. 즉 그림에 보이는 해당 layer가(f(x)를 도출하는 층) x부분은 이미 받았으니 남은 차이만큼만학습하도록 도와준다.

- 이때 더하기를 가능하게 하려면 차원을 맞춰줘야 하는데 이때 (1,1) conv를 활용한다.

- skip connection으로 gradient를 끝에 직접 전달해줌으로써, 모델이 깊어져서 gradient전달이 약해지는 문제를 해결한다.

- 참고로 batchnorm을 conv다음에 넣었다. 사람마다 어느위치에 넣는게 좋다는 주장이 다르다.

https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/He_Deep_Residual_Learning_CVPR_2016_paper.pdf

 

- 결론적으로 skip connection을 통해 plain모델들보다 layer가 깊어져도 학습이 훨씬 잘되는 결과를 보여준다.

- 네트워크를 더 깊게 쌓을 수 있는 가능성을 제시했다고 볼 수 있다.

https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/He_Deep_Residual_Learning_CVPR_2016_paper.pdf

 

- 한가지 또 특이한 점은 bottleneck architecture이다. 이는 GoogleLeNet의 inception block과 유사하다.

- 파라미터 수를 줄이기 위해 (3,3) conv 전, (1,1)conv를 통해 차원을 줄이고 이후에 원하는 차원 크기로 다시 (1,1)conv로 늘렸다.

- 결국 여태 살펴본 alexNet, vgg, googleLeNet에 비해 더 깊게 층을 쌓아도 parameter size는 줄이면서도 receptive field는 키우고 성능은 높였다.

 

5. DenseNet

- resNet에서는 input값을 출력층에 더해줬는데 반해 denseNet에서는 concatenate한다.

https://github.com/liuzhuang13/DenseNet

- dense block을 여러개 거칠수록 channel이 계속 쌓이므로 이를 연산하기 위한 convolution layer의 channel수도 같이 커진다.

- 즉 파라미터 수가 계속 증가한다.

- 이걸 해결하고자 (1,1)conv로 채널 깊이를 줄여나간다.

- 즉 dense block으로 channel수를 늘리고 다시 transition block으로 줄이고를 반복한다.

728x90
반응형

'boostcamp AI tech > boostcamp AI' 카테고리의 다른 글

Short History of Detection Model  (0) 2023.11.22
Short History of Semantic Segmentation  (1) 2023.11.22
Regularization  (1) 2023.11.21
Optimization  (2) 2023.11.21
Multi gpu training, Hyper parameter Search, etc  (0) 2023.11.16