Предположим, что мы делаем игрушечный пример с градиентом приличия, минимизируя квадратичную функцию , используя фиксированный размер шага α = 0,03 . ( A = [ 10 , 2 ; 2 , 3 ] )
Если мы построим трассировку на каждой итерации, мы получим следующий рисунок. Почему точки становятся «намного плотнее», когда мы используем фиксированный размер шага? Интуитивно понятно, что это выглядит не как фиксированный размер шага, а как уменьшающийся размер шага.
PS: код R включает сюжет.
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