풀링 층
풀링 층의 목적은 계산량과 메모리 사용량, 파라미터의 수를 줄여 결과적으로는 과대적합의 위험을 줄여주는 입력 이미지의 부표본(Sub-Sample)을 만드는 것에 있다.
합성곱 층에서와 마찬가지로 풀링 층의 각 뉴런은 이전 층의 작은 수용장 안에 있는 뉴런의 출력과 연결되어 있다. 그러기에 동일하게 크기, 스트라이드, 패딩 유형을 지정해줘야 한다. 하지만 가중치가 없기 때문에 최대나 평균 같은 합산 함수를 사용해 입력값을 더하게 된다.
위의 그림은 가장 널리 사용되는 풀링 층인 최대 풀링 층이다. 해당 예시를 설명하자면 2X2의 풀링 커널(가중치가 없는)과 스트라이드 2를 사용하였고 패딩은 없다. 최대 풀링 층이기 때문에 수용하는 국부 수용장의 가장 큰 값을 입력 값으로 받기 때문에 5를 입력으로 받는 것이다.
최대 풀링은 계산량, 메모리 사용량, 파라미터 수를 감소시켜주는 것 외에도 불변성이라는 특성을 가지게 해준다. 만약 내가 아주 비슷하게 생긴 이미지들을 분류하는 작업을 할 때 아주 예민한 모델은 거의 똑같다고 생각되는 두 이미지를 다르게 분류할 것이다. 최대 풀링의 불변성은 이러한 작은 변화에도 일정 수준의 불변성을 만들어 준다.
위 그림에서 이미지 B, C는 A와 같지만 오른쪽으로 각각 한 칸, 두 칸씩 이동한 것이다. 세 이미지를 최대 풀링 층을 통과시켰을 경우 이미지 A와 B는 동일한 출력을 가지게 되는데 이를 이동 불변성이라고 한다. (최대 풀링은 이동뿐만 아니라 회전, 확대, 축소에 대해서도 약간의 불변성을 제공해준다.)
이번엔 최대 풀링의 단점을 알아보자. 일단, 최대 풀링은 매우 파괴적이다. 위의 그림에서 아무리 작은 커널과 작은 스트라이드를 사용하더라도 출력 값은 입력 값의 25% 정도이다. 즉, 75%의 데이터를 잃게 되는 것이다. 분류가 목적이 아닌 임의의 어플리케이션은 입력 이미지의 위치와 출력 이미지의 위치에 매우 민감할 수 있다. 이러한 경우 불변성이 아닌 등변성이 목표가 되므로 상황에 맞게 선택해야 할 것이다.
평균 풀링 층을 만들려면 MaxPool2D 대신 AvgPool2D를 사용한다. 평균 풀링 층은 국부 수용장의 평균을 계산하여 입력으로 사용한다. 즉, 이전 층의 국부 수용장에 각각 1, 2, 4, 5 이였다면 평균인 3을 입력으로 사용하는 것이다.
최대 풀링 층 |
평균 풀링 층 |
일반적으로 성능 더 좋음 |
최대 풀링보다 성능 안 좋을 수 있음 |
수용장의 최댓값을 입력으로 |
수용장의 평균을 입력으로 |
정보 손실 많음 (그 만큼 연산 비용 적게 든다.) |
정보 손실 적음 |
의미없는 것 제거, 가장 큰 특징만 유지 |
특징 희석 |
평균 풀링 층과 최대 풀링 층의 또 다른 특징은 공간 차원이 아니라 깊이 차원으로 수행될 수 있다는 점이다. 이러한 특징으로 CNN이 다양한 특성에 대한 불변성을 학습할 수 있다. 예를 들어 동일 패턴이 회전된 여러 가지 필터를 학습했을 때 깊이 차원으로 수행된 최대 풀링 층은 회전에 상관없이 동일한 출력을 만들어낼 수 있다. (회전 뿐만 아니라 두께, 밝기, 왜곡, 색상 등 다양한 것에 대해서 불변성을 학습할 수 있다.)
케라스는 깊이방향 풀링 층을 제공하지 않으므로 텐서플로 저수준 딥러닝 API를 활용해야 한다.
tf.nn.max_pool() 함수를 사용하고 커널 크기와 스트라이드를 4개의 원소를 가진 튜플로 지정한다.
여기서 각 하이퍼파라미터를 어떻게 지정해야 하는지 의문이 들었다. 일단 height 와 width를 통해 풀링 사이즈를 지정해주는 것은 알겠는데... 배치 사이즈나 채널은 어떻게 지정해야 하는 것인가?
만약 훈련 데이터로 1617 개를 흑백 입력 데이터로 넣고 각각의 데이터는 8x8x1 의 크기를 가진다고 가정하자. 총 32개의 필터를 활용하여 해당 데이터를 스캔하게 되면 특성 맵이 총 32개 생기게 되어 결국
1617 X 8 X 8 X 32 의 데이터가 생성되게 된다.
이를 크기 2 X 2, 배치 사이즈 1, 흑백 데이터이므로 채널이 1인 풀링과 스트라이드를 만들어 최대 풀링 층을 만들 것이다. (1 X 2 X 2 X 1)
풀링 사이즈가 2 X 2 이므로 훈련 데이터마다 특성 맵의 크기가 8 X 8 X 32 에서 4 X 4 X 32로 줄어들었다. 특성의 차원은 1이므로 그대로 32가 왔다.
만약 이를 케라스 모델의 층으로 사용하고 싶으면 Lambda 층으로 감싸면 된다.
마지막으로 공부할 풀링 층의 종류는 전역 평균 풀링 층이다. 이 층의 작동 방식은 매우 독특한데, 각 특성 맵의 평균을 계산하는 것이다. (각 샘플의 특성 맵마다 하나의 숫자를 출력한다는 의미이다.) 이는 매우 파괴적인 연산이지만 출력층에는 유용할 수 있다.
혹은
'핸즈온머신러닝&딥러닝' 카테고리의 다른 글
합성곱 신경망을 사용한 컴퓨터 비전 4 (0) | 2021.04.20 |
---|---|
합성곱 신경망을 사용한 컴퓨터 비전 3 (0) | 2021.04.15 |
합성곱 신경망을 사용한 컴퓨터 비전 1 (0) | 2021.04.12 |
심층 신경망 훈련하기 5 (0) | 2021.04.11 |
심층 신경망 훈련하기 4 (0) | 2021.04.10 |