Setup. Mercadona quiere detectar lineales vacíos con una cámara por pasillo. La imagen llega como matriz R×R×C. Arriba: número de parámetros (escala log) en función de R para un MLP con D neuronas ocultas (tinta) y para una CNN pequeña de tres capas 3×3 con 32, 64 y 128 filtros más cabeza de 10 clases (dorado). Abajo: las dos barras a tu configuración actual, con su memoria en MB (float32).
Juega. Mueve R y mira cómo la curva tinta crece como R² mientras la dorada es plana. Mueve D: solo se mueve el MLP. El punto dorado y el punto tinta marcan tu configuración en ambas curvas.
Lee así. El cociente del lector (×MLP/CNN) es el factor de ahorro de la convolución. Con menos parámetros que estimar, la CNN entrena con los pocos miles de fotos etiquetadas que una empresa puede pagar; el MLP necesitaría millones.
Mensaje. No es solo memoria: cada peso es algo que hay que aprender de datos. La CNN gana porque incorpora dos sesgos inductivos correctos para imágenes: localidad (solo conecta vecinos) y equivarianza por traslación (el mismo detector vale en toda la imagen).
Términos. Aplanar: convertir la matriz H×W×C en un vector de HWC números, perdiendo la estructura espacial. Sesgo inductivo: supuesto estructural que la arquitectura impone antes de ver datos. float32: 4 bytes por parámetro.
Setup. Imagen de juguete 8×8 con un borde vertical (mitad izquierda a 1, mitad derecha a 0), como la frontera entre estante lleno y estante vacío en la foto del lineal. El kernel 3×3 se desliza por las 36 posiciones válidas; la ventana actual se dibuja en dorado sobre la imagen y su celda de salida se marca en el feature map. La imagen es editable: clic en un píxel lo conmuta 0↔1. El kernel también: clic en una celda del kernel la hace ciclar por −2, −1, 0, 1, 2.
Juega. El lector escribe los 9 productos de la Ec. (1) para la posición elegida, exactamente como el ejemplo a mano de clase (el del parche 5×5 que da −2, o el de la imagen 4×4 cuya salida 2×2 era 3, −3, 0, 3). Comprueba dos o tres celdas a mano: es la misma cuenta.
Lee así. Un valor grande positivo dice "aquí el parche se parece a la plantilla"; cero dice "nada que ver". Una capa convolucional real hace esto con 32–512 kernels en paralelo, cada uno aprendido por backprop, no diseñado a mano como aquí.
Mensaje. Los 9 números del kernel son los únicos parámetros, y se reusan en las 36 posiciones: pesos compartidos. El MLP de la slide anterior habría usado 36×9 parámetros distintos para hacer esto mismo.
Términos. Kernel / filtro: plantilla k×k de pesos. Parche: trozo k×k de la imagen bajo el kernel. Feature map: matriz de salida, una activación por posición. Sobel: kernel clásico de bordes con fila central reforzada (1,2,1 en vez de 1,1,1).
Setup. Vista 1D de una fila de la imagen (la fórmula es idéntica para alto y ancho). Arriba: la fila de entrada con sus p ceros de padding a cada lado (celdas punteadas), la ventana del kernel en la posición t (dorado) y la fila de salida; cada celda de salida está unida a la ventana que la produce. Abajo: la salida o en función de i para tus k, p, s actuales; la escalera que ves es el suelo ⌊·⌋ en acción.
Juega. El badge avisa cuando (i+2p−k) no es múltiplo de s: hay columnas de entrada que ninguna ventana cubre. En una CNN real eso significa tirar información del borde derecho/inferior de la foto del producto; con p bien elegido no se tira nada.
Lee así. En el panel inferior, el tramo plano de la escalera son tamaños de entrada distintos que producen la misma salida: información descartada por el suelo. Cuando la curva pasa por tu i actual sin tramo plano, el encaje es exacto.
Mensaje. Padding y stride son las dos perillas de ingeniería de toda arquitectura CNN: p conserva resolución y bordes, s la reduce deliberadamente (las arquitecturas modernas prefieren stride 2 a max-pool agresivo, como dice la nota del día).
Términos. Padding: orla de ceros añadida alrededor de la imagen. Stride: paso con que se desliza el kernel. "same": configuración que mantiene o = i. ⌊x⌋: mayor entero ≤ x.
Setup. Imagen 8×8 con una barra vertical de 3 píxeles (el montante de la estantería en la foto del lineal) y el mismo kernel detector de bordes verticales de la slide anterior, que produce +3 en el flanco izquierdo de la barra y −3 en el derecho. Arriba: imagen → feature map 6×6 → mapa pooleado (3×3 con kp = 2, 2×2 con kp = 3). El botón desplaza la imagen entera un píxel a la derecha, como cuando la cámara del lineal vibra entre dos fotos del mismo estante. Abajo: cambio relativo medio (en %) que ese desplazamiento provoca en el feature map y en el mapa pooleado, calculado de verdad sobre las dos versiones.
Juega. El cociente entre las dos barras es la ganancia de invariancia: cuántas veces menos cambia la representación tras el pooling. Compara kp = 2 con kp = 3 y max con media.
Lee así. Para el clasificador "estante lleno/vacío" lo que importa es si hay borde de estante, no en qué píxel exacto cae. El pooling convierte equivarianza (el mapa se mueve con la imagen) en invariancia aproximada (la salida apenas se mueve).
Mensaje. Pooling = perder resolución a propósito para ganar robustez y reducir cómputo. En arquitecturas modernas el mismo efecto se consigue con stride 2 en la propia convolución, pero el principio es idéntico.
Términos. Equivariante: si la entrada se traslada, la salida se traslada igual. Invariante: la salida no cambia aunque la entrada se traslade. kp: lado de la ventana de pooling. Cambio relativo: media de |Δ| dividida por la media de |valores|.
Setup. Imagen 12×12 con un cuadrado 5×5 (una "prenda" en la foto de catálogo de Zara, si quieres). Arriba: la imagen y los dos mapas de la capa 1 (bordes verticales izquierdos, bordes horizontales superiores), ya pasados por ReLU. Abajo: la salida de la capa 2, que combina ambos canales y resta el umbral b2; el círculo dorado marca su máximo. Todo se recalcula con las dos convoluciones de verdad cada vez que mueves un slider.
Juega. El lector compara la posición del pico con la esquina superior izquierda real del cuadrado: se mueven juntos, casilla a casilla. Eso es lo que significa "composición jerárquica" en el deck: la capa 2 no ve píxeles, ve primitivas.
Lee así. En una ResNet entrenada con fotos de producto pasa lo mismo a lo grande: capa 1 bordes y colores, capas medias texturas y partes (cuello, manga, botones), capas altas prendas completas. Nadie diseña esos kernels: el gradiente los encuentra.
Mensaje. La profundidad no es un capricho: es el mecanismo por el que detectores simples y baratos se componen en detectores complejos. Dos capas 3×3 ya detectan algo (esquinas) que ninguna de ellas puede detectar sola.
Términos. ReLU: max(0,x), apaga lo negativo. Primitiva: patrón simple de capa baja (borde, esquina). Canal: cada feature map de una capa; la capa siguiente los suma con sus propios pesos (Σc de la Ec. 1). b2: sesgo negativo que actúa de umbral de coincidencia.
Setup. Arriba: el campo receptivo RFl capa a capa (curva dorada), la talla del objeto a reconocer (línea discontinua) y el punto donde la red por fin "ve" el objeto completo. Abajo: el cono de visión: una neurona de la última capa arriba, y el ensanchamiento de lo que alcanza a ver capa a capa hasta los píxeles de la imagen abajo. Todo sale de iterar la fórmula del panel, con los strides de pooling si los activas.
Juega. El lector da el RF final, la instancia numérica de la fórmula para las tres primeras capas y el número de capas necesario para tu objeto. Si la curva no llega, te lo dice.
Lee así. Piensa en la foto del lineal de Mercadona: una balda vacía ocupa 80–150 px. Una CNN de 3 capas sin pooling (RF = 7) es físicamente incapaz de verla entera, por mucho que entrenes: el campo receptivo es una cota dura de lo que la arquitectura puede representar.
Mensaje. Profundidad y pooling no solo añaden capacidad: ensanchan lo que cada neurona puede ver. "Deep" en deep learning es, para visión, una necesidad geométrica.
Términos. RFl: lado del cuadrado de píxeles de la imagen original que influye en una neurona de la capa l. Πsi: producto de los strides de las capas anteriores ("jump"). Cono de visión: la pirámide invertida de dependencias entre capas.
Setup. La fórmula exacta de coste de una capa convolucional frente a la capa densa que produciría el mismo tensor de salida. Arriba: las dos cantidades en barras (escala log), con la memoria float32 de cada una. Abajo: parámetros en función de la resolución H para tus k, Cin, Cout: la densa es una recta de pendiente 4 en log-log, la conv una horizontal.
Juega. El lector instancia ambas fórmulas con tus números y da el factor de ahorro. Prueba la configuración de una capa intermedia de ResNet (k = 3, Cin = Cout = 64, H = 28) y mira cuántos órdenes de magnitud separan ambos mundos.
Lee así. Esta fórmula es la que el equipo de data science presenta a IT cuando pide presupuesto de GPU: los parámetros del modelo (y su memoria) los fijan k y los canales, no la resolución de las cámaras del lineal.
Mensaje. Junto con la slide 1, esta es la justificación cuantitativa completa de la CNN: misma operación (suma ponderada), dos restricciones estructurales, cuatro órdenes de magnitud menos parámetros.
Términos. Cin, Cout: canales de entrada y salida de la capa. Capa densa: cada salida conectada a todas las entradas. Tensor de activaciones: H×W×C valores que fluyen entre capas (eso sí crece con H).
Setup. Veinticinco años de arquitecturas en una frase: LeNet (1998, 5 capas, dígitos de cheques), AlexNet (2012, 8 capas, ImageNet), VGG (2014, 19 capas de puros 3×3) y el muro: más capas empeoraban el entrenamiento. ResNet (2015) lo derriba con la skip connection. El canvas simula la cadena de gradientes: para cada capa l, el módulo del gradiente que llega desde la pérdida (escala log), con factores ℱ′l = g·εl, εl ∼ N(0,1): tinta sin skip (Πℱ′), dorado con skip (Π(1+ℱ′)).
Juega. El producto se calcula de verdad sobre los factores sorteados: el lector da el gradiente que llega a la capa 1 en ambos mundos y su cociente, que con L = 50 y g = 0.5 supera los 20 órdenes de magnitud.
Lee así. La zona g < 1 es el desvanecimiento (curva tinta cayendo en recta: exponencial en escala log); la zona g > 1 es la explosión. La dorada apenas depende de g: esa indiferencia es lo que compra la skip.
Mensaje. ResNet-50/101/152 existen porque y = ℱ(x)+x convierte un producto que se muere en un producto que sobrevive. Es la arquitectura por defecto del transfer learning de la siguiente slide, y la que fine-tunearás en la práctica.
Términos. Skip connection: el "+x" que sortea el bloque. Gradiente desvanecido: producto de jacobianos <1 que decae exponencialmente con la profundidad. ℱ′: derivada local del bloque (aquí un escalar de juguete; en la red real, un jacobiano).
Setup. Clasificador "prenda OK / prenda con defecto" para el control de calidad de Inditex. Simulo el dilema de la Ec. (4): la misma cabeza logística entrenada (i) sobre las 2 features que da un backbone preentrenado, donde las clases forman dos nubes separadas, y (ii) "desde cero", sobre 16 features crudas con señal débil enterrada en ruido. Arriba: accuracy en un test fijo de 500 fotos en función de n (eje log); el marcador es tu n actual. Abajo: tus n puntos de entrenamiento en el espacio de features preentrenadas y la frontera que la cabeza acaba de aprender por descenso de gradiente (200 iteraciones, ejecutadas al mover el slider).
Juega. Cada posición del slider lanza los entrenamientos de verdad: si el navegador tarda una fracción de segundo, es el gradiente trabajando. La curva completa se recalcula al cambiar de semilla.
Lee así. Los tres regímenes de la nota se leen sobre esta gráfica: feature extraction es lo simulado; fine-tuning ligero (descongelar las últimas capas con ηb = ηh/10) interpola entre ambas curvas; fine-tuning completo converge a "desde cero pero con buena inicialización" y solo compensa con ≥10⁴ ejemplos.
Mensaje. La receta de 20 líneas del deck (AutoModelForImageClassification con num_labels=10, backbone congelado, Trainer) es exactamente esta slide con ResNet-50 de backbone: hereda lo caro, entrena lo barato.
Términos. Backbone θb: todas las capas conv preentrenadas. Cabeza θh: la capa final específica de tu problema. ImageNet / 𝒟src: el dataset fuente del preentrenamiento. Feature extraction: backbone congelado, solo cabeza.
| verdad \ pred. | camiseta | sudadera | vestido | → humano |
|---|
Setup. Catálogo automático de moda (Inditex): una ResNet fine-tuneada etiqueta cada foto como camiseta, sudadera o vestido. Genero 600 fotos sintéticas en un espacio de 2 features (silueta, textura), con nubes gaussianas por categoría; el clasificador calcula logits por distancia a cada centro y un softmax de verdad. Arriba: el mapa de decisión: color de fondo = clase predicha, franja blanca = zona enviada a humano (máx pc < τ); los puntos son las fotos (color = categoría real, hueco = enviado a humano). Abajo: coste total en euros en función de τ, con tu τ (punto dorado) y el óptimo τ* (rombo).
Juega. El lector da cobertura, accuracy de lo automático, errores, coste total y la comparación contra "todo humano" (480 €) y "todo auto". La matriz de confusión se rellena solo con las fotos decididas automáticamente, más la columna de derivadas a humano.
Lee así. La diagonal de la matriz es dinero ahorrado; lo de fuera de la diagonal son devoluciones; la última columna es el sueldo del revisor. Tres números del softmax convertidos en una cuenta de explotación.
Mensaje. El entregable del día no es "una CNN con 92% de accuracy": es una política (modelo + umbral τ*) que minimiza euros. Así se presenta un proyecto de visión a un comité de dirección.
Términos. Softmax: convierte logits en probabilidades que suman 1. Cobertura: fracción de fotos decididas sin humano. Matriz de confusión: cuántas fotos de la clase verdadera j acaban predichas como ℓ. τ*: umbral que minimiza el coste total.
En una frase. La CNN gana en imágenes porque impone los sesgos inductivos correctos (localidad, pesos compartidos, jerarquía), ResNet permite apilarlos a la profundidad que el campo receptivo exige, el transfer learning te regala todo ese aprendizaje ya hecho, y el umbral de confianza lo convierte en euros: de los píxeles a la decisión de retail.