Python Data Science Program
📓 Abrir notebook en GitHub

Clase 137 — LSTM, GRU

Parte: 2 — Deep Learning · Fuente: Géron, cap. 15 § Tackling Short-Term Memory Problems. ⏱️ Duración estimada: 70 min.

🎯 Objetivo

Entender LSTM (Hochreiter & Schmidhuber 1997) y GRU (Cho et al. 2014) — celdas recurrentes con gates que solucionan el vanishing gradient de SimpleRNN: la información puede fluir sin atenuación por la cell state, y los gates aprenden qué olvidar, recordar y emitir.

📚 Resultados de aprendizaje

Al finalizar, el estudiante podrá:

🗺️ Temas

📖 Definiciones y características

📂 Dataset / recursos

🧪 Ejercicios

  1. LSTM vs SimpleRNN: en una serie de 100 pasos con dependencia long-range, comparar accuracy.
  2. GRU vs LSTM: misma tarea, comparar. GRU ~ 25 % menos params; accuracy casi igual.
  3. Stacked: 2-3 capas LSTM apiladas con return_sequences=True en las primeras.
  4. Bidirectional: para sentimiento IMDB, comparar LSTM vs Bidirectional(LSTM).
  5. cuDNN check: medir velocidad LSTM vanilla vs con recurrent_dropout (desactiva cuDNN).

📝 Homework verificable

Clasificación de sentimiento sobre IMDB con LSTM:

  1. Tokenizar con TextVectorization(max_tokens=20_000, output_sequence_length=200).
  2. Embedding(20_000, 128) → Bidirectional(LSTM(64)) → Dense(64) → Dense(1, sigmoid).
  3. Entrenar 5 épocas.
  4. Reportar accuracy y comparar contra una baseline Dense sin RNN.

Criterio de aceptación: accuracy ≥ 0.85; el modelo recurrente claramente supera al baseline Dense.

⚠️ Errores comunes

Síntoma / mensaje Causa y cómo arreglar
LSTM lento en GPU Tal vez recurrent_dropout > 0 o unroll=True desactivan cuDNN. Fix: usar config default.
Padding/masking ignorado mask_zero=True en Embedding + LSTM que respeta mask. Verificar.
Bidirectional rompe en task causal (forecasting) Bidirectional ve el futuro. Fix: solo Forward para tareas causales.
Stacked LSTM overfittea Demasiado expresivo. Fix: dropout entre capas, menos units.
GRU vs LSTM comparados sin suficientes seeds Diferencia chica puede ser ruido. Fix: ≥ 3 seeds.

❓ Preguntas frecuentes

❓ ¿LSTM o GRU?

Empezá con LSTM (más conocido). GRU si necesitás eficiencia. La diferencia de accuracy es típicamente < 0.5 pp.

❓ ¿LSTM aún se usa en 2026?

Sí, para forecasting de series temporales chicas, sistemas embedded, NER simple. Para NLP serio → Transformers.

❓ ¿Cuántas capas?

1-3. Más de 3 raramente justifica el costo. Para tareas serias, mejor un Transformer.

❓ ¿recurrent_dropout vs dropout?

dropout se aplica a inputs (entre capas); recurrent_dropout entre timesteps (intra-secuencia). El segundo desactiva cuDNN.

❓ ¿Cómo manejo secuencias de longitud variable?

Embedding(..., mask_zero=True) + padding con 0s. LSTM/GRU respetan la máscara automáticamente.

🔗 Referencias

📥 Material descargable

➡️ Siguiente clase

Clase 138 — 1D CNNs y WaveNet