前言
本篇是基于梯度的优化方法的补充篇
梯度法的步长
梯度下降法、牛顿法、拟牛顿法的主要目的都是求出增量方向。求出增量方向后,如果使用固定步长进行更新,当步长太大导致优化函数与其泰勒展开偏差太大时,可能出现优化函数不降反增的情况,导致迭代不收敛。
因此在获得增量方向后,还需要确定迭代的步长。常用的方法是线搜索法。
线搜索法
线搜索法在求出优化函数f ( x ) f(\bf x)f(x)在x k \bf x_kxk的增量方向后,构建以下问题:
min α ϕ ( α ) = f ( x k + α p k ) \min_{\alpha} \quad \phi(\alpha)=f({\bf x_k}+\alpha {\bf p_k})αminϕ(α)=f(xk+αpk)
构造的函数是一元函数,其极值点处的导数为零:
ϕ ′ ( α ) = ∇ f T ( x k + α p k ) p k = 0 \phi'(\alpha)=\nabla f^T({\bf x_k}+\alpha{\bf p_k}){\bf p_k}=0ϕ′(α)=∇fT(xk+αpk)pk=0
这样就能获得步长的精确解,也就是所谓的精确线搜索方法。但是实际操作中,如果梯度没有解析式,那么上面这个方程的解的计算是很困难的。
非精确线搜索法
非精确线搜索法不需要找到精确的步长,而是希望找到一个能够使优化函数f ff稳定收敛并且下降速度较快的步长。此时的步长α \alphaα通常存在于一个或数个区间内。
Armijo条件
Armijo条件又被称为充分下降条件,是使得f ff稳定收敛的充分条件,也是最简单的条件。
如下图所示,实线是函数ϕ ( α ) = f ( x k + α p k ) \phi(\alpha)=f({\bf x_k}+\alpha {\bf p_k})ϕ(α)=f(xk+αpk)的图像,虚线l ( α ) l(\alpha)l(α)表达式为:
ϕ ′ ( α ) = ∇ f T ( x k + α p k ) p k l ( α ) = ϕ ( 0 ) + c 1 ϕ ′ ( 0 ) ( x − x k ) , 0 < c 1 < 1 \phi'(\alpha)=\nabla f^T({\bf x_k}+\alpha{\bf p_k}){\bf p_k} \\ \quad \\ l(\alpha)=\phi({0})+c_1\phi'(0)({\bf x-x_k}),0<c_1<1ϕ′(α)=∇fT(xk+αpk)pkl(α)=ϕ(0)+c1ϕ′(0)(x−xk),0<c1<1
由图可以看出,当实线在虚线下方时,ϕ ( α ) ≤ ϕ ( 0 ) \phi({\alpha})\le\phi({0})ϕ(α)≤ϕ(0),也就是函数必然下降。
这就是Armijo条件,用表达式来表示就是:
ϕ ( α ) ≤ I ( α ) → f ( x k + α p k ) ≤ f ( x k ) + c 1 α ∇ f T ( x k ) p k \phi(\alpha)\le I(\alpha) \\ \quad \\ \to \quad f({\bf x_k}+\alpha {\bf p_k})\le f({\bf x_k})+c_1\alpha\nabla f^T({\bf x_k}){\bf p_k}ϕ(α)≤I(α)→f(xk+αpk)≤f(xk)+c1α∇fT(xk)pk
Wolfe条件
Armijo条件有一个问题:虽然能够保证梯度下降,但是当步长α \alphaα极小的时候,必然能够满足Armijo条件,但是下降的速度很慢,而且超小的步长可能导致迭代中的除零错误(Nan)。我们需要保证迭代的每一步都有充分的下降。
如下图所示,如果我们限制ϕ ′ ( α ) ≥ c 1 ϕ ′ ( 0 ) \phi'(\alpha)\ge c_1\phi'(0)ϕ′(α)≥c1ϕ′(0),也就是ϕ ( α ) \phi(\alpha)ϕ(α)的斜率不够陡,达到相对平缓的区域,就形成了Curvature
将Armijo条件与Curvature条件合并,就是Wolfe条件,其表达式如下:
f ( x k + α p k ) ≤ f ( x k ) + c 1 α ∇ f T ( x k ) p k ∇ f T ( x k + α p k ) p k ≥ c 2 ∇ f T ( x k ) p k 0 < c 1 < c 2 < 1 f({\bf x_k}+\alpha {\bf p_k})\le f({\bf x_k})+c_1\alpha\nabla f^T({\bf x_k}){\bf p_k} \\ \quad \\ \nabla f^T({\bf x_k}+\alpha{\bf p_k}){\bf p_k} \ge c_2\nabla f^T({\bf x_k}){\bf p_k} \\ \quad \\ 0<c_1<c_2<1\\f(xk+αpk)≤f(xk)+c1α∇fT(xk)pk∇fT(xk+αpk)pk≥c2∇fT(xk)pk0<c1<c2<1
Wolfe条件如下图所示:
Goldstein条件
Wolfe条件需要求优化函数的梯度,比较麻烦。于是出现了只需要求优化函数值的Goldstein条件:
f ( x k ) + ( 1 − c 1 ) α ∇ f T ( x k ) p k ≤ f ( x k + α p k ) ≤ f ( x k ) + c 1 α ∇ f T ( x k ) p k 0 < c 1 < 0.5 f({\bf x_k})+(1-c_1)\alpha\nabla f^T({\bf x_k}){\bf p_k} \le f({\bf x_k}+\alpha {\bf p_k})\le f({\bf x_k})+c_1\alpha\nabla f^T({\bf x_k}){\bf p_k} \\ 0<c_1<0.5f(xk)+(1−c1)α∇fT(xk)pk≤f(xk+αpk)≤f(xk)+c1α∇fT(xk)pk0<c1<0.5
Goldstein条件的左边使得步长不会太小,右边保证梯度下降,但是可能出现找不到最优步长的情况,如下图所示。
回溯法
由于Wolfe条件实现复杂,实际使用中,可以采用回溯法实现Armijo条件或者Goldstein条件,具体流程是:
- 选择一个初始步长α 0 \alpha_0α0,和一个缩小系数ρ < 1 \rho<1ρ<1
- 把α 0 \alpha_0α0代入Armijo条件或者Goldstein条件
- 如果满足,则α = α 0 \alpha=\alpha_0α=α0,结束线搜索;否则,α 0 = ρ α 0 \alpha_0=\rho \alpha_0α0=ρα0,回到步骤2
当初始α 0 \alpha_0α0比较大时,回溯法搜索到的步长就不会太小。
后记
下篇可能会继续学习共轭梯度法。