La trampa del early stopping: cómo maté mis runs de RL antes de que pudieran aprender

El early stopping se supone que te ahorra quemar cómputo en un modelo que ya terminó de aprender. Durante un buen tiempo, fue justo lo que estaba quemando mi cómputo: matando buenos agentes antes de que llegaran a ser buenos.

Más de mis runs de aprendizaje por refuerzo murieron por mi propia regla de early stopping que por malas ideas. El interruptor de apagado que había construido para ser disciplinado resultó ser lo más indisciplinado de todo el sistema.

Curva de reward ruidosa ilustrativa que cae y se detiene antes de tiempo, con una continuación punteada que muestra la subida que nunca alcanzó Ilustrativo, no son datos reales de rendimiento. El agente se detuvo durante una caída normal, justo antes de la parte donde habría subido.

El interruptor de apagado que salió por la culata

Tomé prestado el early stopping del aprendizaje supervisado, donde es palabra sagrada: observas la validation loss y, cuando deja de mejorar durante un rato, detienes el entrenamiento; de ahí en adelante solo estás haciendo overfitting. Es limpio, es seguro y, en el aprendizaje supervisado, suele funcionar.

Así que conecté la misma idea al entrenamiento de RL: observar la métrica, perder la paciencia tras un plateau, detener el run, ahorrar las horas de GPU. Parecía responsable. En la práctica, fue descartando run tras run en silencio, muchos de ellos temprano, antes de que el agente hubiera encontrado nada en absoluto. Acabé con una carpeta llena de runs que sencillamente nunca habían arrancado.

Por qué RL rompe la regla

Una curva de validación supervisada es algo bastante suave y casi monótono. El progreso de un agente de aprendizaje por refuerzo no lo es. El reward es ruidoso por construcción: depende de una policy que ella misma está cambiando, interactuando con un entorno lleno de varianza. La mejora llega a tirones: largas mesetas, saltos repentinos, caídas que se recuperan. Un plateau en RL muchas veces no es el final del aprendizaje. Es justo la parte que lo precede.

Así que una patience ajustada para la suavidad supervisada se dispara durante una varianza de RL perfectamente normal. No estás atrapando un modelo que ya terminó; estás ejecutando a uno que estaba a punto de ponerse interesante. Y el “ahorro” es una ilusión: igual pagas por cada run que murió temprano y no devolvió nada.

Deja de detener antes de tiempo

La solución no fue un número mejor. Fue invertir el valor por defecto. El early stopping debería ser raro, no impaciente: una salvaguarda contra un overfitting genuino y sostenido, no un gatillo nervioso ante el ruido. Eso significa poner el listón donde el ruido no pueda alcanzarlo de forma realista, y juzgar el deterioro sobre una ventana lo bastante larga como para empequeñecer la varianza natural del run, no un puñado de evaluaciones. El valor por defecto tiene que ser seguir adelante. La carga de la prueba recae sobre detener, no sobre continuar.

Dicho sin rodeos: la patience también es un hyperparameter, y la mayoría de los principiantes, yo incluido, lo configuran como si RL fuera aprendizaje supervisado. No lo es.

Dónde siguen teniendo cabida los humanos

Esto rima con la lección del primer post. No decido, run por run, cuándo tirar del enchufe; eso es solo congelar otra vez una suposición dentro del sistema. Decido qué significa “empeorar de verdad” frente a “ruido normal”, y dejo que esa definición haga el trabajo de detener. Estoy diseñando al juez, no entregando cada veredicto a mano. Acierta con el juez y dejas de descartar los runs que habrían funcionado.

La conclusión

En RL, el bug más caro suele ser la impaciencia. Optimizar de forma prematura tu presupuesto de cómputo no ahorra cómputo: te cuesta el agente, y lo cruel es que nunca llegas a ver el resultado que mataste.

Así que si tus runs siguen “sin funcionar”, comprueba si alguna vez tuvieron la oportunidad de hacerlo. A veces el modelo no estaba fallando. Eras tú.


Esta es la parte 2 de un registro anónimo y en curso sobre la construcción de un sistema de trading con aprendizaje por refuerzo. Va de método y de errores, no de señales: nada de lo aquí escrito es asesoramiento de inversión, y no se comparten detalles de la estrategia.