在梯度下降中使用固定步长时,为什么步长会变小?


9

假设我们正在做一个关于梯度合适的玩具示例,使用固定步长最小化二次函数。()α = 0.03 = [ 10 2 ; 2 3 ]xTAxα=0.03A=[10,2;2,3]

如果在每次迭代中绘制的轨迹,我们将得到下图。当我们使用固定步长时,为什么点变得“非常密集” ?直观地,它看起来不像固定步长,而是递减的步长。x

在此处输入图片说明


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不是。0.01
whuber

Answers:


12

令其中是对称且正定的(根据您的示例,我认为该假设是安全的)。然后,我们可以对角化作为。使用基数。然后我们有 ˚FX=X=QΛQŤŶ=QŤX˚FÝ=1f(x)=12xTAxAf(x)=Ax一个一个=ΛŤÿ=ŤX

Fÿ=1个2ÿŤΛÿFÿ=Λÿ

Λ是对角线,因此我们得到更新为

ÿñ+1个=ÿñ-αΛÿñ=一世-αΛÿñ=一世-αΛñ+1个ÿ0

这意味着控制收敛,并且只有。在您的情况下,我们有 所以 1个-αλ一世|1个-αλ一世|<1个

Λ10.5002.5
一世-αΛ0.89000.98

从特征值的特征向量的方向上,我们可以相对较快地收敛,这是通过迭代如何很快地使抛物面的较陡峭部分下降而看到的,但是在特征向量较小的特征向量方向上,收敛是缓慢的,因为非常接近。因此,即使学习率是固定的,该方向上步长的实际大小也会根据大约衰减0.98 1 α 0.98 ñ αλ10.50.981个α0.98ñ这变得越来越慢。这就是导致此方向上的进度呈指数级下降的原因(它在两个方向上都发生,但是另一个方向足够近,以至于我们不注意或不在意)。在这种情况下,如果增加,收敛会更快。α

为了对此进行更好,更彻底的讨论,我强烈建议https://distill.pub/2017/momentum/


感谢您的详细回答和参考!改变的基础确实帮助了我。ÿ
海涛杜

11

对于平稳函数,在局部最小值处。F=0

因为您的更新方案是,所以幅度控制步长。对于您的二次也是如此(只需计算您的情况下二次的hessian)。请注意,这不一定总是正确的。例如,对尝试相同的方案。那么您的步长始终为因此将永远不会减小。或更有趣的是,,其中y坐标中的渐变变为0,而坐标中的渐变变为0 。请参阅Chaconne的答案以了解二次方法。| ˚F | | Δ ˚F | 0 ˚F X = X α ˚F X ÿ = X + ÿ 2 XαF|F||ΔF|0FX=XαFXÿ=X+ÿ2X

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.