Descenso coordinado vs gradiente

23

Me preguntaba cuáles son los diferentes casos de uso para los dos algoritmos, Descenso de coordenadas y Descenso de gradiente .

Sé que el descenso coordinado tiene problemas con las funciones no uniformes, pero se usa en algoritmos populares como SVM y LASSO.

Sin embargo, creo que el descenso de gradiente se usa más ampliamente, especialmente con el resurgimiento de los ANN y para muchas otras tareas de aprendizaje automático.

Mi pregunta es: ¿qué tipo de problemas se ajustan a uno, pero no al otro, y en ese sentido, qué hace que el ajuste de descenso coordinado para SVM y LASSO, pero el ajuste de descenso de gradiente para ANN?

¿Cómo debería uno elegir entre los dos al elegir un algoritmo de optimización?

Bar
fuente

Respuestas:

7

Creo que generalmente se trata de cuán simple / fácil es calcular el gradiente de la parte lisa de la función y / o el operador proximal de la penalización.

A veces, es mucho más simple encontrar una solución exacta del problema en el caso de una sola variable (o un bloque o variables), que resolver todas las variables simultáneamente. A veces es demasiado caro calcular el gradiente en comparación con las derivadas individuales. Además, la convergencia del descenso de coordenadas es la misma que para ista, , donde k es el número de iteraciones, pero a veces puede funcionar mejor en comparación con ISTA y FISTA, ver p. Ej.1/k2k http: //statweb.stanford. edu / ~ tibs / compare.txt .

Tales cosas influirán en la elección del descenso coordinado vs. ISTA / FISTA, por ejemplo.

Tommy L
fuente
Entonces, ¿cuáles son los casos en que el descenso coordinado (CD) será más rápido? ¿Hay algunos tipos específicos de funciones en las que CD será un mejor candidato?
Bar
No puedo decir que una clase específica de funciones será más rápida con CD que con otros métodos, como por ejemplo FISTA. Hasta donde sé, esto depende en gran medida de su función y de lo costoso que sea evaluar el gradiente y cosas así. Desde mi experiencia, CD es más rápido que FISTA en el problema de lazo cuando hay pocas variables en el modelo (no recuerdo, pero menos de algunos miles). Tenga en cuenta que solo estoy comparando CD con ISTA y FISTA aquí, otros algoritmos (como Newton o Pseudo-Newton) probablemente serán mucho más rápidos; pero esto depende completamente del problema en cuestión.
Tommy L
¿Cómo es que CD es más rápido que GD? Parece contra lógica.
Royi
3

El descenso coordinado actualiza uno parámetro a la vez, mientras que el descenso de gradiente intenta actualizar todos los parámetros a la vez.

Es difícil especificar exactamente cuándo un algoritmo funcionará mejor que el otro. Por ejemplo, me sorprendió mucho saber que el descenso coordinado era lo más avanzado para LASSO. Y no fui el único; ver diapositiva 17 .

Dicho esto, hay algunas características que pueden hacer que un problema sea más fácil de corregir para coordinar el descenso:

(1) Actualizaciones condicionales rápidas. Si, por alguna razón, el problema permite que uno optimice parámetros individualmente muy rápidamente, el descenso coordinado puede hacer uso de esto. Por ejemplo, uno puede actualizar ciertos parámetros utilizando solo un subconjunto de datos, lo que reduce en gran medida el costo computacional de estas actualizaciones. Otro caso es si hay una solución de forma cerrada para un parámetro individual, condicional a los valores de todos los demás parámetros.

(2) Modos relativamente independientes para los parámetros. Si el valor óptimo de un parámetro es completamente independiente de los valores de los demás parámetros, entonces una ronda de descenso de coordenadas conducirá a la solución (suponiendo que cada actualización de coordenadas encuentre el modo actual). Por otro lado, si el modo para un parámetro dado depende en gran medida de otros valores de parámetros, es muy probable que el descenso de coordenadas avance lentamente, con actualizaciones muy pequeñas en cada ronda.

Desafortunadamente, para la mayoría de los problemas, (2) no se cumple, por lo que es raro que el descenso coordinado funcione bien en comparación con algoritmos alternativos. Creo que la razón por la que funciona bien para LASSO es que hay muchos trucos que uno puede usar para promulgar la condición (1).

α

Acantilado
fuente
0

Me doy cuenta de que esta es una vieja pregunta y tiene algunas muy buenas respuestas. Me gustaría compartir alguna experiencia personal práctica.

k

  • Todas las probabilidades deben ser positivas.
  • Todos los elementos del conjunto de probabilidad deben sumar uno

Esto realmente está pidiendo mucho. Con el descenso de gradiente, generalmente se enfrentan restricciones mediante una función de penalización. Aquí no funcionará. Tan pronto como un valor viole una de estas restricciones, su código generalmente generará una especie de error numérico. Por lo tanto, uno tiene que lidiar con las restricciones al nunca permitir que el algoritmo de optimización lo atraviese.

Existen numerosas transformaciones que puede aplicar a su problema para satisfacer las restricciones y permitir el descenso del gradiente. Sin embargo, si está buscando la forma más fácil y perezosa de implementar esto, entonces el descenso coordinado es el camino a seguir:

Para cada probabilidad pagsyo:

  • pagsyok+1=pagsyok-ηJpagsyo
  • pagsyo=min(max(pagsyo,0 0),1)
  • Actualizar todo p_i: PAGSj+1=PAGSj1yo=1nortepagsyo

Para alguien como yo que trabaja en Python, esto generalmente significa que tengo que usar un bucle for adicional que impacta negativamente en el rendimiento. El descenso de gradiente me permite usar Numpy, que es un rendimiento optimizado. Se puede obtener una muy buena velocidad, sin embargo, esto no se puede lograr con el descenso coordinado, por lo que generalmente uso alguna técnica de transformación.

Entonces, la conclusión es que el descenso coordinado es la opción más fácil para lidiar con restricciones muy estrictas, como el parámetro de velocidad en la distribución de Poisson. Si se vuelve negativo, el código se queja, etc.

Espero que esto haya agregado un poco de información.

Dylan Solms
fuente