我卸不下对你的喜欢,
因为爱会慢慢增加重量。
我醉心于你的发香,
因为它让回想有了画面感。
在虚拟的土壤与
真实的肉体上,
文字与真心蔓延滋长了
我们的感情。
脑海储存着幸福,
不断放送着你可爱的模样。
——畅宝宝的傻逼哥哥
Hestenes与Stiefel提出了一种生成共轭方向的有效方法,就是共轭梯度法。该方法中,每次迭代生成方向,当迭代第k+1次时,用前一个方向dk生成新的点xk+1,然后βdk加上−gk+1(新点处的负梯度)生成新的方向dk+1。
共轭方向法基于下面的定理,除了定义生成共轭方向的方法外,其余都与上篇文章的定理1一样。
定理1:(a)如果H是正定矩阵,那么对任意初始点x0与初始方向
d0=−g0=−(b+Hx0)
由递推关系
xk+1=xk+αkdk(1)
生成的序列收敛到唯一解x∗,其中
αkgdk+1βk=−gTkdkdTkHdk=b+Hxk=−gk+1+βkdk=gTk+1HdkdTkHdk(2)(3)(4)(5)
(b)梯度gk与{g0,g1,…,gk−1}正交,即
gTkgi=0for 0≤i<k
证明:收敛性的证明与上篇文章的定理1一样,所以还需要证明的就是方向d0,d1,…,dn−1组成一个共轭集合,即
dTkHdi=0for0≤i<k and 1≤k≤n
接下来我们用归纳法进行证明。假设
dTkHdi=0for0≤i<k(6)
我们需要说明
dTk+1Hdi=0for0≤i<k+1
令S(v0,v1,…,vk)是向量v0,v1,…,vk生成的子空间,因为
gk+1=gk+αkHdk(7)
故当k=0时,我们有
g1=g0+α0Hd0=g0−α0Hg0
因为d0=−g0。另外,由等式4可得
d1=−g1+β0d0=−(1+β0)g0+α0Hg0
即g1,d1是g0,Hg0的线性组合,所以
S(g0,g1)=S(d0,d1)=S(g0,Hg0)
同样地,对于k=2我们有
g2=d2=g0−[α0+α1(1+β0)]Hg0+α0α1H2g0−[1+(1+β0)β1]g0+[α0+α1(1+β0)+α0β1]Hg0−α0α1H2g0
因此
S(g0,g1,g2)S(d0,d1,d2)=S(g0,Hg0,H2g0)=S(g0,Hg0,H2g0)
继续用归纳法,我们可以得到
S(g0,g1,…,gk)S(d0,d1,…,dk)=S(g0,Hg0,…,Hkg0)=S(g0,Hg0,…,Hkg0)(8)(9)
现在根据等式4可得
dTk+1Hdi=−gTk+1Hdi+βkdTkHdi(10)
当i=k时,等式5得出
dTk+1Hdk=−gTk+1Hdk+βkdTkHdk=0(11)
当i<k时,等式9表明
Hdi∈S(d0,d1,…,dk)
所以Hdi可以用线性组合
Hdi=∑i=1kaidi(12)
来表示,其中αi,i=0,1,…,k是常数。接下来根据等式10与等式12
dTk+1Hdi=−∑i=0kaigTk+1di+βkdTkHdi=0for i<k(13)(14)
根据上篇文章定理2第一部分的正交性,上式的第一项等于零,而根据假设等式6可知,上式第二项等于零。结合等式11与13我们有
dTk+1Hdi=0for 0≤i<k+1(15)
对于k=0,等式14得出
dT1Hdi=0for 0≤i<1
且根据等式6与14,我们得出
dT2HdidT3Hdi⋮dTkHdi=0for 0≤i<2=0for 0≤i<3⋮=0for 0≤i<k
(b)根据等式8与9可知,g0,g1,…,gk生成的子空间与d0,d1,…,dk是一样的,因此他们是线性无关的,由此可得
gi=∑j=0iajdj
其中aj是常数,j=0,1,…,i。根据上篇文章的定理2可知
gTkgi=∑j=0iajgTkdj=0for 0≤i<k
上面定理中αk,βk的表达式可以进一步化简,根据等式4可得
−gTkdk=gTkgk−βk−1gTkdk−1
其中根据上篇文章的定理2可知
gTkdk−1=0
故
−gTkdk=gTkgk
所以等式2的α表达式可以改成
αk=gTkgkdTkHdk(16)
另一方面,因为
Hdk=1αk(gk+1−gk)
所以
gTk+1Hdk=1αk(gTk+1gk+1−gTk+1gk)(17)
接下来根据等式8与9可得
gk∈S(d0,d1,…,dk)
或者
gk=∑i=0kaidi
又因为
gTk+1gk=∑i=0kaigTk+1di=0(18)
所以等式5,15,16与17得到
βk=gTk+1gk+1gTkgk
上面的原则与定理得到了下面的算法:
算法1:共轭梯度算法步骤1输入x0并初始化容忍误差ε步骤2计算g0并令d0=−g0,k=0步骤3输入Hk,即xk处的海森矩阵计算αk=gTkgkdTkHkdk令xk+1=xk+αkdk并计算fk+1=f(xk+1)步骤4如果∥αkdk∥<ε,输出x∗=xk+1,f(x∗)=fk+1算法结束步骤5计算gk+1计算βk=gTk+1gk+1gTkgk生成新的方向dk+1=−gk+1+βkdk令k=k+1然后回到步骤3
对于二维凸二次问题,上述算法得到的解的轨迹如图1所示,注意x1=x0−α0g0,其中α0是最小化f(x0−αg0)的α值,与最速下降法一样。
共轭梯度算法的主要优点为:
- 梯度是有限的,并且与前面的方向向量线性无关,当然除了问题的解本身外。
- 计算相对简单,相比最速下降法稍微复杂一点点。
- 不需要线搜索。
- 对于凸二次问题,该算法n次迭代就能收敛。
- 第一次选的方向就是最速下降的方向,所以第一次得带就能很好的减少f(x)。
- 因为方向是基于梯度信息的,当应用到非二次问题时,该算法有较好的收敛性。
- 不需要考虑海森矩阵的逆。
该算法的缺点为:
- 需要存储,计算海森矩阵。
- 对于非二次问题,存在极个别情况会无法达到收敛。

图1