Playground de convolución y mapas de características

descubre qué patrones visuales sobreviven a cada elección de núcleo

Cargando simulación interactiva...

Sin relleno, una red profunda encoge la imagen hasta nada 🖖

Un núcleo de 3×3 sin relleno y con paso 1 elimina un píxel de cada borde; por eso, al introducir una imagen de 28×28 en esta herramienta, obtienes una salida de 26×26. Parece poca cosa hasta que apilas capas: con diez, quedan 8×8, y después de catorce no queda nada. Para eso existe el relleno "same": añadir un borde de un píxel conserva el tamaño de entrada y permite que la red tenga tanta profundidad como quieras. El paso actúa en sentido contrario y divide en vez de restar. Un desenfoque con paso 2 convierte 28×28 en 14×14 en una sola capa. Por tanto, los dos ajustes de esta herramienta no son meramente estéticos: determinan cuántas capas admite tu arquitectura antes de quedarse sin imagen.

Una ventana diminuta que se desliza 🖖

Una convolución desliza una pequeña rejilla de números, el kernel, por la imagen. En cada parada multiplica los valores superpuestos y los suma en un único píxel de salida. El resultado es un mapa de características que se ilumina allí donde aparece el patrón del kernel. Prueba aquí el kernel de detección de bordes: las zonas planas se oscurecen y los límites se encienden, porque el kernel responde al cambio, no al brillo en sí.

En realidad no es convolución 🖖

La operación que casi toda CNN llama "convolución" es en realidad una correlación cruzada. La convolución matemática verdadera primero voltea el kernel de arriba abajo y de izquierda a derecha antes de deslizarlo; las bibliotecas de aprendizaje profundo omiten ese volteo. Como la red aprende los pesos de todos modos, un kernel volteado simplemente se aprendería al revés y daría un resultado idéntico, por eso pervive el nombre erróneo. Con un kernel simétrico como el de desenfoque, ambas son indistinguibles.

Idea errónea común

Un mapa de características más profundo no siempre es "mejor". Un stride alto o núcleos agresivos pueden eliminar información que las capas posteriores necesitaban.

Problema resuelto al detalle

  1. Tamaño del mapa de salida para un mapa de entrada de 28×28 y kernel sobel-x de 3×3 6 pasos

    La capa: un mapa de entrada de 28×28, un kernel Sobel-x de 3×3, paso 1, relleno mismo. Calcule el tamaño del mapa de salida y lo que cuesta una pasada en multiplicaciones-sumas; después, determine cuántas capas de este tipo deben apilarse antes de que un solo píxel de salida dependa de todos los píxeles de la imagen.

    1. El relleno fija el tamaño, por lo que conviene resolverlo primero. El relleno mismo coloca un borde de ceros de un píxel alrededor del mapa, lo que es exactamente suficiente para que una ventana de 3×3 quede centrada en un píxel de la esquina en lugar de sobresalir del borde. El borde que necesita un kernel es la mitad de su tamaño, sin contar el centro.

    2. Desplace la ventana a lo largo de una fila. Su borde izquierdo comienza en 0 y avanza según el paso hasta que su borde derecho alcanza el final de la fila con relleno, por lo que contar los píxeles de salida es un recuento de tipo poste y valla: el número de avances más 1 por la posición inicial. Con un paso de 1, el borde devuelve exactamente las 2 columnas que descuenta el kernel, de ahí el nombre de mismo.

    3. Cada uno de los 784 píxeles de salida es una suma ponderada de 9 valores de entrada. Al sumar los pesos del filtro Sobel-x, estos se anulan dando 0, de modo que cualquier ventana cuyos 9 valores de entrada sean iguales devuelve exactamente 0, independientemente de lo brillante que sea esa región. El mapa se oscurece dondequiera que la imagen sea uniforme y solo responde donde la columna izquierda de la ventana difiere de la derecha.

    4. El coste aritmético resulta ser: 9 multiplicaciones y acumulaciones por píxel de salida, un píxel de salida por posición de la ventana. El panel muestra ese recuento.

    5. La profundidad es la parte interesante. Tras una capa, un píxel de salida ve 3 píxeles de entrada de ancho. Al añadir una segunda capa, cada uno de esos 3 píxeles era a su vez una ventana de 3; pero como las ventanas vecinas se solapan en 2 píxeles, la cobertura alcanza 5 píxeles, no 9. Cada capa adicional de 3×3 con paso 1 la amplía en exactamente 2.

    6. Fije la cobertura para que abarque las 28 columnas y despeje la profundidad. Con 13 capas se alcanzan 27 columnas, quedándose a una de la totalidad; la 14.ª capa es la primera cuyos píxeles de salida pueden verse influidos por toda la imagen.

    Respuesta

    Salida de 28×28, 7056 multiplicaciones-sumas por capa y 14 capas antes de que un píxel vea la imagen completa. Ahora calcule lo que cuesta ese alcance. Las 14 capas apiladas requieren 14 × 9 = 126 multiplicaciones y acumulaciones por píxel de salida. Una sola capa que alcance la misma distancia necesitaría un kernel de 29×29, con 841 por píxel de salida: 6,7 veces más operaciones aritméticas para exactamente el mismo campo receptor. La profundidad proporciona alcance de forma mucho más económica que la anchura, motivo por el cual las redes de visión son secuencias largas de kernels de 3×3 en lugar de secuencias cortas de kernels grandes.

Referencias (1)
  • Insight block 3 — the operation called convolution is cross-correlation: I. Goodfellow, Y. Bengio and A. Courville, Deep Learning, ch. 9. MIT Press, 2016. ISBN 978-0-262-03561-3 — "many machine learning libraries implement cross-correlation but call it convolution".

Problemas de ejemplo

  • dígito sobel-x - Sobel-x suma cero, así que las zonas uniformes quedan negras y solo permanece la variación vertical. El relleno "same" con paso 1 mantiene la salida en 28x28.
  • bordes de formas - El núcleo de contornos también suma cero: el 8 central compensa ocho valores -1. Por eso desaparecen las regiones uniformes y solo quedan los límites. La salida se mantiene en 28x28.
  • desenfoque + stride 2 - Es el único ajuste predefinido que reduce por división: el paso 2 convierte 28x28 en 14x14, la cuarta parte de los píxeles. El núcleo de desenfoque suma 1, de modo que el brillo se conserva aunque se pierdan los detalles.
  • enfoque valid - Es el único ajuste predefinido que reduce por sustracción: el relleno "valid" convierte 28x28 en 26x26 al eliminar un píxel de cada borde. El núcleo de enfoque suma 1, así que las regiones uniformes conservan su valor y los contornos se realzan.