Overfitting
El sobreajuste se produce cuando un modelo memoriza los datos de entrenamiento, incluido el ruido, y falla con datos nuevos. Descubre cómo detectarlo y qué métodos lo evitan.
El sobreajuste se produce cuando un modelo de aprendizaje automático se ajusta tanto a sus datos de entrenamiento que aprende el ruido y las particularidades de esos ejemplos específicos, además de los patrones reales. Un modelo sobreajustado obtiene buenos resultados con los datos de entrenamiento y resultados sensiblemente peores con datos nuevos; la magnitud de esa diferencia mide el grado de sobreajuste. En términos de sesgo-varianza, el sobreajuste implica una varianza alta: las predicciones del modelo dependen demasiado de las muestras concretas que ha visto.
Cómo reconocer el sobreajuste#
La señal más clara es que aumenta la diferencia entre los resultados con los datos de entrenamiento y los datos de validación. En las curvas de aprendizaje trazadas por época, la pérdida de entrenamiento sigue bajando mientras que la pérdida de validación se estabiliza y después aumenta; las métricas de validación, como la precisión media promedio (mAP), se estancan o empeoran. La demostración clásica a pequeña escala ajusta polinomios de dos grados distintos a 12 puntos ruidosos muestreados de una onda sinusoidal:
import numpy as np
from numpy.polynomial import Polynomial
rng = np.random.default_rng(0)
# 12 noisy training points from a sine wave, plus clean test points
x_train = rng.uniform(0, 1, 12)
y_train = np.sin(2 * np.pi * x_train) + rng.normal(0, 0.2, 12)
x_test = np.linspace(0, 1, 200)
y_test = np.sin(2 * np.pi * x_test)
for degree in (3, 9):
fit = Polynomial.fit(x_train, y_train, degree)
train_mse = np.mean((fit(x_train) - y_train) ** 2)
test_mse = np.mean((fit(x_test) - y_test) ** 2)
print(f"Degree {degree:2d}: train MSE {train_mse:.4f}, test MSE {test_mse:.4f}")El polinomio de grado 9 tiene flexibilidad suficiente para ajustarse al ruido; reduce así el error de entrenamiento de 0.0356 a 0.0148, pero multiplica por diez el error de prueba, que pasa de 0.0182 a 0.1859.
Sobreajuste y subajuste#
El infraajuste es el problema opuesto: el modelo es demasiado sencillo o se entrena demasiado poco para captar los patrones de los datos, por lo que obtiene malos resultados tanto con los datos de entrenamiento como con los de validación. Comparar los dos errores permite distinguir ambos casos e identificar soluciones distintas.
Causas habituales#
- Capacidad excesiva para los datos: Una red neuronal con millones de parámetros puede memorizar sin dificultad unos pocos cientos de imágenes.
- Datos ruidosos o mal etiquetados: La ausencia de cajas, las clases incorrectas y los valores atípicos dan al modelo errores que puede aprender, aunque no existan en el mundo real.
- Entrenamiento demasiado largo: Una vez aprendidos los patrones útiles, las épocas adicionales suelen limitarse a ajustar el ruido restante.
- Datos de entrenamiento poco variados: Un detector entrenado solo con imágenes diurnas de una cámara puede aprender el fondo y la iluminación de esa cámara y no detectar objetos en una ubicación nueva.
Cómo evitar el sobreajuste#
- Más datos y más variados: Añadir ejemplos reales es la solución más directa, y el aumento de datos multiplica la variedad al voltear, escalar, cambiar el color y combinar imágenes existentes.
- Regularización: El decaimiento de pesos penaliza los pesos grandes, y el dropout desactiva unidades aleatoriamente durante el entrenamiento para evitar que una sola característica se vuelva imprescindible.
- Modelos más pequeños o preentrenados: Un modelo más pequeño tiene menos margen para memorizar, y el aprendizaje por transferencia con las primeras capas congeladas reduce el número de pesos que deben aprenderse a partir de un conjunto de datos pequeño.
- Parada temprana: Evaluar el modelo con datos de validación después de cada época y detener el entrenamiento cuando la puntuación deje de mejorar evita que el modelo llegue a aprender el ruido.
- Evaluación rigurosa: La validación cruzada ofrece una estimación más fiable del error de generalización en conjuntos de datos pequeños, y un conjunto de prueba independiente detecta el sobreajuste a los datos de validación durante el ajuste de hiperparámetros.
El entrenamiento de Ultralytics YOLO aplica la parada temprana mediante el argumento patience, que finaliza el entrenamiento tras ese número de épocas sin mejoras en la aptitud de validación (mAP50-95 para detección), y guarda los pesos de la mejor época como best.pt aunque el entrenamiento llegue hasta el final.
from ultralytics import YOLO
# Carga un modelo YOLO26n preentrenado
model = YOLO("yolo26n.pt")
# # Permite hasta 100 épocas, pero detén el entrenamiento tras 20 épocas sin mejoras en la validación
results = model.train(data="coco8.yaml", epochs=100, patience=20)El valor predeterminado es patience=100 y, para conjuntos de datos con menos de 1000 imágenes, la YOLO26 guía de ajuste fino sugiere epochs=50 con patience=20.
Sobreajuste y términos relacionados#
- Fuga de datos: solapamiento entre los datos de entrenamiento y los de evaluación que oculta el sobreajuste. Si fotogramas casi idénticos del mismo vídeo aparecen tanto en la partición de entrenamiento como en la de validación, un modelo que ha memorizado el conjunto de entrenamiento sigue obteniendo buenos resultados en validación, y el problema no aparece hasta la puesta en producción. Dividir por vídeo o escena lo evita.
- Aprendizaje de atajos: El modelo depende de una señal espuria, como una marca de agua o el fondo, presente tanto en los datos de entrenamiento como en los de validación. Las puntuaciones de validación parecen buenas, pero el modelo falla con datos nuevos cuando esa señal no está.










