16 · Convolución: kernels, strides y mapas de características
La convolución 2D desliza un kernel sobre una entrada calculando productos punto — impleméntala a mano, aplica kernels clásicos y domina la fórmula de forma de salida.
La convolución 2D desliza un kernel (filtro pequeño) sobre una entrada, calculando el producto punto en cada posición — la salida es un mapa de características.
Sin esto:
La convolución es la operación central; sin comprenderla, el resto de la arquitectura CNN es opaco.
La palabra "convolución" suena intimidante, pero la operación es directa: toma una pequeña matriz de números (el kernel o filtro), colócala sobre una región de la entrada, multiplica cada par de números superpuestos y súmalos todos. Esa suma es un valor de salida. Luego desliza el kernel una posición a la derecha y repite. Sigue deslizando hasta cubrir toda la entrada — la colección de valores de salida es el mapa de características.
Formalmente, para una entrada 2D I y kernel K, la salida en la posición (i, j) es:
O[i, j] = suma sobre (m, n): I[i+m, j+n] × K[m, n]
El stride controla cuánto se mueve el kernel en cada paso. Stride 1 significa moverse 1 píxel a la vez (máximo solapamiento, máxima resolución de salida). Stride 2 significa moverse 2 píxeles a la vez, lo que reduce aproximadamente a la mitad las dimensiones espaciales de la salida — una forma de submuestrear mientras se extraen características.
Fórmula de forma de salida (sin relleno):
out_size = (in_size - kernel_size) / stride + 1
Por ejemplo: entrada 28×28, kernel 3×3, stride 1 → (28-3)/1+1 = 26×26 de salida. Misma entrada, stride 2 → (28-3)/2+1 = 13×13 de salida.
Una pequeña nota técnica: lo que los profesionales de DL llaman "convolución" es técnicamente correlación cruzada — la verdadera convolución matemática voltea el kernel 180° antes de deslizarlo. Como los kernels de CNN son aprendidos, el volteo queda absorbido en los pesos y la distinción es irrelevante en la práctica.
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 de forma de salida de convolución y ejemplos resueltos
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Read-along de PyTorch: parámetros y formas de nn.Conv2d
Una entrada 32×32 con un kernel 5×5, stride 1, sin relleno — ¿cuál es la forma de salida?
- La convolución 2D desliza un kernel sobre la entrada calculando el producto punto en cada posición; el resultado es un mapa de características que resalta el patrón que el kernel detecta.
- Forma de salida (sin relleno): out = (in - k) / stride + 1. Stride 1 → resolución máxima; stride 2 → resolución ~reducida a la mitad con submuestreo simultáneo.
- La 'convolución' en DL es técnicamente correlación cruzada (sin voltear el kernel); la distinción es irrelevante porque los kernels son aprendidos.
- La división entera en la fórmula de forma significa que los residuos impares descartan silenciosamente 1 píxel — siempre usa padding para mantener las formas predecibles.
Conv2d es la capa más usada en visión computacional. La misma operación, generalizada a dimensiones superiores, se ejecuta en escáneres médicos 3D, series temporales 1D e incluso formas de onda de audio.
Si lo quitas: Todo artículo de arquitectura CNN describe formas en términos de fórmulas de salida de convolución — AlexNet, VGG, ResNet. No conocer la fórmula hace imposible leer cualquier diagrama de arquitectura.