¿Cómo definir la condición de terminación para el descenso de gradiente?

24

En realidad, quería preguntarle cómo puedo definir la condición de terminación para el descenso de gradiente.

¿Puedo detenerlo en función del número de iteraciones, es decir, considerando los valores de los parámetros para, por ejemplo, 100 iteraciones?

¿O debería esperar de modo que la diferencia en los valores de los dos parámetros 'nuevo' y 'viejo' sea muy pequeña en el orden de digamos ? Esto definitivamente tomará mucho tiempo.10-6 6

¿Cuál es la mejor manera? En mi caso, incluso una iteración lleva mucho tiempo. En esta situación, si espero la segunda condición, incluso podría tomar semanas, supongo.

Entonces, ¿qué enfoque debo usar? ¿Cómo abordar este escenario?

usuario31820
fuente
1
No se establece explícitamente, pero supongo que está tratando de encontrar un MLE. Su resultado realmente depende completamente de su espacio de parámetros, su función de probabilidad y sus necesidades (también conocido como mejor no está bien definido). Si solo busca una justificación teórica como la eficiencia asintótica; bajo las condiciones de Le'Cam, puede usar el MLE de un solo paso (bajo el supuesto adicional de que está usando el Método de Newton y la función de puntaje para su descenso de gradiente). Esto requiere que su valor inicial es tal que en la probabilidad. norte1/ /2θ^0 0θ
Jonathan Lisic
así que espera, cuando dijiste "nuevo" - "viejo" es suficientemente pequeño, ¿es una condición de terminación incorrecta para el descenso de gradiente? (si se aplican puntos fijos como teoremas, ¿esa condición debería estar bien?)
Charlie Parker
Uno puede detenerse cuando cualquiera de: valores de función , o gradientes f i , o parámetros x i , parecen dejar de moverse, ya sea relativo o absoluto. Pero en la práctica, los parámetros 3 × 2 ... son demasiados, por lo que están doblados, pero cada programa lo hace de manera diferente. Vea las tolerancias de Mathworks y los criterios de detención para una imagen. FyoFyoXyo3×2ftolabs ftolrelxtolabs
denis

Respuestas:

19

Buena pregunta. He visto muchas reglas de detención en la literatura, y hay ventajas y desventajas para cada una, según el contexto. La optimfunción en R, por ejemplo, tiene al menos tres reglas de detención diferentes:

  • maxit, es decir, un número máximo predeterminado de iteraciones. Otra alternativa similar que he visto en la literatura es un número máximo de segundos antes de que se agote el tiempo de espera. Si todo lo que necesita es una solución aproximada, esta puede ser muy razonable. De hecho, hay clases de modelos (especialmente modelos lineales) para los cuales la detención temprana es similar a poner un gaussiano anterior en los valores de sus parámetros. Un frecuentista diría que tiene una "norma L2" en lugar de una anterior, pero también consideraría que es algo razonable. Solo he leído este documento , pero habla sobre la relación entre la interrupción temprana y la regularización y podría ayudarlo a obtener más información. Pero la versión corta es, sí, detenerse temprano puede ser una cosa perfectamente respetable, dependiendo de lo que usted haga.

  • abstol, es decir, deténgase cuando la función se "acerque lo suficiente" a cero. Esto puede no ser relevante para usted (no parece que esté esperando un cero), así que lo omitiré.

  • reltol, que es como su segunda sugerencia: deténgase cuando la mejora caiga por debajo de un umbral. En realidad, no sé cuánta teoría hay sobre esto, pero probablemente tenderás a obtener mínimos más bajos de esta manera que con un pequeño número máximo de iteraciones. Si eso es importante para usted, entonces podría valer la pena ejecutar el código para más iteraciones.

Otra familia de reglas de detención tiene que ver con la optimización de una función de costo en un conjunto de datos de validación (o con validación cruzada) en lugar de en los datos de capacitación. Dependiendo de para qué desee usar su modelo, es posible que desee detenerse mucho antes de llegar al mínimo local en sus datos de entrenamiento, ya que eso podría implicar un sobreajuste. Estoy bastante seguro de que Trevor Hastie ha escrito sobre buenas formas de hacer esto, pero no recuerdo la cita.

Otras opciones posibles para encontrar mínimos más bajos en un período de tiempo razonable podrían incluir:

  • Descenso de gradiente estocástico, que solo requiere estimar los gradientes para una pequeña porción de sus datos a la vez (por ejemplo, un punto de datos para SGD "puro" o pequeños mini lotes).

  • Funciones de optimización más avanzadas (por ejemplo, métodos de tipo Newton o gradiente conjugado), que utilizan información sobre la curvatura de su función objetivo para ayudarlo a apuntar en mejores direcciones y tomar mejores tamaños de pasos a medida que avanza cuesta abajo.

  • Un término de "impulso" en su regla de actualización, para que su optimizador haga un mejor trabajo al rodar cuesta abajo en lugar de delimitar las paredes del cañón en su función objetivo.

Todos estos enfoques se discuten en estas notas de clase que encontré en línea.

¡Espero que esto ayude!

Edite oh, y también puede intentar obtener mejores valores iniciales (por ejemplo, resolviendo una versión más simple del problema) para que se necesiten menos iteraciones para acercarse al óptimo desde su "inicio en caliente".

David J. Harris
fuente
El problema con la elección de un número fijo de iteraciones es que, a menos que pueda trazar claramente su curva de costos (y tiene poco ruido), es difícil saber cuántas iteraciones son demasiadas, especialmente si la función de optimización es complicada y quién sabe cuántos mínimos locales tiene y si tiene una inicialización aleatoria, esto empeora aún más el problema, ya que hace aún más difícil adivinar cuál es un buen número "pequeño" de iteraciones. ¿Cómo abordas estos problemas en realidad si realmente quieres usar la detención temprana? ¿Cómo te aseguras de no disparar demasiado o no disparar demasiado?
Charlie Parker
Me gustaría aclarar qué significa reltol(es decir, cuando deja de ser una "mejora"). La primera mejora significa la disminución de la función de costos. Entonces supondré que lo que quieres decir es que, cuando la función de costo deja de disminuir lo suficiente (o comienza a aumentar) uno se detiene, ¿verdad? Uno no hace "| viejo - nuevo |" tipo de regla de actualización, ¿verdad?
Charlie Parker el
1
El abstolparámetro solo tiene sentido si toma la tolerancia del gradiente de la función de costo, no la función de costo en sí. En un optimizador local, el valor del gradiente es cero; pero no el valor de la función.
Mario Becerra
¡"inicio cálido" es un truco muy inteligente! gracias
Mehdi LAMRANI