배워서 남 주자

AI/Deep Learning

[CNN] CNN에서 pooling이란?

신라면순한맛 2022. 8. 14. 21:13

* 2020년에 medium에서 썼었던 글을 tistory로 옮긴 것입니다.

* 이전 글에서 아랫 부분에 설명이 애매한 부분이 있어 삭제하고 새로 작성하였습니다.

* https://hobinjeong.medium.com/cnn%EC%97%90%EC%84%9C-pooling%EC%9D%B4%EB%9E%80-c4e01aa83c83

 

CNN에서 pooling이란?

* 20.12.22. update, 블로그 옮겼습니다. 공교롭게도 이 블로그를 시작하자마자 취직을 해서 글을 이어쓸 수 없었네요. 이제라도 다시 시작하려고 합니다.

hobinjeong.medium.com

 

이번 포스트는 지난 CNN의 introduction의 후속입니다. 혹시나 CNN을 잘 모르거나 헷갈리시는 분들은 [CNN] CNN이란?에서 확인해보시기 바랍니다.

 


 

김성훈교수님의 강의에서는 Pooling을 다음과 같이 정의합니다:

Convolution을 거쳐서 나온 activation maps이 있을 때,
이를 이루는 convolution layer을 resizing하여 새로운 layer를 얻는 것

 

하지만 다른 강의에서는 pooling을 convolution의 후속과정이 아닌 별도의 개념으로 정의합니다. 예를 들어 convolution을 matrix 연산에 의해 얻는 것이라면, pooling은 matrix 연산을 사용하지 않고 각 pixel에서 하나의 값을 뽑아내는 과정으로도 이해할 수 있습니다. 

 


 

이러한 pooling에는 최댓값을 뽑아내는 max pooling, 평균값을 뽑아내는 mean pooling등 다양한 종류가 있습니다. 그 중에서 강연 중 예를 들고 있는 max pooling에 대해 알아보도록 하겠습니다.

 

각 영역에서 최댓값을 대푯값으로서 뽑아낸다.

 

 

위와 같은 data가 주어져있다고 해봅시다. 여기서 우리는 stride가 2일 때 2x2 filter를 통하여 max pooling을 하려고 합니다. 방법은 아주 간단합니다. 첫 번째 빨간색 사각형 안의 숫자 1,1,5,6 중에서 가장 큰 수인 6을 찾습니다. 다음 초록색 사각형 안의 숫자인 2,4,7,8 중에서 가장 큰 수인 8을 찾고… 이와 같은 과정을 반복하면 오른쪽의 상자 6,8,3,4를 얻을 수 있습니다. 간단하죠?

 


 

그렇다면 이와 같은 pooling은 왜 하는 걸까요? 이유는 바로 overfitting을 방지하기 위해서입니다. Overfitting이라는 것은 결국 training dataset에 parameter가 과적합되어 test 환경에서의 generality가 떨어지는 것인데요. 그 원인은 여러가지가 있겠지만, 그 중 하나로 주어진 training dataset의 양에 비해 network의 parameter가 너무 많아서 capacity가 올라가는 정도가 아니라 아예 training data manifold를 통째로 외어버리는 상황이 바로 overfitting의 한 사례가 되겠습니다. 이런 경우 중간중간에 pooling을 넣어줘서 정보량을 축소시키면 overfitting을 해소하는데 어느 정도 도움을 줄 것입니다.

 

당연히 pooling에도 여러 종류가 있기에 (e.g. max-pooling, average pooling, stochastic pooling, ...) 각자의 network에 맞게 pooling을 둬야 할 것입니다. 

 

 


 

이번 포스트는 여기까지 하도록 하겠습니다.

 

'AI > Deep Learning' 카테고리의 다른 글

[CNN] CNN이란?  (0) 2022.08.14