본문 바로가기

파이썬/머신러닝

[#E16] Convolution Neural Network (CNN - 준비편)

CONVOLUTION NEURAL NETWORK는 합성곱 신경망으로 시각적 이미지를 분석하는데 사용되는 인공 신경망입니다. 


이것은 여러 개의 CONV 레이어, RELU 레이어, POOL 레이어, 그리고 마지막으로 모든 레이어가 하나로 연결된 FULLY CONNECTED Layer로 구성됩니다.


예시로 아래의 그림은 자동차 이미지를 CNN으로 인식하는 과정의 구성을 나타낸 것입니다.


 

그림과 같이, 이미지를 작은 부분으로 잘라내어 (Filter) 입력에 넘기는 레이어가 바로 CONV 레이어입니다. 이 필터는 이미지의 모든 부분을 훑어오게 됩니다.


 

위의 그림에서 32X32는 각 픽셀 수를, 마지막 3은 색을 나타냅니다. 이 임의의 이미지에서 5 X 5 필터를 이용할 때, 각 필터에 담긴 이미지는 Wx+b(weight)의 값을 가지게 됩니다.

 

*여기서 값에 ReLU를 호출하면 ReLU 레이어가 됩니다.

 

*필터의 값은 사용자가 임의로 정할 수 있습니다.

 



위와 같이 7X7 이미지에서 3X3 필터를 이용한다고 가정합니다. 필터는 이미지 전체를 훑어오는데(output), 이 output의 크기는 stride에 따라 달라집니다.


그림에서 stride가 1일 경우 output은 5X5가 되고, 2일 경우 3X3이 됩니다. output 크기를 구하는 공식은 ((N - F) / stride)+1 입니다.


만약 원본이미지와 크기가 같은 output을 출력하고 싶다면 zero-paded section을 이용할 수 있습니다.

예시로 7X7 이미지에서 7X7 output을 얻고 싶다면 다음과 같이 구성할 수 있습니다.


 

이 방법으로 원본 이미지와 크기가 같은 output을 얻을 수 있습니다.


이렇게 다양한 output을 출력하는 필터들은 여러 개를 사용할 수 있는데, 이는 Activation Map으로 표현할 수 있습니다.


 

위와 같이 4개의 필터로 구성된 ActivationMaps의 구조는 (28, 28, 4) 입니다. 위의 그림에서 각 Filter는 상이한 Weight 값을 갖습니다. 

이러한 ActivationMaps에도 또 다시 필터를 추가할 수 있습니다.


이런 과정이 반복되어 CONV 레이어가 구성됩니다.

 

이제 POOL 레이어에 대해 알아보겠습니다.



 

Pooling 과정은 다음과 같이 CONV 레이어에서 하나의 레이어를 뽑아내고, 이를 Resize(sampling) 시키는 것을 반복합니다.


따라서 모든 CONV 레이어가 RESIZE되어 결국 Pooling Result가 됩니다. 이것이 결국 POOL 레이어입니다.


RESIZE는 아래 그림과 같이 Max Pooling을 이용합니다.



2X2 필터에 Stride가 2이므로 output은 공식에 의해 2X2의 출력입니다. Max Pooling에서는 필터가 움직이면서 최고 값을 뽑아오기 때문에 각각 6, 8, 3, 4의 값을 가져옵니다.


 

다시 위의 그림으로 돌아가서, Fully Connected Layer (FC) 는 마지막 결과에서 나온 데이터(x)를 받아, Softmax 함수를 이용하여 5가지 분류 중 해당되는 것을 찾아냅니다.


Softmax를 이용하는 이유는 다음을 참고하세요. [#E6 : Mulitinomial Logistic Classification [Softmax Regression]]