Python Data Science Program
📓 Abrir notebook en GitHub

Clase 138 — 1D CNNs y WaveNet

Parte: 2 — Deep Learning · Fuente: Géron, cap. 15 § Handling Long Sequences + WaveNet paper (van den Oord et al. 2016). ⏱️ Duración estimada: 60 min.

🎯 Objetivo

Conocer la alternativa a RNN para secuencias: Conv1D y WaveNet (dilated causal convolutions). Más rápido que LSTM (paralelizable), receptive field amplio con pocas capas (dilated convolutions). Útil para audio, series temporales y como capa de preprocesamiento.

📚 Resultados de aprendizaje

Al finalizar, el estudiante podrá:

🗺️ Temas

📖 Definiciones y características

📂 Dataset / recursos

🧪 Ejercicios

  1. Conv1D vs LSTM: forecasting de serie. Conv1D(32, 5, padding='causal') → Conv1D(32, 5, padding='causal') → Flatten → Dense(1). Comparar con LSTM equivalente.
  2. Dilation rates: stack de 4 Conv1D con dilation_rate ∈ {1, 2, 4, 8}. Calcular receptive field.
  3. Speed test: medir tiempo de training Conv1D vs LSTM para misma data. Conv1D suele ser 5-20× más rápido en GPU.
  4. WaveNet mini: implementar stack de 10 Conv1D causal con dilations {1, 2, 4, ..., 512} para una serie larga.
  5. Visualización del receptive field: para un output [t], marcar qué inputs lo afectan.

📝 Homework verificable

Forecasting del dataset eléctrico (clase 119) con mini-WaveNet:

  1. Stack de 6 Conv1D causal dilated con rates 1, 2, 4, 8, 16, 32.
  2. Cada capa con 32 filtros, kernel 2.
  3. Comparar MAE en test vs LSTM del ejercicio 119.

Criterio de aceptación: el WaveNet debe ser competitivo o mejor que LSTM, y notablemente más rápido en GPU.

⚠️ Errores comunes

Síntoma / mensaje Causa y cómo arreglar
padding='same' en forecasting causal Ve el futuro. Fix: padding='causal'.
Stack sin dilation → receptive field chico Necesitás muchas capas. Fix: dilations exponenciales.
Conv1D + Flatten → Dense con muchos params Modelo grande. Fix: GlobalAvgPool1D antes del Dense final.
Mezclar Conv1D no causal y causal Inconsistente. Fix: si forecasting, todo causal.
Audio en [-1, 1] con Conv1D sin normalizar Funcionar funciona, pero converge mejor con BN o LayerNorm.

❓ Preguntas frecuentes

❓ ¿Conv1D supera a Transformer en algún caso?

Sí, en audio raw y series largas (>1000 pasos) con patrones locales. Transformer atención O(N²) en memoria.

❓ ¿WaveNet sigue siendo state-of-the-art?

En generación de audio, fue reemplazada por modelos de difusión (clase 133) y autoregresivos sobre tokens de audio (EnCodec + Llama-style).

❓ ¿Combinar Conv1D + LSTM/Transformer?

Sí. Patrón "convs como tokenizer" + Transformer arriba es estándar en audio (Wav2Vec, Whisper).

❓ ¿dilation_rate y kernel_size cómo se combinan?

receptive_field = (kernel_size - 1) * dilation_rate + 1 para una sola capa. Stack: suma de eso por capa.

❓ ¿Por qué Conv1D paralelizable?

Todas las posiciones se computan en paralelo (no hay dependencia temporal explícita como RNN). Ideal para GPU.

🔗 Referencias

📥 Material descargable

➡️ Siguiente clase

Clase 139 — Generación de texto char-RNN