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,03
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.
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")
r
machine-learning
optimization
gradient-descent
Haitao Du
quelle
quelle
alpha=3e-2
eher als .Antworten:
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 A∇f(x)=AxAA=QΛQTy=QTxf(y)=1f( x ) = 12xT.A x EIN ∇ f( x ) = A x EIN A = Q Λ Q.T. y= Q.T.x
Dies bedeutet, dass die Konvergenz regelt und wir nur dann Konvergenz erhalten, wenn . In Ihrem Fall haben wir also1 - α λich | 1-α λich| <1
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,5 0,98 1 α ( 0,98 )n das 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/ .
quelle
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| →0 f( x ) = x α f( x , y) = x + y2 x
quelle