17 · Padding y pooling: control de dimensiones espaciales
El padding preserva el tamaño espacial después de la convolución; el max pooling lo reduce deliberadamente — juntos dan control preciso sobre las dimensiones del mapa de características.
El padding preserva el tamaño de entrada después de la convolución; el pooling lo reduce deliberadamente para extraer características dominantes.
Sin esto:
Sin padding, cada conv reduce la imagen; sin pooling, no puedes construir CNNs profundas que submuestreen hasta un vector de características final.
Cada convolución con un kernel mayor que 1×1 reduce las dimensiones espaciales del mapa de características. Aplica 10 convoluciones 3×3 consecutivas a una imagen de 32×32 y terminas con un mapa de características de 12×12 — bien para algunas arquitecturas, pero poco práctico cuando necesitas apilar muchas capas sin colapsar las dimensiones espaciales prematuramente.
El padding resuelve esto añadiendo un borde de ceros alrededor de la entrada antes de la convolución. La opción más común es el padding "same" (también llamado padding=1 para un kernel 3×3), que añade exactamente los ceros suficientes para que la salida coincida con el tamaño espacial de la entrada.
Con padding same, un kernel 3×3 con stride 1 siempre produce una salida con la misma altura y anchura que la entrada. Esto te permite apilar tantas capas conv como quieras sin preocuparte por la reducción espacial — un requisito previo para redes profundas como VGG (19 capas) y ResNet (152 capas).
El pooling entonces proporciona el submuestreo espacial intencional. El max pooling divide el mapa de características en ventanas no solapadas (típicamente 2×2) y toma el valor máximo en cada ventana. Esto:
- Reduce las dimensiones espaciales a la mitad (2×2 → 1×1 por ventana).
- Retiene la activación más fuerte en cada vecindario — la característica más prominente detectada.
- Añade invariancia parcial a la traslación: si una característica se desplaza 1 píxel dentro de una ventana de pooling, la salida no cambia.
El average pooling toma la media en lugar del máximo — más suave, pero a menudo menos efectivo para tareas donde detectar la presencia de una característica importa más que su fuerza promedio.
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Fórmula completa de forma de salida incluyendo padding, y regla de padding same
Read-along de PyTorch: Conv2d con padding, MaxPool2d, AdaptiveAvgPool2d
¿Cuál es el objetivo principal del max pooling en una CNN?
- El padding same (pad=1 para k=3) preserva el tamaño espacial a través de las convoluciones — permitiendo apilado arbitrariamente profundo sin colapso espacial.
- Fórmula de forma completa: out = (in + 2*pad - k) / stride + 1. Padding same: pad = (k-1)/2.
- Max pooling: conserva la activación más fuerte por ventana 2×2, reduce dimensiones espaciales a la mitad, añade invariancia parcial a la traslación, cero parámetros extra.
- Global Average Pooling (AdaptiveAvgPool2d(1)) colapsa completamente las dimensiones espaciales, produciendo un vector de tamaño fijo — usado en ResNet y EfficientNet como puente al clasificador.
El patrón de bloque CNN es Conv → BatchNorm → ReLU → (MaxPool ocasional). Las capas de pooling reducen gradualmente las dimensiones espaciales mientras las convoluciones extraen características.
Si lo quitas: Sin padding, el apilado profundo colapsa las dimensiones espaciales a cero. Sin pooling, no tienes una forma principiada de reducir el mapa de características a un vector de tamaño fijo para la cabeza clasificadora.