Warum werden meine Schritte kleiner, wenn beim Steigungsabstieg eine feste Schrittgröße verwendet wird?


9

Angenommen, wir machen ein Spielzeugbeispiel für einen anständigen Gradienten, bei dem eine quadratische Funktion unter Verwendung der festen Schrittgröße minimiert wird . ( )α = 0,03xT.EINxα=0,03EIN=[10,2;;2,3]]

Wenn wir die Spur von in jeder Iteration zeichnen , erhalten wir die folgende Abbildung. Warum werden die Punkte "sehr dicht", wenn wir eine feste Schrittgröße verwenden? Intuitiv sieht es nicht nach einer festen Schrittgröße aus, sondern nach einer abnehmenden Schrittgröße.x

Geben Sie hier die Bildbeschreibung ein


PS: R Code enthält Plot.

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")

Ihr Code stimmt nicht mit Ihrer Beschreibung überein: Er verwendet alpha=3e-2eher als . 0,01
whuber

Antworten:


12

Sei wobei symmetrisch und positiv definit ist (ich denke, diese Annahme ist basierend auf Ihrem Beispiel sicher). Dann ist und wir können als diagonalisieren . Verwenden Sie die Änderung der Basis . Dann haben wir Af(x)=AxAA=QΛQTy=QTxf(y)=1f(x)=12xT.EINxEINf(x)=EINxEINEIN=Q.ΛQ.T.y=Q.T.x

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

Λ ist diagonal, daher erhalten wir unsere Aktualisierungen als

y(n+1)=y(n)- -αΛy(n)=(ich- -αΛ)y(n)=(ich- -αΛ)n+1y(0).

Dies bedeutet, dass die Konvergenz regelt und wir nur dann Konvergenz erhalten, wenn . In Ihrem Fall haben wir also 1- -αλich|1- -αλich|<1

Λ(10.5002.5)
ich- -αΛ(0,89000,98).

Wir erhalten eine relativ schnelle Konvergenz in der Richtung, die dem Eigenvektor mit dem Eigenwert wie sich zeigt, wie die Iterationen den steileren Teil des Paraboloids ziemlich schnell absteigen, aber die Konvergenz ist in Richtung des Eigenvektors mit dem kleineren Eigenwert langsam, weil ist so nah an . Obwohl die Lernrate festgelegt ist, fallen die tatsächlichen Größen der Schritte in dieser Richtung gemäß ungefährλ10.50,981α(0,98)ndas wird langsamer und langsamer. Dies ist die Ursache für diese exponentiell aussehende Verlangsamung des Fortschritts in dieser Richtung (dies geschieht in beide Richtungen, aber die andere Richtung kommt früh genug nahe, dass wir es nicht bemerken oder uns darum kümmern). In diesem Fall wäre die Konvergenz viel schneller, wenn erhöht würde.α

Für eine viel bessere und gründlichere Diskussion empfehle ich dringend https://distill.pub/2017/momentum/ .


Vielen Dank für die ausführliche Antwort und die gute Referenz!. Ändern Sie die Basis von hat mir wirklich geholfen. y
Haitao Du

11

Für eine glatte Funktion ist bei den lokalen Minima.f=0

Da Ihr Aktualisierungsschema , ist die Größesteuert die Schrittgröße. Auch bei Ihrem quadratischen (berechnen Sie in Ihrem Fall einfach den Hessischen des Quadrats). Beachten Sie, dass dies nicht immer wahr sein muss. Versuchen Sie zum Beispiel dasselbe Schema für . Dann ist Ihre Schrittgröße immer daher niemals abnehmen. Interessanterweise ist , wobei der Gradient in der y-Koordinate auf 0 geht, nicht jedoch in der Koordinate. Siehe Chaconnes Antwort zur Methodik für Quadratics.| f | | Δ f | 0 f ( x ) = x α f ( x , y ) = x + y 2 xαf|f||Δf|0f(x)=xαf(x,y)=x+y2x

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.