Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Redes convolucionales (CNN), Unidad 10 — CNN modernas (visión general), 10.2 — Arquitecturas profundas ·

ResNet

ResNet: Arquitecturas profundas para visión por computador

Introducción

Las redes neuronales convolucionales (CNN) han sido fundamentales en la evolución de los algoritmos de visión por computador. Sin embargo, las arquitecturas tradicionales se enfrentan a un problema conocido como "caída de rendimiento" o "detrás de la curva" cuando aumentan el número de capas (o profundidad) del modelo. Este fenómeno se debe a la creciente complejidad y el aumento de los parámetros, lo que conduce a un sobreajuste y una disminución en la capacidad del modelo para aprender características más complejas.

ResNet, desarrollado por He et al. en 2016, es una arquitectura revolucionaria que resuelve este problema introduciendo "salteos" o saltos (skips) en las redes profundos. Este diseño permite a los modelos de CNN manejar con éxito la creciente profundidad sin caer en el sobreajuste y mejorar considerablemente su rendimiento.

Explicación principal

ResNet propone una arquitectura donde se introducen "saltos" o saltos (skips) que permiten al modelo aprender solo las diferencias entre las capas. En otras palabras, en lugar de aprender la mapeo directo desde las entradas a las salidas, el modelo aprende a ajustar las diferencias entre los resultados esperados y actuales.

Diagrama conceptual

graph LR;
    A[Entrada] --> B{Capa 1};
    B --> C[Salto];
    A --> D{Capa 2};
    C --> E[Suma];
    D --> F[Capa 3];
    E --> G[Salto];
    F --> H[Suma];
    G --> I[Siguiente Capa]

En este diagrama, se muestra cómo el salto (skip) permite que las señales de entrada y salida de una capa pasen directamente a la siguiente, sin necesidad de pasar por todas las capas intermedias.

Ejemplo práctico

Consideremos un ejemplo simple donde ResNet se aplica en una tarea de clasificación. En lugar de aprender desde cero la representación de la imagen completa en cada nivel, ResNet permite que partes del modelo aprendan características específicas y luego sumen esos cambios a las representaciones existentes.

from keras.models import Model
from keras.layers import Input, Conv2D, Add

def resnet_block(input_tensor, filters):
    x = Conv2D(filters, (3, 3), padding='same')(input_tensor)
    x = Activation('relu')(x)
    x = Conv2D(filters, (3, 3), padding='same')(x)
    
    shortcut = input_tensor
    if shortcut.shape[-1] != filters:
        shortcut = Conv2D(filters, (1, 1), padding='same')(shortcut)

    output = Add()([x, shortcut])
    return Activation('relu')(output)

input_tensor = Input((224, 224, 3))
x = resnet_block(input_tensor, 64)
model = Model(inputs=input_tensor, outputs=x)

En este ejemplo, la función resnet_block implementa una unidad básica de ResNet que toma un tensor de entrada y devuelve el resultado de sumar el tensor de salida de dos bloques de convolución a su propio tensor de entrada.

Errores típicos / trampas

  1. Selección inadecuada de la arquitectura: Aunque ResNet es una arquitectura revolucionaria, no es necesariamente mejor para todos los problemas. Se deben considerar las características específicas del problema y el conjunto de datos antes de elegir una arquitectura.
  1. Malas pruebas de validación: Es crucial contar con un conjunto de datos de validación adecuado y realizar pruebas de validación rigurosas para asegurar que el modelo no se sobreajuste al conjunto de entrenamiento.
  1. Configuraciones incorrectas del optimizador: La configuración del optimizador, como la tasa de aprendizaje o los parámetros de regularización, puede tener un impacto significativo en el rendimiento del modelo. Es importante ajustar estos hiperparámetros cuidadosamente para obtener el mejor rendimiento.

Checklist accionable

  • Verifica las características del problema: Comprueba si la profundidad es realmente necesaria o si otras arquitecturas podrían ser más adecuadas.
  • Implementa un conjunto de validación: Asegúrate de tener un conjunto de datos de validación y realiza pruebas regulares para monitorear el rendimiento del modelo en nuevos datos.
  • Optimiza los hiperparámetros: Experimenta con diferentes configuraciones de optimizador, tasa de aprendizaje y regularización para mejorar la precisión del modelo.

Cierre: Siguientes pasos

  • Explora arquitecturas más avanzadas: ResNet es solo una parte de un mundo de arquitecturas de CNN profundas. Explora otras arquitecturas como Inception o EfficientNet.
  • Aprende a interpretar tus modelos: Utiliza herramientas para visualizar las representaciones internas de tu modelo, lo que te ayudará a entender mejor cómo está funcionando y dónde podrían existir problemas.
  • Aplica a proyectos reales: Trabaja en proyectos que requieran visión por computador para mejorar y afinar tus habilidades.

ResNet ha sido una maravilla en la evolución de las arquitecturas CNN, abriendo nuevas puertas hacia modelos más profundos y efectivos. Sin embargo, es importante recordar que cada problema tiene su propia solución óptima, y es crucial seguir investigando y aprendiendo para mejorar continuamente.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).