합성곱 층

CNN이란 Convolutional Neural Network으로 convolution layer과 pooling layer으로 이루어져 있다. 이 때 합성곱 층인 convolution layer은 filter과 stride를 통해 이미지의 특성을 뽑아내는데 일조하는 layer이다.

Untitled

위 이미지와 같이 일반적인 DNN은 Translation Invariance라는 문제점이 있었다(이는 바로 뒤에서 간단하게 다루도록 하겠다). DNN이란 Deep Neural Network로 앞선 딥러닝 부분에서 배운 퍼셉트론들이 모두 연결되에 여러 층에 걸쳐 존재하는 신경망이다. 하지만 이러한 문제는 왜 발생하고, 그렇다면 CNN은 왜 이러한 문제에서 조금 더 자유로운지 간단하게 살펴보자.

자, 1을 검정색으로 가정하고 0을 흰색으로 가정하자. 그렇다면 아래의 이미지는 어떠한 형태일까?

Untitled

맨 위의 이미지를 표현하면 다음과 같다.

0 1 0
0 1 0
0 1 0

즉, 숫자 1의 형태를 띄는 그림이 나올 것이다. 앞서 확인하였던 Translation Invariance라는 문제를 다시 가지고 와보자. 예를 들어 1을 옆으로 옮긴 이미지와 눞인 이미지가 있다고 가정하자. 이를 표로 나타내면 다음과 같을 것이다.

옮긴 1

0 0 1
0 0 1
0 0 1

눞힌 1

0 0 0
1 1 1
0 0 0

자 그렇다면 일반적인 DNN을 한 번 통과시켜 보자.

간단하게 DNN을 통과시켰다고 하고 이미지를 펼치면 첫 숫자 1의 이미지, 옮긴 1, 눞힌 1의 이미지는 다음과 같이 표현이 가능할 것이다.

이미지 1 2 3 4 5 6 7 8 9
원본 1 0 1 0 0 1 0 0 1 0
옮긴 1 0 0 1 0 0 1 0 0 1
눞힌 1 0 0 0 1 1 1 0 0 0

위의 표의 1~9번 인덱스를 보고 같은 이미지라고 구분할 수 있을까? 단언컨데 이는 매우 어려울 것이다.

그렇다면 이 대목에서 CNN을 다시 돌아보자. 앞서 CNN은 filter을 사용한다고 하였다. 필터란 위 사진에서 확인할 수 있는 것처럼 특정 크기의 값이 정해진 행렬이라고 볼 수 있다. Convolution의 수학적 개념이 필터를 사용하는 개념이기에 딥러닝에서도 동일하게 필터를 사용한다. 이 행렬을 이미지에서 옮겨가며 곱하여 준 후에 pooling을 진행한다(예로 maxpooling은 max값을 취한다는 것이다).

위 사진의 필터를 이미지들에 적용시켜 보자. 원본 1의 이미지에 필터를 사용하면 다음과 같은 결과가 나올 것이다(특정 위치의 필터값과 이미지의 값을 곱하여준다. 그 후 나오는 4개의 값 중 max값을 취하여 주자.). 결과를 보자.