반응형

 본 게시글은 필자가 강의, 책 등을 통해 개인적으로 학습한 것으로

본문의 모든 정보는 출처를 기반으로 작성되었습니다.

 

 CNN, ConvNet(Convolutional Neural Network)은 합성곱 신경망이라고도 불린다. 

지난번 MNIST의 경우 작은 사이즈의 2차원 이미지를 단순히 1차원으로 reshape하여

학습에 적용했는데, 이는 이미지의 크기가 작고, 모양이 심플했기에 가능했다.

 

하지만 이미지가 커지고 복잡해질수록 이와 같은 방식의 학습은 이미지의 '공간적' 특징을 

고려하지 못하고 traning set에만 과적합하는 오류가 발생하게 된다.

 

따라서 이미지가 갖는 '공간적' 특징을 그대로 유지하며 학습에 적용할 수 있도록 하는

계층이 필요한데, 바로 Convolutional Layer와 Pooling Layer다.

 

 

Convolutional Layer

 CNN의 feature extraction에 있어 핵심적인 요소이다.

Conv Layer는 original Image를 한 번에 취급하지 않고 일정 부분별로 읽어가며 각 부분을 가중치에 따라 

calculate하여 하나의 값으로 뽑아낸다. 이 때 'data를 읽는 단위가 되는 범위'를 filter라고 한다. 

 

출처 링크 : 사진 클릭

 

위의 그림은 8(height)*8(width)*3(RGB color intensity) image를 3*3*3 filter를 사용하여 

하나의 값으로 추출하는 것을 간단하게 보여준다. 

덧붙이면, 위의 사진에서 filter(회색 큐브)는 27개의 weight를 가지고 있으며 기존의 image에 대한

27개의 값에 각각 가중치를 곱한뒤 sum하여 하나의 값을 얻어낸다. 

 

이렇게 전체 image를 하나의 filter로 읽게 되면 하나의 Feature map이 나오게 된다.

출처 링크: https://www.quora.com/What-is-meant-by-feature-maps-in-convolutional-neural-networks

 

이 Feature map이 의미하는 것은 결국 previous data의 특징을 filter 나름대로 탐지해낸 결과물과

같을 것이다. 따라서 하나의 conv layer에 filter가 여러개라면 더 다양한 이미지 특징 추출 결과물을 

얻는 것이다. (즉, N개의 filter를 사용하는 conv layer의 ouput은 N개의 서로 다른 feature map이 된다.)

하지만 filter의 개수는 항상 많다고 좋은 것은 아니며, data set의 복잡도에 따라 적절한 개수를 찾는 것이

중요하다.

 

(이렇게 convolution된 data는 마지막으로 다른 Layer와 마찬가지로 activation fuction을 포함한다.)

 

 위의 내용과 관련하여 한가지 짚고 넘어가야 할 내용이 있다.Previous data에 대한 feature map의 size가 어떻게 결정되는지 알아보자.feature map의 size를 결정짓는 요소들은 우선 previous data의 size가 있으며, 다음으로 filter의 크기, stride값, padding값이 있다. 

 

1. previous data size : 말 그대로 input되는 data의 크기이다.

2. filter size : input data를 읽을 단위가 되는 블록 사이즈

3. stride : filter를 몇 칸마다 적용할지 결정하는 값이다. 

4. padding : filter size와 stride가 둘 다 1인 경우가 아니라면 결국 output의 size는 input data size 보다

               작아지게 된다. padding은 input data의 둘레에 0값을 값는 pixel을 적절하게 추가하여

               input data size를 증가시킴으로써 output의 size를 원하는 대로 조절할 수 있도록 한다. 

 

결국 ouput data size는,

$outputSize = \displaystyle\frac{(previousSize + padding) - filterSize}{stride} + 1$

와 같음을 알 수 있다.

 

 

 

Pooling Layer

 pooling layer은 다음과 같은 역할을 한다.

1. 학습에 용이하도록 feature map의 size를 줄이는것

2. data의 특징을 더욱 강조하는 것

 

Pooling 방식은 convolution layer의 filtering 개념과 비슷한 느낌으로 이해할 수 있다.

hyper-parameter로 size($f$)와 stride($s$)를 받으며 

filter에서 사용한 개념과 같다. 

 

다음 예시는

size = 2

stride = 2

위의 조건을 가지고 4*4 feature map을 Pooling하는것을 보여준다.

filter안에서 가장 큰 값을 가져오는 Max Pooling과 

       평균 값을 계산하여 가져오는 Avg Pooling 등이 있다.

출처 링크 : 사진 클릭

 

다음은 6*6*3 feature map을 max pooling 한 예시이다.

가장 앞에 있는 Input외에 뒤에 있는 것들도 똑같은 방식으로 pooling한다.

출처 링크 : 사진 클릭

Pooling layer에 대해 알아보았는데,

CNN의 핵심은 학습을 통해 이미지의 공간적 부분을 고려하는 가중치를 포함하는

Convolutional Layer이고, 

Pooling은 학습을 조금 더 용이하게 만들기 위해 선택적으로 사용하는 Layer임을 기억하자. 

 

 

 

이제 다음 그림을 보면 대략적인 CNN의 학습 과정을 이해할 수 있을 것이다.

Architecture of the LeNet-5 Convolutional Neural Network for Handwritten Character Recognition (taken from the 1998 paper).

(Subsampling은 Pooling의 또 다른 말이다)

 

마지막으로 Convolutional Layer와 Pooling Layer의 조합을 거쳐서 나온

Feature map은 FC Layer(Fully-Connected Layer)로 Input하기 위해

Flattening 과정을 통해 1차원 배열로 바꿔준다.

 

다음 단계는 이때까지 해왔던 NN과 같을 것이다.

 

 

 

참고 문헌 및 자료

1. Sung Kim Youtube channel : https://www.youtube.com/channel/UCML9R2ol-l0Ab9OXoNnr7Lw

 

Sung Kim

컴퓨터 소프트웨어와 딥러닝, 영어등 다양한 재미있는 이야기들을 나누는 곳입니다.

www.youtube.com

2. Andrew Ng Coursera class : https://www.coursera.org/learn/machine-learning

3. 조태호(2017). 모두의 딥러닝. 서울: 길벗

반응형

'IT study > 모두를 위한 딥러닝' 카테고리의 다른 글

CNN(3) - ex.2(Ensemble)  (0) 2020.09.03
CNN(2) - ex.1  (0) 2020.09.03
Drop out  (0) 2020.08.25
Weight Initialization  (0) 2020.08.25
ReLU and Sigmoid(tensorboard ex.1)  (0) 2020.08.24

+ Recent posts