합성곱(Convolution)은 하나의 함수와 또 다른 함수를 반전 이동하여 값을 곱한 다음 구간에 대한 적분을 통해 새로운 함수를 구하는 연산자에 해당한다. 합성곱을 이용하면 이미지 간의 특징을 추출할 수 있는 필터링을 할 수 있다.
합성곱의 연산을 이용하면 수직 혹은 수평과 관련된 모서리의 특징을 부각시켜 필터링을 할 수 있게 된다.
위의 사진은 수직필터(vertical edge filter)를 이용하여 합성곱을 취한 결과를 보여준다. 각 숫자를 픽셀의 색을 나타내는 값으로 가정하였을 때 보다 좌우가 선명하게 필터링이 된 모습을 볼 수 있다. 이러한 합성곱에 의한 필터링은 수직, 수평 뿐만 아닌 프로그래머가 임의로 지정한 필터를 통해 원하는 특징을 선별적으로 추출할 수 있다는 장점이 존재한다.
합성곱의 연산과정은 다음과 같은 요소로 결정된다.
위의 방식으로 필터링의 결과를 가진다.
CNN의 경우 각 층에서 다수의 필터를 통해서 이미지의 특징을 추출하게된다.
위의 그림은 필터 2개를 이용한 후에 활성함수로 Relu함수를 이용해 새로운 결과값을 만드는 과정을 나타낸 것이다. 오차값(bias)은 생략하였다.
CNN에서 L번째 측에서의 표기법을 살펴보자 기본적인 합성곱의 문자는 Convolve operation 부분과 동일하다.
Input:
Output:
Filter:
Activations:
Weights:
Biast:
풀링(Pooling)은 필터링과 유사한 개념으로 필터 사이즈에 맞추어 특정 규칙에 따라 특징을 추출한다. 대표적으로 최대치 풀링(Max pooling)과 평균치 풀링(Average pooling)이 있으며 특정 규칙에 따라서 풀링이 이루어지기 때문에 학습을 위한 파라미터는 존재하지 않는다는 특징이 있다. 또한 풀링의 경우는 어느 부분에서나 특징을 잘 감지하기 위해서 사용을 하며 풀링의 경우는 패딩을 따로 설정하지는 않는다.
그렇다면 우리는 왜 이미지를 처리하는 과정에서 CNN을 사용하는 거일까? 크게 두가지 관점에서 볼 수 있다.
실제 상황에서 이미지는 다양한 크기를 가지게된다. 이는 이미지의 크기에 따라서 중점을 둬야할 파라미터의 수가 변한다는 말과 동치이다. 이런 상황에서는 모든 이미지의 사이즈를 동일하게 하는 과정을 하는 부가적인 작업이 필요로하게된다.
하지만 합성곱을 이용하면 이미지 자체가 아니라 필터의 종류와 개수에 따라서 학습해야할 변수의 개수가 결정된다. 이는 어떠한 이미지가 오더라도 유사한 성능을 낼 수 있는 필터를 일반적으로 적용할 수 있다는 말이된다. 즉, 잘 학습된 필터를 이용하면 필터의 파라미터를 공유하면서 다양한 이미지 처리에 이용이 될 수 있다.
필터링을 거져나온 결과(ouput)들이 다시 다음 층의 입력값(input)으로 들어갈 때 필터링을 거치면서 특징을 추출한 상태로 크기가 점점 줄게되는 특징이 있다. 이는 학습하는 과정에서 학습을 빠르고 워활하게 만드는 효과를 가진다.
이해를 돕기위해 다른 방식으로 설명을 하자면, 합성곱 신경망에서 필터는 이미지 파일의 일부에 대한 합성곱 연산을 적용하게된다. 이는 필터가 적용되지 않는 픽셀의 경우는 모두 0으로 보아도 되는데 이와 같이 신경망이 밀도있게 학습되는 것이 아닌 밀도를 줄인(sparse) 형태가 된다. 이러한 가벼운 형태의 신경망의 경우 드랍아웃과 비슷한 방식의 효과로 인해 일반화(regularization)이 생길 수 있다는 장점도 포함한다.