• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    해결됨

Pooling layer 사용하는 이유가 궁금합니다. (CNN 이론 부분이에요)

23.01.24 19:11 작성 조회수 720

0

먼저 질문을 드린 이유는 CNN의 이미지 특징을 추출하는 과정에서 쓰이는, Convolution layer와 Pooling layer의 기능이 동일하고, Padding을 쓰는 이유에 대한 궁금증이 들었기 때문입니다.

CNN 이론 강의 내용에서, CNN의 구조는 크게 (1)이미지 특징을 추출하는 부분(2)클래스를 분류하는 부분이 있다고 배웠습니다.

(2)의 경우는 특징을 추출하고 난 뒤에 softmax나 , logsoftmax activation function을 통해, 분류하는 것이기 때문에, CNN 앞 시간에서 배웠던 1차원 형태의 데이터 처리하는 방법과 유사하다고 하셨습니다.

Convolution layer는 filter(kenel)이 창문 닦듯이(알고리즘으로 보면 슬라이딩 윈도우 느낌으로) 슥슥 움직이면서 Feature Map(특성 맵)을 추출하는데, 이 부분은 칼라이미지나 흑백이미지의 경우 기존의 1차원 형태의 데이터로 바로 만들어주는 과정에 비해, 공간적/지역적 정보를 유지할 수 있으며, 특정 부분을 추출할 수 있기 때문에 해당 이미지의 특징을 확인할 수 있는 장점을 가집니다. 하지만 영상에서 설명하셨듯이, filter가 적용되면서 중복되는 부분이 발생해서 계산양이 많아지고, 무엇보다 5x5이미지의 경우 3x3필터를 사용했을 때 3x3 크기가 되기 때문에 데이터가 소실되는 문제가 발생한다고 하셨습니다.

따라서, 이를 해결하기 위해, Zero padding을 적용하여, 이미지 가장자리를 0으로 감싸줌으로써 3x3필터를 사용하더라도, 5x5의 원본 이미지의 크기가 3x3 크기가 아닌 5x5로 보존되기 때문에, 데이터 소실을 방지할 수 있다고 들었습니다.

Q1:

그래서 여기 까지 들었을 때, 특징을 잘 추출하기 위해 커널의 크기를 작게 했을 때, 원본 크기에 비해, output이 작아질 수도 있으니까 zero padding을 쓰는 것이 중요하구나... 하는 생각과 zero padding을 통해 원본 크기를 보존하는 것이 중요하구나 라고 생각했습니다. 혹시 맞을 까요?

 

그리고 나서, Pooling 설명을 들었는데, Pooling layer는 convolution layer에서 얻어진 output에서 특징을 뽑아 내는 과정이기 때문에, 얻어진 feature map의 사이즈가 줄어드는 현상이 발생하는데, 특징을 뽑아내는 것도 이해는 가지만, 데이터가 소실되는 문제가 발생할 수 있지 않을까...? 하는 생각이 들었습니다.

CNN의 구조가 Convolution layer와 pooling layer가 같이 순서쌍으로 동작하기 때문에, 각각의 기능에 대해서 특징을 추출하는 과정이다는 부분에는 이해는 갔지만, padding의 기능때문에, 특징 맵의 크기를 보존하는 것이 원래 input가 비슷하게 보존하는 것이 좋은건지, 줄여나가는 건지 헷갈립니다.

답변 1

답변을 작성해보세요.

0

안녕하세요. 답변도우미입니다.

zero padding 적용은 크게 두가지 이유입니다. 하나는 여러번의 계산을 해야하는데 초반부터 이미지가 너무 작아져 버리면 더 깊게 학습시킬 데이터가 부족해질 수 있어서 이를 보완하기 위함도 있구요. 또다른 하나는 양 끝자리, 즉 edge pixel 데이터까지 활용하기 위함입니다.

pooling layer 와 관련해서는, 해당 레이어가 없다면, 너무 많은 weight parameter가 생겨서, overfitting 가능성이 커지고, 너무 많은 연산을 필요로 하게 됩니다. 데이터에서 특징만 추출하게 보완을 해서, 이러한 이슈를 완화시키는 것입니다.

padding 을 통해 가능한 모든 데이터를 기반으로 Convolution layer 를 돌려서, 특징을 잘 가져오고요. pooling 으로 이중에서 특징만 잘 추출해서, overfitting 현상이나 너무 많은 연산량을 완화시켜줘보니, 성능이 괜찮더라 라고 이해하시는 것도 좋을 것 같습니다. 사실상 딥러닝은 내부 동작을 완벽히 사람이 이해하는 단계는 아니라서, 내부에 각 기능이 실제 왜 그렇게 도움이 되는지를 아직까지는 알아가는 단계니까요.

감사합니다.

답변해주신 부분이 도움되었습니다. 감사합니다.