본문 바로가기
딥러닝 기초

Basic of Convolution Neural Network

by winston1214 2021. 8. 15.
반응형

본 글은 https://www.youtube.com/watch?v=PIft4URoQcw&list=PLSAJwo7mw8jn8iaXwT4MqLbZnS-LJwnBd&index=19 

이 동영상을 바탕으로 작성되었습니다.

 

## Problems of MLP

MLP는 파라미터가 너무 많다는 것이다. 왜냐하면 모든 뉴런이 완전 연결 형태로 되어있기 때문이다. 따라서 모든 노드와 연결되어있기 때문에 깊이가 깊어질수록 파라미터의 개수가 늘어나고 overfitting 가능성이 늘어나고 훈련시간이 너무 늘어난다. 

 

## MLP/ Fully Connected

MLP는 3차원의 이미지를 1차원으로 변환하여 계산한다. 따라서 그 값을 weight 값과 행렬곱을 하고 클래스를 예측하는 것이다.

MLP

 

## Convolution Layer

Convolution Layer는 MLP 처럼 1차원으로 펼쳐주지 않고 이미지의 크기를 변환시키지 않고 이미지 크기보다 작은 filter라는 weight을 통해서 convolution 연산을 해주는 것이다. 이 연산을 하게되면 하나의 숫자로 나오게 된다. 그리고 이를 sliding window 처럼 순차적으로 하게되면 하나의 activation map이 생성되게 된다.

convolution gif

Convolution Network는 이와 같은 convolution 연산을 거치고 얕은 곳에 있는 정보를 좀 더 싶은 쪽에 층에서 그 특징들을 합하여지는 형태로 작동된다. CNN은 다음과 같은 그림처럼 작동된다.

CNN

 

## CNN dimension

CNN demenstion

Convoltuion Layer에서 Filter의 크기에 따라 output size가 어떻게 달라지는지 알아보겠다. 위 그림에서 N = 7, F=3이다. 이 경우에선 stride에 따라서 달라진다. stride란 filter가 몇 줄 씩 움직이는지 설정하는 것이다. 위의 gif 에선 한 줄씩 움지이는 것이다. 

Stride에 따른 Output size의 계산 식은 다음과 같다. 여기서 S = stride이다.

$$ \frac{N-F}{S} +1 $$

위의 예제에 대입하면 S = 1일 떄 (7-3)/1 +1 로 5가 되고 5x5 output size가 도출된다.

만약에 2이면 (7-3)/2 +1 로 output size는 3x3이 된다. 그러면 만약에 stride = 3 이면 output size는 2.33 이 되는데 이런 경우에는 어떻게 할까?

이런 경우엔 zero padding을 통해서 이미지의 겉부분을 0으로 채워주는 것이다. 그림은 다음과 같다.

zero padding

그러면 N = 9 F=3 S = 3 이 되므로 (9-3)/3 + 2 으로 ouput size 4x4 가 된다. 

만약에 컨볼루션 연산을 거쳐도 이미지의 크기를 그대로 유지시키고 싶으면 zero padding을 (F-1)/2 만큼 zero padding을 하게 되면 이미지의 크기는 그래도 유지된다.

이러한 방법을 하나의 일반화로 하여 수학적으로 공식화하면 다음과 같은 식이 도출된다.

$$ \frac{W-F+2P}{S} +1 $$

W = width, F = filter size, P = padding , S = Stride 이다.

 

## Pooling / FC Layer

Pooling은 이미지의 크기를 downsampling 즉, 줄여주는 것이다. 

pooling의 방법 중 하나는 Max Pooling 이다. 이는 다음의 그림과 같다.

max pooling

max pooling은 filter size에서 가장 큰 값을 반환하는 것이다. 만약에 그 필터 내의 숫자의 평균을 반환하면 이는 Average pooling이 되는 것이다. 매우 간단하다. 

Max Pooling을 통해 원본 값에서 가장 큰 신호만 통과시켜서 가장 큰 특징들만 뽑아내서 줄이는 것이 Max Pooling이다. 

FC(Fully Connected) Layer는 각각의 값이 중요하고 고차원적인 정보를 가지고 있을 때 모든 정보를 보기 위해서 사용된다. 따라서 Convolution 층을 통과하고 그러한 값들을 FC Layer를 거쳐서 압축된 모든 정보를 모두 살펴보고 이를 통해서 분류를 이뤄낸다. 

 

반응형

'딥러닝 기초' 카테고리의 다른 글

Advanced Architectures of CNN  (0) 2021.08.21
Advanced Optimizer than SGD  (0) 2021.08.14
Overfitting, Regularization  (0) 2021.08.01
코드에서 파라미터 최적화  (0) 2021.07.28
MultiLayer Perceptron  (0) 2021.07.26

댓글