Pourquoi la descente de gradient est-elle inefficace pour un grand ensemble de données?

13

Disons que notre ensemble de données contient 1 million d'exemples, c'est-à-dire , et nous souhaitons utiliser la descente de gradient pour effectuer une régression logistique ou linéaire sur ces ensembles de données.x1,,x106

Qu'est-ce que la méthode de descente de gradient rend inefficace?

Rappelons que le pas de descente de gradient au temps est donné par:t

wt+1=wt+ηtf(x)

où est la fonction de perte.f

Je ne vois rien d'extraordinaire avec l'étape ci-dessus qui rend l'algorithme inefficace. Est-ce le calcul de ? Cette opération ne pourrait-elle pas être précalculée, c'est-à-dire que chaque déjà calculé, et simplement les évaluer à chaque point de donnéesff(x) xi?fxxi?

Carlos - la mangouste - Danger
la source
1
Inefficace par rapport à ...? Même les moindres carrés sont inefficaces pour un grand ensemble de données. Vous avez besoin d'une grande notation O pour avoir des idées significatives sur ce que le fait à l'algorithme. Tous les algorithmes GD n'ont pas le même grand O. ( n
n'est

Réponses:

7

Il serait utile que vous fournissiez un contexte pour affirmer que la descente en pente est inefficace. Inefficace par rapport à quoi?

Je suppose que le contexte manquant ici est la comparaison avec la descente de gradient stochastique ou par lots dans l'apprentissage automatique. Voici comment répondre à la question dans ce contexte. Vous optimisez les paramètres du modèle, même les hyperparamètres. Donc, vous avez la fonction de coût , où - vos données, et - vecteur de paramètres, et - fonction de perte. Pour minimiser ce coût, vous utilisez une descente de gradient sur les paramètres : x i Θ L ( ) θ j i=1nL(xi|Θ)xiΘL() θj

θji=1nL(Θ|xi)

Donc, vous voyez que vous devez obtenir la somme de toutes les données . C'est dommage, car cela signifie que vous continuez à parcourir les données pour chaque étape de votre descente de gradient. C'est ainsi que la descente en lots et en gradient stochastique se produit: que se passe-t-il si nous échantillonnons à partir de l'ensemble de données et calculons le gradient sur un échantillon, pas l'ensemble complet? Ici, est le nombre d'observations dans l'échantillon . Donc, si votre échantillon représente 1 / 100e de l'ensemble total, vous accélérez vos calculs de 100 fois! De toute évidence, cela introduit le bruit, ce qui allonge l'apprentissage, mais le bruit diminue à un taux dexi=1,,nnss

θjk=1nsL(Θ|xk)
nss nntandis que le montant du calcul augmente à , cette astuce peut donc fonctionner.n

Alternativement, au lieu d'attendre que la somme totale soit calculée, vous pouvez la diviser en lots et effectuer une étape pour chaque lot M s = 1n s i s = 1 . De cette façon, vous auriez effectué M étapes au moment où la somme sur l'ensemble des données est calculée. Ce seraient des étapes plus bruyantes, mais le bruit s'annule avec le temps.i=1ns=1Mis=1ns

Aksakal
la source
19

La descente en pente peut être inefficace de deux manières. Fait intéressant, ils mènent chacun à leur propre méthode de fixation, qui sont des solutions presque opposées. Les deux problèmes sont:

(1) Trop de mises à jour de descente de gradient sont nécessaires.

(2) Chaque étape de descente de gradient est trop coûteuse.

En ce qui concerne (1), en comparant la descente de gradient avec des méthodes qui prennent en compte les informations sur les dérivées du second ordre, la descente de gradient a tendance à être très inefficace en ce qui concerne l'amélioration de la perte à chaque itération. Une méthode très standard, la méthode de Newton , prend généralement beaucoup moins d'itérations pour converger, c'est-à-dire que pour la régression logistique, 10 itérations de la méthode de Newton auront souvent une perte plus faible que la solution fournie par 5000 itérations de descente de gradient. Pour la régression linéaire, c'est encore plus extrême; il y a une solution de formulaire fermé! Cependant, comme le nombre de prédicteurs devient très important (c.-à-d. 500+), la méthode de Newton / résolution directe pour la régression linéaire peut devenir trop coûteuse par itération en raison de la quantité d'opérations matricielles requises, tandis que la descente de gradient aura un coût par itération considérablement inférieur.

O(nk)nkn=106k<100n=1012k=103sera. Dans ce cas, les méthodes qui approchent la dérivée sur la base de sous-ensembles de données plus petits sont plus attrayantes, comme la descente de gradient stochastique .

Je dis que ces correctifs sont presque opposés, en ce sens que quelque chose comme la méthode de Newton est plus coûteux mais plus efficace (en termes de changement de perte) par mise à jour, tandis que la descente de gradient stochastique est en fait moins efficace mais beaucoup moins coûteuse par mise à jour par mise à jour.

Cliff AB
la source
k
2
@Learningonepageatatime: covariables = variables prédictives.
Cliff AB
10

L(w)f(x)Lwxwx

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

wx

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

Réponse courte: le calcul du gradient doit faire la somme de tous les points de données. Si nous avons une grande quantité de données, cela prend beaucoup de temps.

J'ai une réponse détaillée ici.

Comment la descente de gradient stochastique pourrait-elle gagner du temps par rapport à la descente de gradient standard?


D'autre part, gardez toujours à l'esprit qu'il existe des méthodes directes en plus des méthodes itératives (gradient décent). Si nous voulons résoudre un problème des moindres carrés, la méthode directe peut être super efficace. Par exemple, la décomposition QR. Si nous n'avons pas trop de fonctionnalités, c'est très rapide.

Lorsque vous le vérifiez, cela peut vous surprendre: 5 millions de points de données avec 2 fonctionnalités, la résolution de la régression linéaire / moindre carré prend quelques secondes!

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
la source
1

Bien que les deux exemples que vous avez mentionnés soient généralement convexes, j'ajouterai un point sur les problèmes non convexes. À mon avis, il y a deux raisons principales pour lesquelles la descente de gradient (par lots) peut être considérée comme "inefficace". Le premier point concernant l'effort de calcul du calcul du gradient d'une "grande" somme de fonctions a déjà été très clairement exposé dans les autres réponses. Pour les problèmes non convexes, cependant, GD a le problème de se retrouver généralement coincé dans un minimum local "proche". Ce minimum peut être très mauvais par rapport au minimum global. SGD ou mini-batch GD ont «l'avantage» d'errer (au moins partiellement) au hasard et pourraient ainsi avoir la chance de trouver un meilleur minimum local. Voir cette réponse CV ici . Ou cet autre poste de CV décrivant comment le caractère aléatoire pourrait être bénéfique.

xel
la source