¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Sobreajuste: cuando una red memoriza

Después de esta lección: Puedo detectar el sobreajuste y reducirlo.

Lección de 55 min3 comandosLaboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

El sobreajuste es aprender los datos de memoria

El sobreajuste (overfitting en inglés) ocurre cuando una red neuronal se aprende de memoria los datos de entrenamiento y falla con datos nuevos. Puede parecer perfecta en el entrenamiento y ser inútil en la práctica.

Hoy aprendes a verlo en una tabla de pérdidas y a parar el entrenamiento a tiempo.

Al final de esta lección

Nota

Puedo detectar el sobreajuste y reducirlo.

Palabras clave

PalabraQué significa
Sobreajusteacertar con los datos vistos y fallar con los nuevos
Entrenamientolos datos con los que la red corrige sus pesos
Validacióndatos que la red no usa para aprender, solo para comprobar
Parada tempranadejar de entrenar cuando la validación deja de mejorar
Pacienciacuántas épocas sin mejora se esperan antes de parar

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Se separan los datos en tres conjuntos

Una red que se juzga con los datos que ya vio engaña, porque puede recordarlos. Por eso se separan los datos antes de entrenar.

El entrenamiento corrige los pesos. La validación sirve para decidir cuándo parar y qué ajustes probar. La prueba se mira una sola vez, al final.

Ejemplo resuelto: 365 días en tres partes

ConjuntoDíasPara qué sirve
Entrenamiento255Corregir los pesos
Validación55Decidir cuándo parar
Prueba55Juzgar la red una sola vez
Total365Un año

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Comprueba que las tres partes suman un año

Comando
docker exec jupyter python3 -c "print(255 + 55 + 55)"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

El sobreajuste se ve en las curvas

Cada época se mide la pérdida con el entrenamiento y con la validación. Al principio las dos bajan.

Después la del entrenamiento sigue bajando, pero la de validación se detiene y sube. La red ya no aprende la regla: aprende los ejemplos. El hueco entre las dos crece.

Ejemplo resuelto: siete épocas de entrenamiento

ÉpocaPérdida de entrenamientoPérdida de validaciónHueco
10,900,950,05
20,600,700,10
30,400,520,12
40,280,450,17
50,180,470,29
60,100,520,42
70,050,600,55

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Busca la mejor época con un bucle

Código: python
# Pérdida de cada época, medida con los datos de entrenamiento y con los de validación.
entrenamiento = [0.90, 0.60, 0.40, 0.28, 0.18, 0.10, 0.05]
validacion = [0.95, 0.70, 0.52, 0.45, 0.47, 0.52, 0.60]

mejor = validacion[0]
mejor_epoca = 1
for n in range(len(validacion)):
    if validacion[n] < mejor:
        mejor = validacion[n]
        mejor_epoca = n + 1
    hueco = round(validacion[n] - entrenamiento[n], 2)
    print("época", n + 1, "hueco", hueco)
print("la mejor época es la", mejor_epoca)
# Cambia validacion[4] a 0.40 y ejecuta otra vez. ¿Qué época es la mejor?

Un error muy común

Advertencia

Mucha gente cree que una pérdida de entrenamiento muy baja prueba que la red es buena. No es así. Esa cifra solo dice cuánto recuerda. Para saber si funciona con días nuevos, mira la pérdida de validación.

La parada temprana corta el entrenamiento a tiempo

La parada temprana vigila la pérdida de validación. Si pasan varias épocas sin que baje, el entrenamiento se detiene.

Ese número de épocas es la paciencia. Al parar, se conservan los pesos de la mejor época, no los de la última.

Ejemplo resuelto: paciencia 2 con las siete épocas

ÉpocaValidación¿Mejora?Épocas sin mejora
40,45Sí, es la mejor0
50,47No1
60,52No2, el entrenamiento para

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

La pérdida de validación más baja

Comando
docker exec jupyter python3 -c "print(min([0.95, 0.70, 0.52, 0.45, 0.47]))"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

La época de esa pérdida

Comando
docker exec jupyter python3 -c "print([0.95, 0.70, 0.52, 0.45, 0.47].index(0.45) + 1)"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Para ir más lejos: cambiar la paciencia

Con la tabla de siete épocas, calcula en qué época para el entrenamiento con paciencia 1 y con paciencia 3.

Explica qué se pierde con una paciencia demasiado baja: piensa en una validación que sube una época y vuelve a bajar.

Sobre este laboratorio y su código: Laboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.