CS231n 9강 요약

대표적인 CNN Architecture에는 어떤 것들이 있는지 알아보자!

0. Today’s Goal

  • AlexNet
  • VGG
  • GooLeNet
  • ResNet
  • 그 밖에 다양한 모델 소개

1. 강의 및 강의 자료

강의를 들어볼 수 있는 링크와 강의 자료를 pdf형식으로 준비했다.

한글 자막이 필요하신 분은 다음의 링크를 확인해주세요. :)

  • 한글 자막을 첨부하고 싶으면 여기를 눌러주세요.

2. AlexNet

CNN이 주목을 받기 시작하게 된 계기는 AlexNet 덕분이라고 해도 과언이 아니다.

이 강의에서는 각 모델에서 필요한 Meomory와 Parameter의 수를 중점적으로 설명을 한다.

AlexNet을 도식화 하면 다음과 같다.

이 논문을 2012년에 발표를 했었는데, 그 당시 컴퓨터 성능이 좋지 않아, 네트워크를 분산시켜 GPU에 넣었다.
그래서 feature map을 추출할 때 2개의 영역으로 나누어져 있다.

AlexNet의 특징들에 대해서 살펴보면

  • ReLU를 처음으로 사용
  • Norm Layer를 사용
  • Data Augmentation을 많이 사용
  • Dropout : 0.5
  • Batch size : 128
  • SGD Momentum : 0.9
  • Learning rate : 1e-2
  • L2 weight decay : 5e-4
  • 7 CNN ensemble : 18.2% -> 15.4%

3. VGG

ILSVRC 우승 모델 중 다음으로 알아볼 모델은 VGG모델이다.
AlexNet과 비교를 했을 때, Layer의 수가 확실히 깊어진 것을 알 수 있다.

3x3 convolution layer 필터만을 사용하여 좀 더 깊은 Network를 가질 수 있도록 설계하였다.
뿐만 아니라 3x3 convolution layer 필터를 사용함으로써 파라미터의 수도 더 적게 되었다.

VGG 모델은 VGG16, VGG19가 대표적인데 Layer의 갯수에 따라 다른 이름이 붙어졌다.

전체적으로 각 Layer마다 필요한 memory와 parameter의 수를 정리하면 다음과 같다.

VGG의 특징들에 대해서 살펴보면

  • AlexNet과 비슷한 절차로 Training을 거침
  • Local Response Normalisation(LRN)이 없음
  • Ensemble을 사용하여 최고의 결과를 뽑아냄
  • 맨 마지막에서 두번째 FC (fc7)은 다른 task들을 가지고 잘 일반화를 함.

4. GoogLeNet

그 다음 주목을 받은 CNN 구조는 GoogLeNet이다.

모델의 구조는 다음과 같다.

한 눈에 봐도 굉장히 복잡한 구조로 이루어져 있음을 알 수 있다.

가장 큰 특징으로는 Inception module을 사용했다는 것이다.

간단히 네트워크 안에 작은 네트워크를 구성하였다고 생각하자.

GoogLeNet의 특징들에 대해서 살펴보면

  • 22 Layer들로 구성
  • 파라미터의 수를 줄이기 위해 Fully Connected Layer를 없앰.
  • 총 5백만 개의 파라미터 수 (AlexNet과 비교하면 현저히 줄어듬)
  • 높은 계산량을 효율적으로 수행

Inception module에 대해 좀 더 자세히 살펴보면

동일한 입력을 받는 서로 작은 다양한 필터들이 병렬적으로 존재를 한다

하지만 이러한 구조로 Inception module을 만들면 한가지 문제점이 발생하는데,

바로 어마어마한 계산량이다…

이러한 계산량을 줄이기 위해서 1x1 convolution layer를 사용한다. 이렇게 되면 Input의 depth가 줄어드는 효과가 난다. 이것을 Bottleneck layer라고 한다.

1x1 convolution layer로 depth를 줄이면 정보의 손실이 있지만 동작을 더 잘한다.

차원을 줄인 후 parameter의 수를 다시 조사해보면

parameter의 수가 확실히 떨어진 것을 알 수 있다.

다시 한번 GooLeNet의 Architecture를 살펴보면,

이렇게 보조 분류기가 있는 것을 확인 할 수 있는데,
이유는 네트워크의 깊이가 깊기 때문에 중간 Layer의 학습을 돕기 위해서 설계해 놓은 것이다.

5. ResNet

이번에는 ResNet이라는 녀석이다.
Residual connection이라는 새로운 구조로 굉장한 성능을 보였다.

기본적인 Residual block의 모습과 모델의 Architecture는 다음과 같다.

일반적으로 CNN을 깊게 쌓게 되면 어떤 일이 발생할까?
더 깊은 layer를 쌓게 되면 Overfitting이 일어나지 않을까? 하지만 결과는 그렇지 않았다.

더 깊은 layer를 가진 구조가 training error가 더 높았다.
만약 Overfitting이 되었더라면 training error는 더 낮아야 한다.

여기서 한 가지 가설을 했는데,
더 깊은 모델은 Optimize하는데 훨씬 더 어렵다는 가설이다.

즉, 네트워크 구조가 깊으면 깊을 수록 어느 순간 그 모델은 얕은 모델보다 더 train이 안된다는 것인데 이러한 문제를 Degradation이라고 한다.

이 가설에 대한 해결책으로는 다음과 같다.

일반적으로 Layer를 쌓아 올리는 방식 대신
Skip connection이라는 새로운 구조를 이용하여 학습을 진행한다.

가중치 Layer는 $H(x) - x$에 대한 값이 0에 수렴하도록 학습을 진행한다.

그 결과, 연산 증가도 크게 없고 만약 Gradient Vaninshing 현상이 일어나더라도 원본 신호에 대한 내용을 가지고 있어서 학습을 하는데 원할하게 시킬 수 있다는 것이 ResNet을 만든 연구진들이 하는 설명이다.

이러한 Residual block을 사용한 결과 네트워크의 깊이가 깊어질 수록 더 정확하게 training을 시킬 수 있었다.
여기서 ‘정확하게’라는 말은 네트워크 깊이에 비례하여 error가 줄어들었다는 것을 의미한다.

ResNet의 특징은 다음과 같다.

  • VGGNet의 철학을 담고 있어 대부분의 convolution layer를 3x3으로 설계
  • 복잡도를 낮추기 위해 dropout, hidden fc를 사용하지 않음
  • 출력 feature-map 크기가 같은 경우, 해당 모든 layer는 모두 동일한 수의 filter를 갖음
  • Feature-map의 크기를 줄일 때는 pooling을 사용하는 대신에 convolution을 수행할 때, stride의 크기를 “2”로 하는 방식

네트워크를 깊게 설계할 때는 GooLeNet과 비슷하게 Bottleneck layer를 추가한다.

ResNet은 강의에서 짧게 설명하고 끝냈는데, 좀 더 공부를 해야 할 것 같다.

정리를 잘해놓은 블로그가 있어 여기를 참고하면 공부할 때 좋을 것 같다.


지금까지 소개한 CNN Architecture들에 대해 한 눈에 그래프로 정리를 했다.

여기서 Inception-v3 구조는 쉽게 말해 ResNet과 Inception을 합쳐놓은 구조라고 생각하면 된다.

그래프를 보면

  • VGG Network가 가장 많은 메모리가 필요하고 Operation을 최대로 돌았다.
  • GooLeNet이 가장 효과적인 네트워크 구조이다.
  • AlexNet의 경우 계산량은 적지만 정확도 측면에서 많이 떨어지는 것을 볼 수 있다.
  • ResNet 같은 경우, 깊이에 따라 정확도가 달라지고 가장 큰 정확도를 가진 네트워크라 볼 수 있다.

5. 그 밖에 다양한 모델 소개

그 이후에 모델 또는 기법들에 대해서는 간단하게 강의 슬라이드를 보여주는 식으로 마무리를 하겠다.

나도 아직 공부가 덜 된 부분이다…

ResNet을 변형하여 개선을 시키려는 노력도 꾸준히 있었다.

ResNet 이후에도 지속적으로 모델을 연구 중인데 그 중 SqueezeNet이 성능이 좋다.

이 강의는 2017년 버전이니까 지금은 훨씬 더 좋은 성능을 가진 모델들이 많이 나왔을 것이다.

댓글남기기