第六章 无约束优化算法
本章考虑如下无约束优化问题
min
x
∈
R
n
f
(
x
)
(6.0.1)
\min_{x{\in}R^n}f(x)\tag{6.0.1}
x∈Rnminf(x)(6.0.1)
其中
f
(
x
)
f(x)
f(x)是
R
n
→
R
R^n{\rightarrow}R
Rn→R的函数,无约束优化问题是众多优化问题中最基本的问题,它对自变量
x
x
x的取值范围不加限制,所以无需考虑
x
x
x的可行性。对于光滑函数,我们可以较容易的利用梯度和海瑟矩阵的信息来设计算法;对于非光滑函数,我们可以利用次梯度来构造迭代格式。很多无约束优化问题的算法思想可以推广到其他优化问题上。
无约束优化问题的优化算法主要分为两大类:线搜索类型的优化算法和信赖域类型的优化算法,它们都是对函数
f
(
x
)
f(x)
f(x)在局部进行近似,但处理近似问题的方式不同。
线搜索类算法根据搜索方向的不同可以分为梯度类算法、次梯度算法、牛顿算法、拟牛顿算法等。一旦确定了搜索的方向,下一步即沿着该方向寻找下一个迭代点。
而信赖域算法主要针对
f
(
x
)
f(x)
f(x)二阶可微的情形,它是在一个给定的区域内使用二阶模型近似原问题,通过不断直接求解该二阶模型从而找到最优值点。
6.1 线搜索方法
对于优化问题6.0.1,我们将求解 f ( x ) f(x) f(x)的最小值点的过程比喻成下山的过程,假设一个人处于某点 x x x处, f ( x ) f(x) f(x)表示此处的高度,为了寻找最低点,在点 x x x处需要确定如下两件事情,第一,下一步该向哪一方向行走;第二,沿着该方向行走多远后停下以便选取下一个下山方向,以上这两个因素确定后,便可以一直重复,直至到达 f ( x ) f(x) f(x)的最小值点
线搜索类算法的数学表述为:给定当前迭代点
x
k
x^k
xk,首先通过某种算法选取向量
d
k
d^k
dk,之后确定正数
α
k
\alpha_k
αk,则下一步的迭代点可写作
x
k
+
1
=
x
k
+
α
k
d
k
x^{k+1}=x^k+\alpha_kd^k
xk+1=xk+αkdk
我们称
d
k
d^k
dk为迭代点
x
k
x^k
xk处的搜索方向,
α
k
\alpha_k
αk为相应的步长。这里要求
d
k
d^k
dk是一个下降方向,即
(
d
k
)
T
∇
f
(
x
k
)
<
0
(d^k)^T\nabla{f(x^k)}<0
(dk)T∇f(xk)<0。这个下降性质保证了沿着此方向搜索函数
f
f
f的值会减少。线搜索类算法的关键是如何选取一个好的方向以及合适的步长。
在本节中,我们回答如何选取
α
k
\alpha_k
αk这一问题,这是因为选取
d
k
d^k
dk的方法千差万别,但选取
α
k
\alpha_k
αk的方法在不同算法中非常相似,首先构造辅助函数
ϕ
(
α
)
=
f
(
x
k
+
α
d
k
)
\phi(\alpha)=f(x^k+\alpha{d^k})
ϕ(α)=f(xk+αdk)
其中
d
k
d^k
dk是给定的下降方向,
α
>
0
\alpha>0
α>0是该辅助函数的自变量,函数
ϕ
(
α
)
\phi(\alpha)
ϕ(α)的几何含义非常直观,它是一个目标函数
f
(
x
)
f(x)
f(x)在射线
{
x
k
+
α
d
k
:
α
>
0
}
\{x^k+\alpha{d^k}:\alpha>0\}
{xk+αdk:α>0}上的限制。注意到
ϕ
(
α
)
\phi(\alpha)
ϕ(α)是一个一元函数,而我们研究一元函数相对比较方便。
线搜索的目标是选取合适的
α
k
\alpha_k
αk使得
ϕ
(
α
k
)
\phi(\alpha_k)
ϕ(αk)尽可能的小,但这项工作并不容易,
α
k
\alpha_k
αk应该使得
f
f
f充分下降,同时不应该在寻找
α
k
\alpha_k
αk上花费过多的计算量,我们需要权衡这两个方面。
首先一个最直接的想法是寻找
α
k
\alpha_k
αk使得
α
k
=
a
r
g
m
a
x
α
>
0
ϕ
(
α
)
\alpha_k=argmax_{\alpha>0}\phi(\alpha)
αk=argmaxα>0ϕ(α)
即
α
k
\alpha_k
αk为最佳步长。这种线搜索算法被称为精确线搜索算法。需要指出的是,使用精确线搜索算法时我们可以在多数情况下得到优化问题的解,但选取
α
k
\alpha_k
αk通常需要很大计算量,在实际应用中较少使用。
另一个想法不要求
α
k
\alpha_k
αk是
ϕ
(
α
)
\phi(\alpha)
ϕ(α)的最小值点,而仅仅要求
ϕ
(
α
k
)
\phi(\alpha_k)
ϕ(αk)满足某些不等式性质。这种线搜索算法被称为非精确线搜索算法
PS:说实话,因为我最近深度学习做的多,好像跟这一块有点区别
6.1.1 线搜索准则
我们选取
α
k
\alpha_k
αk需要满足一定的要求,这些要求被称为线搜索准则。这里指出,线搜索准则的合适与否直接决定了算法的收敛性,若选取不合适的线搜索准则将会导致算法无法收敛
例6.4 考虑一维无约束优化问题
min
x
f
(
x
)
=
x
2
\min_xf(x)=x^2
xminf(x)=x2
迭代初始点
x
0
=
1
x^0=1
x0=1,由于问题是一维的,下降方向只有{-1,1}两种,我们选取
d
k
=
−
s
i
g
n
(
x
k
)
d^k=-sign(x^k)
dk=−sign(xk),且只要求选取的步长满足迭代点处函数值单调下降,考虑选取如下两种步长
α
k
,
1
=
1
3
k
+
1
,
α
k
,
2
=
1
+
2
3
k
+
1
\alpha_{k,1}=\frac{1}{3^{k+1}},\alpha_{k,2}=1+\frac{2}{3^{k+1}}
αk,1=3k+11,αk,2=1+3k+12
通过简单计算可以得到(一步步递推把,等比公式,从k=0开始推,然后最后变一下把k+1变成k)
x
1
k
=
1
2
(
1
+
1
3
k
)
,
x
2
k
=
(
−
1
)
k
2
(
1
+
1
3
k
)
x_1^k=\frac{1}{2}(1+\frac{1}{3^k}),x_2^k=\frac{(-1)^k}{2}(1+\frac{1}{3^k})
x1k=21(1+3k1),x2k=2(−1)k(1+3k1)
可以看到序列
{
f
(
x
1
k
)
}
\{f(x_1^k)\}
{f(x1k)}和序列
{
f
(
x
2
k
)
}
\{f(x_2^k)\}
{f(x2k)}均单调下降,但序列1收敛的点不是极小值点,序列2则在原点左右振荡。
出现上述情况的原因是在迭代过程中下降量不够充分或过于多了。以至于算法无法收敛到极小值点,为了避免这种情况发生,必须引入一些更合理的线搜索准则来确保迭代的收敛性。
1. Armijo准则
我们首先引入Armijo准则,它是一个常用的线搜索准则,引入Armijo准则的目的是保证每一步迭代充分下降
定义6.1(Armijo准则)设
d
k
d^k
dk是点
x
k
x^k
xk处的下降方向,若
f
(
x
k
,
α
d
k
)
≤
f
(
x
k
)
+
c
1
α
∇
f
(
x
k
)
T
d
k
(6.1.2)
f(x^k,\alpha{d^k}){\le}f(x^k)+c_1\alpha\nabla{f(x^k)^Td^k}\tag{6.1.2}
f(xk,αdk)≤f(xk)+c1α∇f(xk)Tdk(6.1.2)
则称步长
α
\alpha
α满足
A
r
m
i
j
o
Armijo
Armijo准则,其中
c
1
∈
(
0
,
1
)
c_1{\in}(0,1)
c1∈(0,1)是一个常数
A
r
m
o
j
i
Armoji
Armoji的几何含义我没有弄明白,就是你的
α
\alpha
α要在一个直线下方
∇
f
(
x
k
)
T
d
k
\nabla{f(x^k)^Td^k}
∇f(xk)Tdk是
ϕ
(
0
)
′
\phi(0)'
ϕ(0)′
f
(
x
k
+
α
d
k
)
f(x^k+\alpha{d^k})
f(xk+αdk)可以充分下降,但是你又不能跨太大,所以后面那一项又带有步长和斜率,如果够斜的话,你的步子就应该小一点。
在实际应用中,参数
c
!
c_!
c!通常选一个很小的正数,例如
c
1
=
1
0
−
3
c_1=10^{-3}
c1=10−3,这使得
A
r
m
i
j
o
Armijo
Armijo准则非常容易满足,但是仅仅使用
A
r
m
i
j
o
Armijo
Armijo准则无法保证迭代的收敛性,因为
α
=
0
\alpha=0
α=0也满足条件,因此,
A
r
m
i
j
o
Armijo
Armijo准则需要配合其他准则共同使用。
在优化算法的时间中,寻找一个满足
A
r
m
i
j
o
Armijo
Armijo准则的步长是比较容易的,一个常用的算法是回退法。给定初值
α
^
\hat{\alpha}
α^,回退法通过不断以指数方式缩小试探步长,找到第一个满足
A
r
m
i
j
o
Armijo
Armijo准则的点,具体来说,回退法选取
α
k
=
γ
j
0
α
^
\alpha_k=\gamma^{j_0}\hat{\alpha}
αk=γj0α^
其中
j
0
=
min
{
j
=
0
,
1
,
⋯
∣
f
(
x
k
+
γ
j
α
^
d
k
)
≤
f
(
x
k
)
+
c
1
γ
j
α
^
∇
f
(
x
k
)
T
d
k
}
j_0=\min\{j=0,1,\cdots|f(x^k+\gamma^j\hat{\alpha}d^k){\le}f(x^k)+c_1\gamma^j\hat{\alpha}\nabla{f(x^k)^T}d^k\}
j0=min{j=0,1,⋯∣f(xk+γjα^dk)≤f(xk)+c1γjα^∇f(xk)Tdk}
其中参数
γ
∈
(
0
,
1
)
\gamma{\in}(0,1)
γ∈(0,1)为一个给定的实数,看伪代码会比较简单
可以确保输出的
α
k
\alpha_k
αk尽量的大,此外算法6.1不会无限进行下去,因为
d
k
d^k
dk是一个下降方向,当
α
\alpha
α充分小时,会满足的,实际上我们通常会给
α
\alpha
α设置一个下届,防止步长过小。
2.Goldstein准则
为了克服
A
r
m
i
j
o
Armijo
Armijo准则的缺陷,我们需要引入其他准则来保证每一步的
α
k
\alpha^k
αk不会太小,既然
A
r
m
i
j
o
Armijo
Armijo准则要求点
(
α
,
ϕ
(
α
)
)
(\alpha,\phi(\alpha))
(α,ϕ(α))必须处在某直线下方,我们也可以使用 相同的形式使得点必须在另一条直线上方,这就是
A
r
m
i
j
o
−
G
o
l
d
s
t
e
i
n
Armijo-Goldstein
Armijo−Goldstein准则,简称
G
o
l
d
s
t
e
i
n
Goldstein
Goldstein准则
定义6.2(
G
o
l
d
S
t
e
i
n
GoldStein
GoldStein准则)设
d
k
d^k
dk是点
x
k
x^k
xk处的下降方向,若
f
(
x
k
+
α
d
k
)
≤
f
(
x
k
)
+
c
α
∇
f
(
x
k
)
T
d
k
(6.1.3a)
f(x^k+\alpha{d^k}){\le}f(x^k)+c\alpha{\nabla}f(x^k)^Td^k\tag{6.1.3a}
f(xk+αdk)≤f(xk)+cα∇f(xk)Tdk(6.1.3a)
f
(
x
k
+
α
d
k
)
≥
f
(
x
k
)
+
(
1
−
c
)
α
∇
f
(
x
k
)
T
d
k
(6.1.3b)
f(x^k+\alpha{d^k}){\ge}f(x^k)+(1-c)\alpha{\nabla}f(x^k)^Td^k\tag{6.1.3b}
f(xk+αdk)≥f(xk)+(1−c)α∇f(xk)Tdk(6.1.3b)
则称步长
α
\alpha
α满足
G
o
l
d
s
t
e
i
n
Goldstein
Goldstein准则,其中
c
∈
(
0
,
1
2
)
c{\in}(0,\frac{1}{2})
c∈(0,21)
总之就是这样确实会防止
α
\alpha
α过小,这个从式子上都能看出来。
3.Wolfe准则
G
o
l
d
s
t
e
i
n
Goldstein
Goldstein准则能够使得函数值充分下降,但是它可能避开了最优的函数值,如上图所示,为此我们引入
A
r
m
i
j
o
−
W
o
l
f
e
Armijo-Wolfe
Armijo−Wolfe准则,简称
W
o
l
f
e
Wolfe
Wolfe准则
定义6.3(
W
o
l
f
e
Wolfe
Wolfe准则),设
d
k
d^k
dk是点
x
k
x^k
xk处的下降方向,若
f
(
x
k
+
α
d
k
)
≤
f
(
x
k
)
+
c
1
α
∇
f
(
x
k
)
T
d
k
(6.1.4a)
f(x^k+\alpha{d^k}){\le}f(x^k)+c_1\alpha\nabla{f(x^k)}^Td^k\tag{6.1.4a}
f(xk+αdk)≤f(xk)+c1α∇f(xk)Tdk(6.1.4a)
∇
f
(
x
k
+
α
d
k
)
≥
c
2
∇
f
(
x
k
)
T
d
k
(6.1.4b)
\nabla{f(x^k+\alpha{d^k})}{\ge}c_2\nabla{f(x^k)^T}d^k\tag{6.1.4b}
∇f(xk+αdk)≥c2∇f(xk)Tdk(6.1.4b)
则称步长
α
\alpha
α满足
W
o
l
f
e
Wolfe
Wolfe准则,其中
c
1
,
c
2
∈
(
0
,
1
)
c_1,c_2{\in}(0,1)
c1,c2∈(0,1)为给定的常数且
c
1
<
c
2
c_1<c_2
c1<c2
第一个不等式就是
A
r
m
i
j
o
Armijo
Armijo准则,则第二个不等式则是
W
o
l
f
e
Wolfe
Wolfe准则的本质要求,注意到
∇
f
(
x
k
+
α
d
k
)
d
k
\nabla{f(x^k+\alpha{d^k})}d^k
∇f(xk+αdk)dk就是
ϕ
(
α
)
\phi(\alpha)
ϕ(α)的导数,
W
o
l
f
e
Wolfe
Wolfe准则实际要求
ϕ
(
α
)
\phi(\alpha)
ϕ(α)在点
α
\alpha
α的切线的斜率不能小于
ϕ
′
(
0
)
\phi'(0)
ϕ′(0)的
c
2
c_2
c2倍,注意到在极小点处有
ϕ
′
(
α
∗
)
=
∇
f
(
x
k
+
α
∗
d
k
)
T
d
k
=
0
\phi'(\alpha^*)=\nabla{f(x^k+\alpha^*d^k)}^Td^k=0
ϕ′(α∗)=∇f(xk+α∗dk)Tdk=0所以
α
∗
\alpha^*
α∗永远满足条件6.1.4b,而选择较小的
c
1
c_1
c1可使得
α
k
\alpha^k
αk同时满足6.1.4a,实际应用中,
c
2
c_2
c2通常取0.9
4.非单调线搜索准则
以上介绍的三种准则都有一个共同点:使用这些准则产生的迭代点列都是单调的,在实际应用中,非单调算法有时会有更好的效果,这就需要我们应用非单调的搜索准则,这里介绍其中两种
定义6.4(
G
r
i
p
p
o
Grippo
Grippo)设
d
k
d^k
dk是点
x
k
x^k
xk处的下降方向,
M
>
0
M>0
M>0为给定的正整数,以下不等式可作为一种线搜索准则
f
(
x
k
+
α
d
k
)
≤
max
0
≤
j
≤
m
i
n
{
k
,
M
}
f
(
x
k
−
1
+
c
1
α
∇
f
(
x
k
)
T
d
k
)
(6.1.5)
f(x^k+\alpha{d^k}){\le}\max_{0{\le}j\le{min\{k,M\}}}f(x^{k-1}+c_1\alpha{\nabla{f(x^k)^Td^k}})\tag{6.1.5}
f(xk+αdk)≤0≤j≤min{k,M}maxf(xk−1+c1α∇f(xk)Tdk)(6.1.5)
其中
c
1
∈
(
0
,
1
)
c_1{\in}(0,1)
c1∈(0,1)为给定的常数
准则6.1.5和
A
r
m
i
j
o
Armijo
Armijo准则非常相似,区别在于
A
r
m
i
j
o
Armijo
Armijo准则要求下一次迭代的函数值相对于本次迭代的函数值有充分下降,而准则6.1.5只需要下一步的函数值相比前面至多M步以内迭代的函数值有下降就可以了,显然比
A
r
m
i
j
o
Armijo
Armijo更宽,也不要求
f
(
x
k
)
f(x^k)
f(xk)的单调性
另一种非单调线搜索准则的定义更加宽泛
定义6.5设
d
k
d^k
dk是点
x
k
x^k
xk处的下降方向,以下不等式可作为一种线搜索准则
f
(
x
k
+
α
d
k
)
≤
C
k
+
c
1
α
∇
f
(
x
k
)
T
d
k
(6.1.6)
f(x^k+\alpha{d^k}){\le}C^k+c_1\alpha{\nabla}f(x^k)^Td^k\tag{6.1.6}
f(xk+αdk)≤Ck+c1α∇f(xk)Tdk(6.1.6)
其中
C
k
C^k
Ck满足递推式
C
0
=
f
(
x
0
)
,
C
k
+
1
=
1
Q
k
+
1
(
η
Q
k
C
k
+
f
(
x
k
+
1
)
)
C^0=f(x^0),C^{k+1}=\frac{1}{Q^{k+1}}(\eta{Q^kC^k+f(x^{k+1})})
C0=f(x0),Ck+1=Qk+11(ηQkCk+f(xk+1)),
Q
0
=
1
,
Q
k
+
1
=
η
Q
k
+
1
Q^0=1,Q^{k+1}=\eta{Q^k}+1
Q0=1,Qk+1=ηQk+1
我们可以用以下方式理解这个准则,变量 C k C^k Ck实际上是本次搜索准则的参照函数值,即充分下降性质的起始标准,而下一步的标准 C k + 1 C^{k+1} Ck+1是函数值 f ( x k + 1 ) 和 f(x^{k+1})和 f(xk+1)和 C k C^k Ck是凸组合,并非仅仅依赖于 f ( x k + 1 ) f(x^{k+1}) f(xk+1)
6.1.2 线搜索算法
本小节介绍在实际中使用的线搜索算法,之前的讨论已经初步介绍了回退法,并指出该算法可以用于寻找
A
r
m
i
j
o
Armijo
Armijo准则的步长,实际上只要修改一下算法的终止条件,回退法就可以被用在其他线搜索准则,例如之前我们提到的两种非单调线搜索准则6.15和6.16。回退法实现简单,原理直观,所以它是最常用的线搜索算法之一。
然而,回退法的缺点也很明显:第一,它无法保证找到
W
o
l
f
e
Wolfe
Wolfe准则的步长,即条件6.1.4b不一定成立,但对一些优化算法而言,找到满足
W
o
l
f
e
Wolfe
Wolfe准则的步长是十分必要的,第二,回退法以指数的方式缩小步长,因此对初值和参数
γ
\gamma
γ的选取比较敏感, 下面简单介绍一下其他类型的线搜索算法。
为了提到回退法的效率,我们有基于多项式插值的线搜索算法,假设初始步长
α
0
^
\hat{\alpha_0}
α0^已给定,如果经过验证,
α
0
^
\hat{\alpha_0}
α0^不满足
A
r
m
i
j
o
Armijo
Armijo准则,下一步就需要减少试探步长,和回退法不同,我们不直接将
α
0
^
\hat{\alpha_0}
α0^缩小常数倍,而是基于
ϕ
(
0
)
,
ϕ
′
(
0
)
,
ϕ
(
α
^
0
)
\phi(0),\phi'(0),\phi(\hat{\alpha}_0)
ϕ(0),ϕ′(0),ϕ(α^0)这三个信息构造一个二次插值函数
p
2
(
α
)
p_2(\alpha)
p2(α),即寻找二次函数
p
2
(
α
)
p_2(\alpha)
p2(α)满足
p
2
(
0
)
=
ϕ
(
0
)
,
p
2
′
(
0
)
=
ϕ
′
(
0
)
,
p
2
(
α
0
^
)
=
ϕ
(
α
0
^
)
p_2(0)=\phi(0),p_2'(0)=\phi'(0),p_2(\hat{\alpha_0})=\phi(\hat{\alpha_0})
p2(0)=ϕ(0),p2′(0)=ϕ′(0),p2(α0^)=ϕ(α0^)
三个条件可以确定一个唯一的
p
2
(
α
)
p_2(\alpha)
p2(α)。而且不难验证其最小值点恰到位于
(
0
,
α
0
^
)
(0,\hat{\alpha_0})
(0,α0^)内,此时取
p
2
(
α
)
p_2(\alpha)
p2(α)的最小值点作为下一个试探点,不断递归下去
基于插值的线搜索算法可以有效减少试探次数,但仍然不能保证找到的步长满足
W
o
l
f
e
Wolfe
Wolfe准则,为此
F
l
e
t
c
h
e
r
Fletcher
Fletcher提出了一个用于寻找满足
W
o
l
f
e
Wolfe
Wolfe准则的算法,这个算法比较复杂,就不展开叙述。
6.1.3 收敛性分析
这一小节给出使用不同线搜索准则导出的算法的收敛性,此收敛性建立在一般的线搜索类算法的框架上,因此得到的结论也比较弱,不过它可以帮助我们理解线搜索算法收敛的本质要求。
定理6.1(Zoutendijk)考虑一般的迭代格式6.1.1,其中
d
k
d^k
dk是搜索方向,
α
k
\alpha_k
αk是步长,且在迭代过程中
W
o
l
f
e
Wolfe
Wolfe准则6.1.4满足,假设目标函数
f
f
f下有界,连续可微且梯度L-利普希茨连续,即
∣
∣
∇
f
(
x
)
−
∇
f
(
y
)
∣
∣
≤
L
∣
∣
x
−
y
∣
∣
,
∀
x
,
y
∈
R
n
||\nabla{f(x)}-\nabla{f(y)}||{\le}L||x-y||,\forall{x,y{\in}R^n}
∣∣∇f(x)−∇f(y)∣∣≤L∣∣x−y∣∣,∀x,y∈Rn
那么
∑
k
=
0
∞
c
o
s
2
θ
k
∣
∣
∇
f
(
x
k
)
∣
∣
2
<
+
∞
(6.1.7)
\sum_{k=0}^{\infty}cos^2\theta_k||\nabla{f(x^k)||^2<+\infty}\tag{6.1.7}
k=0∑∞cos2θk∣∣∇f(xk)∣∣2<+∞(6.1.7)
其中
c
o
s
θ
k
cos\theta_k
cosθk为负梯度
−
∇
f
(
x
k
)
-\nabla{f(x^k)}
−∇f(xk)和下降方向
d
k
d^k
dk夹角的余弦
不等式6.1.7也被称为
Z
o
u
t
e
n
d
i
j
k
Zoutendijk
Zoutendijk条件
证明先略
推论6.1(线搜索算法的收敛性)对于迭代法6.1.1,设
θ
k
\theta_k
θk为每一步负梯度
−
∇
f
(
x
k
)
-\nabla{f(x^k)}
−∇f(xk)与下降方向
d
k
d^k
dk的夹角,并假设对任意的
k
k
k,存在常数
γ
>
0
\gamma>0
γ>0,使得
θ
k
<
π
2
−
γ
(6.1.8)
\theta_k<\frac{\pi}{2}-\gamma\tag{6.1.8}
θk<2π−γ(6.1.8)
则在定理6.1成立的条件下,有
lim
k
→
∞
∇
f
(
x
k
)
=
0
\lim_{k{\rightarrow}\infty}\nabla{f(x^k)=0}
k→∞lim∇f(xk)=0
推论6.1建立在
Z
o
u
t
e
n
d
i
j
k
Zoutendijk
Zoutendijk条件之上,他的本质要求是关系6.1.8,即每一步的下降方向
d
k
d^k
dk和负梯度方向不能趋于正交,这个条件的几何直观明显,当下降方向
d
k
d^k
dk和梯度正交时,目标函数值几乎不会发生改变。因此我们要求
d
k
d^k
dk与梯度正交方向夹角有一致的下界,后面会介绍多种
d
k
d^k
dk的选取方法。
总的来说,推论6.1仅仅给出了最基本的收敛性,而没有更进一步回答算法的收敛速度,这是由于算法收敛速度极大地取决于
d
k
d^k
dk的选取,接下来我们将着重介绍如何选取下降方向
d
k
d^k
dk。
6.2 梯度类算法
本节介绍梯度类算法,其本质是仅仅使用函数的一阶导数信息选取下降方向
d
k
d^k
dk,这其中最基本的算法是梯度下降法,即直接选择负梯度作为下降方向
d
k
d^k
dk,梯度下降法的方向选取非常直观,实际应用范围非常广,因此它在优化算法中的地位可相当于高斯消元法在线性方程组算法中的地位。
此外我们也会介绍BB算法,该方法作为一种梯度法的变形,虽然理论性质目前仍不完整,但由于它有优秀的数值表现,也是在实际应用中使用较多的一种算法。
6.2.1 梯度下降法
对于光滑函数
f
(
x
)
f(x)
f(x),在迭代点
x
k
x^k
xk处,我们需要选择一个较为合理的
d
k
d^k
dk作为下降方向,注意到
ϕ
(
α
)
=
f
(
x
k
+
α
d
k
)
\phi(\alpha)=f(x^k+\alpha{d^k})
ϕ(α)=f(xk+αdk)有泰勒展开
ϕ
(
α
)
=
f
(
x
k
)
+
α
∇
f
(
x
k
)
T
d
k
+
O
(
α
2
∣
∣
d
k
∣
∣
2
)
\phi(\alpha)=f(x^k)+\alpha{\nabla}f(x^k)^Td^k+O(\alpha^2||d^k||^2)
ϕ(α)=f(xk)+α∇f(xk)Tdk+O(α2∣∣dk∣∣2)
根据柯西不等式,当
α
\alpha
α足够小时,取
d
k
=
−
∇
f
(
x
k
)
d^k=-\nabla{f(x^k)}
dk=−∇f(xk)的算法,它的迭代格式为
x
k
+
1
=
x
k
−
α
k
∇
f
(
x
k
)
(6.2.1)
x^{k+1}=x^k-\alpha_k\nabla{f(x^k)}\tag{6.2.1}
xk+1=xk−αk∇f(xk)(6.2.1)
步长的选取可依赖于上一节的线搜索算法,也可以直接选取固定的
α
k
\alpha_k
αk
定理6.2 考虑正定二次函数
f
(
x
)
=
1
2
x
T
A
x
−
b
T
x
f(x)=\frac{1}{2}x^TAx-b^Tx
f(x)=21xTAx−bTx
其最优值点为
x
∗
x^*
x∗,若使用梯度法6.2.1并选取
α
k
\alpha_k
αk为精确线搜索步长,即
α
k
=
∣
∣
∇
f
(
x
k
)
∣
∣
2
∇
f
(
x
k
)
T
A
∇
f
(
x
k
)
(6.2.2)
\alpha_k=\frac{||\nabla{f(x^k)||^2}}{\nabla{f(x^k)^TA{\nabla}f(x^k)}}\tag{6.2.2}
αk=∇f(xk)TA∇f(xk)∣∣∇f(xk)∣∣2(6.2.2)
则梯度法关于迭代点列
{
x
k
}
\{x^k\}
{xk}是Q-线性收敛的,即
∣
∣
x
k
+
1
−
x
∗
∣
∣
A
2
≤
(
λ
1
−
λ
n
λ
1
+
λ
n
)
2
∣
∣
x
k
−
x
∗
∣
∣
A
2
||x^{k+1}-x^*||_A^2{\le}(\frac{\lambda_1-\lambda_n}{\lambda_1+\lambda_n})^2||x^k-x^*||_A^2
∣∣xk+1−x∗∣∣A2≤(λ1+λnλ1−λn)2∣∣xk−x∗∣∣A2
其中
λ
1
,
λ
n
\lambda_1,\lambda_n
λ1,λn分别为
A
A
A的最大、最小特征值
∣
∣
x
∣
∣
A
=
x
T
A
x
||x||_A=\sqrt{x^TAx}
∣∣x∣∣A=xTAx
定理6.2指出使用精确线搜索的梯度法在正定二次问题上有Q-线性收敛速度,线性收敛速度的常数和矩阵
A
A
A最大特征值与最小特征值之比有关,这个比例越大,梯度迭代收敛也就越慢,这个结果其实说明了梯度法一个很重大的缺陷,当目标函数的海瑟矩阵条件数较大时,它的收敛速度会非常缓慢。
接下里我们介绍当
f
(
x
)
f(x)
f(x)为梯度利普希茨连续的凸函数时,梯度法的收敛性质
定理6.3(梯度法在凸函数上的收敛性)设函数
f
(
x
)
f(x)
f(x)为凸的梯度L-利普希茨连续函数,
f
∗
=
f
(
x
∗
)
=
inf
x
f
(
x
)
f^*=f(x^*)=\inf_xf(x)
f∗=f(x∗)=infxf(x)存在且可达,如果步长
α
k
\alpha_k
αk取常数
α
\alpha
α且满足
0
<
α
<
1
L
0<\alpha<\frac{1}{L}
0<α<L1,那么由迭代6.2.1得到的点列
{
x
k
}
\{x^k\}
{xk}的函数值收敛到最优值,且在函数值意义下收敛速度为
O
(
1
k
)
\mathcal{O}(\frac{1}{k})
O(k1)
证明略,如果函数
f
f
f还是
m
−
强凸函数
m-强凸函数
m−强凸函数,则梯度法的收敛速度会进一步提升为Q-线性收敛。
要证收敛性证明前需要知道以下引理(但我们就不证了)
引理6.1 设函数
f
(
x
)
f(x)
f(x)是
R
n
R^n
Rn上的凸可微函数,则以下结论等价:
(1)
f
f
f的梯度为L-利普希茨连续的
(2)函数
g
(
x
)
=
L
2
x
T
x
−
f
(
x
)
g(x)=\frac{L}{2}x^Tx-f(x)
g(x)=2LxTx−f(x)是凸函数
(3)
∇
f
(
x
)
\nabla{f(x)}
∇f(x)有余强制性,即对任意的
x
,
y
∈
R
n
x,y{\in}R^n
x,y∈Rn,有
(
∇
f
(
x
)
−
∇
f
(
y
)
)
T
(
x
−
y
)
≥
1
L
∣
∣
∇
f
(
x
)
−
∇
f
(
y
)
∣
∣
2
(6.2.4)
(\nabla{f(x)}-\nabla{f(y)})^T(x-y){\ge}\frac{1}{L}||\nabla{f(x)-\nabla{f(y)}}||^2\tag{6.2.4}
(∇f(x)−∇f(y))T(x−y)≥L1∣∣∇f(x)−∇f(y)∣∣2(6.2.4)
证明略
定理6.4(梯度法在强凸函数上的收敛性)设函数 f ( x ) f(x) f(x)为m-强凸的梯度L-利普希茨连续函数, f ∗ = f ( x ∗ ) = inf x f ( x ) f^*=f(x^*)=\inf_x{f(x)} f∗=f(x∗)=infxf(x)存在且可达,如果步长 α \alpha α满足 0 < α < 2 m + L 0<\alpha<\frac{2}{m+L} 0<α<m+L2,那么由梯度下降法6.2.1迭代得到的点列 { x k } \{x^k\} {xk}收敛到 x ∗ x^* x∗,且为Q-线性收敛
6.2.2 Barzilar-Borwein 方法
当问题的条件数很大,即问题比较病态时,梯度下降法的收敛性质会受到很大影响,BB方法是一种特殊的梯度法,经常比一般的梯度法有着更好的效果,从形式上来看,BB方法的下降方向仍是点
x
k
x^k
xk处的负梯度方向
−
∇
f
(
x
k
)
-\nabla{f(x^k)}
−∇f(xk),但步长
α
k
\alpha_k
αk并不是直接由线搜索算法给出的,考虑梯度下降的格式:
x
k
+
1
=
x
k
−
α
k
∇
f
(
x
k
)
x^{k+1}=x^k-\alpha_k\nabla{f(x^k)}
xk+1=xk−αk∇f(xk)
这种格式也可以写成
x
k
+
1
=
x
k
−
D
k
∇
f
(
x
k
)
x^{k+1}=x^k-D^k{\nabla}f(x^k)
xk+1=xk−Dk∇f(xk)
其中
D
k
=
α
k
I
D^k=\alpha_kI
Dk=αkI,BB方法选取的
α
k
\alpha_k
αk是如下两个最优问题之一的解:
min
α
∣
∣
α
y
k
−
1
−
s
k
−
1
∣
∣
2
,
(6.2.7)
\min_{\alpha}\quad||\alpha{y^{k-1}}-s^{k-1}||^2,\tag{6.2.7}
αmin∣∣αyk−1−sk−1∣∣2,(6.2.7)
min
α
∣
∣
y
k
−
1
−
α
−
1
s
k
−
1
∣
∣
2
,
(6.2.8)
\min_{\alpha}\quad||y^{k-1}-\alpha^{-1}s^{k-1}||^2,\tag{6.2.8}
αmin∣∣yk−1−α−1sk−1∣∣2,(6.2.8)
其中引入记号
s
k
−
1
=
x
k
−
x
k
−
1
s^{k-1}=x^k-x^{k-1}
sk−1=xk−xk−1以及
y
k
−
1
=
∇
f
(
x
k
)
−
∇
f
(
x
k
−
1
)
y^{k-1}=\nabla{f(x^k)}-\nabla{f(x^{k-1})}
yk−1=∇f(xk)−∇f(xk−1)。这里先直接写出6.2.7和6.2.8,它们的实际含义将在6.5小节中给出合理解释
容易验证问题6.2.7和6.2.8的解分别为
α
B
B
1
k
=
(
s
k
−
1
)
T
y
k
−
1
(
y
k
−
1
)
T
y
k
−
1
,
α
B
B
2
k
=
(
s
k
−
1
)
T
s
k
−
1
(
s
k
−
1
)
T
y
k
−
1
(6.2.9)
\alpha^k_{BB1}=\frac{(s^{k-1})^Ty^{k-1}}{(y^{k-1})^Ty^{k-1}},\alpha_{BB2}^k=\frac{(s^{k-1})^Ts^{k-1}}{(s^{k-1})^Ty^{k-1}}\tag{6.2.9}
αBB1k=(yk−1)Tyk−1(sk−1)Tyk−1,αBB2k=(sk−1)Tyk−1(sk−1)Tsk−1(6.2.9)
因此可以得到BB方法的两种迭代格式
x
k
+
1
=
x
k
−
α
B
B
1
k
∇
f
(
x
k
)
(6.2.10a)
x^{k+1}=x^k-\alpha_{BB1}^k{\nabla}f(x^k)\tag{6.2.10a}
xk+1=xk−αBB1k∇f(xk)(6.2.10a)
x
k
+
1
=
x
k
−
α
B
B
2
k
∇
f
(
x
k
)
(6.2.10b)
x^{k+1}=x^k-\alpha_{BB2}^k{\nabla}f(x^k)\tag{6.2.10b}
xk+1=xk−αBB2k∇f(xk)(6.2.10b)
我们从6.29注意到,计算两种BB步长的任意一种仅仅需要函数相邻两步的梯度信息和迭代点信息,不需要任何线搜索算法即可选取算法步长。因为这个特点,BB方法的使用范围特别广泛,对于一般的问题,通过6.2.9式计算出的步长可以过大或过小,我们还需要将步长做截断
α
m
≤
α
k
≤
α
M
\alpha_m\le\alpha_k\le\alpha_M
αm≤αk≤αM
需要注意的是,BB算法本身是非单调方法,有时配合非单调收敛准则使用可以获得更好的实际效果
例如二次函数的BB算法
可以看到BB算法的收敛速度较快,实际上,对于正定二次函数,BB方法有Q-超线性收敛速度,对于一般问题,BB算法的收敛性还需要进一步研究,但即使如此,使用BB算法的步长通常会减少算法迭代次数,因此在编写算法时,选取BB方法的步长是常用加速策略之一。