Contenido del curso

- Redes Recurrentes (RNN) y Predicción de Series Temporales

🔁 Redes Recurrentes (RNN) y Predicción de Series Temporales

Odisea Algorítmica — De la regresión al aprendizaje profundo · Lección 12

Bienvenido a la frontera del tiempo en el deep learning. Hasta ahora hemos trabajado con datos independientes: imágenes, tablas, vectores sin contexto secuencial. Pero una gran parte de los problemas reales —el habla, el texto, los precios de acciones, el clima— son secuencias temporales. En esta lección exploraremos las Redes Recurrentes (RNN), la arquitectura que introduce el concepto de estado oculto y memoria de contexto. Comprenderás su estructura interna, el fenómeno crítico del desvanecimiento del gradiente y aplicarás una RNN con Keras para predecir series financieras. Este conocimiento es la base para entender LSTM y Transformer.

🧬 1. Estructura recurrente: el lazo que todo lo conecta

Una RNN se distingue de una red densa convencional por su bucle interno. En cada paso de tiempo \( t \), la red recibe dos entradas: el dato actual \( x_t \) y el estado oculto previo \( h_{t-1} \). Ese estado es un vector que condensa información de todos los pasos anteriores.

Fórmula conceptual del estado oculto:
\( h_t = \tanh( W_{hh} \cdot h_{t-1} + W_{xh} \cdot x_t + b_h ) \)
— donde \( W \) son pesos entrenables y \( \tanh \) introduce no-linealidad.

La salida \( y_t \) puede derivarse del estado oculto (ej. clasificación por paso) o solo al final de la secuencia. Este lazo recurrente es lo que permite a la red mantener dependencias temporales y modelar patrones que evolucionan en el tiempo.

  • Estado oculto (\( h_t \)): memoria interna que se actualiza en cada paso.
  • Pesos compartidos: los mismos \( W_{hh} \) y \( W_{xh} \) se aplican a cada instante, lo que reduce drásticamente el número de parámetros.
  • Profundidad temporal: desenrollar la red en el tiempo equivale a una red profunda con tantas capas como pasos de secuencia.

⏳ 2. Dependencias temporales y el problema del desvanecimiento del gradiente

La promesa de las RNN es capturar relaciones a corto y largo plazo. En la práctica, el aprendizaje de dependencias lejanas se ve severamente limitado por el desvanecimiento del gradiente. Al propagar el error hacia atrás a través de muchos pasos temporales (BPTT — Backpropagation Through Time), los gradientes tienden a desaparecer (volverse extremadamente pequeños) o explotar.

ProblemaCausaConsecuencia
DesvanecimientoMultiplicación repetida de \( \tanh'\) (La red olvida eventos lejanos; no aprende correlaciones largas.
Explosión del gradientePesos > 1 amplifican el errorInestabilidad numérica; overflow; soluciones: clipping.
🧠 Intuición: Imagina leer un libro y tratar de recordar la primera palabra en la última página. La RNN básica "desenfoca" esa información tras muchos pasos. Ahí es donde LSTM y GRU marcan la diferencia.

📈 3. Aplicación financiera: predicción bursátil con datos históricos

Las series de precios de acciones son un ejemplo clásico de dependencia temporal incierta (ruido + tendencias). Usaremos datos históricos del índice S&P 500 (o cualquier activo diario) para predecir el precio de cierre del siguiente día basándonos en una ventana de 60 días previos. No esperes precisión milagrosa —es un laboratorio pedagógico.

3.1 Preprocesamiento de la serie temporal

  • Normalización: escalar los precios entre 0 y 1 (MinMaxScaler) para estabilizar el entrenamiento.
  • Ventanas deslizantes: crear pares (X, y) donde X contiene 60 pasos consecutivos y y el valor siguiente.
  • División: entrenamiento (80% histórico) y prueba (20% final).

3.2 Implementación con Keras (TensorFlow)

Construiremos una RNN simple con una capa recurrente de 50 unidades y una salida densa (regresión).

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import SimpleRNN, Dense
from sklearn.preprocessing import MinMaxScaler

# Asumiendo X_train, y_train ya preparados (forma: [muestras, 60, 1])
model = Sequential([
    SimpleRNN(50, activation='tanh', return_sequences=False, input_shape=(60, 1)),
    Dense(1)  # regresión: precio predicho
])
model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(X_train, y_train, epochs=20, batch_size=32, validation_split=0.1)

Evaluación: visualiza las predicciones vs valores reales en el conjunto de prueba. Observarás que la RNN captura la tendencia general pero sufre retardo en picos abruptos (por la limitación de memoria corta).

⚠️ 4. Limitaciones de las RNN básicas (y por qué aparecen las LSTM)

Las RNN "vanilla" son un modelo fundacional, pero en la práctica presentan serias restricciones para problemas reales de secuencia larga:

  • Memoria a corto plazo: incapaces de retener información más allá de ~10-20 pasos en la práctica.
  • Gradiente desvanecido: la actualización de pesos iniciales se vuelve negligible.
  • Dificultad para ignorar ruido: cada paso tiene el mismo peso, sin mecanismo de olvido selectivo.
  • Representación monótona: no hay puertas que controlen el flujo de información.
🔑 Las LSTM (Long Short-Term Memory) resuelven estos problemas mediante: una celda de memoria explícita y tres puertas (olvido, entrada, salida) que regulan qué guardar, qué actualizar y qué emitir. Esto permite mantener gradientes vivos durante cientos de pasos. Su estudio detallado es la siguiente frontera de nuestra Odisea.

🧪 5. Conclusión experimental

En esta lección has visto cómo una red con un simple bucle recurrente puede modelar secuencias. Por sí sola, la RNN es frágil, pero representa el ladrillo esencial para arquitecturas más poderosas. Al implementar el ejemplo bursátil, habrás sentido la frustración de perder memoria a largo plazo; esa misma frustración motivó a Hochreiter y Schmidhuber a crear las LSTM en 1997.

✅ Resumen de conceptos clave:

  • ✅ La RNN mantiene un estado oculto que acumula información de pasos anteriores.
  • ✅ Comparte pesos en el tiempo, lo que permite procesar secuencias de longitud variable.
  • ✅ El desvanecimiento del gradiente limita el aprendizaje de dependencias largas.
  • ✅ Keras permite implementar una RNN en pocas líneas, ideal para prototipado.
  • ✅ Las limitaciones de las RNN básicas motivan el uso de celdas LSTM y GRU.
Estructura recurrente, estados ocultos y dependencias temporales. Problema del desvanecimiento del gradiente. Aplicación: predicción bursátil (precios de acciones) usando datos históricos. Implementación con Keras. Limitaciones de RNN básicas que motivan las LSTM.
Calificación
0 0

No hay comentarios por ahora.