共轭方向法和共轭梯度法

    • 共轭向量及其性质
    • 基本思想
    • 共轭方向法
    • 共轭梯度法
      • 用于正定二次函数的共轭梯度法
      • 用于非二次函数的共轭梯度法

共轭方向法是介于最速下降法和Newton法之间的一种方法。克服了最速下降法的锯齿现象,从而提高了收敛速度;同时,共轭方向法的迭代公式比较简单,不必求目标函数的Hesse矩阵,比Newton法减少了计算量和存储量。是一种比较实用而且有效的方法。
在讲共轭方向法和共轭梯度法之前,先对共轭向量进行说明。

共轭向量及其性质

定义1:(共轭方向) Q n×n 对称正定矩阵,若 n 维向量空间中的非零向量 p0p1pm1 满足

pTiQpj=0     ij=01m1(ij)(1)
则称 p0p1pm1 Q 共轭向量或称向量 p0p1pm1 Q 共轭的(简称共轭),称 p0p1pm1 的方向是 Q 共轭方向
Q=I() 时,公式(1)变为
pTipj=0     ij=01m1(ij)(2)
即向量 p0p1pm1 互相正交。由此可见,正交是共轭的一种特殊情况,共轭是正交的推广。
定理1: 若非零向量 p0p1pm1 Q 共轭的,则他们是线性无关的。
推论1: 在n维的向量空间中,非零的共轭向量个数不超过n。
定义2: p0p1pm1 Rn 中线性无关向量, x0Rn ,那么由形式为
z=x0+i=0m1αipi    α1α2αm1
的向量构成的集合为由点 x0 和向量 p0p1pm1 所生成的 线性流行。记为 L[x0;p0,p1,,pm1]

基本思想

在考虑普通函数之前,我们首先用2元正定二次函数进行讲解。首先考虑如下的正定二次函数

f(x)=12xTQx+bTx+c(3)
要求的目标函数 f(x) 的最优值,根据最速下降法的思想,我们首先选定一个初始点 x0 ,然后沿着该点的最速下降方向 p0=f(x0) 做直线搜索,得到点 x1 ,由最速下降法的性质可知
f(x1)Tp0=0(4)
p0 与点 x1 出的等值线相切。
在第二次迭代过程中我们不适用 f(x1) 作为这次迭代的搜索方向,我们想直在第二次迭代之后能直接到达最优点 x ,那么这次的迭代方向 p1 应该满足什么条件呢?
首先根据迭代公式我们有
x=x1+t1p1(5)
其中t_1是最优步长因子,显然在未到达最优点 x 之前, t1 是不等于0的。对目标函数求梯度,有
f(x)=Qx+b(6)
对于极小点 x ,我们有
f(x)=Qx+b=0=Q(x1+t1p1)+b=Qx1+b+Qt1p1=f(x1)+Qt1p1=0
f(x1)+Qt1p1=0
在上式两边同乘以 pT0 ,由于公式(4),并且 t10 我们可以得到
pT0f(x1)+t1pT0Qp1=>t1p0Qp1==pT000(7)
由公式(7)我们知道, p0 p1 Q 的共轭向量。
现在我们假设
p1=f(x1)+α0p0(8)
在上式两侧同时乘以 pT0Q ,得到
pT0Qf(x1)+α0pT0Qp0=pT0Qp1=0
解得
α0=pT0Qf(x1)pT0Qp0
带入到公式(8)得到
p1=f(x1)+pT0Qf(x1)pT0Qp0p0(9)

综上所述,对于n元正定二次函数,我们可以从任意点出发,然后沿着这n个共轭方向最多做n次直线搜索(原因将在下一小节进行讲解),就可以求的目标函数的最优点。

共轭方向法

定理2: 假设:
(1) Q n×n 对称正定矩阵;
(2)非零向量 p0,p1,,pm1 Q 共轭向量;
(3)对二次目标函数(3)顺次进行m次直线搜索

xi+1=1s(xipi)   i=01m1
其中 x0Rn 是任意选定的初始点。则
i) pTif(xm)=0   0j<m
ii) xm 是二次函数(3)在线性流行 L[x0;p0,p1,,pm1] 上的极小点。

(个人理解,如有错误,请指正)前面已经说过,共轭是正交的推广,对于 n 维空间,我们可以把 n (不超过 n )个共轭向量作为n为空间的基,只不过这个基不再是正交的,那么共轭向量法就是对于定义在 n 为空间中的函数,沿着每一个基的方向做直线搜索,那么最多做 n 次搜索就能得到最优值。对于线性流行 L[x0;p0,p1,,pn1] ,其实可以认为是经过点 x0 由基$$p_0,p_1,···,p_{m-1}]$构成的超平面。对于定理2,他所指出的就是最后一个迭代点$x_m$处的梯度与之前的搜索方向垂直。根据定理2我们可以得到如下的推论。

推论2: 在定理2中,当 m=n 时, xn 是正定二次函数在 Rn 中的极小点。
推论3: 在定理2中, p0,p1,,pm1 的任意线性组合 i=0m1βipi 都与 f(xm) 正交。

对于正定二次函数(3),从任意点出发,顺次沿 n Q 共轭方向做直线搜索,最多经过 n 次就可以到达极小点。
下面是对于正定二次函数的共轭方向法的算法描述。

已知:正定二次目标函数 f(x)=12xTQx+bTx+c 和终止限 ϵ
(1)选定初始点 x0 和下降方向 p0 ;置 k=0
(2)做直线搜索 xk+1=1s(xk,pk)
(3)判别 ||f(xk+1)||<ϵ 是否满足:若满足,输出 xk+1 ;否则转(4)
(4)提供共轭方向 pk+1 ,使得

pTjQpk+1=0   j=01k

(5)置 k=k+1 ,转(2)

对于正定二次函数,第(2)步可以采取如下显示计算公式

xk+1=xkpTkf(xk)pTkQpkpk
公式推导如下。
xk+1QXk+1+bf(xk+1)pTkf(xk+1)0tk=xk+tkpk=Qxk+tkQpk+b=f(xk)+tkQpk=pTkf(xk)+tkpTkQpk=pTkf(xk)+tkpTkQpk=pTkf(xk)pTkQpk(10)

在第4步中,只是说要求得共轭方向,并没有说明如何求共轭方向,不同求共轭方向的方法对应了不同的共轭方向法。

共轭梯度法

共轭梯度法是一种共轭方向法,在求每一个迭代点的搜索方向时,与改点的梯度有关,故叫做共轭梯度法。共轭梯度法:在初始点 x0 的搜索方向 p0 为初始点 x0 的负梯度方向 f(x0) ;之后迭代点 xk 的搜索方向 pk 为该点的负梯度方向 f(xk) 与已经得到的搜索方向 pk1 的线性组合(即 pk=gk+αk1pk1 )。
首先对正定二次函数做说明。

用于正定二次函数的共轭梯度法

对于目标函数为(3)的正定二次函数来说。我们规定 gk=f(xk)
* 第一个迭代点
我们可以任意指定一个初始点 x0 ,那么初始点处的搜索方向 p0=g0(11) ,从 x0 出发沿着 p0 方向做直线搜索

x1=x0+t0p0
,可以求得(可以参照公式(10)的推导)时的推导)
t0=pT0g0pT0Qp0=gT0g0pT0Qp0
x1=x0+gT0g0pT0Qp0p0
由此我们便得到了第一个迭代点。
* 第二个迭代点
由直线搜索的特性我们可以知道 p0g1=0 (可以想一下最速下降法中的锯齿现象),故 p0 g1 是线性无关的。根据共轭梯度法的特性我们可以得到在点 x1 处的搜索方向 p1
p1=g1+α0p0(12)
。再由共轭方向法的特性我们知道 p1p1 Q 共轭方向。故
pT1Qp0=gT1Qp0+α0pT0Qp0=0
便可以得到
α0=gT1Qp0pT0Qp0
由此我们便确定了迭代点 x1 处的搜索方向 p1 ,之后便是从 x1 开始沿搜索方向 p1 做直线搜索 x2=x1+t1p1 ,根据公式(10)和(12),可以得到
t1=pT1g1pT1Qp1=gT1g1+α0p0g1pT1Qp1=gT1g1pT1Qp1
由此我们便得到了第二个迭代点 x2
* 第三个迭代点
同理,我们可以得到 p1g2=0 ,可以得到点 x2 处的搜索方向为
p2=g2+α1p1(13)
同理, p2 p1 Q 共轭方向,故能够得到
pt2Qp1=gT2Qp1+α1pT1Qp1=0
便可得到
α0=gT2Qp1pT1Qp1
至此,我们便得到了点 x2 处的搜索方向 p2 ,然后从 x2 开始沿 p2 方向做直线搜索,与上相同便可得到 x3=x2+t2p2 ,求得
t2=gT2g2pT2Qp2
至此我们便得到了第三个迭代点 x3
但是上面在求第三个迭代点时有一个小小的问题便是,以上求得 p3 的方法能保证 p2 p0 共轭吗?即 p0p1p2 Q 共轭向量(根据共轭向量定义我们知道共轭向量之间需要亮亮共轭)吗?答案是肯定的,接下来推导 pT2Qp0=0 ,如下。
pT2Qp0=gT2Qp0+α1pT1Qp0=gT2Qp0=gT2(g1g0)t0=gT2g1gT2g0t0
由于 g0 g1 都可以表示成 p0 p1 的线性组合,故有 gT2g1=gT2g0=0 (因为可以把 g0 g1 看作是由 p0 p1 确定的超平面上线,由于 gT2p1=0 ,故有 gT2g1=gT2g0=0 )。
关于为什么 Qp0=(g1g0)t0 ,可以参考公式(10)的推导过程,有 f(xk+1)=f(xk)+tkQpk ,由此得到。
* 第 k+1 个迭代点
与前面相似,我们可以得到
pk=gk+αk1pk1(14)
可以得到
αk1=gkQpk1ptk1Qpk1
,我们便能得到 xk 处的搜索方向 pk ,在 xk 处沿 pk 方向做直线搜索,同理我们能得到
tk=gTkgkptkQpk
同理我们能够证出 p0p1pk Q 共轭向量。

所以可以按照上述方法,依次构造出共轭向量,最多经过 n 次迭代就能找到最优点 x
共轭梯度法的算法描述如下。

已知:二次函数公式(3),终止限 ϵ
(1)选定初始点 x0 ;计算 p0=f(x0) ;置 k=0
(2)做直线搜索 xk+1=1s(xk,pk) ,或者采用如下公式计算

tk=f(xk)Tf(xk)pTkQpk(15)
xk+1=xk+tkpk(16)

(3)判断 ||f(xk+1||<ϵ) 是否满足要求。满足则输出 xk+1 停止;否则转(4)
(4)计算
αk=f(xk+1)TQpkpTkQpk(17)
pk+1=f(xk+1)+αkpk(18)

(5)置 k=k+1 ,转(2)

用于非二次函数的共轭梯度法

上面所讲的迭代公式要想适用于非二次函数,就要将迭代公式(17)中的 Q 去掉,那么根据的推到我们可以得到

Qpk=f(xk+1)f(xk)tk
,由此,我们能得到迭代公式
αk=gTk+1(gk+1gk)pTk(gk+1gk)(19)
在公式(14)两边同时乘以 gk+1 ,得
pTkgk+1=gTkgk+1+αk1pTk1gk1(20)
由直线搜索的性质,我们知道
pTkgk+1=0(21)
于是,公式(19)变为
gTk+1gk=0(21)
另外
pTkgk=gTkgk+αk1pk1gk=gTkgk(22)

* 将公式(20)(21)(22)带入到公式(19)之后,我们得到
αk=gTk+1gk+1gTkgk=||gk+1||2||gk||2(23)
这个公式称为 Fletcher-Reeves公式
* 将公式(21)(22)带入到公式(19)后得到
αk=gTk+1gk+1pTkpk(24)
这个公式称为 Dixon-Myers公式
* 将公式(21)(23)带入到公式(19)后得到
αk=gTk+1(gk+1gk)gTkgk(25)
这个公式称为 Polak-Ribiere公式
将公式(23)(24)(25)替换公式(17)对应了不同的共轭梯度法。共轭梯度法不要求精确的直线搜索,但是不精确的直线搜索可能会造成之后迭代出来的向量不再是共轭的,这将会降低共轭梯度法的效能,解决方法就是重设初始点,即经过 n+1 次迭代后得到的 xn+1 作为初始点,开始新一轮的迭代。
用于一般函数的Fletcher-Reeves共轭梯度法描述如下。

已知:目标函数 f(x) 以及梯度函数 g(x) ,问题的维数 N 以及H终止准则的终止限 ϵ1ϵ2ϵ3 以及终止限 ϵ
(1)选定初始点 x0 ;计算 p0=f(x0) ;置 k=0(2)线 x_{k+1}=1s(x_k,p_k) f_{k+1}=f(x_{k+1}),g_{k+1}=g(x_{k+1})$

(2)进行直线搜索 xk+1=1s(xkpk) ,计算 fk+1=f(xk+1)gk+1=g(xk+1)
(3)判断H终止准则是否满足。满足:输出 xk+1 ,停止;否则:转(4)
(4)判断 k=n 是否成立,即是否已经迭代了 n+1 次。是:重置 x0=xk+1f0=fk+1g0=gk+1p0=g0k=0 ,然后转(2);不是:转(5)
(5)按照Fletcher-Reeve公式计算

αk=||gk+1||2||gk||2
pk+1=gk+αkpk

(6)判断 pTk+1gk+10 是否成立(检查 pk+1 是不是下降方向,由于实际计算中无法精确求解,可能会出现不是下降方向的情况;在精确求解中, pk+1 一定是下降法向)。做三种情况处理:i)若 pTk+1gk+1>ϵ ,这时则改取 pk+1 作为搜索方向,并置 k=k+1 ,转(2);ii)若 |pTk+1gk+1|ϵ| ,则重置 x0=xk+1f0=fk+1g0=gk+1p0=g0k=0 ,转(2);iii)若 pTk+1gk+1<ϵ ,则 pk+1 就作为搜索方向,并置 k=k+1 ,转(2)

你可能感兴趣的:(最优化,机器学习)