《共轭梯度法》读书笔记(二)——共轭方向法

时间:2024-05-23 12:09:45

最速下降法的缺陷

上一节中已经提到了最速下降法容易走出“之”字形的路线,这些路线方向虽然都是梯度,但非常类似。如果每次的路线都是彼此正交的,那么即使没有选择局部变化率最大的梯度,也能够很快收敛到正解,如下图。

《共轭梯度法》读书笔记(二)——共轭方向法
共轭方向法的intuition

这就引出了共轭方向法 (Conjugate Directions)

一种理想但无法实现的共轭梯度法

我们选择一组正交的搜索方向,记为dj(j=1...n),每次迭代时,仅在一个dj方向上迭代,即

x(i+1)=x(i)+αdi

我们希望一次迭代完后,以后的迭代再也不需要在di方向上修正了,因此,我们希望diTe(i+1)=0,继续计算,得到

diT(e(i)+αdi)=0α=diTe(i)diTdi

然而,这种算法是不可能的,因为e(i)是未知量(假如我们知道了e(i),那正解也就得到了),α无法因此求出。

修正

与之前选择一组正交基相比,这里我们选择一组基于矩阵A的A正交基,记为dj(j=1...n),即diTAdj=0(ij)。下图可以直观地看到A正交基的样子,虽然它们不正交,但如果A变换为单位阵,则它们就可以正交了(见下右图)。

《共轭梯度法》读书笔记(二)——共轭方向法
A正交基

类似的,我们求解diTAe(i+1)=0,继续计算,得到

diTA(e(i)+αdi)=0diTr(i)+αdiTAdi=0α=diTr(i)diTAdi

注意到,如果把di替换为r(i),那么α的表达式将和最速下降法是一致的,这表明共轭方向法也是在di的方向上找到了一个最小值。这是符合我们预期的。
共轭方向法的收敛性证明比较简单,因为一共n个方向,每次都消除了一个方向上的误差,经过n轮迭代,就一定可以得到正解。
类似最速下降法,通过对残差的迭代,可以加速迭代过程,即

r(i+1)=Ae(i+1)=A(e(i)+αdi)=r(i)αAdi

寻找一组A正交基

假设我们已经有了一组线性无关的向量,记为u1,...,un,那么使用施密特正交化法 (Gram-Schmidt Conjugation),就能得到一组正交基作为下降方向d1,...,dn。过程如下,首先d1=u1,然后对于di,有

di=uik=1i1βikdk

由于di和任一dj(ji)均正交,因此

diTAdj=uiTAdjk=1i1βikdkTAdj0=uiTAdjβijdjTAdjβ=uiTAdjdjTAdj

缺陷

虽然共轭梯度法只需要n步就能保证收敛,但单次迭代有时会非常耗时(主要是使用施密特正交化法),因此它并不太使用。一个例子是,假如我们取坐标轴作为一组正交基执行共轭方向法,那么每次消去一个方向上的误差和高斯消元法是完全一致的。

参考文献

  • 《An Introduction to the Conjugate Gradient Method Without the Agonizing Pain》