¿Por qué el descenso de gradiente es ineficiente para un gran conjunto de datos?

13

Digamos que nuestro conjunto de datos contiene 1 millón de ejemplos, es decir, , y deseamos utilizar el descenso de gradiente para realizar una regresión logística o lineal en este conjunto de datos.x1,,x106

¿Qué pasa con el método de descenso de gradiente que lo hace ineficiente?

Recuerde que el paso de descenso de gradiente en el tiempo viene dado por:t

wt+1=wt+ηtf(x)

donde es la función de pérdida.f

No veo nada fuera de lo común con el paso anterior que hace que el algoritmo sea ineficiente. ¿Es el cálculo de ? ¿No podría esta operación ser precalculada, es decir, cada ya calculada, y simplemente evaluarlas en cada punto de datosff(x) xi?fxxi?

Carlos - la mangosta - peligro
fuente
1
¿Ineficiente en relación con ...? Incluso los mínimos cuadrados son ineficientes para un gran conjunto de datos. Necesita una notación O grande para tener ideas significativas sobre lo que la hace al algoritmo. No todos los algoritmos GD tienen la misma gran O. (¿ n
verdad

Respuestas:

7

Sería útil si proporcionara un contexto para la afirmación de que el descenso del gradiente es ineficiente. ¿Ineficiente en relación con qué?

Supongo que el contexto que falta aquí es la comparación con el descenso de gradiente estocástico o por lotes en el aprendizaje automático. Aquí se explica cómo responder la pregunta en este contexto. Está optimizando los parámetros del modelo, incluso los hiperparámetros. Entonces, tiene la función de costo , donde - sus datos, y - vector de parámetros, y - función de pérdida. Para minimizar este costo, utiliza el descenso de gradiente sobre los parámetros : x i Θ L ( ) θ j i=1nL(xi|Θ)xiΘL() θj

θji=1nL(Θ|xi)

Entonces, verá que necesita obtener la suma de todos los datos . Esto es lamentable, porque significa que sigue recorriendo los datos para cada paso de su descenso de gradiente. Así es como surge el descenso de gradiente por lotes y estocástico: ¿qué sucede si tomamos muestras del conjunto de datos y calculamos el gradiente en una muestra, no en el conjunto completo? Aquí, es el número de observaciones en la muestra . Entonces, si su muestra es 1/100 del conjunto total, ¡acelerará sus cálculos 100 veces! Obviamente, esto introduce el ruido, que alarga el aprendizaje, pero el ruido disminuye a una velocidad dexi=1,,nnss

θjk=1nsL(Θ|xk)
nss nnmientras que la cantidad de cálculo aumenta en , entonces este truco puede funcionar.n

Alternativamente, insteado esperando hasta que se calcule la suma total , puede dividir esto en lotes y hacer un paso para cada lote . De esta manera, habría realizado M pasos para cuando se calcule la suma de todo el conjunto de datos. Estos serían pasos más ruidosos, pero el ruido se cancela con el tiempo.M s = 1n s i s = 1i=1ns=1Mis=1ns

Aksakal
fuente
19

Hay dos formas en que el descenso de gradiente puede ser ineficiente. Curiosamente, cada uno de ellos lleva a su propio método de reparación, que son soluciones casi opuestas. Los dos problemas son:

(1) Se requieren demasiadas actualizaciones de descenso de gradiente.

(2) Cada paso de descenso de gradiente es demasiado costoso.

Con respecto a (1), al comparar el descenso de gradiente con los métodos que tienen en cuenta la información sobre las derivadas de segundo orden, el descenso de gradiente tiende a ser altamente ineficiente en lo que respecta a mejorar la pérdida en cada iteración. Un método muy estándar, el Método de Newton , generalmente requiere muchas menos iteraciones para converger, es decir, para la regresión logística, 10 iteraciones del Método de Newton a menudo tendrán una pérdida menor que la solución proporcionada por 5,000 iteraciones de descenso de gradiente. Para la regresión lineal, esto es aún más extremo; ¡Hay una solución de forma cerrada! Sin embargo, a medida que el número de predictores se vuelve muy grande (es decir, más de 500), el método de Newton / resolución directa para regresión lineal puede volverse demasiado costoso por iteración debido a la cantidad de operaciones de matriz requeridas, mientras que el descenso de gradiente tendrá un costo considerablemente menor por iteración.

Con respecto a (2), es posible tener un conjunto de datos tan grande que cada iteración de descenso de gradiente es demasiado costosa para calcular. Calcular el gradiente requerirá operaciones ( = tamaño de muestra, = número de covariables). Mientras que no es un problema en absoluto en las computadoras modernas para valores de , ciertamente algo como , lo será. En este caso, los métodos que se aproximan a la derivada basados ​​en subconjuntos más pequeños de datos son más atractivos, como el descenso de gradiente estocástico .O(nk)nkn=106k<100n=1012k=103

Digo que estas soluciones son casi opuestas, ya que algo como el método de Newton es más costoso pero más eficiente (en términos de cambio en la pérdida) por actualización, mientras que el descenso de gradiente estocástico es en realidad menos eficiente pero mucho más barato computacionalmente por actualización.

Acantilado
fuente
Gracias por la asombrosa respuesta. ¿Qué quieres decir con = número de covariables? No estoy familiarizado con esta terminologíak
Carlos - la Mangosta - Peligro
2
@Learningonepageatatime: covariables = variables predictoras.
Cliff AB el
10

Primero déjame sugerirte una mejora en tu notación. En particular, denotemos la función de pérdida por lugar de . Usar la letra es simplemente una preferencia personal mía ya que me recuerda que estamos lidiando con la L oss. El cambio más importante es dejar en claro que la pérdida es una función de los pesos lugar de los datos . Es importante destacar que el gradiente es con respecto a no . Entonces donde es la dimensionalidad de su datos.L(w)f(x)Lwxwx

L(w)=(Lw1,,LwD),
D

A pesar de que debemos pensar en la pérdida como una función de los pesos , cualquier función de pérdida razonable dependerá de todo el conjunto de datos (si no fuera así, ¡no sería posible aprender nada de los datos! ) En la regresión lineal, por ejemplo, generalmente usamos la función de pérdida de suma de cuadrados Por lo tanto, evaluar el gradiente para un conjunto particular de pesos requerirá una suma sobre todos los puntos en el conjunto de datos . Si , entonces cada paso incremental en la optimización del descenso del gradiente requerirá del orden de un millón de operaciones, lo cual es bastante costoso.x L ( w ) = N i = 1 ( y i - w T x i ) 2 . L ( w ) w N x N = 10 6wx

L(w)=i=1N(yiwTxi)2.
L(w)wNxN=106
tddevlin
fuente
3

Respuesta corta: el cálculo del gradiente debe sumar todos los puntos de datos. Si tenemos una gran cantidad de datos, entonces lleva mucho tiempo.

Tengo una respuesta detallada aquí.

¿Cómo podría el descenso de gradiente estocástico ahorrar tiempo en comparación con el descenso de gradiente estándar?


Por otro lado, siempre tenga en cuenta que hay métodos directos además de los métodos iterativos (gradiente decente). Si queremos resolver un problema de mínimos cuadrados, el método directo puede ser súper eficiente. Por ejemplo, descomposición QR. Si no tenemos demasiadas funciones, es muy rápido.

Cuando lo verifica, puede sorprenderle: 5 millones de puntos de datos con 2 características, ¡Resolver la regresión lineal / mínimo cuadrado lleva un par de segundos!

x=matrix(runif(1e7),ncol=2)
y=runif(5e6)
start_time <- Sys.time()
lm(y~x)
end_time <- Sys.time()
end_time - start_time
# Time difference of 4.299081 secs
Haitao Du
fuente
1

Aunque los dos ejemplos que mencionó son generalmente convexos, agregaré un punto sobre problemas no convexos. En mi opinión, hay dos razones principales por las que el descenso de gradiente (por lotes) podría considerarse "ineficiente". El primer punto sobre el esfuerzo computacional de calcular el gradiente de una suma "grande" de funciones ya se ha descrito muy claramente en las otras respuestas. Sin embargo, para problemas no convexos, GD tiene el problema de quedarse atascado en un mínimo local "cercano". Este mínimo puede ser muy malo en comparación con el mínimo global. SGD o mini-lote GD tienen la "ventaja" de deambular (al menos parcialmente) al azar y, por lo tanto, podrían tener la posibilidad de encontrar un mínimo local mejor. Vea esta respuesta de CV aquí . O esta otra publicación de CV delineando cómo la aleatoriedad podría ser beneficiosa.

xel
fuente