* 이 글은 홍콩과기대 김성훈 교수님의 무료 동영상 강좌 "모두를 위한 머신러닝과 딥러닝 강의"를 보고 요점을 정리한 글 입니다.
Convolutional Neural Network(CNN, 합성곱 신경망)
Convolutional Neural Network(CNN, 합성곱 신경망)은 서로 다른 이미지를 볼 때 사용되는 신경세포가 다르다는 사실으로부터 착안된 학습방법입으로 이미지를 인식하는 부분에 있어서 매우 높은 정확도를 갖는 아주 좋은 학습법 입니다.
CNN은 Convolutional Layer, Pooling Layer, Fully Connected Layer 들으로 구성됩니다. Convolutional Layer와 Pooling Layer를 적절하게 여러번 사용한 후 마지막에 Fully Connected Layer를 통하여 하나의 출력값을 구하게 되는데 Convolutional Layer와 Pooling Layer를 너무 많이 사용하게 되면 성능이 저하되는 문제가 나타나기 때문에 Dropout이라는 테크닉이 사용되기도 합니다.
Convolution Layer
CNN은 입력받은 이미지를 작은 부분들로 나누어 각각에 대한 값을 학습하는데 여기서 작은 부분들을 입력받아 Filter라는 것과 Convolution 연산을 수행하는 Layer를 Convolutional Layer라고 부릅니다.
위의 그림과 같이 N x N 크기의 이미지에 F x F 크기의 필터를 적용시켜 연산을 시키면 Equation (1) 크기의 결과물을 얻을 수 있는데 이 결과물을 Feature Map이라고 부릅니다.
$$ \left( \frac{N - F}{Stride} \right) + 1 $$ | (1) |
위의 공식에서 Stride는 Filter가 움직이는 크기를 의미합니다. 모든 연산을 거치면 Filter의 개수 만큼의 Depth를 갖는 Feature Map이 생성되고 생성된 Feature Map은 ReLU Function을 거친 후 다음 Layer의 입력 데이터로 사용됩니다.
Convolution Layer를 거치면 얻을 수 있는 Feature Map의 크기는 Equation (1)에서 확인할 수 있는 값인데, 만약 아무런 설정을 해주지 않고 여러개의 Convolution Layer를 거치게 되면 Feature Map의 크기는 점점 작아지게 됩니다. Feature Map의 크기가 작아진다는 의미는 정보를 잃어버리게 된다는 의미와 같습니다. 따라서 Padding이라는 개념을 사용해 주어 Feature Map의 크기가 작아지지 않게 해 줄 필요성이 있습니다.
Padding은 위의 그림과 같이 입력받은 데이터에 0 이라는 값을 가지고 있는 테두리를 둘러주는 방법입니다. Padding은 위에서 언급한 대로 정보를 잃어버리지 않게 해주기도 하지만 이미지의 테두리가 어디인지 구분해주는 역할을 해주기도 합니다.