Il pooling è una operazione di downsampling usata nelle CNN (vedi convolution). Prende una feature map e la riduce di dimensione, sintetizzando regioni in singoli valori.
Tipi principali:
- Max pooling: per ogni finestra (tipicamente 2x2), prende il valore massimo. Conserva i pattern più forti, scarta il resto. Standard nelle CNN classiche.
- Average pooling: prende la media della finestra. Più morbido, smooth.
- Global average pooling: media su tutta la feature map. Riduce a un vettore. Spesso ultimo passo prima del classifier finale.
- Adaptive pooling: imposta dimensione output, calcola finestre di conseguenza. Utile per input di dimensione variabile.
Perché si usa:
- Riduce dimensioni: meno calcolo nei layer successivi.
- Translation invariance: piccoli spostamenti dell'oggetto non cambiano molto l'output.
- Aumenta receptive field: dopo pooling, ogni neurone "vede" una porzione più ampia dell'immagine originale.
- Riduce overfitting: meno parametri da imparare a valle.
Varianti moderne:
- Strided convolution: convoluzione con stride > 1. Sostituisce il pooling, è più imparabile. Usata in molte architetture moderne.
- Attention pooling: usa attention per pesare diversamente regioni dell'immagine. Standard nei Vision Transformer.
Critica nota: il pooling perde informazione spaziale precisa. Per task come segmentation (dove sta esattamente l'oggetto?), si usano architetture senza pooling aggressivo (U-Net, dilated convolutions).
Curiosità: Geoffrey Hinton, padrino del deep learning, ha ripetutamente criticato il max pooling come "errore". Ha proposto le Capsule Networks come alternativa. Hanno avuto poco successo. Il max pooling sopravvive.