지금까지 배운 다층신경망(MLP)는 각 뉴런들이 선형모델과 활성함수로 모두 연결된 fully connected
구조였다. 그러나 이것의 문제점은 각 성분 에 대응하는 가중치행 가 모든 성분에 대해 필요하다. 즉, 가중치 행렬의 사이즈가 너무 커진다
는 문제가 있다.
Convolution 연산은 이를 해결하기 위한 구조이다.
커널(kernel)이라는 고정된 벡터/행렬을 입력벡터 상에서 움직여가며 적용
하는 구조이다. 이를 통해 파라미터 사이즈를 대폭 줄일 수 있게 된 것이다.
convolution 연산의 수학적 의미는 신호(signal)를 커널(kernel)을 이용해 국소적으로 증폭 또는 감소
시켜 정보를 추출 또는 필터링
하는 것이다. 아래 식에서 g가 신호, f가 커널라고 생각하면 된다.
그런데 사실 CNN에서 사용되는 연산은 엄밀히는 convolution이 아니라 cross-correlation이다.
왜냐하면 아래 나와있는 것처럼 -가 아니라 + term이기 때문이다. 그래도 전체 공간에서는 +인지 -인지 중요하지 않다. 다만 컴퓨터에서는 convolution과 cross correlation은 차이가 크니 인지해두고 있자. 관용적으로는 ML분야에서 이 과정을 cross correlation이 아니라 convolution이라고 부르고 있다.
입력 데이터의 성격에 따라 사용하는 커널의 차원이 달라지게 된다.
예를 들면, 음성이나 텍스트 데이터는 1D-conv, 칼라 영상과 같은 데이터는 3D-conv를 사용하게 된다.
여기서 중요한 것은 element-wise multiplication
이라는 점이다. 아래 예시를 통해 확인해보자.
다음으로 중요한 것은 convolution 연산 후 출력되는 함수의 크기가 어떻게 되는지
를 알아야 한다.
이를 직육면체 블록으로 표현하면서 출력벡터까지 보여주자면 다음과 같다. 아래 이미지에 나와있듯이, 커널과 입력벡터의 채널수는 같아야한다.
아래의 경우 출력벡터의 채널수는 1이 된다.
만약, 출력벡터가 채널을 가지게 하고 싶다면?
커널의 개수를 늘리면 된다.
(참고) 채널과 깊이의 차이
convolution은 미분해도 convolution이 나온다. 따라서 역전파를 계산할 때에도 convolution 연산이 나오게 된다.
우선 forward propagation 과정을 설명해보면 다음과 같다.
자 그럼 back propagation은 어떻게 될까?
세부적인 과정은 다음과 같다.
이동하면서 각각의 커널이 입력 x3 뿐만 아니라 다른 입력에서도 차례대로 적용되었기 때문에 다음과 같은 모양이 나온다.
위의 과정을 한번에 식으로 나타내면 다음과 같다.