← Regresar a lecciones
  • Keras

  • Deep Learning

  • LSTM

  • Machine Learning

    Python

  • GRU

  • RNN

Redes Neuronales Recurrentes

Redes Neuronales Recurrentes: Comprender la memoria en los modelos de aprendizaje profundo
¿Qué es una red neuronal recurrente?

Redes Neuronales Recurrentes: Comprender la memoria en los modelos de aprendizaje profundo

En muchos problemas del mundo real, los datos se presentan en forma secuencial: palabras en una oración, precios bursátiles a lo largo del tiempo, notas musicales en una melodía o señales fisiológicas medidas en intervalos regulares. Para abordar este tipo de problemas, no basta con analizar datos de manera aislada; es necesario contar con modelos capaces de captar la dependencia entre los elementos de una secuencia.

Las Redes Neuronales Recurrentes (RNN, por sus siglas en inglés) fueron diseñadas precisamente con ese objetivo: permitir que un modelo aprenda dependencias temporales en los datos, incorporando una forma de memoria interna.

¿Qué es una red neuronal recurrente?

Una red neuronal recurrente es una arquitectura de red que, a diferencia de una red neuronal tradicional (feedforward), incorpora ciclos en su estructura. Esto le permite mantener un estado interno que se actualiza con cada nueva entrada y que influye en las decisiones futuras del modelo.

La idea clave detrás de una RNN es que la salida del modelo en un instante depende no solo de la entrada actual, sino también del estado interno acumulado hasta ese momento.

¿Cómo funciona una RNN?

En una red neuronal recurrente, el proceso de cómputo en cada paso temporal puede representarse de forma simplificada así:

  • x_t: entrada en el tiempo t.
  • h_t: estado oculto en el tiempo t, que se actualiza como función de x_t y del estado anterior h_{t-1}.
  • y_t: salida del modelo en el tiempo t.

La actualización del estado y la generación de la salida puede formalizarse con estas ecuaciones:

1h_t = tanh(W_hh * h_{t-1} + W_xh * x_t + b_h) y_t = W_hy * h_t + b_y

El estado h_t actúa como una memoria dinámica, que se va ajustando conforme el modelo avanza por la secuencia. Las RNN son especialmente útiles en tareas donde el contexto es esencial. Algunos ejemplos incluyen:

  • Procesamiento de lenguaje natural (NLP): modelado de lenguaje, traducción automática, generación de texto, análisis de sentimientos.
  • Predicción de series temporales: estimación de precios financieros, demanda energética, temperatura, etc.
  • Reconocimiento de voz: transcripción de audio a texto.
  • Análisis de secuencias biológicas: identificación de patrones en secuencias de ADN o proteínas.

Limitaciones de las RNN clásicas

Aunque las RNN pueden, en teoría, aprender dependencias a largo plazo, en la práctica sufren un fenómeno conocido como desvanecimiento o explosión del gradiente durante el entrenamiento, lo que dificulta su capacidad para recordar información lejana en el tiempo.

Esto limita su eficacia en tareas donde es importante capturar relaciones entre eventos que están muy separados en la secuencia. Para superar las limitaciones de las RNN tradicionales, se desarrollaron arquitecturas mejoradas:

  • LSTM (Long Short-Term Memory): introduce mecanismos de puertas que regulan qué información se mantiene, qué se actualiza y qué se olvida, permitiendo preservar el estado a lo largo de más pasos temporales.
  • GRU (Gated Recurrent Unit): similar a LSTM pero con una estructura más simplificada, manteniendo un rendimiento competitivo y reduciendo el número de parámetros.

Ambas variantes son hoy en día el estándar de facto cuando se trabaja con secuencias.

Implementación básica con Keras

El siguiente ejemplo muestra cómo construir una red RNN sencilla utilizando la biblioteca Keras en Python:

1from keras.models import Sequential 2from keras.layers import SimpleRNN, Dense 3 4model = Sequential() 5model.add(SimpleRNN(64, input_shape=(timesteps, features))) 6model.add(Dense(1, activation='sigmoid')) 7model.compile(optimizer='adam', loss='binary_crossentropy')

Este modelo puede adaptarse para tareas como clasificación de sentimientos o predicción de eventos binarios a partir de secuencias.