前言
本篇是基于梯度的优化方法的补充篇
梯度法的步长
梯度下降法、牛顿法、拟牛顿法的主要目的都是求出增量方向。求出增量方向后,如果使用固定步长进行更新,当步长太大导致优化函数与其泰勒展开偏差太大时,可能出现优化函数不降反增的情况,导致迭代不收敛。
因此在获得增量方向后,还需要确定迭代的步长。常用的方法是线搜索法。
线搜索法
线搜索法在求出优化函数
f
(
x
)
f(\bf x)
f(x)在
x
k
\bf x_k
xk的增量方向后,构建以下问题:
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 f f稳定收敛并且下降速度较快的步长。此时的步长 α \alpha α通常存在于一个或数个区间内。
Armijo条件
Armijo条件又被称为充分下降条件,是使得 f f f稳定收敛的充分条件,也是最简单的条件。
如下图所示,实线是函数
ϕ
(
α
)
=
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.5
f(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比较大时,回溯法搜索到的步长就不会太小。
后记
下篇可能会继续学习共轭梯度法。