


이미지 위에서 일정 크기의 커널 (n x n) 이 윈도우 슬라이딩을 하며 진행하는 연산
각 윈도우에서는 행렬끼리 element-wise하게 곱한 뒤, 그 값을 전부 합해주는 연산이다.
합할 때마다 그 값은 새로운 output의 스칼라 값으로 대응된다
이러한 컨볼루션 연산은 대표적으로 이미지 처리의 필터링에서 쓰인다.

입력 이미지에서 필터로 컨볼루션하면 보통 resolution은 작아지고, channel은 깊어진다. 이를 여러번 반복하면 이미지의 local한 영역이 점차 추상화되면서 채널 영역으로 기다란 vector가 된다.
이미지를 일반적인 MLP (Multi Layer Perceptron) 에 넣으면 단순히 flatten 된 input이 되므로 locality를 보장받지 못하는데, 컨볼루션을 취해서 MLP에 넣으면 locality 특성이 살아있는 피쳐를 input으로 넣어줄 수 있어서 이점이 있다.
그리고 컨볼루션을 하면서 보통은 resolution이 줄어든만큼 channel이 늘어나는 것이 아니므로 전체적으로 파라미터 양이 감소하는 효과도 있다.

Pooling은 쉽게 말하면 지역적인 sampling이다. 일반적으로 가장 많이 쓰이는 Max Pooling은 해당 지역에서 가장 큰 값을 취하는 것이다.
Pooling의 장점은 spatial한 invariance를 갖도록하고, 파라미터를 줄여 연산량을 줄이는 효과가 있다. 파라미터가 줄어들었으므로 메모리 사용량도 줄어드는 것도 있다.

CNN과 Pooling을 반복하여 입력 이미지를 점차 줄인 Feature map을 만들고, 어느정도 피쳐를 줄여서 resolution이 작아졌고 채널 방향으로 길어졌다면, 이를 flatten하여 일차원화 시킨 후에 Fully Connected Layer가 적층된 MLP에 넣어서 최종적인 output을 얻어낸다. output function은 sigmoid, softmax 등이 사용된다.

피쳐 맵을 시각화해보면, 처음에는 edge, blob 등을 인지하는 수준에서 나중에는 더 복잡하고 semantic한 피쳐까지도 인지하는 것을 확인할 수 있다.

