[Tensorflow]15.Convolutional Neural Network(1)


Convolutional Neural Network(1)



이번시간에는 neural network의 응용인 CNN(Convolutional Neural Network)에 대해서 배워보겠습니다.

CNN이란 이미지를 이해하고 이로부터 고수준의 추상화된 정보를 추출하는 인공신경망의 한 종류입니다.

CNN을 이용하면 컴퓨터가 사진을 인식할 수 있게 되는데요~ 정말 대단하죠??

MNIST도 어떻게 보면 손글씨 사진을 컴퓨터가 인식하는 것인데,
CNN을 이용하면 더 정확하게 구현할 수 있습니다.

image



Neural network에서는 여러 layer를 사용하여 학습을 하였죠~~
그것은 단순히 어떤 층의 출력 값을 다음 층의 입력 값으로 이용한 것이였습니다.
위의 그림에서 Fully connected 부분에 해당하는게 바로 그것이고 이는 분류를 담당합니다.

CNN은 Fully connected 부분 외에 2종류의 layer가 더 존재합니다.
크게 보면 총 3단계로 이루워졌다고 보면 되는데 다음과 같습니다.

  1. Convolution layer (특징을 추출하는 단계)

  2. Pooling layer (Network 변화에 영향을 받지 않게 하는 단계)

  3. Fully connected (분류기단계)

생소하시죠~ 한번 알아볼까요??



1. Convolution layer



Convolution layer는 이미지의 특징을 추출하는 단계입니다.
커다란 이미지의 특징 만을 추출해서 학습을 하면 그러지 않는 것보다 학습이 더 잘 됩니다~~

특징을 추출할 때는 filter라는 것을 이용하는데,
바로 이 filter가 이미지를 훑으면서 특징을 추출합니다~

보통 이미지와 필터는 다음과 같이 3차원 벡터로 표현됩니다.
그리고 필터의 크기는 이미지의 크기보다 작습니다.

width * height * depth 



width는 가로픽셀길이, height는 세로픽셀길이, depth는 보통 색을 나타냅니다.
(단, 필터 후의 이미지에서 depth는 필터의 개수를 의미합니다~)

convolution 과정을 더 자세히 알아볼까요??

예를들어 이미지(푸른색)의 크기가 32 * 32 * 3 , 필터의 크기(붉은색)는 5 * 5 * 3 이라고 합시다.

image



먼저, 붉은 부분(필터)에 겹쳐지는 푸른 부분(이미지)에서 하나의 숫자를 추출합니다
그런 다음에 붉은 부분이 옆으로 이동하여 또 겹쳐지는 푸른 부분(이미지)에서 하나의 숫자를 추출합니다.

image



이런식으로 계속 필터가 이동하면서 그 범위에서 하나의 숫자를 추출합니다.

해당 범위에서 나오는 숫자가 그 이미지의 특징이라고 생각하시면 됩니다~~

filter가 이동하는 정도를 stride라고 하는데 알아두셔야 합니다!!



만약, 위의 예에서 필터가 이미지 전부를 훑으면 필터 후 이미지의 크기는 28 * 28 * 3 이 됩니다.

필터 후 이미지의 크기(output size)는 다음과 같이 구하는데 참고하시길 바랍니다~~

image



output의 사이즈를 처음 사이즈와 일치시키려고 PADDING이라는 기법을 이용하는데,

자세한 설명은 생략할게요~~~~



이와같이 이미지에서 필터를 이용하여 범위마다 하나씩 숫자를 꺼내는 역할을 하는 층이 Convolution layer입니다~

2. Pooling layer



Pooling layer 은 학습이 네트워크 변화에 영향을 받지 않게 해줍니다
쉽게 말해서 어떤 특정한 데이터에 치우쳐서 학습이 되지 않게 해주는 역할을 합니다.

예전에 drop out이라고 데이터 일부만을 사용하여 학습했던 것을 기억하시나요??
그것과 비슷한 역할을 한다고 생각하시면 됩니다

image



이미지 전부를 사용하지 않고 일부만 사용하게 해줍니다~~
그렇기에 이 층을 거치면 크기가 줄어들게 됩니다.

내용이 많이 어렵죠 ㅠㅠ 하지만 금방 익숙해지실겁니다~!
그럼 다음 장에서 tensorflow로 이 개념들을 구현해보고 익히는 시간을 갖겠습니다!!!