En la optimización matemática, ¿por qué alguien usaría el descenso de gradiente para una función convexa? ¿Por qué no encontrarían simplemente la derivada de esta función y buscarían el mínimo de la manera tradicional?

Creo que la pregunta tiene dos partes:

  1. ¿Por qué no se usa simplemente [math] \ nabla F (x) = 0 [/ math] para encontrar el mínimo de funciones convexas?

    Yo diría que, por el contrario, establecer derivadas a cero es en realidad una técnica de uso frecuente para encontrar el mínimo de funciones convexas en problemas sin restricciones. Los ejemplos abundan en el campo de la estadística y el control. Considere la fórmula de los mínimos cuadrados ordinarios (MCO):
    [matemáticas] \ hat \ beta = (X ^ TX) ^ {- 1} X ^ T y [/ matemáticas]

    Lo anterior es en realidad el derivado al establecer [math] \ nabla F (\ hat \ beta) = 0 [/ math] en el siguiente problema de minimización de mínimos cuadrados.
    [matemáticas] \ min _ {\ hat \ beta} F (\ hat \ beta) = (y – X \ hat \ beta) ^ {T} (y – X \ hat \ beta) [/ math]

    Se pueden encontrar problemas de minimización implícitos similares en derivaciones para el filtro de Kalman, PCA, etc. Esta técnica proporciona soluciones de forma cerrada al problema de optimización. Esto significa que obtiene soluciones de optimización con tiempos de solución limitados, que es una propiedad muy atractiva, especialmente en aplicaciones en tiempo real como el control.

    Con respecto a las inversiones de matriz y tal, típicamente la matriz inversa nunca se calcula. En el caso OLS anterior, el sistema se plantea de esta forma:
    [matemáticas] (X ^ TX) \ hat \ beta = X ^ T y [/ matemáticas]
    y resuelto usando un solucionador lineal. El esfuerzo computacional para resolver un sistema lineal es más bajo que calcular el inverso, además uno puede explotar más fácilmente la estructura especial en la matriz de coeficientes como bandas, simetría, escasez, etc. y usar técnicas como preacondicionamiento, regularización de Tikhonov, etc.

    Sin embargo, establecer derivadas a 0 solo es útil cuando el sistema [matemática] \ nabla F (x) = 0 [/ matemática] es lineal (o al menos, un sistema explícito de ecuaciones en el que [matemática] x [ / math] puede ser aislado). De lo contrario, uno puede tener que resolver un sistema de ecuaciones no lineales, lo que implica el uso de algún método de descenso de gradiente o de tipo Newton.

    El resultado final : cuando su sistema derivado de primer orden es un sistema lineal de ecuaciones, resolver este sistema directamente suele ser mucho más atractivo desde el punto de vista computacional que usar el descenso de gradiente (cuya convergencia puede ser lenta). Cuando su sistema derivado de primer orden no es un sistema lineal, entonces las estrategias alternativas (que incluyen, entre otras, el descenso de gradiente) pueden ser más atractivas.

  2. ¿Por qué las personas usan el descenso de gradiente para las funciones convexas?

    Creo que la razón más convincente para usar el descenso de gradiente es que es extremadamente fácil de implementar. También es relativamente barato computacionalmente, lo cual es un factor importante al resolver problemas de optimización con conjuntos de datos muy grandes (y cuando los derivados de primer orden están disponibles a bajo precio). Y como se mencionó anteriormente, puede ser útil cuando establecer las derivadas a 0 no da como resultado un sistema lineal que se pueda resolver fácilmente.

    En lo que respecta a los algoritmos de optimización, el descenso del gradiente es, en el mejor de los casos, aceptable (el hecho es que tiene una tasa de convergencia relativamente pobre y puede zigzaguear cerca del óptimo, aunque las búsquedas de líneas y otras técnicas pueden ayudar a aliviar tales problemas).

    Sin embargo, en muchas aplicaciones de big data, el cuello de botella tiende a ser el tamaño del problema en lugar del algoritmo utilizado para la optimización, por lo que, cuando se observa con esta luz, el descenso de gradiente puede ser una opción decente (especialmente el descenso de gradiente estocástico).

Como señala Priyanshu Ranjit, si n – el número de parámetros – es grande, entonces encontrar el mínimo de la función implica resolver un sistema de n ecuaciones. En el caso más simple, como en la regresión lineal, cuando este es un sistema de n ecuaciones lineales, esto implicará en general invertir una matriz nxn. El algoritmo estándar de inversión matricial es el tiempo O (n ^ 3). Entonces, cuando n es grande, incluso la regresión lineal puede tomar mucho tiempo para resolverse directamente. Y si las ecuaciones ni siquiera son lineales, entonces el problema de encontrar una solución exacta será aún más difícil, si no imposible (debe haber algunos resultados insolubles de tipo teoría de Galois en la optimización convexa, ¿verdad?).

El descenso de gradiente a menudo nos permite evitar tales cuellos de botella. Pero el problema es que no se puede encontrar rigurosamente un límite sobre el tiempo que tardará en converger (por lo que sé, aunque soy nuevo en este tema). Sin embargo, el argumento principal para el descenso de gradiente parece ser que, en la práctica, parece funcionar bien y converger al mínimo muy rápidamente .

Otro problema con el descenso de gradiente es que, en general, cuando la función no es convexa, encontrará un mínimo local, y no necesariamente un mínimo global, aunque no tendrá este problema si la función es convexa, por ejemplo en regresión lineal .

Un tercer problema es el hecho de que el descenso de gradiente, estrictamente hablando, solo produce una solución aproximada, y nunca una solución exacta. Pero nuevamente, en la práctica, esto generalmente parece no ser realmente un problema.

El descenso de gradiente se puede modificar con bastante facilidad para hacer frente a las restricciones, mientras que encontrar una solución analítica a los problemas de optimización restringidos es generalmente un error.

Si es una función convexa, y el número de parámetros de optimización es grande (digamos n), es decir, la función de costo es n-variable; usando el método grad (f) = 0, necesitaría resolver un sistema de n ecuaciones correspondientes a cada derivada parcial, para obtener la solución.

Esto puede incurrir en un costo computacional mucho más alto (especialmente si el sistema de ecuaciones no es lineal) que usar el descenso de gradiente, donde calcula las n derivadas parciales en cada paso e itera hasta llegar a la solución, sin necesidad de resolver ningún sistema de ecuaciones .

El punto de usar el descenso de gradiente para problemas de optimización convexa es proponer aproximaciones numéricas a la solución ideal, basadas en un proceso iterativo. Calcular los gradientes y actualizar nuestra estimación para el mínimo nos permite explorar incluso espacios de diseño complejos de muchas dimensiones (variables) que juntas constituyen la función objetivo del problema de optimización.

Las soluciones numéricas tienen la ventaja de poder simularse en una computadora, con el resultado de que puede tener una gran cantidad de iteraciones y una solución “lo suficientemente buena” o “casi ideal”, que es lo suficientemente buena para problemas de ingeniería y datos análisis.

Si está interesado en aprender sobre el descenso de gradiente, aquí hay 3 referencias que personalmente he encontrado útiles:

  • La optimización convexa de Boyd es famosa, legible y gratuita.
  • Las conferencias introductorias de Nesterov sobre optimización convexa están escritas en un estilo más conciso, pero asume más conocimientos matemáticos.
  • El blog de Sebastian Bubeck, que tiene notas de su curso sobre optimización en Princeton, ORF523.

Si lee estas cosas, encontrará pruebas sobre límites inferiores en las tasas de optimización cuando solo hay derivados de primer orden disponibles. Para ciertas clases de funciones convexas, puede probar que tiene que mirar un cierto número de valores derivados para llegar a una solución que esté dentro de [math] \ epsilon [\ math] del valor óptimo de la función. Y a menudo hay algoritmos de descenso de gradiente que alcanzan estos límites inferiores; en cierto sentido, no se pueden mejorar para esa clase de problema. Por lo tanto, los algoritmos de descenso de gradiente no son necesariamente más lentos que otros métodos.

El descenso de gradiente está utilizando la derivada de la función en un punto inicial, avanzando a lo largo de ella, luego encontrando la derivada nuevamente, etc.

Veo que te refieres a resolver d / dx = 0

Desafortunadamente, no siempre puedes hacer esto directamente. considere mínimos cuadrados: la fórmula normal para resolver esto se basa en d / dx = 0, pero desafortunadamente crece cúbicamente (no cuadráticamente; whoops) en el número de variables. Esto es muy malo a veces.

Los métodos de descenso de gradiente, especialmente las variantes estocásticas (que toman datos uno por uno en lugar de todos a la vez, tratándolos como muestras de la función real) pueden implementarse linealmente en la dimensionalidad de los datos.

Por lo que aprendí cuando estaba haciendo mi proyecto de maestría.

Los siguientes tres factores interactúan para determinar qué tan difícil es encontrar una solución óptima para cualquier problema de optimización y por qué los métodos tradicionales simplemente no son suficientes.

1. Las relaciones entre el objetivo y las restricciones con respecto a las variables de optimización : si un problema de optimización consiste principalmente en relaciones lineales e incluso unas pocas relaciones no lineales, entonces debe resolverse utilizando métodos sofisticados de optimización no lineal.

2. El tamaño del problema de optimización: un problema de optimización se vuelve difícil de resolver a medida que aumenta el número de variables y restricciones.

3. El uso de variables enteras: si un problema de optimización se ocupa de los requisitos de memoria de las variables enteras y el tiempo de resolución crece exponencialmente con respecto al número de variables primarias.

PD: Una vez intenté resolver un problema de optimización convexa, créanme que todo en este mundo no es TAN simple, ni siquiera pensé en el descenso del gradiente.

No soy un experto de ninguna manera, de hecho, probablemente sea un novato en el mejor de los casos, así que corrígeme si estoy equivocado, pero pensé que el punto principal del aprendizaje automático es que no sabes cuál es la naturaleza de la función que eres tratar de optimizar es / no conoce la estructura dentro de los datos, por lo tanto, utiliza gradiente decente como método para encontrar lo óptimo dentro de los datos sin conocer la función. El uso de información previa como ‘la derivada de una función convexa’ supone asumir que sabe algo sobre lo que está tratando de optimizar antes de optimizarlo.

Gracias a todos por todas esas excelentes respuestas.

Sin ir por esos tecnicismos y rigor matemático, es importante comprender un hecho simple de que, estrictamente hablando sobre la aplicación del descenso de gradiente en el aprendizaje automático, realmente no tenemos ninguna información previa sobre la función para optimizar. Por el contrario, se nos han dado un montón de puntos de datos (vectores de características y categorías de clase en el aprendizaje supervisado como en la retropropagación en Perceptrón de múltiples capas, etc.) y se supone que debemos encontrar (aproximar) la función de los datos dados optimizando el costo (error o pérdida) función.

Usamos el descenso de gradiente para optimizar la función de costo y obtenemos valores apropiados (los puntos de datos dados más adecuados) de los parámetros para la función que modela aproximadamente los datos dados (en el caso de una red neutral artificial llamamos a este entrenamiento y venimos con pesas entrenadas).

En tales casos, realmente no tenemos ninguna función para aplicar la “forma tradicional”.

Primero, el descenso de gradiente está tratando de encontrar el punto con gradiente cero. Segundo, consideremos un ejemplo simple. Sabemos que el polinomio de grado mayor 4 no tiene una solución de forma cerrada. Entonces, incluso si tomamos un polinomio convexo (una función variable) de grado mayor que 5, obtenemos que la derivada (o gradiente) tiene un grado de al menos 5 para el cual no tenemos una solución de forma cerrada. Pero sí sabemos que la función es convexa y el gradiente apunta hacia la dirección en que aumenta la función (argumento simple de la serie de Taylor). Combinando estos dos, nos acercamos al punto óptimo.

Porque para una función convexa, el descenso de gradiente siempre convergerá eventualmente dado un tamaño de paso lo suficientemente pequeño y un tiempo infinito

Supongo que la pregunta asume implícitamente: 1 descenso de gradiente estocástico puede resolver la solución global cuando el objetivo no es convexo. 2 ¿por qué no usar el método original de newton-raphson?
para 1: tenga en cuenta que la versión de vainilla simple del descenso de gradiente asume convexidad
para 2: nr requiere una inversión de matriz en cada paso, que es inestable y lenta, a pesar de que la iteración externa converge cuadráticamente. A este respecto, el descenso de gradiente es una adaptación codiciosa de la idea básica de newton-raphson para eliminar la inversión a costa de tamaños de escalón subóptimos.

More Interesting

¿Cuál es la mejor herramienta de aprendizaje automático para Mac OS?

¿Por qué confiamos en la aleatoriedad de la búsqueda aleatoria en la optimización de hiperparámetros?

¿Le resulta aburrido resolver los problemas de aprendizaje automático tipo kaggle intelectualmente aburrido (en comparación con la programación competitiva, por ejemplo)?

¿Qué métodos de aprendizaje automático lo llevarán al top 10 de las competencias de kaggle?

¿El aprendizaje de transferencia es adecuado para modelos que pueden tener características de entrada crecientes?

¿Por qué no hay bloqueadores de anuncios impulsados ​​por el aprendizaje automático?

¿Algunas funciones de activación son mejores que otras en la red neuronal artificial?

¿Cuándo y dónde se usaron por primera vez los términos 'aprendizaje profundo', 'aprendizaje automático', 'ciencia de datos'?

¿Siguen siendo relevantes los enfoques simbólicos de IA después de los recientes éxitos del aprendizaje profundo?

¿Qué puede hacer el aprendizaje automático además de la clasificación? ¿Hay más?

¿Cómo podemos "entrenar" sistemáticamente los algoritmos de agrupación sobre qué combinaciones de atributos / características generan en última instancia los tipos deseados de agrupaciones?

¿Es GitHub o GitLab más adecuado para una empresa de ciencia de datos / ML?

¿Qué técnicas son útiles para las series de tiempo financieras de minería de datos?

¿Puedo terminar en trabajos de aprendizaje automático si tengo una maestría en neurociencia?

¿Puedo usar el aprendizaje profundo o ANN para un problema de agrupación como KNN?