Python Data Science Program
📓 Abrir notebook en GitHub

Clase 116 — Regularización: L1/L2, dropout, max-norm, MC dropout (+ Stochastic Depth, DropPath)

Parte: 2 — Deep Learning · Fuente: Géron, cap. 11 § Regularization + Huang et al. (2016) Deep Networks with Stochastic Depth. ⏱️ Duración estimada: 80 min.

🎯 Objetivo

Conocer las técnicas de regularización en DL —L1/L2, dropout (Srivastava et al. 2014), max-norm, MC dropout para incertidumbre— y las técnicas modernas que se usan en arquitecturas profundas (ResNets, ViT, Transformers): Stochastic Depth, DropPath y LayerDrop.

📚 Resultados de aprendizaje

Al finalizar, el estudiante podrá:

🗺️ Temas

📌 Versión profundizada — 2026

El tema moderno que vivía como complemento dentro de esta clase ahora tiene clase propia dedicada con patrón completo, ejercicios y homework:

📖 Definiciones y características

📂 Dataset / recursos

🧪 Ejercicios

  1. Sin regularización: entrenar un MLP grande ([512, 256, 128]) en Fashion-MNIST y observar overfitting (gap train/val ≥ 5 pp).
  2. L2: agregar kernel_regularizer=keras.regularizers.l2(1e-3) a cada Dense. Comparar.
  3. Dropout: agregar Dropout(0.3) entre Dense layers. Comparar.
  4. MC Dropout: para 1 sample de test, hacer 100 predicciones con model(x, training=True). Calcular mean ± std de las probabilidades. Interpretar la incertidumbre.
  5. Stochastic Depth simulado: en un mini ResNet con 8 bloques, dropear cada bloque con prob 0.1 lineal. Comparar contra sin stochastic depth.

📝 Homework verificable

Sobre Fashion-MNIST con MLP [512, 256, 128, 64]:

  1. Entrenar 4 versiones: sin regularización; L2(1e-3); Dropout(0.3); L2 + Dropout combinados.
  2. Reportar train_acc y val_acc; calcular el gap.
  3. Para el mejor modelo, hacer MC Dropout con 50 muestras sobre 5 imágenes ambiguas y reportar incertidumbre.

Criterio de aceptación: el modelo regularizado tiene gap train-val menor a 3 pp (vs ~6 pp del baseline) y val_acc igual o mejor. MC dropout debe asignar mayor std a las imágenes ambiguas.

⚠️ Errores comunes

Síntoma / mensaje Causa y cómo arreglar
Dropout en inferencia da resultados distintos cada vez Pasaste training=True por error. Fix: en inference, training=False (default de model.predict).
L2 con λ=1.0 y modelo no aprende Penalización demasiado fuerte. Fix: λ típico 1e-4 a 1e-3.
Dropout(0.5) en la última capa antes de softmax Distorsiona logits. Fix: dropout en capas ocultas; no justo antes de la softmax.
L2 + AdamW con weight_decay → doble penalización Usar uno: AdamW(wd=...) o kernel_regularizer L2, no ambos.
Stochastic Depth con p_i constante en lugar de lineal Funciona pero menos óptimo. Fix: p_i = i/N · p_max.

❓ Preguntas frecuentes

❓ ¿Dropout 0.5 siempre?

0.5 para capas Dense grandes. Para capas Conv: 0.1-0.2. Para embeddings y attention en Transformers: 0.1.

❓ ¿BN ya regulariza, necesito dropout también?

Depende. En CNNs/MLPs con BN, dropout a veces ya no aporta. En Transformers, sí (BN no se usa allí; LN + dropout + DropPath).

❓ ¿MC Dropout es bayesiano "de verdad"?

Aproxima un proceso gaussiano variacional. No es bayesiano riguroso pero es una excelente aproximación práctica para incertidumbre.

❓ ¿Stochastic Depth en CNN no residual?

No tiene sentido — Stochastic Depth necesita la skip connection para que dropear no rompa el forward.

❓ ¿Cuánta dropout/droppath en ViT base?

ViT-Base original: dropout=0.1 en attention, droppath=0.1 lineal en cada bloque. Para fine-tuning, suele bajarse a 0.0.

🔗 Referencias

📥 Material descargable

➡️ Siguiente clase

Clase 117 — Regularización moderna: Stochastic Depth, DropPath, LayerDrop