Chapter 20
পুলিং
Pooling
🎬 কম দেখে বেশি বুঝা
Pooling layer feature map-এর আকার কমায় — কম parameter, কম compute, এবং small translation invariance। CNN-এর গতি ও সাধারণীকরণ — দুটোই বাড়ে।
কেন Pooling দরকার?
- Spatial resolution কমিয়ে compute কমানো।
- Receptive field বাড়ানো — পরের layer বড় region দেখে।
- Overfit কমানো — কম parameter।
- Local translation invariance যোগ করা।
Pooling প্রকারভেদ
১. Max Pooling — সবচেয়ে জনপ্রিয়
Window: 2×2, Stride: 2
[1 3 | 2 4] [3 4]
[2 1 | 0 6] → [9 8]
[5 9 | 7 8]
[3 2 | 1 0]২. Average Pooling
প্রতিটি window-এর গড় — smooth feature, edge হারায়। ResNet-এর শেষে Global Average Pooling খুব ব্যবহৃত।
৩. Global Average Pooling (GAP)
# H × W × C → 1 × 1 × C
layers.GlobalAveragePooling2D()
# Dense layer-এর বদলে — parameter ১০০x কমOutput Shape
O = floor((I - K) / S) + 1
I=28, K=2, S=2 → O = 14Keras ও PyTorch উদাহরণ
# Keras
layers.MaxPooling2D(pool_size=2, strides=2)
layers.AveragePooling2D(2)
layers.GlobalAveragePooling2D()
# PyTorch
import torch.nn as nn
nn.MaxPool2d(2, 2)
nn.AvgPool2d(2)
nn.AdaptiveAvgPool2d(1)Pooling বনাম Strided Convolution
আধুনিক আর্কিটেকচার (ResNet, EfficientNet) প্রায়শই Pooling-এর বদলে stride=2 conv ব্যবহার করে — কারণ এটি learnable downsampling, fixed না। তবু Pooling এখনও সরল ও কার্যকর।
🔑 GAP-এর জাদু
Dense FC layer-এ মিলিয়ন parameter; Global Average Pooling-এ ০ parameter। NIN (Network in Network) পেপার এই কৌশল চালু করেছিল — এরপর প্রায় সব আধুনিক CNN-এই এটি স্ট্যান্ডার্ড।
Receptive Field-এর হিসাব
r_out = r_in + (K - 1) * jump_in
jump_out = jump_in * S
Layer 1: K=3, S=1 → r=3, jump=1
Pool 2x2: → r=4, jump=2
Layer 2: K=3, S=1 → r=8, jump=2অনুশীলন
১. Max vs Average pooling — একই মডেলে accuracy তুলনা করুন।
২. FC head বনাম GAP head — parameter ও accuracy কেমন বদলায়?
৩. Pooling সরিয়ে stride=2 conv দিয়ে replace করুন।
সারসংক্ষেপ
✨ এই অধ্যায়ে যা শিখলাম
- Pooling spatial dim কমায়, receptive field বাড়ায়।
- Max pooling সবচেয়ে জনপ্রিয়; GAP আধুনিক head।
- Strided convolution learnable downsampling বিকল্প।