Sobreajuste y subajuste: cómo reconocerlos en entrenamiento y validación
En deep learning, el objetivo no es solo minimizar la pérdida en el conjunto de entrenamiento, sino lograr buen rendimiento en datos no vistos. A esto se le llama generalización. Dos fallos típicos son el sobreajuste (overfitting) y el subajuste (underfitting), que pueden identificarse observando patrones en las curvas de entrenamiento y validación.
Patrones observables en curvas
| Situación | Entrenamiento | Validación | Interpretación típica |
|---|---|---|---|
| Buen ajuste | Pérdida baja y estable; métrica alta | Pérdida baja y estable; métrica alta | El modelo aprende patrones útiles y generaliza |
| Subajuste | Pérdida alta; métrica baja | Pérdida alta; métrica baja | Capacidad insuficiente, entrenamiento insuficiente o regularización excesiva |
| Sobreajuste | Pérdida baja; métrica alta | Pérdida sube o se estanca; métrica baja o empeora | El modelo memoriza detalles del entrenamiento y falla en generalizar |
Señales prácticas para diagnosticar
- Brecha de generalización: diferencia creciente entre métricas de entrenamiento y validación (p. ej., accuracy_train ≫ accuracy_val) sugiere sobreajuste.
- Validación empeora mientras entrenamiento mejora: patrón clásico de sobreajuste; suele aparecer tras cierto número de épocas.
- Ambas curvas malas: si entrenamiento y validación son pobres, suele ser subajuste (o datos/etiquetas con problemas).
- Validación muy buena “demasiado pronto”: puede indicar fuga de información (data leakage) o una partición incorrecta.
Técnicas de regularización para mejorar la generalización
La regularización agrupa estrategias que reducen la tendencia del modelo a memorizar el entrenamiento. En la práctica, se combinan varias técnicas: weight decay, dropout, data augmentation y early stopping.
1) Weight decay (regularización L2)
El weight decay penaliza pesos grandes, empujando al modelo hacia soluciones más “simples” y menos sensibles a ruido. Conceptualmente, añade un término al objetivo que crece con la magnitud de los pesos.
Cuándo ayuda: modelos con mucha capacidad, datasets pequeños/medianos, o cuando observas sobreajuste moderado.
Guía práctica paso a paso:
- Escuche el audio con la pantalla apagada.
- Obtenga un certificado al finalizar.
- ¡Más de 5000 cursos para que explores!
Descargar la aplicación
- Elige un valor inicial para el coeficiente (por ejemplo, 1e-4 o 1e-5 como punto de partida).
- Entrena y observa la brecha entre entrenamiento y validación.
- Si sigue habiendo sobreajuste, incrementa gradualmente (p. ej., ×2 o ×5).
- Si aparece subajuste (ambas métricas empeoran), reduce el coeficiente.
Nota práctica: en muchas librerías, “weight_decay” se configura en el optimizador. En optimizadores tipo Adam, a menudo se recomienda la variante desacoplada (AdamW) para que el efecto sea más consistente.
2) Dropout
Dropout apaga aleatoriamente un porcentaje de activaciones durante el entrenamiento. Esto fuerza a la red a no depender de rutas específicas y promueve representaciones más robustas.
Dónde se coloca: típicamente después de capas densas (y a veces tras convoluciones, con variantes específicas). En inferencia (validación/test), dropout se desactiva.
Guía práctica paso a paso:
- Empieza con una tasa moderada: 0.1–0.3 en redes grandes; 0.3–0.5 en capas densas muy propensas a sobreajuste.
- Entrena y compara curvas: dropout suele aumentar la pérdida de entrenamiento (porque hace el problema más difícil) pero puede mejorar validación.
- Si el modelo subajusta, reduce la tasa de dropout o aplícalo en menos capas.
- Si el sobreajuste persiste, aumenta ligeramente la tasa o añade dropout en capas adicionales.
# Pseudocódigo conceptual (no dependiente de framework) de una capa con dropout en entrenamiento: y = f(Wx + b) mask ~ Bernoulli(1 - p) y_drop = y * mask / (1 - p) # reescalado para mantener la esperanza3) Data augmentation (a nivel conceptual)
Data augmentation crea ejemplos de entrenamiento “nuevos” aplicando transformaciones que preservan la etiqueta. No cambia el modelo, cambia el conjunto de entrenamiento efectivo, lo que suele mejorar generalización.
Ejemplos conceptuales:
- Imágenes: recortes, rotaciones pequeñas, flips, cambios de brillo/contraste, ruido, blur leve.
- Audio: desplazamiento temporal, ruido de fondo, cambios leves de tono/velocidad.
- Texto: sustituciones controladas, borrado aleatorio de tokens (con cuidado), back-translation (según tarea).
Guía práctica paso a paso:
- Define transformaciones que sean plausibles para tu dominio (si una transformación cambia la etiqueta, no es válida).
- Aplica augmentation solo en entrenamiento, nunca en validación/test.
- Empieza con transformaciones suaves; incrementa intensidad si el modelo sigue sobreajustando.
- Verifica con inspección manual de muestras aumentadas para evitar introducir artefactos.
4) Early stopping
Early stopping detiene el entrenamiento cuando la métrica de validación deja de mejorar. Es una forma muy práctica de regularización: evita que el modelo continúe ajustándose al ruido del entrenamiento.
Guía práctica paso a paso:
- Elige una métrica de validación objetivo (por ejemplo, pérdida de validación o F1 si la tarea lo requiere).
- Configura una paciencia (p. ej., 5–10 épocas): cuántas épocas esperar sin mejora antes de parar.
- Activa restaurar mejores pesos (guardar el checkpoint con mejor validación).
- Si el entrenamiento es ruidoso, usa un criterio de mejora mínima (min_delta) para evitar paradas por fluctuaciones pequeñas.
# Pseudocódigo conceptual: best = +inf patience = 7 wait = 0 for epoch in epochs: train_one_epoch() val = evaluate_on_validation() if val < best - min_delta: best = val save_checkpoint() wait = 0 else: wait += 1 if wait >= patience: load_checkpoint() breakBatch Normalization: estabilizar activaciones y acelerar el entrenamiento
Batch Normalization (BN) normaliza activaciones usando estadísticas del mini-lote (media y varianza) y luego aplica parámetros aprendibles de reescalado y desplazamiento. Su objetivo principal es estabilizar la distribución de activaciones a lo largo del entrenamiento, lo que suele permitir entrenar más rápido y con mayor estabilidad.
¿Qué problema práctico ayuda a resolver?
- Activaciones inestables: cambios grandes en la escala de activaciones entre capas pueden dificultar el entrenamiento.
- Sensibilidad a la inicialización y a la tasa de aprendizaje: BN suele hacer el entrenamiento más robusto.
- Entrenamiento más rápido: a menudo permite usar tasas de aprendizaje mayores o converger en menos épocas.
¿Dónde se coloca en la arquitectura?
Una colocación común es: capa lineal/convolución → BatchNorm → activación. En muchos diseños modernos, BN se usa sistemáticamente en bloques repetidos (por ejemplo, en redes convolucionales) para mantener escalas controladas.
# Patrón típico (conceptual): z = Linear(x) z_norm = BatchNorm(z) a = Activation(z_norm)Importante: BN se comporta distinto en entrenamiento y en inferencia. En entrenamiento usa estadísticas del mini-lote; en inferencia usa promedios acumulados (running mean/var) aprendidos durante el entrenamiento.
Relación con regularización
BN puede tener un efecto regularizador indirecto (por el ruido de usar estadísticas por lote), pero no reemplaza necesariamente a dropout/weight decay. En algunas arquitecturas, se reduce el uso de dropout cuando BN ya aporta estabilidad, pero depende del caso.
Buenas prácticas para evaluar generalización sin engañarte
Separación correcta de datos (train/valid/test)
- Train: se usa para ajustar los parámetros del modelo.
- Validación: se usa para decisiones de modelado (hiperparámetros, early stopping, selección de arquitectura).
- Test: se usa una sola vez al final para estimar rendimiento final; no debe influir en decisiones.
Regla operativa: si miras el test para decidir algo, el test deja de ser test.
Validación cruzada cuando sea pertinente
La validación cruzada (k-fold) es útil cuando el dataset es pequeño o cuando necesitas una estimación más estable del rendimiento. En deep learning puede ser costosa, así que se usa cuando el beneficio compensa el tiempo de cómputo.
Guía práctica paso a paso:
- Divide el conjunto de desarrollo en k particiones (folds).
- Para cada fold: entrena con k-1 folds y valida con el fold restante.
- Promedia métricas y observa varianza (si varía mucho, tu evaluación es inestable).
- Una vez elegidos hiperparámetros, entrena un modelo final con train+valid (si aplica) y evalúa en test.
Variantes recomendadas: estratificada en clasificación desbalanceada; por grupos (group k-fold) si hay dependencias por sujeto/cliente/sesión.
Control de fuga de información (data leakage)
La fuga de información ocurre cuando el modelo recibe, directa o indirectamente, información del conjunto de validación/test durante entrenamiento o preparación de datos. Produce métricas artificialmente altas y modelos que fallan en producción.
Fuentes comunes de fuga:
- Normalización/estandarización calculada con todos los datos antes de separar (debe ajustarse solo con train y aplicarse a valid/test).
- Duplicados o casi duplicados repartidos entre train y valid/test (muy común en imágenes o logs).
- Features con información del futuro (series temporales): usar variables que no estarían disponibles en el momento de predicción.
- Augmentation aplicado a valid/test o pipelines que mezclan ejemplos por error.
- Selección de variables hecha usando todo el dataset (debe hacerse dentro del loop de entrenamiento/validación).
Checklist práctico anti-leakage:
- Haz el split antes de cualquier ajuste estadístico (scalers, imputación, PCA, etc.).
- Encapsula el preprocesado en un pipeline que se ajusta con train y solo se aplica a valid/test.
- En datos temporales, separa por tiempo (train pasado, valid/test futuro) y evita mezclar ventanas solapadas entre particiones.
- Busca duplicados por hash o similitud y asegúrate de que queden en la misma partición.
Receta rápida: qué probar cuando detectas sobreajuste o subajuste
Si detectas sobreajuste
- Activa early stopping con paciencia razonable y guarda el mejor checkpoint.
- Añade o incrementa weight decay.
- Añade dropout (especialmente en capas densas) o incrementa su tasa moderadamente.
- Introduce data augmentation (si el dominio lo permite) y verifica su validez.
- Revisa fuga de información y particiones (un “sobreajuste” extremo a veces es leakage).
Si detectas subajuste
- Reduce regularización (menos dropout/weight decay) si es alta.
- Entrena más épocas (con early stopping para no pasarte) o ajusta el criterio de parada.
- Revisa si la augmentation es demasiado agresiva y está dificultando aprender.
- Comprueba calidad de etiquetas y si la partición train/valid es representativa.
Para profundizar con ejercicios guiados y laboratorios, puedes apoyarte en plataformas como Coursera, edX, Udacity o DeepLearning.AI, enfocándote en prácticas de evaluación, regularización y diseño de experimentos.