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?
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).
fuente
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.
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 probabilidadpagsyo :
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.
fuente