풀링
합성곱 신경망에서는 특별히 합성곱이 일어나는 층을 합성곱층, 풀링이 일어나는 층을 풀링층이라 한다.
합성곱층과 풀링층에서 만들어진 결과를 특성 맵(feature map)이라고 부른다.
RGB 컬러 채널을 가진 입력 이미지가 합성곱층과 폴링층을 거치면서 변환되는 과정을 보자.
입력이 합성곱층을 통과할 때 합성곱과 활성화 함수가 적용되어 특성 맵이 만들어진다.
그런 다음 특성 맵이 풀링층을 통과하여 또 다른 특성 맵이 만들어진다.
이렇게 합성곱층 뒤에 풀링층이 뒤따르는 형태는 합성곱 신경망의 전형적인 모습이다.
특성 맵을 스캔 하며 최댓값을 고르는 모습을 나타낸 것이다.
이를 최대 풀링(max poolling)이라고 한다.
폴링 영역의 크기는 보통 2 x 2를 지정한다. 일반적으로 스트라이드는 풀링의 한 모서리 크기로 지정한다.
즉, 스트라이드는 2를 적용하여 폴링 영역이 겹쳐지지 않도록 한다.
2 x 2 풀링은 특성 맵의 크기를 절반으로 줄인다.
특성 맵의 크기를 절반으로 줄이면 특성 맵의 한 요소가 입력의 더 넓은 영역을 바라볼 수 있는 효과를 얻을 수 있다.
평균 풀링(average pooling)은 풀링 영역의 평균값을 계산한다.
보통의 경우 평균 풀링보다 최대 풀링을 선호한다.
평균 풀링은 합성곱층을 통과하는 특징들을 희석시킬 가능성이 높기 때문이다.
입력에서 합성곱 필터가 찾고자 하는 부분은 특성 맵의 가장 큰 값으로 활성화되는데 평균 풀링은 가장 큰 특성의 값을 상쇄시키기 때문이다.
최대 풀링과 평균 풀링 수행
import numpy as np
x = np.arange(1,17)
x = x.reshape(1,4,4,1)
x
max_pool2d()함수를 사용해보자.
import tensorflow as tf
p_out = tf.nn.max_pool2d(x, ksize=2, strides=2, padding='VALID')
p_out.numpy().reshape(2, 2)
성공적으로 최대 풀링이 된것 같다.
풀링층에는 학습되는 가중치가 없다. 또한 풀링은 배치 차원이나 채널 차원으로 적용되지 않는다.
즉, 풀링층을 통과하기 전후로 배치 크기와 채널 크기는 동일하다.