¿Utiliza la integración de Runge-Kutta para aumentar la velocidad y la estabilidad del descenso de gradiente?

Para un problema de descenso de gradiente con X R norte Puedo evaluar el gradiente X R norte que reduce el error de mínimos cuadrados, y . Sin embargo, simplemente actualizando la posición usando X = X + X converge muy lentamente al mínimo global del error de mínimos cuadrados (que también es el mínimo global de la magnitud del gradiente, donde el gradiente es cero). Intenté simplemente escalar el paso, es decir X = X + h X , sin embargo, si bien esto mejora drásticamente los tiempos de convergencia en algunos casos, puede volverse inestable en otros (particularmente cuando algunos de los componentes de X son mucho más grandes que otros: escalar todos los componentes del gradiente puede hacer que el método de descenso del gradiente "suba por el costado de un cañón" en lugar de descender por el cañón, y el sistema puede oscilar o explotar).

Me gustaría usar el método Runge-Kutta de tercer orden para seguir la curvatura del espacio degradado, de modo que pueda dar pasos más grandes sin que el sistema explote. He aplicado esto para simular sistemas de masa-resorte antes (usando la integración de Runge-Kutta para integrar la aceleración para encontrar la velocidad y la velocidad para encontrar la posición); sin embargo, no puedo entender cómo aplicarlo a este problema de descenso de gradiente.

Creo que tengo un malentendido fundamental sobre cómo funcionan los métodos de Runge-Kutta. Requieren una función F = ( X , y ) por definir, que creo que calcula el gradiente de la curva en X . Sin embargo no entiendo porque y necesita ser suministrado a la función - no es y una función de X ?

¿Se puede incluso aplicar Runge-Kutta al problema del descenso del gradiente? Parece que debería haber una forma de adaptar Runge-Kutta al descenso de gradiente, ya que cada paso de actualización X = X + X es básicamente un paso de integración. es el tamaño del paso h simplemente la magnitud del gradiente, es decir h i = | X i | y y i = X i / h i ?

Si Runge-Kutta no es aplicable aquí, ¿alguien puede sugerir un algoritmo de descenso de gradiente robusto y rápido para probar?

Un poco más de detalle: en el caso de este problema, la superficie de gradiente es bastante suave y bastante convexa (hay pocos mínimos locales, si es que hay alguno, que no sean mínimos globales), pero la superficie de error es menos convexa. En otras palabras, a veces el descenso del gradiente continuará descendiendo por la pendiente del gradiente en la dirección del mínimo global del gradiente, y el error de mínimos cuadrados aumentará temporalmente antes de disminuir al mínimo global de error de mínimos cuadrados. (El gradiente no se calcula a partir de la medida de error de mínimos cuadrados en sí, sino que utiliza un método diferente que identifica directamente la mejor solución de mínimos cuadrados localmente, lo que acerca el sistema a la solución de mínimos cuadrados globalmente óptima). Por lo tanto, el gradiente es más confiable para el descenso de gradiente que la pendiente de la superficie de error de mínimos cuadrados.

@RodrigodeAzevedo gracias, arreglado
@RodrigodeAzevedo Sinceramente, no sé cómo aclarar más mi pregunta. Permítanme hacer una pregunta más directa: ¿es posible usar Runge-Kutta como un algoritmo de descenso de gradiente, es decir, se puede convertir un algoritmo de integración en un algoritmo de descenso de gradiente? Mi instinto dice que puede, pero tengo problemas para descubrir cómo hacerlo.
¿Tienes algo así en mente?
Estoy tratando de implementar el punto más cercano iterativo, que requiere un descenso de gradiente en el espacio de rotación y traducción para alinear dos nubes de puntos. Sin embargo, también estoy interesado en acelerar el entrenamiento de redes profundas mediante el uso de Runge-Kutta para predecir la curvatura de la superficie de error, lo que permitiría tamaños de paso de descenso de gradiente más grandes.
Eso no respondió del todo a mi pregunta.

Respuestas (1)

Primero, los métodos de descenso de gradiente y Runge-Kutta resuelven diferentes problemas.

  1. El descenso de gradiente es un método para encontrar un extremo de F ( X ) resolviendo gramo ( X ) = F ( X ) = 0 . El descenso de gradiente simplemente hace
    X norte + 1 = X norte + α norte gramo ( X norte )
    con α norte ser arreglado o elegido inteligentemente.
  2. Los métodos de Runge-Kutta se utilizan para resolver ODE, es decir, resolver un problema de valor inicial
    X ( t ) = F ( t , X ( t ) ) X ( 0 ) = X 0 .
    El método RK más simple es el método de Euler, que tiene una forma bastante similar a la GD.
    X norte + 1 = X norte + ( t norte + 1 t norte ) F ( t norte , X norte )

En otras palabras, GD puede tratarse como el método de Euler aplicado a una EDO

(*) X ( t ) = ± gramo ( X ) X ( 0 ) = X 0 .
solía ± desde α norte puede ser positivo o negativo (dependiendo de si está buscando un mínimo o un máximo). Las ODE generalmente se resuelven hacia adelante en el tiempo, por lo que t norte + 1 t norte es positivo.

La solución que estás buscando es el estado estacionario. X ( ) en el que el lado izquierdo (y, en consecuencia, el lado derecho) se vuelve cero. El signo correcto también asegura que X ( t ) realmente tiende al estado estacionario y no a alejarse de él.

Además, asumiré que el signo correcto es + .

Puede usar métodos RK de orden superior para el problema (*). Por ejemplo, la regla del punto medio

X norte + 1 / 2 = X norte + Δ t norte 2 gramo ( X norte ) X norte + 1 = X norte + Δ t norte gramo ( X norte + 1 / 2 )

Se sabe que los métodos RK de orden superior son más precisos que el método de Euler. Esa es la trayectoria numérica (formada por X norte secuencia) está mucho más cerca de la verdadera trayectoria X ( t ) , que es la verdadera solución de (*). Desafortunadamente, no necesita esta propiedad. De hecho, no te importa lo cerca que estés X norte están a la trayectoria verdadera, en cambio, le interesa qué tan cerca están sus X norte a X ( ) .

Es atractivo elegir Δ t norte grande, por lo que uno se acerca más rápido a la t = . Desafortunadamente, no funciona de esa manera, porque todos los métodos explícitos para ODE (y cualquier método RK es uno de ellos) tienen una condición de estabilidad que restringe el paso más grande Δ t . De hecho, incluso eligiendo Δ t cerca de ese límite tampoco funcionará, ya que el método oscilará hacia adelante y hacia atrás (exactamente como lo hace GD). Elegir Δ t que maximiza la velocidad de convergencia no es trivial.

Otro hecho decepcionante es el fenómeno de la rigidez. Probablemente sepas que hay funciones patológicas F ( X ) para lo cual GD converge muy lentamente. Por lo general, sucede cuando la matriz Hessiana de F está mal acondicionado. Para estos casos, los sistemas correspondientes (*) son (infamemente) conocidos en integración numérica como problemas rígidos. Para estos problemas, todos los métodos explícitos funcionan aproximadamente igual: el límite para Δ t y se cree que la velocidad de convergencia es prácticamente la misma.

Los problemas rígidos a menudo se resuelven mediante métodos implícitos. Esos métodos no se pueden convertir a un método similar a GD, ya que requieren resolver un problema no lineal para cada iteración. Y este problema es más o menos equivalente al propio problema de minimización. Por ejemplo, el método implícito de Euler tiene la forma

X norte + 1 = X norte + Δ t norte gramo ( X norte + 1 ) .
Separando lo conocido X norte y desconocido X norte + 1 da un problema no lineal para X norte + 1
GRAMO ( X norte + 1 ) X norte + 1 Δ t norte gramo ( X norte + 1 ) = X norte
Este problema es solo un poco más simple de resolver que el original. gramo ( X ) = 0 .

Resumiendo todo lo anterior: el uso de métodos más precisos para (*) no lo llevará a la solución más rápido. En su lugar, es posible que desee utilizar el método de gradientes conjugados u otros métodos especializados en problemas de minimización, que posiblemente involucren más información sobre la función.

¡Gracias por la respuesta excepcionalmente buena!