Rosenbrock’s 函数是优化问题的基准问题:
f ( x ) = ∑ i = 1 n − 1 [ 100 ( x x + 1 − x i 2 ) 2 + ( x i − 1 ) 2 ] f(x)=\sum_{i=1}^{n-1}[100(x_{x+1}-x_{i}^2)^2+(x_i-1)^2] f(x)=i=1∑n−1[100(xx+1−xi2)2+(xi−1)2]
本文实现了一个基本的梯度下降法的算法,并且实现了两种学习率的确定方式,即Line Search 和 Constant Learning Rate。代码末尾。
Constant Learning Rate
如果学习率太小:收敛速度满。例如,在 Rosenbrock 函数中,如果学习率小于 0.0001,则迭代次数会非常大。
如果学习率太大:每次迭代中目标函数可能不会减少,所以可能不会收敛。 例如,在 Rosenbrock 的函数中,如果学习率大于 0.001,函数的值可能会从 450 增加到 10000 以上,这意味着没有收敛。
Line Search ( with Armijo )
为了在每次更新中找到合适的学习率,使用带有 Armijo 条件的线搜索,我们寻找满足以下条件的学习率 α \alpha α:
f