7.5. Pooling
* Pooling: 입력 데이터의 공간적 차원을 축소하여 중요한 정보는 유지하고 계산량과 모델의 복잡성을 줄이기 위한 다운샘플링 기법
CNN에서 주어진 feature map의 특정 영역에서 가장 중요한 값을 선택하거나 평균값을 취해 데이터를 압출한다.
풀링의 목적은 계산 효율성 향상과 과적합 방지에 있다.
최대 풀링 (max pooling)과 평균 풀링(average pooling)이 대표적이다.
import torch
from torch import nn
from d2l import torch as d2l
7.5.1. Maximum Pooling and Average Pooling
def pool2d(X, pool_size, mode='max'):
p_h, p_w = pool_size
Y = torch.zeros((X.shape[0] - p_h + 1, X.shape[1] - p_w + 1))
for i in range(Y.shape[0]):
for j in range(Y.shape[1]):
if mode == 'max':
Y[i, j] = X[i: i + p_h, j: j + p_w].max()
elif mode == 'avg':
Y[i, j] = X[i: i + p_h, j: j + p_w].mean()
return Y
X = torch.tensor([[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]])
pool2d(X, (2, 2))
X = torch.tensor([[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]])
pool2d(X, (2, 2))
7.5.2. Padding and Stride
X = torch.arange(16, dtype=torch.float32).reshape((1, 1, 4, 4))
X
pool2d = nn.MaxPool2d(3)
# Pooling has no model parameters, hence it needs no initialization
pool2d(X)
pool2d = nn.MaxPool2d(3, padding=1, stride=2)
pool2d(X)
pool2d = nn.MaxPool2d((2, 3), stride=(2, 3), padding=(0, 1))
pool2d(X)
7.5.3. Multiple Channels
X = torch.cat((X, X + 1), 1)
X
pool2d = nn.MaxPool2d(3, padding=1, stride=2)
pool2d(X)

1.
Average pooling은 필터 크기를 지정하고 각 필터 영역에서 평균을 구하여 수행할 수 있다.
2.
Max pooling은 각 필터 영역에서 가장 큰 값을 선택하는 비선형 연산이다. 반면 Convolution은 입력 값들의 선형 결합을 수행하므로, Convolution 만으로는 max pooling과 같은 비선형 기능을 구현할 수 없다.
3.
1) max(a, b) = ReLU(a-b) + b
2) Convolution 과 ReLU 계층을 통해 max-pooling을 구현할 수 있다. 각 필터가 특정 위치에서 값을 비교한 후 ReLU로 큰 값을 선택하게 하면 max-pooling과 동일한 결과를 얻을 수 있다.
4.
(전체 풀링 연산의 총 계산량) = (채널 수 c) * (출력 높이 h) * (출력 너비 w) * (ph*pw)
5.
Max-pooling: 주로 중요한 특징을 남기기 때문에 더 선명한 특징 추출 가능. 정보의 압축을 중시
Average pooling: 전체적인 값을 고르게 반영하여 노이즈가 적은 결과. 전반적인 특성 유지가 중요한 경우 사용
6.
Min pooling은 각 창 영역 내에서 가장 작은 값을 선택하는 방식.
최대값이나 평균 값이 더욱 중요한 경우가 많기 때문에 잘 사용하지 않음. 이상치 탐지나 노이즈 제거 등 특수한 목적이 있는 상황에서 사용
7.
Softmax는 각 값의 상대적인 크기를 확률로 변환해주지만, 풀링의 목적은 특정 값들을 추출하거나 압축하는 데 있다. Softmax는 복잡한 계산을 요구하며, 풀링처럼 간단하고 빠른 특징 추출과는 목적이 다르므로 사용되지 않는다.