본문 바로가기
딥러닝

CNN의 풀링(Pooling) 이유 및 연산

by 데이널 2024. 2. 23.

 

CNN에서 합성곱 계층(covolution layer)의 역할은 이전 포스팅에서 이야기했는데요. 이제 풀링 계층(pooling layer)의 역할이 무엇이고 어떻게 연산을 하는지 알아보도록 하겠습니다. 

 

딥러닝 모델에서는 Layer를 많이 쌓을수록 더 정확도가 높아지는 것은 어느정도 증명이 되었습니다. 그런데 그냥 무작정 Layer를 쌓으면 될까요? 아마도 성능적인 부분에서 문제가 될 것입니다. 그렇다면 어떻게 하면 효과적으로 Layer를 쌓을 것인가가 중요하겠죠. 바로 그것이 풀링 계층이 있는 이유입니다. 

 

풀링(Pooling)의 역할

CNN의 풀링 계층은 앞선 합성곱 데이터의 공간 차원을 줄이는 역할을 합니다. 이를 통해 신경망의 계산 복잡성을 줄이는 역할을 합니다. 동시에 공간 관계를 유지하면서 가장 관련성이 높은 특징을 추출합니다. 왜냐하면 합성곱 단계에서 찾은 특징을 크기를 변화시키면 뒤틀림, 왜곡이 발생합니다. 그 영향을 줄여주는 과정이 풀링 과정이죠. 

 

예를 들어, 이미지 크기를 줄이는 것이 핵심이고, 이미지 크기 축소를 여러 픽셀을 하나의 픽셀로 줄이는데요.  해당 픽셀들의 대표 값을 구하는 방식으로 왜곡의 최소화하는 방식을 취합니다. 아래 그럼처럼 input 이미지를 convolution으로 압축한 후 주요 특성을 subsampling하는 과정입니다. 그러면 풀링의 세 가지 역할에 대해 정리해 보겠습니다. 

 

Pooing layer의 역할
Pooing layer의 역할

 

1. 차원성 감소

  • 풀링 Layer는 입력 볼륨의 공간적 차원(너비 및 높이)을 줄여 과적합을 제어합니다. 또 계산 비용을 줄이는 데 도움이 됩니다.

2. 변환 불변성

  • 풀링은 학습된 기능을 입력 데이터의 공간 변환에 더욱 강력하게 만들어 변환 불변성(invariant)을 달성하는 데 도움이 됩니다. 이 부분은 아래에서 다시 설명하겠습니다. 

3. 기능 선택

  • 가장 중요한 기능만 유지함으로써 풀링은 입력 데이터에서 필수 정보를 캡처하는 데 도움이 됩니다.

 

근사적으로 불변(invariant)성

  • 풀링연산 제체가 풀링 커널 내부의 각 인접 픽셀들 몇 개만을 대상으로 진행되기 때문에 입력이 조금 이동하더라도 풀링 된 출력들은 거의 변하지 않는 특성이 있습니다. 
  • 어떤 특징의 구체적인 위치가 아닌 그런 특징의 존재여부 자체가 더 중요할 때는 이러한 국소 이동에 대한 불변성이 유용합니다. 
  • 즉, 위치 보존이 필요치 않는 작업(단순 object detection 등)에 효과적입니다. 

풀링이 필요한 이유

  • 풀링을 하여 작은 부위에서 대표되는 픽셀로 대체하게 되면 데이터 차원 감소시킬 수 있고, 이렇게 되면 네트워크의 계산효율성이 좋아집니다. 메모리 사용량 감소하죠. 
  • 만약, 여러 개의 크기가 다른 이미지를 입력받는다고 해도 알맞게 커널 크기와 스트라이드를 조절하여 항상 같은 크기의 피처맵을 생성할 수 있습니다. 이런 방식으로 Layer를 많이 쌓을 수 있게 해 줍니다. 
  • 특징(feature)의 일부만 취함으로써 일반화하는 방식이므로 Overfitting을 방지하는 효과가 있습니다. 

 

풀링의 방식의 변화

VGG까지는 최대 풀링을 많이 사용하였습니다. 요즘 경향은 최대 풀링보다는 컨볼루션 필터의 스트라이드를 늘리는 방법으로 차원을 축소합니다. ResNet, GooleNet에서도 사용했던 기법이죠. 최대 풀링으로 일정 영역에 강한 feature만을 다음 레이어로 넘기면, 적은 계산양으로 좋은 성능을 유지할 수 있는 장점이 있습니다. 


단, 매우 깊은(deep) 신경망일수록, 점점 더 미세한 feature가 중요해지는데요. 최대 풀링을 하면 해당 정보가 소실 문제가 발생합니다. 그런 이유로 컨볼루션 연산을 수행해서 스트라이드를 늘리는 방식으로 차원 축소하는 방식을 더 많이 사용합니다. 

 

풀링(Pooling) 연산 

풀링의 윈도우 크기와 스트라이드는 같은 크기로 보통 설정합니다. 일반적으로 스트라이드가 2인 2x2 또는 3x3 창으로 설정하게 하는 거죠. 보통 풀링을 하는 방법은 Square Matrix 형태로 픽셀을 선택하고, 평균값이나 최댓값으로 대푯값을 설정하는 방식입니다.

 
풀링 계층은 합성곱 계층과 달리 학습해야 할 매개변수가 없습니다. 그래서 특별히 학습할 것이 없는 것이 특징입니다. 풀링 연산은 입력 데이터의 채널 수 그대로 출력 데이터로 보냅니다. 풀링은 2차원 데이터의 크기를 줄이는 연산이므로 3차원을 결정하는 채널 수는 건드리지 않습니다. 따라서 채널마다 독립적으로 계산합니다. 


풀링 계층은 입력의 변화에 영향을 적게 받아서 Rubust 하다고 표현합니다. 입력 데이터가 조금 변하더라도 풀링 계층 자체가 그 변화를 흡수하여 사라지게 만듭니다.

 

MLP와 Pooling한 CNN의 비교
MLP와  Pooling한 CNN의 비교


그림에서 아래쪽의 1은 위쪽의 1에서 좌측으로 한 칸씩 옮긴 결과물입니다. MLP에서 이 두 이미지를 사용한다면 38 pixel에서 값의 변화가 있습니다. 하지만 세로 필터를 거친 뒤 Pooling과정을 거치고 난 뒤에는 총 12 pixel에서만 값의 변화가 있게 됩니다. 확연한 풀링의 효과가 생기게 됩니다. 

 

풀링의 종류

1. 최대 풀링

  • 풀링 크기 및 보폭을 기준으로 겹치지 않는 영역으로 나누고 각 영역에서 최댓값을 선택하여 풀링 된 출력을 형성합니다.
  • 이미지 인식 분양에서 주로 최대 풀링을 사용합니다. 
  • 선택된 픽셀 중 제일 큰 값을 대푯값으로 설정합니다. 
  • 최댓값은 출력 볼륨에 전파되고 다른 값은 삭제됩니다.

2. 평균 풀링

  • 최대 풀링과 유사하게 평균 풀링은 입력 픽셀과 겹치지 않는 영역으로 나누고 각 영역 내의 평균값을 계산합니다.
  • 선택된 픽셀 값들의 평균을 대푯값으로 설정합니다. 
  • 평균값은 출력 Layer에 전파됩니다.

3. 스트라이드 

  • 스트라이드는 풀링 창이 입력 볼륨을 가로질러 이동하는 단계 크기를 결정합니다. 
  • 보폭이 클수록 더 공격적인 공간 다운샘플링이 발생합니다.

최대풀링 vs 평균풀링
최대풀링 vs 평균풀링

마무리

요약하면 CNN의 풀링 레이어는 가장 관련성이 높은 기능을 유지하면서 입력 데이터의 공간적 차원을 줄이는 역할을 합니다. 이는 로컬 수용 필드에서 작동하고 가장 많은 특성을 전파하는 최대 풀링 또는 평균 풀링과 같은 작업을 통해 이를 수행합니다.