En el tema anterior vimos la intuición general detrás de las redes convolucionales. Ahora vamos a profundizar en su componente más característico: la capa convolucional. Esta capa es el mecanismo que permite a una CNN aprender patrones visuales locales y construir representaciones jerárquicas de una imagen.
Entender una capa convolucional en profundidad es clave porque casi todo el comportamiento de una CNN depende de cómo se eligen y combinan sus filtros, su stride, su padding y su número de canales de salida.
La idea de este tema es pasar de una intuición general a una comprensión más estructurada de cómo opera realmente una convolución dentro de una red.
Una capa convolucional aplica uno o varios filtros pequeños sobre la entrada. Cada filtro recorre la imagen o el mapa de características y produce una nueva salida que responde más fuertemente en las regiones donde aparece cierto patrón.
En otras palabras, una capa convolucional transforma una entrada visual en un conjunto de mapas que resaltan distintas características aprendidas.
En este contexto, los términos filtro y kernel suelen usarse casi como sinónimos. Se trata de una pequeña matriz de pesos que se desplaza por la entrada.
La diferencia importante respecto del procesamiento clásico es que aquí esos pesos no son fijos ni diseñados manualmente. Se aprenden durante el entrenamiento mediante optimización.
Por ejemplo, un filtro 3x3 tiene nueve pesos por canal de entrada. Durante el aprendizaje, la red ajusta esos valores para detectar patrones relevantes para la tarea.
Para empezar, imaginemos una imagen en escala de grises y un solo filtro 3x3. La operación consiste en:
Luego el filtro se desplaza a la siguiente posición y repite el proceso. Así se construye el mapa de características completo.
En imágenes reales solemos tener más de un canal, por ejemplo RGB. En ese caso, el filtro no es solo 3x3, sino 3x3x3 si la entrada tiene tres canales.
Esto significa que el filtro tiene una pequeña matriz por cada canal de entrada. La operación se realiza en cada canal y luego se suman los resultados para producir una sola activación de salida.
Por eso, una capa convolucional procesa simultáneamente la dimensión espacial y la dimensión de canales.
Una sola capa convolucional no suele usar un único filtro. Lo habitual es usar muchos filtros diferentes. Cada uno aprende un patrón distinto y produce su propio mapa de características.
Por ejemplo:
En otras palabras, una capa convolucional transforma una entrada con cierta cantidad de canales en una salida con una nueva profundidad determinada por la cantidad de filtros.
Cada filtro produce un mapa de características. Este mapa indica cuánto “encuentra” ese patrón el filtro en distintas regiones de la entrada.
Un filtro puede especializarse en:
Cuantos más filtros tiene una capa, más diversidad de patrones puede representar.
El tamaño del kernel define cuánta vecindad local observa cada filtro. Los tamaños más comunes son:
Hoy en muchas arquitecturas modernas predominan kernels pequeños, especialmente 3x3, porque permiten construir redes profundas con menos parámetros y mayor flexibilidad.
Un kernel grande observa más contexto local en una sola operación, pero también aumenta costo y cantidad de parámetros.
El stride indica cuántos píxeles se desplaza el filtro cada vez que avanza. Si el stride es 1, el filtro se mueve una posición por vez. Si el stride es 2, salta de a dos posiciones.
Esto tiene un efecto importante:
Con stride mayor que 1, la salida se reduce espacialmente. Por eso el stride también puede actuar como una forma de subsampling.
El padding consiste en agregar bordes alrededor de la entrada, normalmente con ceros. Esto se hace para controlar el tamaño de salida y permitir que el filtro también opere adecuadamente cerca de los bordes de la imagen.
Sin padding, una convolución reduce el tamaño espacial de la salida. Con padding apropiado, podemos conservarlo.
Por ejemplo, en una convolución 3x3 con stride 1:
El padding cumple varios roles importantes:
En la práctica, el uso de padding adecuado es una decisión central en el diseño de la red.
El tamaño espacial de salida depende del tamaño de entrada, del kernel, del stride y del padding. No hace falta memorizar ahora la fórmula general, pero sí entender la lógica:
En diseño de CNN, controlar dimensiones capa por capa es muy importante para evitar errores estructurales.
Además de los pesos del filtro, muchas capas convolucionales incluyen un término adicional llamado bias. Este valor se suma a la respuesta del filtro antes de aplicar la activación.
Aunque conceptualmente es sencillo, el bias contribuye a que la capa tenga más flexibilidad para ajustar su salida.
El campo receptivo de una neurona indica qué región de la entrada original puede influir en ella. En las primeras capas el campo receptivo es pequeño, porque la neurona solo ve un parche local. A medida que apilamos capas, el campo receptivo efectivo crece.
Esto significa que las capas profundas pueden integrar información de regiones mucho más grandes y construir conceptos más abstractos.
En la práctica, una capa convolucional suele ir seguida de una activación como ReLU:
salida = ReLU(convolucion(entrada))
Esto introduce no linealidad y permite a la red modelar patrones complejos. Sin activaciones, apilar convoluciones lineales no aportaría toda la riqueza expresiva que hace útiles a las CNN.
Una sola capa convolucional puede aprender patrones útiles, pero la verdadera potencia de las CNN aparece cuando se apilan muchas capas. Cada nueva capa opera sobre representaciones ya transformadas por las anteriores.
Eso permite pasar gradualmente desde:
La profundidad es, en gran medida, lo que hace posible el aprendizaje jerárquico.
Una ventaja fuerte de las capas convolucionales es que requieren menos parámetros que una capa densa sobre imágenes del mismo tamaño. Por ejemplo, un filtro 3x3 sobre una entrada RGB tiene:
3 x 3 x 3 = 27 pesos, más quizá un bias.
Si usamos 32 filtros, la capa tendrá del orden de cientos de parámetros, no millones como ocurriría con una conexión completamente densa sobre toda la imagen.
Esta eficiencia es una de las bases del éxito de las CNN.
Gracias a la compartición de pesos y al uso de filtros locales, las CNN pueden detectar el mismo patrón en distintas posiciones. Esto aporta una forma de invariancia o, más precisamente, robustez frente a ciertas traslaciones.
No significa que la red sea perfectamente invariante por sí sola, pero sí que maneja mucho mejor la variación espacial que una red densa plana.
Aunque el término pueda parecer sofisticado, una capa convolucional sigue una lógica concreta y repetitiva:
La complejidad surge al apilar muchas de estas operaciones y aprender sus pesos sobre grandes datasets.
En PyTorch, una capa convolucional 2D suele definirse con nn.Conv2d. Por ejemplo:
import torch.nn as nn
conv = nn.Conv2d(
in_channels=3,
out_channels=32,
kernel_size=3,
stride=1,
padding=1
)
Aquí:
in_channels=3 corresponde a una entrada RGB.out_channels=32 indica 32 filtros.kernel_size=3 define filtros 3x3.stride=1 mantiene desplazamiento estándar.padding=1 ayuda a conservar tamaño espacial.Si una entrada tiene tamaño 224 x 224 x 3 y aplicamos una capa con 32 filtros 3x3, stride 1 y padding 1, la salida tendrá aproximadamente:
224 x 224 x 32
Esto significa que mantenemos ancho y alto, pero cambiamos la profundidad de 3 canales a 32 mapas de características.
En muchas CNN entrenadas, los filtros de la primera capa terminan pareciéndose a detectores de:
Esto es interesante porque conecta directamente las CNN con la visión clásica: los primeros patrones aprendidos son, en cierto sentido, versiones optimizadas y adaptadas de filtros visuales básicos.
En capas posteriores, la entrada ya no es una imagen cruda, sino un conjunto de mapas de características. Por lo tanto, los filtros ya no aprenden bordes básicos, sino combinaciones de patrones cada vez más complejas.
Este crecimiento en abstracción es una de las claves del poder representacional de las CNN.
Al empezar, es frecuente confundirse en algunos puntos:
Aclarar estas ideas desde el principio simplifica muchísimo la comprensión de arquitecturas más complejas.
nn.Conv2d.Las capas convolucionales son el corazón de una CNN. En ellas se materializa la idea de aprender filtros visuales útiles a partir de datos, respetando la estructura espacial de la imagen y reduciendo drásticamente la cantidad de parámetros respecto de redes densas.
Entender bien conceptos como kernel, stride, padding, canales y mapas de características es indispensable para leer arquitecturas, implementarlas en PyTorch y diagnosticar su comportamiento.
En el próximo tema estudiaremos el pooling y la reducción de dimensionalidad, que explican cómo las CNN resumen información espacial y controlan el tamaño de sus representaciones internas.