梯度下降法和牛顿法其实在某种程度上只是确定了下降的方向。而下降的步长(收敛速率系数)还需要我们自己确定。而对于不同的问题下降的步长往往也是不一样的。这就造成了一些麻烦。
线搜索
前面提到迭代求解最优化问题minf(x)minf(x)的一般形式是xk+1=xk+Δxk+1=xk+Δ。事实上我们可以把ΔΔ分为两个部分:方向和步长。
先确定方向,再确定步长的算法称为线搜索算法。它的一般形式为。
xk+1=xk+αkpkxk+1=xk+αkpk
其中αα为步长,pp为方向。显然有。进而有pk=−B−1k∇fkpk=−Bk−1∇fk。其中B为对称非奇异矩阵。
- 当B为I时,即为梯度下降法
- 当B为∇2fk∇2fk时,即为牛顿法
- 当B通过迭代进行更新时,为拟牛顿法
- 当B为JTJJTJ时,为高斯-牛顿法
当搜索方向确定后,就需要确定步长。
步长
而如何得到一个合适的步长这个问题又构成了一个最优化问题,即
minh(α)=f(xk+αpk)minh(α)=f(xk+αpk)
对这个优化问题我们可以根据具体情况求出闭式解,但是这往往会很复杂。因此我们仅仅对它进行一个粗略的估计,从而在可接受的计算量的情况下,尽可能的求得较大的步长,使得h(α)尽可能降低。
(天啊,为了求解最优化问题的一步迭代步长我们又构造了一个最优化问题来进行迭代)
Armijo条件
为了满足上面的条件,人们提出了很多准则来判断步长是否合适。比如Armijo条件,这个准则的数学定义如下:
f(xk+αpk)≤f(xk)+αc∇fkpkf(xk+αpk)≤f(xk)+αc∇fkpk
其中c∈(0,1)c∈(0,1)。
可以看到,这个条件约束了h(α)h(α)的变化情况,使得损失函数能够尽量降低。
回溯线搜索(Backtracking line search)
在这里介绍的回溯线搜索算法即是在这些原则的基础上实现的。回溯线算法的基本思想是在搜索方向上先设置一个较大的初始步长,如果步长太大,则以一定比例缩减步长直到满足Armijo条件。这种搜索算法就满足了步长选择的另外一个准则——每次迭代的步长尽可能大。
具体来说该算法的流程如下:
- 使用一个较大的步长α0α0对步长进行初始化。确定缩减因子τ∈(0,1)τ∈(0,1)和c∈(0,1)c∈(0,1)
- 当Armijo条件不满足时,令αj=ταj−1αj=ταj−1
- 返回αjαj