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 = 14

Keras ও 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 বিকল্প।