El caso. Una app de supermercado fotografía el estante y avisa cuando hay un hueco, un espacio vacío donde debería haber producto. El recorte es una matriz 6×6 de grises (0 negro, 9 blanco) y el primer filtro de la CNN busca bordes verticales: la frontera producto–hueco es exactamente una línea vertical.
Lee así. El cuadro dorado sobre la foto es el kernel. Multiplica sus 9 pesos por los 9 píxeles que tapa, los suma, y ese único número entra en el mapa Y de la derecha. Luego se desliza s casillas y repite la misma cuenta. Haz clic en un píxel de la foto (o en una casilla del kernel) para cambiar su valor y ver qué pasa.
El caso. El mapa Y del paso 1 todavía es grande. El pooling lo trocea en bloques 2×2 y se queda con un solo número por bloque: el máximo o la media. Cero parámetros entrenables, y de ahí sale el resumen con el que la app decide si avisa.
Negocio. Con la media, el hueco se diluye entre las tres cuartas partes de la foto donde no pasa nada y la alarma no salta. En este negocio el falso negativo es venta perdida: el resumen que va a producción es el máximo.
El caso. Es la misma operación del paso 1, pero con 34×34 = 1156 posiciones en vez de 16, así que ya no se dibuja con números sino con brillos. La foto es un lineal con tres baldas y una rotura de stock en la del medio.
Lee así. La ventana dorada recorre la fila entera, baja una fila y vuelve a empezar por la izquierda; el mapa de la derecha se rellena en ese mismo orden. Abajo tienes los nueve productos de la ventana actual: el mismo cálculo que hiciste a mano en el paso 1.
¿Por qué el mapa es 34×34 y no 36×36, si la foto tiene
36×36 píxeles?
Respuesta. Porque la ventana 3×3 solo cabe entera en las
posiciones cuyo parche está dentro de la imagen: la primera arranca en la
fila 0 y la última en la 33. Con stride 1 y padding 0 la salida mide
36 − 3 + 1 = 34 por lado, la misma fórmula del paso 1. Para
conservar 36×36 haría falta un anillo de ceros alrededor (p = 1).
El caso. Esta es una LeNet-5 de verdad, con sus 61.706 pesos entrenados sobre Fashion-MNIST (87,9 % de acierto en test). No hay ningún número inventado en esta slide: los mapas y las diez probabilidades se calculan aquí, al pulsar, sobre la foto que elijas.
El mapa de conv1 mide 28×28 con un kernel 5×5. ¿Cómo puede
salir del mismo tamaño que la entrada?
Respuesta. Por el padding: con p = 2 la fórmula da
(28 + 4 − 5)/1 + 1 = 28.
Sin padding saldría 24×24. El que reduce de verdad es el pooling:
28→14.
El caso. Te toca dimensionar la red del proyecto. Cada decisión (tamaño de kernel, padding, stride, cuántos filtros, cuántas neuronas densas) cambia la forma del tensor y el número de pesos que hay que entrenar. Mueve los mandos y mira la cuenta.
Paso 1. Convolucionar es deslizar un kernel pequeño por toda la imagen y repetir en cada posición la misma suma ponderada. Los 9 pesos son los mismos en las 16 posiciones: eso son pesos compartidos, y es la razón de que una CNN tenga dos órdenes de magnitud menos parámetros que un MLP sobre los mismos píxeles.
Paso 2. El pooling tira resolución a propósito y a cambio compra invarianza: da igual en qué casilla del mapa aparezca la evidencia del hueco, el máximo la conserva. Y no añade ni un parámetro.
Negocio. El supermercado no programa a mano «qué es un hueco»: entrena los kernels para que reaccionen a la frontera producto–vacío. Un mismo filtro revisa todas las baldas de todas las tiendas.
Y ahora. Apilar conv + pooling muchas veces construye la CNN del resto del tema. El principio no cambia: kernel pequeño, misma cuenta repetida por toda la imagen.