共轭梯度法(Conjugate Gradients)(1)

最近在看ATOM,作者在线训练了一个分类器,用的方法是高斯牛顿法共轭梯度法。看不懂,于是恶补了一波。学习这些东西并不难,只是难找到学习资料。简单地搜索了一下,许多文章都是一堆公式,这谁看得懂啊。

后来找到一篇《An Introduction to the Conjugate Gradient Method Without the Agonizing Pain》,解惑了。
为什么中文没有这么良心的资料呢?英文看着费劲,于是翻译过来搬到自己的博客,以便回顾。

由于原文比较长,一共 共轭梯度法(Conjugate Gradients)(1) 页的PDF,所以这里分成几个部分来写。

目录
共轭梯度法(Conjugate Gradients)(1)
共轭梯度法(Conjugate Gradients)(2)
共轭梯度法(Conjugate Gradients)(3)
共轭梯度法(Conjugate Gradients)(4)
共轭梯度法(Conjugate Gradients)(5)


Abstract (摘要)

共轭梯度法Conjugate Gradient Method)是求解稀疏线性方程组最棒的迭代方法。然鹅,许多教科书上面既没有插图,也没有解说,学生无法得到直观的理解。时至今日(今日指1993年,因为这份教材是1993年发表的),仍然能看到这些教材的受害者们在图书馆的角落里毫无意义地琢磨。只有少数的大佬破译了这些正常人看不懂的教材,有深刻地几何上的理解。然而,共轭梯度法只是一些简单的、优雅的思路的组合,像你一样的读者都可以毫不费力气学会。

本文介绍了二次型quadratic forms),用于推导最速下降Steepest Descent),共轭方向Conjugate Directions)和共轭梯度Conjugate Gradients)。

解释了特征向量Eigenvectors),用于检验雅可比方法Jacobi Method)、最速下降、共轭梯度的收敛性。

还有其它的主题,包括预处理preconditioning)和非线性共轭梯度法nonlinear Conjugate Gradient Method


本文的结构:


1. Introduction(简介)

当我决定准备学共轭梯度法Conjugate Gradient Method, 简称 CG)的时候,读了 共轭梯度法(Conjugate Gradients)(1) 种不同的版本,恕我直言,一个都看不懂。很多都是简单地给出公式,证明了一下它的性质。没有任何直观解释,没有告诉你 CG 是怎么来的,怎么发明的。我感到沮丧,于是写下了这篇文章,希望你能从中学到丰富和优雅的算法,而不是被大量的公式困惑。

CG 是一种最常用的迭代方法,用于求解大型线性方程组,对于这种形式的问题非常有效:共轭梯度法(Conjugate Gradients)(1) 其中:
共轭梯度法(Conjugate Gradients)(1) 是未知向量,共轭梯度法(Conjugate Gradients)(1) 是已知向量。
共轭梯度法(Conjugate Gradients)(1) 是已知的 方形square)、对称symmetric)、正定positive-definite)矩阵。
(如果你忘了什么是“正定”,不用担心,我会先给你回顾一下。)

这样的系统会出现在许多重要场景中,如求解偏微分方程(partial differential equations)的有限差分(finite difference)和有限元(finite element)法、结构分析、电路分析和你的数学作业。

CG 这样的迭代方法适合用稀疏(sparse)矩阵。如果 共轭梯度法(Conjugate Gradients)(1) 是稠密(dense)矩阵,最好的方法可能是对 共轭梯度法(Conjugate Gradients)(1) 进行因式分解(factor),通过反代入来求解方程。对稠密矩阵 共轭梯度法(Conjugate Gradients)(1) 做因式分解的耗时和迭代求解的耗时大致相同。一旦对 共轭梯度法(Conjugate Gradients)(1) 进行因式分解后,就可以通过多个 共轭梯度法(Conjugate Gradients)(1) 的值快速求解。稠密矩阵和大一点的稀疏矩阵相比,占的内存差不多。稀疏的 共轭梯度法(Conjugate Gradients)(1) 的三角因子通常比 共轭梯度法(Conjugate Gradients)(1) 本身有更多的非零元素。由于内存限制,因式分解不太行,时间开销也很大,即使是反求解步骤也可能比迭代解法要慢。另外一方面,绝大多数迭代法稀疏矩阵不占内存速度快

下面开始,我就当作你已经学过线性代数(linear algebra),对矩阵乘法(matrix multiplication)和线性无关(linear independence)等概念都很熟悉,尽管那些特征值特征向量什么的可能已经不太记得了。我会尽量清楚地讲解 CG 的概念。


2. Notation(标记)

共轭梯度法(Conjugate Gradients)(1) 除了一些特例,这里一般用大写字母表示矩阵matrix),小写字母表示向量vector),希腊字母表示标量scalar)。

   所以 共轭梯度法(Conjugate Gradients)(1) 是一个 共轭梯度法(Conjugate Gradients)(1) 的矩阵,共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1) 是向量(同时也是 共轭梯度法(Conjugate Gradients)(1) 矩阵)。公式(1) 的完整写法:
共轭梯度法(Conjugate Gradients)(1)



共轭梯度法(Conjugate Gradients)(1) 两个向量的内积inner product)写成 共轭梯度法(Conjugate Gradients)(1),可以用标量的和 共轭梯度法(Conjugate Gradients)(1) 来表示。

   注意这里 共轭梯度法(Conjugate Gradients)(1)。 如果 共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1)正交orthogonal)的,则 共轭梯度法(Conjugate Gradients)(1)

共轭梯度法(Conjugate Gradients)(1)

   一般来说,这些运算会得到 共轭梯度法(Conjugate Gradients)(1) 的矩阵。像 共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1) 这种,运算结果是一个标量值。



共轭梯度法(Conjugate Gradients)(1) 对于任意非零向量 共轭梯度法(Conjugate Gradients)(1),如果下面的 公式(2) 成立,则矩阵 共轭梯度法(Conjugate Gradients)(1)正定positive-definite)的:
共轭梯度法(Conjugate Gradients)(1)    这可能对你来说没什么意义,但是不要感到难过。
   因为它不是一种很直观的概念,很难去想像一个正定和非正定的矩阵看起来有什么不同。
   当我们看到它怎么对二次型的造成影响时,你就会对“正定”产生感觉了。


共轭梯度法(Conjugate Gradients)(1) 最后,还有一些基本的定义:
共轭梯度法(Conjugate Gradients)(1)


3. The Quadratic Form(二次型)

二次型quadratic form)简单来说是一个标量。
一个向量的二次型方程具有以下形式:
共轭梯度法(Conjugate Gradients)(1)

其中 共轭梯度法(Conjugate Gradients)(1) 是一个矩阵,共轭梯度法(Conjugate Gradients)(1) 是一个向量,共轭梯度法(Conjugate Gradients)(1) 是一个标量常数。

如果 共轭梯度法(Conjugate Gradients)(1)对称symmetric) 且正定positive-definite),则 共轭梯度法(Conjugate Gradients)(1)最小化问题等同于求解 共轭梯度法(Conjugate Gradients)(1)

本文的所有例子都基于下面的值来讲解:
共轭梯度法(Conjugate Gradients)(1)

可以把 (4) 代入 (3) 得到:
共轭梯度法(Conjugate Gradients)(1)
所以二次型其实是 共轭梯度法(Conjugate Gradients)(1) 个变量的二次齐次多项式
再举一个例子,当有 共轭梯度法(Conjugate Gradients)(1) 个变量时,二次型大概像这样子:共轭梯度法(Conjugate Gradients)(1)

方程组 共轭梯度法(Conjugate Gradients)(1)图(1)所示。
通常来说,方程的解 共轭梯度法(Conjugate Gradients)(1) 处于 共轭梯度法(Conjugate Gradients)(1) 维超平面相交的地方,这些相交的位置维度是 共轭梯度法(Conjugate Gradients)(1)
(直线相交于点,平面相交于线,共轭梯度法(Conjugate Gradients)(1) 维相交于面,共轭梯度法(Conjugate Gradients)(1))。

(图1)

对于 共轭梯度法(Conjugate Gradients)(1) 这个问题 ,方程的解 共轭梯度法(Conjugate Gradients)(1),也就是 图(1) 两条直线的交点。

对应的二次型 共轭梯度法(Conjugate Gradients)(1) ,它的曲线如图(2)所示。

共轭梯度法(Conjugate Gradients)(1) 的解是 共轭梯度法(Conjugate Gradients)(1) 的最小值的点。

(图2)

共轭梯度法(Conjugate Gradients)(1)等高线contour plot)如图(3)所示。

(图3)

由于 共轭梯度法(Conjugate Gradients)(1) 是正定的,所以函数 共轭梯度法(Conjugate Gradients)(1) 的形状是一个抛物碗状。

二次型的梯度(gradient)由以下式子而来:
共轭梯度法(Conjugate Gradients)(1)

梯度是一个向量场,对于每一个点 共轭梯度法(Conjugate Gradients)(1),它指向 共轭梯度法(Conjugate Gradients)(1) 增大得最快的方向。
图(4) 展示了 式子(3) 的梯度,其中具体的参数如 式子(4) 所示。

(图4)

在碗状的底部,梯度为 共轭梯度法(Conjugate Gradients)(1)。因此令 共轭梯度法(Conjugate Gradients)(1) 可以最小化 共轭梯度法(Conjugate Gradients)(1)

应用 式子(5) 来求导,可以得到: 共轭梯度法(Conjugate Gradients)(1) 如果 共轭梯度法(Conjugate Gradients)(1) 是对称的,式子会被化简为 共轭梯度法(Conjugate Gradients)(1)因为此时 共轭梯度法(Conjugate Gradients)(1)

梯度设为 共轭梯度法(Conjugate Gradients)(1),就能得到 式子(1),也就是我们要求解的线性方程组。
共轭梯度法(Conjugate Gradients)(1) 的解就是 共轭梯度法(Conjugate Gradients)(1) 的关键点。如果 共轭梯度法(Conjugate Gradients)(1) 是正定且对称的,则这个解能使 共轭梯度法(Conjugate Gradients)(1) 最小化。

所以共轭梯度法(Conjugate Gradients)(1) 的解 共轭梯度法(Conjugate Gradients)(1) 能使 共轭梯度法(Conjugate Gradients)(1) 最小。
如果 共轭梯度法(Conjugate Gradients)(1) 不是 正定 的,从 式子(6) 可知用 CG 可以求解方程组 共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1) 因为 共轭梯度法(Conjugate Gradients)(1) 是对称的 共轭梯度法(Conjugate Gradients)(1)



【附录C1】
假设 共轭梯度法(Conjugate Gradients)(1) 是对称的。
共轭梯度法(Conjugate Gradients)(1) 满足 共轭梯度法(Conjugate Gradients)(1),并且能使二次型(式子(3)) 最小;
共轭梯度法(Conjugate Gradients)(1) 为误差项;
则:
共轭梯度法(Conjugate Gradients)(1)
如果 共轭梯度法(Conjugate Gradients)(1) 是正定的,则对于任意 共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1),因此 共轭梯度法(Conjugate Gradients)(1) 能最小化 共轭梯度法(Conjugate Gradients)(1)

为什么 对称正定 的矩阵有这样的性质? 可以考虑函数 共轭梯度法(Conjugate Gradients)(1) 上任意一点 共轭梯度法(Conjugate Gradients)(1) ,和它的解 共轭梯度法(Conjugate Gradients)(1) 之间的关系。

如果 A 是对称的(无论正定与否),由 式子(3)附录C1,令 共轭梯度法(Conjugate Gradients)(1) 可得:共轭梯度法(Conjugate Gradients)(1)

如果此时 共轭梯度法(Conjugate Gradients)(1) 又能正定的话,由 式子(2) 得知对于任意 共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1),所以一定有 共轭梯度法(Conjugate Gradients)(1),所以 共轭梯度法(Conjugate Gradients)(1) 是全局最小。



正定positive-definite) 矩阵到底意味着什么?最直观的感受就是,共轭梯度法(Conjugate Gradients)(1) 的图形是一个碗状。
如果 共轭梯度法(Conjugate Gradients)(1)非正定 的,那么有以下几种可能:

(图5)

共轭梯度法(Conjugate Gradients)(1) 负定negative-definite)矩阵。相当于对正定取反,如 图(5)b
共轭梯度法(Conjugate Gradients)(1) 奇异singular)矩阵。这种情况下不是唯一的,如 图(5)c。解集是一条直线或者超平面,在那里 共轭梯度法(Conjugate Gradients)(1) 具有相同的值。
共轭梯度法(Conjugate Gradients)(1) 如果矩阵 共轭梯度法(Conjugate Gradients)(1) 不属于以上情况,那么 共轭梯度法(Conjugate Gradients)(1) 是一个鞍点saddle point),最速下降法共轭梯度法 都将失效。

式(3) 中的 共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1) 决定碗状的极小值在哪里,但不影响抛物面的形状。


为什么要把线性方程组弄得这么麻烦?
因为下面要讲的 最速下降法共轭梯度法 ,需要基于 图(2) 这种最小化问题,才能进行直观的理解。
而不是研究 图(1) 这种超平面的相交的问题。
(即,把问题转成求 极小值,而不是 找交点


4. The Method of Steepest Descent(最速下降法)

或者叫最陡下降。


我们会从任意点 共轭梯度法(Conjugate Gradients)(1) 开始,滑到碗状面的底部。我们会走到 共轭梯度法(Conjugate Gradients)(1),直到足够接近方程的解 共轭梯度法(Conjugate Gradients)(1)
每走一步的时候,我们要选择 共轭梯度法(Conjugate Gradients)(1) 下降最快的方向,也就是 共轭梯度法(Conjugate Gradients)(1) 的反方向。
根据 式子(7),这个方向就是 共轭梯度法(Conjugate Gradients)(1)

这里再引入一些定义

共轭梯度法(Conjugate Gradients)(1) 误差error共轭梯度法(Conjugate Gradients)(1)
   表示与 有多远。(这个解叫做 精确解(exact solution)

共轭梯度法(Conjugate Gradients)(1) 残差residual共轭梯度法(Conjugate Gradients)(1)
   表示与正确值 共轭梯度法(Conjugate Gradients)(1) 有多远。

容易发现,残差 可以由 误差 变换得来: 共轭梯度法(Conjugate Gradients)(1)   共轭梯度法(Conjugate Gradients)(1)

误差反映的是变量的层面,残差描述的是函数值的层面,所以通过 共轭梯度法(Conjugate Gradients)(1) 从变量空间转换到函数值的空间。

更重要的是: 共轭梯度法(Conjugate Gradients)(1) 你可以认为 残差 共轭梯度法(Conjugate Gradients)(1)最陡下降的方向 (原函数的导数的反方向)
(这里也很容易理解,因为向量是有方向的,它反映了函数值和真实值之间的距离,同时方向也指向真实值)
   对于非线性问题,我们用的就是这一种定义。
   所以每当你看到残差 共轭梯度法(Conjugate Gradients)(1),请记住它是最速下降的方向


假设我们从 共轭梯度法(Conjugate Gradients)(1) 开始,共轭梯度法(Conjugate Gradients)(1)

(图6)

共轭梯度法(Conjugate Gradients)(1) 步,我们沿着最陡方向走 共轭梯度法(Conjugate Gradients)(1) 步,落在 图(6)a 中的实线的某处。
换句话来讲,我们会选择这样一个点:共轭梯度法(Conjugate Gradients)(1)问题是,这一步要迈多大呢?(可以把 共轭梯度法(Conjugate Gradients)(1) 看做学习率)

线搜索line search)是这样一种过程:沿着一条线选择一个 共轭梯度法(Conjugate Gradients)(1),使得 共轭梯度法(Conjugate Gradients)(1) 最小化。
图(6)b :竖直平面和碗状曲面相交于一条横切线,我们要的点在这条线上。
图(6)c :是这条横切线(从这个视角来看是抛物线)。那么在抛物线的底部,共轭梯度法(Conjugate Gradients)(1) 的值是多少呢?

由基本推导有,当方向导数directional derivative共轭梯度法(Conjugate Gradients)(1) 时,共轭梯度法(Conjugate Gradients)(1) 能使 共轭梯度法(Conjugate Gradients)(1) 最小。

根据链式求导法则:共轭梯度法(Conjugate Gradients)(1)

(关于求导的方法可以看[这里]或者[这里]
为什么 共轭梯度法(Conjugate Gradients)(1),因为根据 式子(9)共轭梯度法(Conjugate Gradients)(1),把 共轭梯度法(Conjugate Gradients)(1) 代进去。

令这条式子为 共轭梯度法(Conjugate Gradients)(1),我们会发现这个 共轭梯度法(Conjugate Gradients)(1) 应该使 共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1) 正交。见 图(6)d

所以,为什么我们期望这些向量正交,这就是最直观的原因 。☝↑☝



(图7)

图(7) 展示了搜索线上不同点的梯度向量。虚线是这些梯度向量在搜索线上的投影。这些虚线的大小等同于 图(6)c 中抛物线上每个点的斜率。这些投影表示当你在这条搜索线上移动时,共轭梯度法(Conjugate Gradients)(1) 的增长率。当投影为 共轭梯度法(Conjugate Gradients)(1) 时,共轭梯度法(Conjugate Gradients)(1) 最小,此时的 梯度搜索线 正交

为了确定 共轭梯度法(Conjugate Gradients)(1),由于又有 共轭梯度法(Conjugate Gradients)(1),于是有:
共轭梯度法(Conjugate Gradients)(1)

结合起来,最陡下降法Steepest Descent)就是:
共轭梯度法(Conjugate Gradients)(1) 共轭梯度法(Conjugate Gradients)(1) 共轭梯度法(Conjugate Gradients)(1)

(图8)

图(8) 所示,一直迭代,直到收敛。
由于每一次的梯度都和上一次的正交,所以这个路径呈“之”字型。

上面的算法,要在每轮迭代中做两次矩阵-向量的乘法,不过好在有一个可以被消掉。
式子(12) 两边同时左乘 共轭梯度法(Conjugate Gradients)(1),再加 共轭梯度法(Conjugate Gradients)(1),得:
共轭梯度法(Conjugate Gradients)(1)
尽管 式子(10) 仍然要算一次 共轭梯度法(Conjugate Gradients)(1),不过之后每轮迭代都可以用 式子(13) 了。
式子(11)式子(13) 中的乘法 共轭梯度法(Conjugate Gradients)(1) 只需要被计算一次。

这个迭代的缺点是, 公式(13) 生成的序列没有从 共轭梯度法(Conjugate Gradients)(1) 的值里得到任何回馈。因此对浮点舍入造成的累积误差会使 共轭梯度法(Conjugate Gradients)(1) 收敛至 共轭梯度法(Conjugate Gradients)(1) 附近的点,而无法真正地收敛到 共轭梯度法(Conjugate Gradients)(1)。这种影响可以通过周期性地使用 式子(10) 来重新计算正确的残差来避免。

在分析最陡下降的收敛性之前,还要先讲一下特征向量eigenvectors)的知识,确保你对特征向量有深刻的理解。


5. Thinking with Eigenvectors and Eigenvalues(特征向量和特征值的思考)

上完线性代数课程后,我对特征向量和特征值了如指掌。如果你的老师和我一样,你会记得自己解决了一些关于特征值的问题,但你从来没有真正理解过它们。不幸的是,如果没有对它们的直观理解,CG 也没有意义。如果你已经很有天赋,可以跳过这一节。

特征向量eigenvectors)主要用来当做分析工具,最陡下降法和共轭梯度法不用计算特征向量的特征值。


5.1 Eigen do it if I try

矩阵 共轭梯度法(Conjugate Gradients)(1)特征向量 共轭梯度法(Conjugate Gradients)(1) 是一个非零的向量,用 共轭梯度法(Conjugate Gradients)(1) 乘以它的时候,不会发生旋转(只可能掉头)。
特征向量 共轭梯度法(Conjugate Gradients)(1) 的长度可能会变,或者反方向,但不会转。

也就是说,存在一些标量常数 共轭梯度法(Conjugate Gradients)(1) 使得 共轭梯度法(Conjugate Gradients)(1)
共轭梯度法(Conjugate Gradients)(1) 就是 共轭梯度法(Conjugate Gradients)(1)特征值eigenvalue)。

为什么要讲这个,因为迭代法通常会用 共轭梯度法(Conjugate Gradients)(1) 一次又一次地乘上特征向量,而这时只会发生两种情况:

(1) 如果特征值 共轭梯度法(Conjugate Gradients)(1),随着 共轭梯度法(Conjugate Gradients)(1) 的迭代, 共轭梯度法(Conjugate Gradients)(1) 会消失。(如 图(9)

(图9)

(2) 如果特征值 共轭梯度法(Conjugate Gradients)(1),随着 共轭梯度法(Conjugate Gradients)(1) 的迭代, 共轭梯度法(Conjugate Gradients)(1) 会增大到无穷。(如 图(10)

(图10)


如果 共轭梯度法(Conjugate Gradients)(1) 是对称的(然而一般都不是),一般会存在一组 共轭梯度法(Conjugate Gradients)(1)线性无关特征向量共轭梯度法(Conjugate Gradients)(1)
这组向量不是唯一的,因为可以用任意的非零常数对它们缩放。

每个特征向量都有对应的特征值共轭梯度法(Conjugate Gradients)(1)
对于确定的矩阵,特征值是唯一的。
特征值可能彼此相等,也可能不相等,例如单位矩阵 共轭梯度法(Conjugate Gradients)(1) 的特征值都是 共轭梯度法(Conjugate Gradients)(1),所有非零向量都是 共轭梯度法(Conjugate Gradients)(1) 的特征向量。

如果 共轭梯度法(Conjugate Gradients)(1) 乘以一个向量,而该向量不是特征向量呢?
在理解线性代数时有一个非常重要的技巧把该向量拆成 多个向量的和 ,这些多个向量特性是已知的。

考虑一组特征向量 共轭梯度法(Conjugate Gradients)(1),构成 共轭梯度法(Conjugate Gradients)(1) 维空间 共轭梯度法(Conjugate Gradients)(1) 的基(因为对称矩阵 共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1) 个线性无关的特征向量)。
在该空间中其它任意的 共轭梯度法(Conjugate Gradients)(1) 维向量都可以用 共轭梯度法(Conjugate Gradients)(1) 的线性组合来表示。
由于矩阵-向量的乘法满足 分配律,所以可以分别检查 共轭梯度法(Conjugate Gradients)(1) 对每个特征向量的影响。

(图11)

图(11) 中,向量 共轭梯度法(Conjugate Gradients)(1) 被表示为特征向量 共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1) 的和。
共轭梯度法(Conjugate Gradients)(1) 乘以 共轭梯度法(Conjugate Gradients)(1),等价于分别乘以 共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1) 再加起来。
在迭代过程中有 共轭梯度法(Conjugate Gradients)(1)

如果特征值都小于 共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1) 会收敛至 共轭梯度法(Conjugate Gradients)(1),因为迭代地乘 共轭梯度法(Conjugate Gradients)(1) 后,组成 共轭梯度法(Conjugate Gradients)(1) 的特征向量都趋于 共轭梯度法(Conjugate Gradients)(1) 了。
如果其中一个特征值大于 共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1) 将发散至无穷。

这也是为什么做数值分析的很重视一个矩阵的光谱半径spectral radius):共轭梯度法(Conjugate Gradients)(1)

如果我们希望 共轭梯度法(Conjugate Gradients)(1) 快速收敛到 共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1) 应当小于 共轭梯度法(Conjugate Gradients)(1),越小越好。



值得一提的是,存在一类非对称矩阵,不具备完整的 共轭梯度法(Conjugate Gradients)(1) 个线性无关特征向量。
这类矩阵被称为缺陷矩阵defective)。关于它的细节很难在本文讲清楚,不过可以通过广义特征向量generalized eigenvectors)和 广义特征值generalized eigenvalues)来分析缺陷矩阵的性质。共轭梯度法(Conjugate Gradients)(1) 趋于 共轭梯度法(Conjugate Gradients)(1) 的条件是:当且仅当所有广义特征值都于 共轭梯度法(Conjugate Gradients)(1)。但这个证明起来很难。

下面是一个有用的事实:正定矩阵特征值都是正数
可以用特征值的定义来证明:共轭梯度法(Conjugate Gradients)(1)
根据正定矩阵的定义,对于非零向量 共轭梯度法(Conjugate Gradients)(1),有 共轭梯度法(Conjugate Gradients)(1) 是正数,而 共轭梯度法(Conjugate Gradients)(1),所以 共轭梯度法(Conjugate Gradients)(1) 必须大于为正。


5.2 Jacobi iterations(雅克比迭代)

当然,总是收敛到 共轭梯度法(Conjugate Gradients)(1) 的过程不会帮助你吸引到朋友。
考虑一个更有用的过程:用雅克比Jacobi Method)方法求解 共轭梯度法(Conjugate Gradients)(1)

矩阵 共轭梯度法(Conjugate Gradients)(1) 被拆成两部分:
(1) 共轭梯度法(Conjugate Gradients)(1),对角线上的元素与 共轭梯度法(Conjugate Gradients)(1) 的对角线相同,其余部分为 共轭梯度法(Conjugate Gradients)(1)
(2) 共轭梯度法(Conjugate Gradients)(1),对角线上的元素为 共轭梯度法(Conjugate Gradients)(1),其余部分与 共轭梯度法(Conjugate Gradients)(1) 相同。
于是 共轭梯度法(Conjugate Gradients)(1)

我们推导出雅克比法
共轭梯度法(Conjugate Gradients)(1)

其中 共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1)

由于 共轭梯度法(Conjugate Gradients)(1) 是对角矩阵,很容易求逆。

可以通过下面的递归式,把 式子(14) 的恒等式转为迭代法:共轭梯度法(Conjugate Gradients)(1)

给定起始向量 共轭梯度法(Conjugate Gradients)(1),这条公式生成了一序列的向量。我们希望每个连续的向量都比最后一个更接近解 共轭梯度法(Conjugate Gradients)(1)
共轭梯度法(Conjugate Gradients)(1) 称为 式子(15)驻点stationary point)。因为,如果 共轭梯度法(Conjugate Gradients)(1),则 共轭梯度法(Conjugate Gradients)(1) 总是等于 共轭梯度法(Conjugate Gradients)(1)。(也就是到达 共轭梯度法(Conjugate Gradients)(1) 之后,再迭代也不动了)

是的,这个推导可能对你来说过于直接。
除了 式子(14) 以外,我们其实可以为 共轭梯度法(Conjugate Gradients)(1) 形成任意数量的恒等式。
事实上,简单地把 共轭梯度法(Conjugate Gradients)(1) 分成不同的东西,即选择不同的 共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1),我们可以推导出高斯-赛德尔 Gauss-Seidel method)方法,或者其变种:SORSuccessive Over-Relaxation)。我们希望的是,所选择的矩阵使 共轭梯度法(Conjugate Gradients)(1) 具有小的光谱半径。所以为了简单起见,这里直接选择了雅克比切法。


假设我们从任意的 共轭梯度法(Conjugate Gradients)(1) 出发。对于每次迭代,用 共轭梯度法(Conjugate Gradients)(1) 乘以这个向量,然后加上 共轭梯度法(Conjugate Gradients)(1)。到底每次迭代在做什么呢?

同样地,我们可以把一个向量看成是多个已知向量的和
每次迭代 共轭梯度法(Conjugate Gradients)(1) 当做是精确解 共轭梯度法(Conjugate Gradients)(1)误差项 共轭梯度法(Conjugate Gradients)(1)。于是 式子(15) 就变成了:
共轭梯度法(Conjugate Gradients)(1) 共轭梯度法(Conjugate Gradients)(1)

每次迭代都不影响 共轭梯度法(Conjugate Gradients)(1) 的 “正确部分”(因为 共轭梯度法(Conjugate Gradients)(1) 是一个驻点);但每次迭代影响误差项
显然,由 式子(16) 得知,如果 共轭梯度法(Conjugate Gradients)(1),则随着 共轭梯度法(Conjugate Gradients)(1) 的增大, 共轭梯度法(Conjugate Gradients)(1) 将趋于 共轭梯度法(Conjugate Gradients)(1)
因此,初始向量 共轭梯度法(Conjugate Gradients)(1) 不会影响必将出现的结果!

当然, 共轭梯度法(Conjugate Gradients)(1) 的选择会影响迭代次数。然而,这种影响远远小于光谱半径 共轭梯度法(Conjugate Gradients)(1) 的影响,是它决定了收敛的速度。
假设 共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1) 的特征向量,对应的特征值是最大的(即 共轭梯度法(Conjugate Gradients)(1))。
如果初始误差 共轭梯度法(Conjugate Gradients)(1) 用特征向量的线性组合来表示,它的成分中包含 共轭梯度法(Conjugate Gradients)(1) 的方向,这部分将会是收敛得最慢的。(因为 共轭梯度法(Conjugate Gradients)(1) 对应的特征值是 共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1) 是所有特征值里面最大的,所以 共轭梯度法(Conjugate Gradients)(1) 缩小的最慢,所以这个方向收敛得很慢)

共轭梯度法(Conjugate Gradients)(1) 通常都不是对称的(就算 共轭梯度法(Conjugate Gradients)(1) 是对称的),还可能是缺陷矩阵。然而,雅克比方法的收敛速度很大程度上取决于 共轭梯度法(Conjugate Gradients)(1),而 共轭梯度法(Conjugate Gradients)(1) 又是由 共轭梯度法(Conjugate Gradients)(1) 决定的。雅克比方法不能对所有的 共轭梯度法(Conjugate Gradients)(1) 收敛,即使是正定的 共轭梯度法(Conjugate Gradients)(1)


5.3 A Concrete Example(一个具体例子)

为了证明这些想法,我来求解由 式子(4) 指定的实例。
首先,我们需要求解特征向量和特征值。
根据定义,对于具有特征值 共轭梯度法(Conjugate Gradients)(1) 的特征向量 共轭梯度法(Conjugate Gradients)(1),有:共轭梯度法(Conjugate Gradients)(1)
由于特征向量非零,则 共轭梯度法(Conjugate Gradients)(1) 一定是奇异矩阵,所以:共轭梯度法(Conjugate Gradients)(1)

共轭梯度法(Conjugate Gradients)(1) 的行列式称为特征多项式characteristic polynomial),是 共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1) 次多项式,其平方项都是特征值。
代入 式子(4) 的值,则 共轭梯度法(Conjugate Gradients)(1) 的特征多项式为:共轭梯度法(Conjugate Gradients)(1)

因此特征值为 共轭梯度法(Conjugate Gradients)(1)共轭梯度法(Conjugate Gradients)(1)。(有两个特征向量)

共轭梯度法(Conjugate Gradients)(1) 个特征向量:
为了找到到关于 共轭梯度法(Conjugate Gradients)(1) 的特征向量:共轭梯度法(Conjugate Gradients)(1)
共轭梯度法(Conjugate Gradients)(1) 的解就是一个特征向量:共轭梯度法(Conjugate Gradients)(1)

共轭梯度法(Conjugate Gradients)(1) 的特征向量为 共轭梯度法(Conjugate Gradients)(1)

共轭梯度法(Conjugate Gradients)(1) 个特征向量:
同样地,可以找到 共轭梯度法(Conjugate Gradients)(1) 的特征向量为 共轭梯度法(Conjugate Gradients)(1)

(图12)

图(12) 中,我们可以看到特征向量和椭圆的轴一致,特征值较大的那个特征向量对应更陡的斜坡(slope)。
(负的特征值表示 共轭梯度法(Conjugate Gradients)(1) 沿着该轴减小,如 图(5)b图(5)d

现在再来看实际中的雅克比方法。同样采用 式子(4) 中的数值,我们有:
共轭梯度法(Conjugate Gradients)(1)

所以矩阵 共轭梯度法(Conjugate Gradients)(1),求解 共轭梯度法(Conjugate Gradients)(1) 的特征值特征向量:

有对应于特征值 共轭梯度法(Conjugate Gradients)(1) 的特征向量 共轭梯度法(Conjugate Gradients)(1),对应于特征值 共轭梯度法(Conjugate Gradients)(1) 的特征向量 共轭梯度法(Conjugate Gradients)(1)

这两个特征向量如 图(13)a 所示。
注意,共轭梯度法(Conjugate Gradients)(1) 的特征向量与 共轭梯度法(Conjugate Gradients)(1) 的特征向量不重合,与碗状面的轴也无关。

误差项 共轭梯度法(Conjugate Gradients)(1) 表示为 共轭梯度法(Conjugate Gradients)(1) 的特征向量的线性组合。而两个特征向量都小于 共轭梯度法(Conjugate Gradients)(1),并且有一个是负的,所以迭代 共轭梯度法(Conjugate Gradients)(1) 会使特征向量收敛到 共轭梯度法(Conjugate Gradients)(1),同时其中一个特征向量的方向不断地反转,如 图(13)的c,d,e 所示。
误差项 共轭梯度法(Conjugate Gradients)(1) 越来越小,则 共轭梯度法(Conjugate Gradients)(1) 收敛于 共轭梯度法(Conjugate Gradients)(1)
图(13)b 展示了雅克比方法的收敛情况。

(图13)

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年5月3日
下一篇 2023年5月3日

相关推荐