돌아서면 까먹어서

ML 개념 정리 - CNN(Convolutional Neural Network) 18.12.01 본문

ML/ETC

ML 개념 정리 - CNN(Convolutional Neural Network) 18.12.01

양갱맨 2018. 12. 1. 20:11

CNN에서 언급되는 용어의 개념과 관계에 대해 정리해보자


1. convolution layer

2. Pooling layer

3. Fully Connected layer

4. Filter

5. Feature map(activation map)

6. stride

7. padding

8. 1x1 conv layer





<CNN은 classification model>


먼저 convolution layer를 보면,

입력 이미지의 구조를 변형시키지 않은채로 그대로 width x height x depth 형태로 사용한다.

filter가 아래 이미지 처럼 input image를 슬라이딩 하면서 feature를 계산한다.

결과적으로 한 filter가 input image를 다 거치고 나면 feature map(activation map)을 한장 생성한다.

이런식으로 여러개의 필터가 input image를 슬라이딩하면서 각각의 feature를 계산해서 feature map을 생성한다.

즉, feature map의 수 = filter 개수 = output depth


왜 여러개 필터를 사용할까?

-> 필터마다 각각 다른 특징을 추출하기 때문에 한 이미지에서 같은 부분을 보더라도 필터마다 다른 특징을 추출한다.


슬라이딩은 어떻게 하는가?

슬라이딩을 하는 간격을 stride라고 한다.

stride 공식

(input width+2*pad-filter width)/stride+1

한 영역에서 내적을 통해 feature값을 얻으면 슬라이딩 해서 또 얻고 이렇게 반복한다.


왜 32x32x3 input image 에서 feature map은 28x28x1이 되었는가?


feature map의 크기는 슬라이딩을 어떻게 하냐에 따라 다르다.

필터가 돌면서 가장자리 부분까지 다 제대로 계산하려면 (크기를 유지하려면) Padding이라는 것을 사용한다.


이런 feature map이 쌓여서 filter 수 만큼의 depth를 가진 output이 되는 것이라고 이해했다.


1x1 convolution layer는 무엇일까?

1x1 conv layer를 적용하는 것이 어떤 의미인지 아는 것이 중요하다.

앞에서 봤듯이 filter를 적용하면 depth가 filter의 수가 된다.

1x1 conv layer는 다른건 놔두고 depth를 조정하겠다라는 의미이다.

input feature들의 linear combination이기 때문에 depth만 조정이 가능한 것이다.





pooling layer는 무엇일까?

down sampling이라고 생각하면 된다.

representation resizing이다.

size를 줄여서 parameter 수를 줄인다.


앞에서 본 1x1 conv layer와는 다르게 depth는 놔두고 width, height를 조정하는 것이다.

이 둘을 사용하는 공통된 이유는 계산량을 줄이기 위해서이다.


pooling은 여러 종류가 있는데 대표적인 max pooling은

위 그림과 같이 기본적으로 겹치지 않게 stride를 정한다.

pooling은 padding도 하지 않는데 이유는 conv layer처럼 wieght를 계산하는 것이 아니라 그냥 사이즈를 줄이는 것이기 때문이다.


max pooling은 영역 내에서 가장 큰 값을 기준으로 down sampling 한다.





마지막으로 Fully Connected layer는 무엇일까?

conv layer처럼 input 이미지 구조를 그대로 유지하는 것이 아니라

1차원으로 쭉 펴서 계산한다.

10x3072의 weight 가 있을때, 32x32x3 input을 1차원으로 펴서 1x3072로 바꿔

W와 x를 내적하면 1x10 feature map이 생성된다.


FC layer는 주로 앞에서 계산한 값들을 지막에 class로 표현할 때 사용한다.

FC layer는 계산량이 많기때문에 사용하지 않기도 한다.





이 포스팅은 http://cs231n.stanford.edu 를 바탕으로 작성했습니다.

* 잘못된 부분은 댓글로 남겨주세요.

Comments