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")
alpha=3e-2
eher als .