38. ConvNet Max pooling 과 Full Network (lec 11-2)


이번 동영상에서는 CNN을 구성하는 핵심 요소인 pooling과 fully connected에 대해 설명한다.


보기만 해도 머리 아픈 CNN 구성도. 개인적으로 이 그림에서 중요하게 볼 것은 자동차 그림이 뒤로 갈수록 애매해 진다는 사실. 작긴 하지만, 앞쪽에 위치한 자동차는 선명한 반면, 뒤쪽의 자동차는 알아볼 수 없다.

이와 같이 선명한 이미지를 애매하게 만들어 그룹으로 구분하는 것이 CNN의 핵심이 아닐까 생각한다. 그래야 처음에는 달랐지만, 유사했던 이미지를 '같다'라고 판단할 수 있게 된다.


pooling의 다른 말은 sampling 또는 resizing이다. pooling은 모은다는 뜻이고, sampling은 고른다는 뜻이고, resizing은 크기를 바꾼다는 뜻이다. 어떤 작업을 하건 pooling을 거치면 크기가 작아진다는 것이 핵심이다. 이번 그림에서는 convolutional layer에 사용된 그림이 1/2 정도로 작아졌다는 것을 보여준다. activation map이라고 불렀던 채널(channel)의 두께는 바뀌지 않는다.


여러 가지 pooling 기법 중에서 가장 많이 사용하는 Max Pooling에 대해 설명한다. 여러 개의 값 중에서 가장 큰 값을 꺼내서 모아 놓는 것을 뜻한다.

convolutional layer에서는 필터(W)를 곱해서 새로운 출력 결과를 만들어 낸다. 그러나, pooling에서는 단순하게 존재하는 값 중에서 하나를 선택한다. 여기서도 필터를 사용한다고 하는데, 앞에 나온 필터와 헷갈리면 안 된다. pooling에는 최소값을 선택하거나 평균이나 표준편차를 계산하는 등의 다양한 방법들이 있고, CNN에서는 가장 큰 값을 선택하는 Max Pooling을 주로 사용한다.

4x4로 이루어진 출력 결과에 대해 2x2 필터를 사용해서 4개 영역으로 구분한다. 필터가 이동하는 크기인 stride는 필터 크기와 동일하게 2로 설정했다. 그래서, 결과는 2x2가 된다. 필터가 가리키는 영역에서 가장 큰 값을 선택했다.


CNN 이전까지 배운 형태의 layer를 FC(Fully Connected) layer라고 부른다. 말 그대로 처음부터 끝까지 하나로 연결되어 있다는 뜻이다. 이번 그림에서는 최종 결과물이 5개 중의 하나이므로 5개 중에서 하나를 선택하는 softmax가 들어가게 된다.


CNN 코드가 동작하는 것을 시각적으로 보여주고 있는 사이트를 알려 주셨다. 정말 눈여겨 봐야 할 것이 위에 있는 그림처럼 convolutional layer를 거칠 때마다 그림이 거칠어 지는 것이다. 실제 거칠어지는 모습을 시각적으로 확인할 수 있다. 그림에 나온 웹사이트는 그림이어서 클릭할 수 없다. 속지 말자!

  http://cs.stanford.edu/people/karpathy/convnetjs/demo/cifar10.html