본문 바로가기
ML & DL/CS231n (Stanford Univ.)

[CS231n] Lecture 9 | CNN Architectures

by 남르미누 2020. 12. 5.

이번 강의에서는

 

대표적인 CNN Architectur에는

 

어떤 것들이 있는지 알아보도록 하겠다.


< AlexNet >

 

CNN이 주목을 받기 시작하게 된 계기는 AlexNet라고 할 수 있다.

 

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

 

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

 

 

이 논문을 2012년에 발표를 했었는데,

 

그 당시 컴퓨터 성능이 좋지 않아서 네트워크를 분산시켜 GPU에 넣었다.


그래서 feature map을 추출할 때 2개의 영역으로 나누어져 있다.

 

AlexNet의 특징들은 다음과 같다.

 


< VGG >

 

ILSVRC 우승 모델 중 다음으로 알아볼 모델은 VGG모델이다.


AlexNet과 비교를 했을 때, Layer의 수가 확실히 깊어진 것을 알 수 있다.

 

3x3 convolution layer 필터만을 사용하여

좀 더 깊은 Network를 가질 수 있도록 설계하였다.

 

3x3 convolution layer 필터를 사용함으로써

파라미터의 수도 더 적게 되었다.

 

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

 

 

VGG 모델은 VGG16, VGG19가 대표적인데

 

VGG모델의 이름들은 Layer의 갯수에 따라 이름이 붙어졌다.

 

 

VGG의 특징들은 다음과 같다.

 


< GoogLeNet >

 

그 다음 알아볼 CNN 구조는 GoogLeNet이다.

 

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

 

 

GoogLeNet 모델은 굉장히 복잡한 구조로 이루어져 있다.

 

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

 

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

 

특징은 다음과 같다.

 


GoogLeNet 모델 구조에 대해서

좀 더 자세히 살펴보도록 하겠다.

 

Inception module에 대해 좀 더 자세히 살펴보면 다음과 같다.

 

 

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

 

하지만 이러한 구조로 Inception module을 만들면 엄청난 계산량이 생기는 문제점이 발생한다.

 

 

 

이러한 엄청난 계산량이 생기는 문제점을 줄이기 위해서

1x1 convolution layer를 사용한다.

 

이렇게 되면 Input의 depth가 줄어드는 효과가 난다.

 

이것을 Bottleneck layer라고 한다.

 

 

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

 

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

 

아래와 같이 parameter의 수가 확실히 떨어진 것을 알 수 있다.

 

 

GooLeNet의 Architecture를 다시 한 번 보도록 하자.

 

 

이렇게 보조 분류기가 있는 것을 확인 할 수 있는데,


이유는 네트워크의 깊이가 깊기 때문에

중간 Layer의 학습을 돕기 위해서 설계해 놓은 것이다.


< 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가 줄어들었다는 것을 의미한다.

 

 

 

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

 


 

지금까지 소개한 CNN Architecture들에 대해 그래프로 정리하여 시각화한 것이다.

 

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

 

위 그래프에서 찾을 수 있는 인사이트는 다음과 같다.

 

 


 

 

 


 

오늘은 여기까지 :)


(참고자료)

 

leechamin.tistory.com/search/cs231n

 

참신러닝(Fresh - Learning)

이차민의 iOS/ML/DL 공부 블로그 Computer Vision과 iOS개발에 대한 전반적인 공부를 합니다. "Be The First Penguin"

leechamin.tistory.com

lsjsj92.tistory.com/

 

꿈 많은 사람의 이야기

안녕하세요. 이수진이라고 합니다. 이 블로그는 AI(인공지능), Data Science(데이터 사이언스), Machine Learning, Deep Learning 등의 IT를 주제로 운영하고 있는 블로그입니다.

lsjsj92.tistory.com

taeyoung96.github.io/categories/CS231n/

 

CS231n Summary

한 발자국씩 앞으로 나아가자

taeyoung96.github.io

 

댓글