Sólo hay una cosa que debes saber sobre el descenso de gradiente. Es una basura total y absoluta, y un algoritmo absolutamente horrible que ni siquiera debería considerarse a menos que haya al menos cientos de millones de variables, en cuyo caso no esperes que funcione bien, excepto cuando se resuelve el mismo problema una y otra vez, para el que se han encontrado buenos valores de tasas de aprendizaje. es una versión pobre y no protegida del descenso más pronunciado, que incluso en forma protegida es malo. Estarás mucho mejor con una región de confianza o un método Quasi-Newton de búsqueda de líneas. No escribas el tuyo propio.
El descenso gradual es un término erróneo. Puede que ni siquiera descienda. Los algoritmos seguros, que utilizan regiones de confianza o búsquedas de líneas, descienden o terminan si no pueden descender. Los algoritmos determinan de forma adaptativa los "ritmos de aprendizaje" en función de lo que encuentran, no se sobrepasan como el descenso por gradiente y pueden acelerar automáticamente cuando se justifica. El descenso gradual ni siquiera era un buen algoritmo hace un siglo.
Una región de pendiente cero prolongada podría causar problemas a cualquier algoritmo de optimización, a menos que se trate de un algoritmo de optimización global riguroso. Los algoritmos de optimización global rigurosos, por ejemplo basados en branch and bound, existen (no me refiero a los algoritmos genéticos y otras porquerías heurísticas, que son el equivalente moral del descenso de gradiente), pero puede que no consigan resolver un problema si es demasiado grande o demasiado difícil, y puede que no acepten todas las funciones. Su algoritmo de optimización local debe comprobar las condiciones óptimas de segundo orden, si es posible. Eso distinguirá un mínimo local de un máximo local o un punto de equilibrio.
Como se ha dicho en otras respuestas, es una buena idea ejecutar un algoritmo de optimización local con varios valores iniciales diferentes. Pero ese algoritmo generalmente no debe ser de descenso de gradiente.
En mi opinión, Andrew Ng ha hecho un gran daño a la gente al enseñarles el descenso por gradiente. La gente cree que sabe cómo optimizar, cuando no sabe más sobre cómo optimizar u optimización que lo que sabe sobre conducir un niño de 3 años que "conduce" con un volante de placebo un coche de plástico pegado a la parte delantera de un carrito de supermercado. (Y para el beneficio de cierto comentarista que afirmó que mi proporcionar una formulación explícita de su (su) problema como un problema de optimización restringida, dijo que yo sólo había repetido su (su) problema, y que la imposición de restricciones después del hecho no era una buena manera de resolver un problema de optimización, y luego se negó a cambiar su (su) punto de vista después de que expliqué cómo funciona la optimización restringida, que no es la imposición de restricciones "después del hecho", y que hay una teoría muy bien desarrollada para la optimización restringida y un software práctico listo para usar para resolver problemas de optimización restringida, entonces él (ella) votó a la baja esa respuesta muy detallada, reflexiva y amistosa, y escribió que ambos podemos estar de acuerdo en que no respondí a su pregunta) hay un software práctico listo para usar para resolver problemas de optimización restringida, que aparentemente muchas personas que "aprendieron" la optimización de Andrew Ng et al no tienen ni idea de que existe. Y los no especialistas no van a hacer un buen trabajo escribiendo su propio software de optimización restringida (o software de optimización no restringida tampoco). Andrew Ng hace un flaco favor a la gente haciéndoles creer que pueden hacerlo. Tampoco hay necesidad de hacerlo, ya que existe un buen software de optimización, aunque R está plagado de software de optimización no tan bueno. Es poco probable que alguien que no sea un experto en optimización numérica y análisis numérico pueda mejorar un buen software ya disponible para aprovechar la estructura especial del problema, por ejemplo.