Paso 1 — la casilla que el kernel está calculando ahora
Y0,0 = Σu=02Σv=02 Ku,v · Xi+u, j+v

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.

La foto y el filtro
foto
kernel
Dónde está el kernel ahora
posición 1/16
Tamaño del mapa: H′ = ⌊(H+2p−k)/s⌋+1
p 0 s 1

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.

X la foto, matriz de píxeles. K el kernel: 9 pesos, lo único que la red aprende aquí, los mismos en todas las posiciones. Y mapa de activación: un número por posición del kernel. p padding, s stride: no cambian qué busca el filtro, solo el tamaño del mapa.
Paso 2 — el bloque 2×2 que el pooling está resumiendo
P0,0 = max{ … }

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.

La foto (la misma del paso 1)
foto
El pooling
tipo
bloque 1/4
umbral 12
Guion paso a paso
  1. Con máximo, recorre los cuatro bloques. Los dos de arriba son grandes y los dos de abajo casi cero: la evidencia del hueco vive en la mitad superior de la foto.
  2. Cambia a media sin tocar nada más. El mismo bloque cae a menos de la mitad: promediar diluye el borde con las casillas donde no pasa nada.
  3. Cambia la foto a el mismo hueco, más abajo. El número grande se muda de bloque, pero el máximo global apenas cambia: eso es invarianza a traslación, y sale gratis.
  4. Pon la foto de estante lleno. Ningún bloque pasa el umbral: sin borde vertical no hay alarma. El filtro no ve «producto», ve cambios de brillo.

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.

P mapa después del pooling. Máximo: ¿apareció el patrón en algún sitio del bloque? Media: ¿cuánto patrón hay de media? Umbral: el corte de negocio a partir del cual la app avisa.
La misma cuenta, ahora sobre 36×36 píxeles
yi,j = Σu=02 Σv=02 Ku,v · xi+u, j+v
 

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.

El recorrido del kernel
vel 70
pos 0
El filtro — los nueve pesos del kernel

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.

Comprueba que entiendes

¿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).

Ventana / parche: el trozo 3×3 que el kernel pisa ahora. K: los nueve pesos, idénticos en las 1156 posiciones. yi,j: un píxel del mapa de activación. Detrás de esto iría el pooling del paso 2, que reduce el mapa a 17×17.
La cadena entera, tal como la ejecuta la red en tu navegador
X1×28×28conv1 → ReLU → poolconv2 → ReLU → poolflatten400120 → 84softmax10
 

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.

La prenda que entra
foto
Qué etapa mira el detalle de abajo
Toca la arquitectura y mira la predicción
ReLU
pooling
filtro
Guion paso a paso
  1. Recorre las ocho etapas con los botones y mira cómo el mapa se encoge (28→14→10→5) mientras el número de canales crece (1→6→16). Eso es toda la arquitectura: menos resolución, más patrones distintos.
  2. En la etapa 2, pulsa los seis filtros uno a uno. Cada kernel es una plantilla de 25 números que la red aprendió sola, y cada uno enciende un mapa distinto.
  3. Mira los números que declara cada etapa: 784 → 4.704 → 1.176 → 1.600 → 400. Con seis kernels no sale un mapa, salen seis: conv1 multiplica por seis la cantidad de números, y el pooling es lo que vuelve a bajarla. El volumen crece a lo ancho y se encoge a lo alto.
  4. Pon la foto sandalia y mira el softmax. 71 % sandalia, 27 % zapatilla: la duda se reparte entre las dos clases parecidas, no entre las diez.
  5. Elige la foto marcada como fallo. La red dice sandalia y era zapatilla. Con 87,9 % de acierto, una de cada ocho prendas sale mal: eso es lo que hay que presupuestar en producción.
  6. Apaga un filtro, o quita la ReLU, o cambia el pooling a media. La probabilidad de la clase correcta se hunde: la red se entrenó con esas piezas puestas y no tolera que se las cambien después.
Comprueba que entiendes

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.

Kernel: los 25 pesos de un filtro 5×5. Mapa: lo que ese filtro deja al recorrer la imagen. Flatten: los 16×5×5 valores puestos en fila. Softmax: convierte 10 números cualesquiera en 10 probabilidades que suman 1.
Las dos cuentas que decide un arquitecto de CNN
nout = ⌊(n + 2p − k)/s⌋ + 1      paramsconv = cout (cin k2 + 1)
 

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.

El bloque convolucional
k 5 p 2 s 1
filtros 1 6
filtros 2 16
La cabeza densa
neuronas 120
Guion paso a paso
  1. Arranca en el preset LeNet-5: 61.706 pesos, el 96 % en la cabeza densa.
  2. Sube neuronas a 512 sin tocar nada más. Los pesos se multiplican y todos caen en la cabeza: la parte que aprende de verdad los patrones no ha crecido nada.
  3. Vuelve a 120 y sube filtros 2 a 128. Ahora sí crece el extractor, pero también el flatten, que arrastra la cabeza consigo.
  4. Pon stride 2 en el preset LeNet. Un solo mando recorta el mapa a la mitad y con él el flatten y casi todos los pesos: por eso las arquitecturas modernas reducen con stride en vez de con capas densas gigantes.
  5. Sube k a 7 con p = 0. Cada conv se come 3 píxeles por lado. Dos capas 3×3 cubren lo mismo que una 5×5 con menos pesos: el hallazgo de VGG.
k lado del kernel, p padding, s stride. flatten = c2 × n22, la puerta de entrada a la cabeza densa y el número que dispara el total. MLP plano: la misma cabeza conectada directamente a los 784 píxeles, sin convoluciones, para comparar.
Los dos pasos, seguidos
X  → conv K   Y  → pool 2×2   P  →  alarma

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.

Garrido-Merchán — ecgarrido@comillas.edu — Deep Learning para Business Analytics — Día 04 · CNN: convolución, pooling y arquitectura