Pourquoi mes pas deviennent-ils plus petits lorsque j'utilise une taille de pas fixe dans la descente de gradient?

9

Supposons que nous faisons un exemple de jouet sur un gradient décent, minimisant une fonction quadratique , en utilisant une taille de pas fixe . ( )α = 0,03 A = [ 10 , 2 ; 2 , 3 ]xTAxα=0.03A=[10,2;2,3]

Si nous traçons la trace de à chaque itération, nous obtenons la figure suivante. Pourquoi les points deviennent "beaucoup plus denses" lorsque nous utilisons une taille de pas fixe ? Intuitivement, il ne ressemble pas à une taille de pas fixe, mais à une taille de pas décroissante.x

entrez la description de l'image ici


PS: R Le code inclut le tracé.

A=rbind(c(10,2),c(2,3))
f <-function(x){
  v=t(x) %*% A %*% x
  as.numeric(v)
}
gr <-function(x){
  v = 2* A %*% x
  as.numeric(v)
}

x1=seq(-2,2,0.02)
x2=seq(-2,2,0.02)
df=expand.grid(x1=x1,x2=x2)
contour(x1,x2,matrix(apply(df, 1, f),ncol=sqrt(nrow(df))), labcex = 1.5, 
        levels=c(1,3,5,10,20,40))
grid()

opt_v=0
alpha=3e-2
x_trace=c(-2,-2)
x=c(-2,-2)
while(abs(f(x)-opt_v)>1e-6){
  x=x-alpha*gr(x)
  x_trace=rbind(x_trace,x)
}
points(x_trace, type='b', pch= ".", lwd=3, col="red")
text(x_trace, as.character(1:nrow(x_trace)), col="red")
Haitao Du
la source
Votre code ne correspond pas à votre description: il utilise alpha=3e-2plutôt que . 0.01
whuber

Réponses:

12

Soit où est symétrique et défini positif (je pense que cette hypothèse est sûre d'après votre exemple). Ensuite et on peut diagonaliser en tant que . Utilisez le changement de base . On a alors Af(x)=12xTAxAA A = Q Λ Q T y = Q T x f ( y ) = 1f(x)=AxAA=QΛQTy=QTx

f(y)=12yTΛyf(y)=Λy.

y ( n + 1Λ est diagonal donc nous obtenons nos mises à jour comme

y(n+1)=y(n)αΛy(n)=(IαΛ)y(n)=(IαΛ)n+1y(0).

Cela signifie que régit la convergence, et nous n'obtenons la convergence que si . Dans votre cas, nous avons donc | 1 - α1αλi|1αλi|<1

Λ(10.5002.5)
IαΛ(0.89000.98).

Nous obtenons la convergence relativement rapidement dans la direction correspondant au vecteur propre avec la valeur propre comme on le voit par la façon dont les itérations descendent assez rapidement la partie la plus raide du paraboloïde, mais la convergence est lente dans la direction du vecteur propre avec la plus petite valeur propre parce que est si proche de . Ainsi, même si le taux d'apprentissage est fixe, les amplitudes réelles des pas dans cette direction diminuent selon environ0,98 1 α ( 0,98 ) n αλ10.50.981α(0.98)nqui devient de plus en plus lent. C'est la cause de ce ralentissement exponentiel dans la progression dans cette direction (cela se produit dans les deux directions mais l'autre direction se rapproche suffisamment tôt pour que nous ne nous en rendions pas compte). Dans ce cas, la convergence serait beaucoup plus rapide si était augmenté.α

Pour une discussion bien meilleure et plus approfondie à ce sujet, je recommande fortement https://distill.pub/2017/momentum/ .

jld
la source
merci pour la réponse détaillée et la grande référence!. changer la base de m'a vraiment aidé. y
Haitao Du
11

Pour une fonction lisse, aux minima locaux.f=0

Parce que votre schéma de mise à jour est , la magnitudecontrôle la taille du pas. Dans le cas de votre quadratique également (calculez simplement la toile de jute du quadratique dans votre cas). Notez que cela ne doit pas toujours être vrai. Par exemple, essayez le même schéma sur . Ensuite, la taille de votre pas est toujours et ne diminuera donc jamais. Ou plus intéressant, , où le gradient va à 0 dans la coordonnée y, mais pas la coordonnée . Voir la réponse de Chaconne pour la méthodologie des quadratiques.| f | | Δ f | 0 f ( x ) = x α f ( x , y ) = x + y 2 xαf|f||Δf|0f(x)=xαf(x,y)=x+y2x

Alex R.
la source