Pooling Layer란?
CNN에는 Convolutional Layer 외에도 Pooling Layer라는 특징적인 레이어가 있다.
Pooling Layer는 단어 그대로 Pooling 연산이 이루어지는 레이어인데, Pooling Layer의 목적은 다운샘플링을 하는 것이다.
다운샘플링
이미지에서 다운샘플링이란, 동일한 이미지를 좀 더 적은량의 정보로 표현하는 것이다.
예를 들어 가로x세로 100px의 이미지를 50x50픽셀로 해상도를 절반으로 줄인다고 생각하면 된다.
Pooling 연산
Pooling 연산은 Convolution 연산과 비슷하게 이미지의 kernel을 옮겨 가면서 적용하는 데, 보통 stride를 2로 움직인다.
마찬가지로 이 영역을 대표하는 값 하나를 출력한다는 점에서 Convolution과 동일하다.
다만 Pooling은 학습되는 파라미터의 값이 있는 것이 아니고, kernel의 사이즈와 종류만 존재한다.
Pooling 방식
Max Pooling
Pooling에는 크게 두 가지 방법이 있는데, 가장 많이 사용하는 방식은 max pooling이다.
max pooling은 지정된 영역의 값중에서 가장 큰 을 뽑아낸다.
Average Pooling
average pooling 방식은 가끔 사용되는데 영역 내 모든 값의 평균을 구하는 방식이다.
즉, Pooling은 특정 영역에서 중요하다고 생각되는 정보만을 남겨서 요약해주는 기능을 한다.
Pooling 장점
Pooling을 하면 보통 더 작은 사이즈의 Feature Map을 얻을 수 있는데, 이렇게 하면 모델의 복잡도를 낮춰 Overfitting도 방지하고 계산량도 줄일 수 있게 된다.
결국 중요한 정보를 유지하면서 Feature Map의 사이즈를 줄여서 모델의 일반화 능력을 향상시키는데 도움이 된다.
또한 이미지 안에 있는 객체의 크기, 각도, 위치가 조금 변형되어도 이를 잘 인식할 수 있는 특징이 있는데, 왜냐하면 Pooling 연산에서는 kernel 크기 안에서의 값의 위치 변화는 결과에 영향이 없기 때문이다.
아래 이미지를 보면 Pooling을 적용하는 영역에서 위치가 변해도 Pooling의 결과는 같은 것을 볼 수 있다.
따라서 Pooling Layer는 국소적인 부분에 대해 Feature의 정확한 위치보다는 존재 여부에 더 집중할 수 있게 해준다.
Pooling도 마찬가지로 Kernel Size를 가지는데 보통 2x2 또는 3x3을 사용하게 된다.
Pooling은 Feature Map의 크기를 줄이기 위해 사용하는데 보통 Stride값을 2를 사용하여 입력을 절반으로 줄인다.
마찬가지로 Feature Map을 줄이기 위해 대부분 패딩은 적용하지 않는다.
Convolutional Layer에 이어 Pooling이라는 Layer에 대해 배워보았다.
여기에 실제로는 Convolutional Layer의 출력에 activation function을 적용하여 비선형성을 학습하는 부분이 들어가기도 한다.
지금까지 Convolutional Network를 구성하는 기본 요소에 대해 모두 알아보았다. CNN은 이 두가지 Layer를 기본으로 여러조합을 통해 Layer를 쌓아 올려 구성하게 된다.