Estoy tomando los cursos de Machine Learning en línea y aprendí sobre Gradient Descent para calcular los valores óptimos en la hipótesis.
h(x) = B0 + B1X
¿Por qué necesitamos usar el Descenso de degradado si podemos encontrar fácilmente los valores con la siguiente fórmula? Esto parece sencillo y sencillo también. pero GD necesita múltiples iteraciones para obtener el valor.
B1 = Correlation * (Std. Dev. of y/ Std. Dev. of x)
B0 = Mean(Y) – B1 * Mean(X)
NOTA: Tomado como en https://www.dezyre.com/data-science-in-r-programming-tutorial/linear-regression-tutorial
Verifiqué las siguientes preguntas y para mí no estaba claro de entender.
¿Por qué se requiere el descenso de gradiente?
Las respuestas anteriores comparan GD versus el uso de derivados.
Respuestas:
La razón principal por la que se usa el descenso de gradiente para la regresión lineal es la complejidad computacional: es computacionalmente más barato (más rápido) encontrar la solución usando el descenso de gradiente en algunos casos.
La fórmula que escribió parece muy simple, incluso computacionalmente, porque solo funciona para casos univariados, es decir, cuando solo tiene una variable. En el caso multivariante, cuando tiene muchas variables, la fórmula es un poco más complicada en papel y requiere muchos más cálculos cuando la implementa en el software: Aquí, usted necesita calcular la matriz luego invertirla (vea la nota a continuación). Es un cálculo costoso. Para su referencia, la matriz X (de diseño) tiene columnas K + 1 donde K es el número de predictores y N filas de observaciones. En un algoritmo de aprendizaje automático, puede terminar con K> 1000 y N> 1,000,000. La matriz sí misma tarda un poco en calcular, luego hay que invertirX ′ X X ′ X K × K
Entonces, el descenso de gradiente permite ahorrar mucho tiempo en los cálculos. Además, la forma en que se realiza permite una paralelización trivial, es decir, distribuye los cálculos en múltiples procesadores o máquinas. La solución de álgebra lineal también se puede paralelizar, pero es más complicada y aún cara.
Además, hay versiones de descenso de gradiente cuando mantiene solo una parte de sus datos en la memoria, lo que reduce los requisitos de memoria de la computadora. En general, para problemas extra grandes es más eficiente que la solución de álgebra lineal.
Esto se vuelve aún más importante a medida que aumenta la dimensionalidad, cuando tiene miles de variables como en el aprendizaje automático.
Observación . Me sorprendió cuánta atención se presta al descenso de gradiente en las conferencias de Ng. Pasa una cantidad de tiempo no trivial hablando de ello, tal vez el 20% de todo el curso. Para mí es solo un detalle de implementación, es exactamente cómo encuentras el óptimo. La clave está en formular el problema de optimización, y cómo exactamente lo encuentra no es esencial. No me preocuparía demasiado por eso. Déjelo en manos de los informáticos y concéntrese en lo que es importante para usted como estadístico.
Dicho esto, debo calificar diciendo que es realmente importante comprender la complejidad computacional y la estabilidad numérica de los algoritmos de solución. Todavía no creo que deba conocer los detalles de implementación y el código de los algoritmos. Por lo general, no es el mejor uso de su tiempo como estadístico.
Nota 1 . Escribí que tienes que invertir la matriz para propósitos didácticos y no es cómo usualmente resuelves la ecuación. En la práctica, los problemas de álgebra lineal se resuelven utilizando algún tipo de factorización como QR, donde no invierte directamente la matriz sino que realiza otras manipulaciones matemáticamente equivalentes para obtener una respuesta. Hace esto porque la inversión matricial es una operación costosa y numéricamente inestable en muchos casos.
Esto trae otra pequeña ventaja del algoritmo de descenso de gradiente como efecto secundario: funciona incluso cuando la matriz de diseño tiene problemas de colinealidad. La trayectoria habitual de álgebra lineal explotaría y el descenso del gradiente continuará incluso para los predictores colineales.
fuente
Primero, recomiendo encarecidamente que lea las siguientes dos publicaciones (si no está duplicada)
Por favor verifique la respuesta de JM en
¿Qué algoritmo se usa en regresión lineal?
Verifique la respuesta de Mark (desde el punto de vista de la estabilidad numérica) en
¿Necesitamos un descenso de gradiente para encontrar los coeficientes de un modelo de regresión lineal?
En resumen, supongamos que queremos resolver el problema de regresión lineal con pérdida cuadrada Podemos establecer la derivada en , y está resolviendo el sistema linealminimize ∥Ax−b∥2 2AT(Ax−b) 0 ATAx=ATb
En alto nivel, hay dos formas de resolver un sistema lineal. Método directo y el método iterativo. Tenga en cuenta que el método directo está resolviendo , y el descenso de gradiente (un ejemplo de método iterativo) está resolviendo directamente .ATAx=ATb minimize ∥Ax−b∥2
En comparación con los métodos directos (decir descomposición QR / LU ). Los métodos iterativos tienen algunas ventajas cuando tenemos una gran cantidad de datos o los datos son muy escasos.
Supongamos que nuestra matriz de datos es enorme y no es posible caber en la memoria, se puede usar el descenso de gradiente estocástico. Tengo una respuesta para explicar por qué ¿ Cómo podría el descenso de gradiente estocástico ahorrar tiempo en comparación con el descenso de gradiente estándar?A
Para obtener datos escasos, consulte el excelente libro Métodos iterativos para sistemas lineales dispersos
Por otro lado, creo que una de las razones por las que Andrew Ng enfatiza es porque es un método genérico (el método más utilizado en el aprendizaje automático) y puede usarse en otros modelos, como la regresión logística o la red neuronal.
fuente
Sycorax es correcto porque no necesita el descenso de gradiente al estimar la regresión lineal. Su curso podría estar usando un ejemplo simple para enseñarle el descenso de gradiente para presentar versiones más complicadas.
Sin embargo, una cosa interesante que quiero agregar es que actualmente hay un pequeño nicho de investigación que implica terminar el descenso del gradiente temprano para evitar el sobreajuste de un modelo.
fuente
Si no me equivoco, creo que está apuntando hacia el MOOC ofrecido por el profesor Andrew Ng. Para encontrar los coeficientes de regresión óptimos, hay aproximadamente dos métodos disponibles. Una es mediante el uso de ecuaciones normales, es decir, simplemente descubriendo y la segunda es minimizar al mínimo criterio de cuadrados que se deriva de la hipótesis que ha citado. Por cierto, el primer método, es decir, las ecuaciones normales, es un producto del segundo método, es decir, el método de optimización.(XTX)−1XTy
El método que ha mencionado, es decir, el uso de correlación, es aplicable solo para un predictor y una cantidad de intercepción. Solo tenga en cuenta la forma. Entonces, cuando el número de predictores es más de uno en número, ¿cuál es la salida? Entonces uno tiene que recurrir a los otros métodos, es decir, la ecuación u optimización normal.
Ahora, ¿por qué la optimización (aquí Pendiente de descenso) aunque la ecuación normal directa está disponible. Observe que en la ecuación normal uno tiene que invertir una matriz. Ahora invertir una matriz cuesta para el cálculo donde es el número de filas en la matriz , es decir, las observaciones. Además, si está mal condicionado, creará errores de cálculo en la estimación. Por lo tanto, es el tipo de algoritmo de optimización Gradiente de Descenso el que nos puede salvar de este tipo de problema. Otro problema es el sobreajuste y el subajuste en la estimación de los coeficientes de regresión.O(N3) N X X
Mi sugerencia para usted es no ir simplemente a resolver un problema. Intenta entender la teoría. El profesor Ng es uno de los mejores profesores del mundo que amablemente enseña Machine Learning en MOOC. Entonces, cuando está instruyendo de esta manera, debe tener algunas intenciones latentes. Espero que no te importen mis palabras.
Todo lo mejor.
fuente
Primero, sí, la verdadera razón es la dada por Tim Atreides; Este es un ejercicio pedagógico.
Sin embargo, es posible, aunque poco probable, que uno quiera hacer una regresión lineal en, digamos, varios billones de puntos de datos que se transmiten desde un socket de red. En este caso, la evaluación ingenua de la solución analítica sería inviable, mientras que algunas variantes del descenso de gradiente estocástico / adaptativo convergerían a la solución correcta con una sobrecarga de memoria mínima.
(se podría, para la regresión lineal, reformular la solución analítica como un sistema de recurrencia, pero esta no es una técnica general).
fuente
Otra razón es que el descenso de gradiente es un método más general. Para muchos problemas de aprendizaje automático, la función de costo no es convexa (por ejemplo, factorización matricial, redes neuronales), por lo que no puede utilizar una solución de forma cerrada. En esos casos, el descenso de gradiente se utiliza para encontrar algunos buenos puntos óptimos locales. O, si desea implementar una versión en línea, debe usar un algoritmo basado en descenso de gradiente.
fuente