Computer Science/CS231n

[CS231n] Lecture 9

  • -
728x90
반응형

AlexNet

First large scale convolutional nerual network이다.

 

특징은

1. ReLU를 처음 사용하였다.

2. Norm layers를 사용하였다. (지금은 대부분 쓰지 않는다.)

3. 드롭아웃 0.5로 설정

4. batch size 128

5. SGD momentum 0.9

6. Learning rate 1e-2

7. L2 weight decay 5e-4

8. 7개를 앙상블 처리하여 정확도 향상

 

추가적으로 잘 보면 상하로 2개로 나뉘어있는 것을 볼 수 있는데, 이는 네트워크가 2개의 Network로 분산되었기 때문이다.

즉, 맨 처음 CONV layer를 보면 필터가 96개인데 각 GPU마다 48개씩 절반으로 나누어 연산을 병렬적으로 처리하는 것이다.

 

ZFNet

전반적으로 AlexNet의 구조와 유사하다. Stride size나 filter의 개수 등등을 살짝 조정한 모델이다.

VGGNet

Small filters, Deeper networks

이 모델의 경우, Filter의 크기는 3x3으로 잡았는데, 왜 작은 filter를 잡았는지 판단해보자.

 

1개의 Convolution layer를 거치게 되면, 3 x 3 x (depth)만큼이 1개의 값으로 abbreviation된다.

마찬가지로 한번 더 Convolution layer를 거치게 되면 이전의 Convolution layer를 통과했던 것이 다시 input값으로 제공되는 상황이므로 1개의 값에는 총 input data 기준으로 5 x 5 만큼의 정보가 abbreviation된다.

 

따라서 3 x 3 filter를 가지는 convolution layer를 3번 통과한 것이 7 x 7 filter를 가지는 convolution layer를 1번 통과한 것과 같게 된다. 다만, 층을 더 통과하면서 non linearyity가 증가하게되고 필요한 parameter수는 감소하게 된다.

 

다만 아직까지는 마지막에 FC layer가 존재해서, AlexNet에 비해서는 필요한 parameter수는 많이 증가했다는 문제점이 존재한다.

추가적으로 VGGNet부터는 AlexNet에는 존재했었던 Normalization 층이 없다는 점을 잘 봐두도록 하자.

 

GoogLeNet

Deeper networks, with computational efficiency

특징은

1. 22개의 layer

2. Efficient "Inception" module을 가진다.

3. No FC layer (cos가 매우 큰 연산 중 하나이므로, 이 부분이 없어도 된다는 것은 상당한 장점이 된다.)

4. Only 5 million parameter (AlexNet보다 12배 더 적다)

 

2번째 특징인 Inception module에 대해서 알아보면 다음과 같다.

위 사진에서 볼 수 있는 것처럼 inception module의 역할은, 각 Convolution layer를 통과시킨 결과값을 Concat시키는 것이다.

Concat하는 방식은 output들은 depth-wise하게 합치면 된다.

 

만약 위 사진처럼, 1 x 1 convolution layer가 없으면 Concat하는 과정에서 depth가 너무 커지게 된다. Pooling layer의 경우는 depth가 유지되므로, Inception layer를 거칠때마다 depth가 커질 수 밖에 없다.

위 사진이 1 x 1 convolution을 처리한 결과이다. 해당 결과는 직관적으로 여러 depth 값들을 하나의 값으로 abbreviation한 것으로 이해할 수 있다. 따라서 width와 height는 유지한채로 depth 값만 줄일 수 있다. 이러한 layer를 "bottleneck" layer라고도 부른다.

"Bottleneck" layer를 넣음으로써 output의 depth값이 672에서 480으로 줄어들었다.

즉, 필요한 parameter수도 감소하고 연산의 수도 감소하게 된다.

 

GoogLeNet는 크게 4개의 element로 구분할 수 있다.

첫번째로는 Stem Network로 기존에 CNN에서 한 것처럼 Convolutional layer와 pooling layer의 연속으로 이루어져있다.

두번째로는 Inception Modules를 쌓아놓은 구조이다. 해당 구조로 인해 deeper network를 가지면서 computational efficiency를 가져올 수 있게 된다.

세번째로는 모든 구조에서 공통적으로 나타나는 classifier를 출력하는 부분이다. 해당 부분에서 loss function에서 정의하고 결과값을 출력하게 된다. 추가적으로 GoogLeNet의 경우 "FC layer"가 없다는 것을 잘 봐두도록 하자.

마지막으로 Auxiliary구조이다. 일반적으로 층이 깊어짐에 따라서 backprop의 결과가 작아질 수 있다. 따라서 Auxiliary loss를 하위 계층에 backprop을 통해 뿌려줌으로써 해당 문제를 보완하는 느낌으로 이해해주면 된다.

 

ResNet

Very deep networks using residual connections

ResNet의 경우, 신경망의 깊이를 획기적으로 늘린 모델로 평가받고 있다. 기존의 input값에 weight를 곱하는 방식에서 벗어나, Residual connection을 만들어 획기적으로 신경망의 깊이를 늘릴 수 있었다.

 

층이 깊어지고 이로 인해서 필요한 hyperparameter가 증가하게 되면 overfitting 문제가 발생할 것 같지만, 실제로는 그렇지 않다.

위 사진에서 볼 수 있는 것처럼, Trainning error도 layer의 depth가 더 큰 것이 높게 나오고 있다.

 

이러한 측면에서 ResNet은 다음과 같은 가정을 상정한다.

"The problem is an optimization problem, deeper models are harder to optimize"

즉, 층이 깊어질수록 최적화를 더욱 하기 힘들어지기 때문에 결과가 오히려 안좋아지는 것으로 해당 결과를 설명하고 있는 것이다.

 

따라서 Identity mapping을 활용하여 이 문제를 해결하게 된다.

 

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.