Python Data Science Program
📓 Abrir notebook en GitHub

Clase 109 — Activaciones: ReLU, ELU, GELU, Swish, Mish

Parte: 2 — Deep Learning · Fuente: Géron, cap. 11 § Better Activation Functions. ⏱️ Duración estimada: 60 min.

🎯 Objetivo

Conocer la familia de activaciones modernas — desde ReLU (Krizhevsky et al. 2012) hasta GELU (BERT, GPT) y Swish/SiLU (EfficientNet) — entendiendo qué problema resuelve cada una y por qué los Transformers modernos usan GELU y no ReLU. Saber elegir según arquitectura.

📚 Resultados de aprendizaje

Al finalizar, el estudiante podrá:

🗺️ Temas

📖 Definiciones y características

📂 Dataset / recursos

🧪 Ejercicios

  1. Plot de funciones: graficar las 6 activaciones en x ∈ [-3, 3].
  2. Comparación empírica: entrenar MLP [256, 128, 64] con cada activación, mismo init He, mismo LR. Comparar val_accuracy tras 15 épocas.
  3. Dying ReLU: con LR alto (0.1), entrenar con ReLU. Contar cuántas neuronas tienen mean(activation) = 0 al final.
  4. Leaky ReLU al rescate: repetir con Leaky. Verificar que el % de neuronas muertas baja.
  5. GELU vs ReLU en profundidad: armar un MLP de 12 capas. Comparar GELU vs ReLU. GELU suele ganar.

📝 Homework verificable

Sobre Fashion-MNIST, MLP [300, 200, 100, 50, 10]:

  1. Entrenar 4 modelos con: ReLU, Leaky ReLU(α=0.1), ELU, GELU.
  2. Reportar val_accuracy y tiempo por época.
  3. Para el mejor, inspeccionar % de neuronas "muertas" por capa.

Criterio de aceptación: GELU o ELU debe ganar en accuracy; Leaky/ELU/GELU deben tener < 5 % neuronas muertas; ReLU posiblemente más.

⚠️ Errores comunes

Síntoma / mensaje Causa y cómo arreglar
Cambio de ReLU a sigmoid en capa oculta para "ser más suave" Vanishing immediato en redes profundas. Fix: usar GELU o Swish para suavidad sin vanishing.
Leaky ReLU con α=0.5 Casi lineal, pierde la no linealidad útil. Fix: α ∈ [0.01, 0.1].
activation='swish' no reconocido Keras antiguo lo llama 'swish', TF moderno también soporta. Si error, usar keras.layers.Activation(keras.activations.swish).
GELU en CPU es lento Es ≈ 2× más caro que ReLU por la erf. En CPU se nota; en GPU/TPU casi no.
Mish en GPU sin implementación optimizada TF puede no tener kernel cuda eficiente para Mish exacto. Fix: usar Mish aproximado (x * tanh(softplus(x)) puro) o cambiar a Swish.

❓ Preguntas frecuentes

❓ ¿Qué activación uso por default en 2026?

❓ Swish y SiLU son lo mismo?

Sí, mismo formato (x · sigmoid(x)). SiLU es el nombre PyTorch; Swish es el nombre de Google.

❓ ¿Por qué GELU en Transformers?

Históricamente: BERT (2018) la eligió porque parecía funcionar mejor empíricamente. Hoy es estándar más por inercia/compatibilidad que por una ventaja categórica. En benchmarks recientes, Swish es competitiva.

❓ ¿GELU exacta o aproximada?

tf.keras.activations.gelu(x, approximate=False) usa erf exacta. True usa la aproximación tanh, ≈10× más rápida en GPU. La diferencia numérica es < 0.001.

❓ ¿La salida del modelo también lleva GELU?

No. La activación final depende del problema (linear, sigmoid, softmax). GELU/ReLU son para capas ocultas.

🔗 Referencias

📥 Material descargable

➡️ Siguiente clase

Clase 110 — Batch Normalization, Layer Normalization