17. Capas convolucionales en profundidad

17.1 Introducción

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.

17.2 Recordatorio: qué hace una capa convolucional

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.

Una capa convolucional no “mira toda la imagen de una vez”. Explora regiones locales y aprende qué patrones deben activarse en cada zona.

17.3 Filtro, kernel y pesos aprendibles

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.

17.4 Convolución sobre una imagen de un canal

Para empezar, imaginemos una imagen en escala de grises y un solo filtro 3x3. La operación consiste en:

  1. Tomar un parche local 3x3 de la imagen.
  2. Multiplicar elemento a elemento con el kernel.
  3. Sumar todos esos productos.
  4. Colocar el resultado en la posición correspondiente del mapa de salida.

Luego el filtro se desplaza a la siguiente posición y repite el proceso. Así se construye el mapa de características completo.

17.5 Convolución sobre imágenes con varios canales

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.

17.6 De una entrada multicanal a múltiples salidas

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:

  • Entrada: imagen RGB de 224 x 224 x 3.
  • Filtros: 32 kernels.
  • Salida: 32 mapas de características.

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.

17.7 Mapas de características

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:

  • Bordes verticales.
  • Bordes horizontales.
  • Texturas.
  • Cambios de color.
  • Patrones más abstractos en capas profundas.

Cuantos más filtros tiene una capa, más diversidad de patrones puede representar.

17.8 Tamaño del kernel

El tamaño del kernel define cuánta vecindad local observa cada filtro. Los tamaños más comunes son:

  • 3x3
  • 5x5
  • 7x7

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.

17.9 Stride

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:

  • Stride pequeño: más detalle en la salida.
  • Stride grande: menor tamaño espacial y menor costo.

Con stride mayor que 1, la salida se reduce espacialmente. Por eso el stride también puede actuar como una forma de subsampling.

17.10 Padding

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:

  • Sin padding, la salida se achica.
  • Con padding de 1, la salida puede mantener el mismo tamaño.

17.11 ¿Por qué el padding es importante?

El padding cumple varios roles importantes:

  • Evita perder información de bordes demasiado rápido.
  • Permite apilar más capas sin reducir drásticamente el tamaño.
  • Facilita diseñar arquitecturas con dimensiones más controladas.

En la práctica, el uso de padding adecuado es una decisión central en el diseño de la red.

17.12 Tamaño de salida de una convolución

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:

  • Kernel más grande suele reducir más.
  • Stride más grande reduce más.
  • Padding compensa esa reducción.

En diseño de CNN, controlar dimensiones capa por capa es muy importante para evitar errores estructurales.

17.13 Bias en la capa convolucional

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.

17.14 Campo receptivo

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.

Las primeras capas de una CNN ven detalles locales. Las capas profundas ven contextos mucho más amplios gracias a la acumulación de convoluciones sucesivas.

17.15 ReLU después de la convolución

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.

17.16 Profundidad de la red

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:

  • Patrones locales simples.
  • Combinaciones de patrones.
  • Partes significativas de objetos.
  • Representaciones de alto nivel.

La profundidad es, en gran medida, lo que hace posible el aprendizaje jerárquico.

17.17 Cantidad de parámetros

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.

17.18 Invariancia aproximada a traslaciones

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.

17.19 Una convolución no es magia

Aunque el término pueda parecer sofisticado, una capa convolucional sigue una lógica concreta y repetitiva:

  1. Toma una región local.
  2. Calcula una combinación lineal con pesos aprendidos.
  3. Genera una respuesta.
  4. Repite el proceso por toda la entrada.

La complejidad surge al apilar muchas de estas operaciones y aprender sus pesos sobre grandes datasets.

17.20 Cómo se ve esto en PyTorch

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.

17.21 Ejemplo conceptual de dimensiones

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.

17.22 Qué aprende una primera capa

En muchas CNN entrenadas, los filtros de la primera capa terminan pareciéndose a detectores de:

  • Bordes orientados.
  • Transiciones de color.
  • Texturas simples.

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.

17.23 Qué cambia en capas más profundas

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.

17.24 Errores comunes al entender convoluciones

Al empezar, es frecuente confundirse en algunos puntos:

  • Pensar que cada filtro produce una sola neurona, cuando en realidad produce un mapa completo.
  • Confundir cantidad de canales de entrada con cantidad de filtros de salida.
  • Olvidar el efecto de stride y padding sobre el tamaño final.
  • Asumir que los filtros están diseñados manualmente y no aprendidos.
  • No distinguir entre convolución conceptual y operación implementada en frameworks.

Aclarar estas ideas desde el principio simplifica muchísimo la comprensión de arquitecturas más complejas.

17.25 Qué debes recordar de este tema

  • Una capa convolucional aplica filtros locales aprendidos sobre la entrada.
  • Cada filtro genera un mapa de características.
  • La cantidad de filtros determina la profundidad de salida.
  • Stride controla el desplazamiento del filtro y padding controla el tratamiento de bordes y tamaño.
  • Las convoluciones aprovechan estructura espacial, localidad y compartición de pesos.
  • Apilar capas hace crecer el campo receptivo y la abstracción de las representaciones.
  • En PyTorch, estas capas se implementan típicamente con nn.Conv2d.

17.26 Conclusión

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.