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

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

由于原文比较长,一共 666666 页的PDF,所以这里分成几个部分来写。

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


6. Convergence Analysis of Steepest Descent
(最陡下降的收敛性分析)

6.1 Instant Results(实例结果)

为了理解最速下降的收敛性,先考虑这一种情况:
e(i)e_{(i)}e(i)​ 是一个特征向量 ,特征值是 λe\lambda_{e}λe​
于是,残差 r(i)r_{(i)}r(i)​ 也是是一个特征向量, r(i)=−Ae(i)=−λee(i)r_{(i)} = - A e_{(i)}=-\lambda_e e_{(i)}r(i)​=−Ae(i)​=−λe​e(i)​

由误差的定义: e(i)=x(i)−xe_{(i)} = x_{(i)} - xe(i)​=x(i)​−x ,以及 公式(12):x(i+1)=x(i)+α(i)r(i)x_{(i+1)} = x_{(i)} + \alpha_{(i)}r_{(i)}x(i+1)​=x(i)​+α(i)​r(i)​,有:
e(i+1)=e(i)+r(i)Tr(i)r(i)TAr(i)r(i)=e(i)+r(i)Tr(i)λer(i)Tr(i)(−λee(i))=0\begin{aligned} e_{(i+1)} & = e_{(i)} + \dfrac{r^T_{(i)} r_{(i)} }{ r^T_{(i)} A r_{(i)} } r_{(i)} \\[1.5em] &= e_{(i)} + \dfrac{r^T_{(i)} r_{(i)} }{ \lambda_e r^T_{(i)} r_{(i)} }(-\lambda_e e_{(i)}) \\[1.5em] &= 0 \end{aligned}e(i+1)​​=e(i)​+r(i)T​Ar(i)​r(i)T​r(i)​​r(i)​=e(i)​+λe​r(i)T​r(i)​r(i)T​r(i)​​(−λe​e(i)​)=0​

(图14)

图(14) 展示了为什么走一步就能收敛到精确解。
点 x(i)x_{(i)}x(i)​ 处于椭圆的其中一个轴上,而残差直接指向椭圆的中心,令 α(i)=λe−1\alpha_{(i)} = \lambda_e^{-1}α(i)​=λe−1​ 可以立刻收敛。

对于更一般的分析,我们需要把 e(i)e_{(i)}e(i)​ 表示为特征向量线性组合,并且,要进一步地要求它们是正交的

我们知道,如果 AAA 是对称的,则它存在 nnn 个正交的特征向量。(证明见附录C2)
又由于我们可以任意缩放特征向量,因此这里我们选择的特征向量具有单位长度
于是得到以下有用的性质:
vjTvk={1,j=k,0,j≠k.(17)v_j^T v_k = \left\{ \begin{aligned} 1, & \qquad j=k, \\ 0, & \qquad j \neq k. \end{aligned} \right. \tag{17} vjT​vk​={1,0,​j=k,j​=k.​(17)

把误差项表示为特征向量的线性组合:e(i)=∑j=1nξjvj(18)e_{(i)} = \sum^n_{j=1} \xi_j v_j \tag{18} e(i)​=j=1∑n​ξj​vj​(18)

其中 ξj\xi_jξj​ 是 e(i)e_{(i)}e(i)​ 的第 jjj 个特征向量的长度。

由 公式(17) 和 公式(18),有如下定义:
r(i)=−Ae(i)=−∑jξjλjvj(19)r_{(i)} = -A e_{(i)} = - \sum_j \xi_j \lambda_j v_j \tag{19} r(i)​=−Ae(i)​=−j∑​ξj​λj​vj​(19) ∥e(i)∥2=e(i)Te(i)=∑jξj2(20)\| e_{(i)} \|^2 = e^T_{(i)} e_{(i)} =\sum_j \xi_j^2 \tag{20} ∥e(i)​∥2=e(i)T​e(i)​=j∑​ξj2​(20) e(i)TAe(i)=(∑jξjvjT)(∑jξjλjvj)=∑jξj2λj(21)e^T_{(i)} A e_{(i)} = ( \sum_j \xi_j v_j^T ) (\sum_j \xi_j \lambda_j v_j) = \sum_j \xi^2_j \lambda_j \tag{21} e(i)T​Ae(i)​=(j∑​ξj​vjT​)(j∑​ξj​λj​vj​)=j∑​ξj2​λj​(21) ∥r(i)∥2=r(i)Tr(i)=∑jξj2λj2(22)\| r_{(i)} \|^2 = r^T_{(i)} r_{(i)} =\sum_j \xi_j^2 \lambda_j^2\tag{22} ∥r(i)​∥2=r(i)T​r(i)​=j∑​ξj2​λj2​(22) r(i)TAr(i)=∑jξj2λj3(23)r^T_{(i)} A r_{(i)} =\sum_j \xi_j^2 \lambda_j^3\tag{23} r(i)T​Ar(i)​=j∑​ξj2​λj3​(23)

式子(19) 表明,r(i)r_{(i)}r(i)​ 也能表示为特征向量的和。每个特征向量的长度为 −ξjλj-\xi_j \lambda_j−ξj​λj​。
式子(20) 和 式子(22) 是毕达哥拉斯法则(Pythagoras’ Law)。

下面继续进行分析,由 公式(12) 有:
e(i+1)=e(i)+r(i)Tr(i)r(i)TAr(i)r(i)=e(i)+∑jξj2λj2∑jξj2λj3r(i)(24)\begin{aligned} e_{(i+1)} & = e_{(i)} + \dfrac{r^T_{(i)} r_{(i)} }{ r^T_{(i)} A r_{(i)} } r_{(i)} \\[1.5em] &= e_{(i)} + \dfrac{ \sum_j \xi_j^2 \lambda_j^2 }{ \sum_j \xi_j^2 \lambda_j^3 } r_{(i)} \tag{24} \end{aligned}e(i+1)​​=e(i)​+r(i)T​Ar(i)​r(i)T​r(i)​​r(i)​=e(i)​+∑j​ξj2​λj3​∑j​ξj2​λj2​​r(i)​​(24)

我们在6.1节开头的例子里看到。如果 e(i)e_{(i)}e(i)​ 仅由 111 个特征向量组成,那只要选 α(i)=λe−1\alpha_{(i)} = \lambda_e^{-1}α(i)​=λe−1​,一次就能收敛。

现在假定 e(i)e_{(i)}e(i)​ 是任意的,但所有特征向量的特征值都是 λ\lambdaλ,则 公式(24) 变成:e(i+1)=e(i)+λ2∑jξj2λ3∑jξj2(−λe(i))=0(24)\begin{aligned} e_{(i+1)} & = e_{(i)} + \dfrac{ \lambda^2 \sum_j \xi_j^2 }{ \lambda^3 \sum_j \xi_j^2 } {\large(} -\lambda e_{(i)} {\large)} \\[1.5em] &= 0 \tag{24} \end{aligned}e(i+1)​​=e(i)​+λ3∑j​ξj2​λ2∑j​ξj2​​(−λe(i)​)=0​(24)

(图15)

图(15) 再次展示了为什么可以立即收敛。因为所有特征值都相等,那椭圆就变成了圆形,因此,无论从哪一点开始,残差必定指向圆心。和之前一样,设置 α(i)=λ−1\alpha_{(i)} = \lambda^{-1}α(i)​=λ−1。

然而,如果几个特征值是不相等的、非零的,那就无法选择合适的 α(i)\alpha_{(i)}α(i)​ 来把每一个特征向量都抵消掉,我们的选择就变成了一种妥协。

实际上, 公式(24) 里的分数部分 最好是被看做 特征值 λj−1\lambda_j^{-1}λj−1​ 的加权平均。权重 ξj2\xi_j^2ξj2​ 保证了 e(i)e_{(i)}e(i)​ 中较长的成分(那个特征向量)优先级低。结果就是,在某一次迭代中,e(i)e_{(i)}e(i)​ 中较短的成分(特征向量)可能会增加长度(较长的从来不会被考虑)。因此,最陡下降和共轭梯度被称为粗糙的(roughers)。相比之下,雅克比方法是平滑的(smoother)。最速下降和共轭梯度不是平滑的,尽管大多数数学教材认为平滑。

6.2 General Convergence(一般收敛性)

为了约束最速下降在一般情况下的收敛性,我们定义能量范数(energy norm)∥e∥A=(eTAe)1/2\|e\|_A = (e^T A e)^{1/2}∥e∥A​=(eTAe)1/2
如 图(16) 所示

(图16)

这个范数比欧几里得范数(Euclidean norm)更好用,某种情况下更自然。公式(8) 表明最小化 ∥e(i)∥A\| e_{(i)}\|_A∥e(i)​∥A​ 和最小化 f(x(i))f(x_{(i)})f(x(i)​) 是等价的。对于这个范数我们有:
∥e(i+1)∥A2=e(i+1)TAe(i+1)=(e(i)T+α(i)r(i)T)A(e(i)+α(i)r(i))(by Equation 12)=e(i)TAe(i)+2α(i)r(i)TAe(i)+α(i)2r(i)TAr(i)(by symmetry of A)=∥e(i)∥A2+2r(i)Tr(i)r(i)TAr(i)(−r(i)Tr(i))+(r(i)Tr(i)r(i)TAr(i))2r(i)TAr(i)=∥e(i)∥A2−(r(i)Tr(i))2r(i)TAr(i)=∥e(i)∥A2(1−(r(i)Tr(i))2(r(i)TAr(i))(e(i)TAe(i)))=∥e(i)∥A2(1−(∑jξj2λj2)2(∑jξj2λj3)(∑jξj2λj))(by Identities 21, 22, 23)=∥e(i)∥A2ω2,ω2=1−(∑jξj2λj2)2(∑jξj2λj3)(∑jξj2λj)(25)\begin{aligned} \| e_{(i+1)}\|^2_A &= e_{(i+1)}^T A e_{(i+1)} \\[0.5em] &= ( e_{(i)}^T + \alpha_{(i)}r_{(i)}^T ) A ( e_{(i)} + \alpha_{(i)}r_{(i)} ) \qquad \text{(by Equation 12)} \\[0.5em] &= e_{(i)}^T A e_{(i)} + 2\alpha_{(i)} r_{(i)}^T A e_{(i)} + \alpha_{(i)}^2 r_{(i)}^T A r_{(i)} \qquad \text{(by symmetry of A)} \\[0.5em] &= \| e_{(i)}\|^2_A + 2 \dfrac{r^T_{(i)} r_{(i)} }{ r^T_{(i)} A r_{(i)} } \left( - r_{(i)}^T r_{(i)} \right) + \left( \dfrac{r^T_{(i)} r_{(i)} }{ r^T_{(i)} A r_{(i)} } \right)^2 r^T_{(i)} A r_{(i)} \\[1.5em] &= \| e_{(i)}\|^2_A - \dfrac{ ( r^T_{(i)} r_{(i)} )^2 }{ r^T_{(i)} A r_{(i)} } \\[1.5em] &= \| e_{(i)}\|^2_A \left( 1- \dfrac{ ( r^T_{(i)} r_{(i)} )^2 }{ (r^T_{(i)} A r_{(i)} )(e^T_{(i)} A e_{(i)} ) } \right) \\[1.5em] &= \| e_{(i)}\|^2_A \left( 1- \dfrac{ ( \sum_j \xi_j^2 \lambda_j^2)^2 }{ ( \sum_j \xi_j^2 \lambda_j^3)( \sum_j \xi_j^2 \lambda_j) } \right) \qquad \text{(by Identities 21, 22, 23)} \\[1.5em] &= \| e_{(i)}\|^2_A \omega^2, \qquad \omega^2= 1- \dfrac{ ( \sum_j \xi_j^2 \lambda_j^2)^2 }{ ( \sum_j \xi_j^2 \lambda_j^3)( \sum_j \xi_j^2 \lambda_j) } \end{aligned} \tag{25} ∥e(i+1)​∥A2​​=e(i+1)T​Ae(i+1)​=(e(i)T​+α(i)​r(i)T​)A(e(i)​+α(i)​r(i)​)(by Equation 12)=e(i)T​Ae(i)​+2α(i)​r(i)T​Ae(i)​+α(i)2​r(i)T​Ar(i)​(by symmetry of A)=∥e(i)​∥A2​+2r(i)T​Ar(i)​r(i)T​r(i)​​(−r(i)T​r(i)​)+(r(i)T​Ar(i)​r(i)T​r(i)​​)2r(i)T​Ar(i)​=∥e(i)​∥A2​−r(i)T​Ar(i)​(r(i)T​r(i)​)2​=∥e(i)​∥A2​(1−(r(i)T​Ar(i)​)(e(i)T​Ae(i)​)(r(i)T​r(i)​)2​)=∥e(i)​∥A2​(1−(∑j​ξj2​λj3​)(∑j​ξj2​λj​)(∑j​ξj2​λj2​)2​)(by Identities 21, 22, 23)=∥e(i)​∥A2​ω2,ω2=1−(∑j​ξj2​λj3​)(∑j​ξj2​λj​)(∑j​ξj2​λj2​)2​​(25)

这个分析依赖于找到 ω\omegaω 的一个上界。为了说明权值和特征值是如何影响收敛性的,我来推导一个 n=2n=2n=2 时的结果。(就是有222个特征向量)。

假设 λ1>λ2\lambda_1 > \lambda_2λ1​>λ2​,AAA 的光谱条件数(spectral condition number) 定义为 κ=λ1λ2≥1\kappa= \dfrac{\lambda_1}{\lambda_2} \geq 1κ=λ2​λ1​​≥1。

e(i)e_{(i)}e(i)​ 的斜坡(slope)(它与“由特征向量定义的坐标系统”相关)依赖于起始点。斜坡用 μ=ξ2ξ1\mu = \dfrac{\xi_2}{\xi_1}μ=ξ1​ξ2​​ 表示。

我们有:ω2=1−(ξ12λ12+ξ22λ22)2(ξ12λ1+ξ22λ2)(ξ12λ13+ξ22λ23)=1−(κ2+μ2)2(κ+μ2)(κ3+μ2)(26)\begin{aligned} \omega^2 &= 1 - \dfrac{ (\xi_1^2 \lambda_1^2 + \xi_2^2 \lambda_2^2)^2 }{ (\xi_1^2 \lambda_1 + \xi_2^2\lambda_2) (\xi_1^2\lambda_1^3+ \xi_2^2\lambda_2^3) } \\[1.5em] &= 1- \dfrac{ (\kappa^2 + \mu^2)^2}{ (\kappa + \mu^2) (\kappa^3+\mu^2)} \tag{26} \end{aligned} ω2​=1−(ξ12​λ1​+ξ22​λ2​)(ξ12​λ13​+ξ22​λ23​)(ξ12​λ12​+ξ22​λ22​)2​=1−(κ+μ2)(κ3+μ2)(κ2+μ2)2​​(26)

ω\omegaω 的值决定了最陡下降的收敛速度,图(17) 展示的是它关于 μ\muμ 和 κ\kappaκ 的函数。

(图17)

这张图和我的两个例子相符合。

∙\bullet∙ 如果 e(0)e_{(0)}e(0)​ 是一个特征向量,然后斜坡 μ\muμ 是 000(或者无穷);可已从图中看到,这时 ω\omegaω 为 000,可以立即收敛。

∙\bullet∙ 如果特征值都相等,则条件数(condition number) κ\kappaκ 为 111,于是 ω\omegaω 也是 000。

如果处于 图(17) 的 444 个角落附近,那收敛情况就如 图(18) 所示。

(图18)

这些二次型的坐标系统由它们的特征向量决定,都画在 图(18) 上了。

图(18)a 和 图(18)b 是条件数较大的情况。
如果你幸运地在 图(18)a 那里开始( κ\kappaκ 大,μ\muμ 小),那最陡下降可以很快收敛。
然而,当 κ\kappaκ 很大的时候,通常你会出现在比较糟糕的地方(μ\muμ 也很大),见 图(18)b 。

解释一下:从 图(12) 可以看到,特征值越大的那个方向,越陡峭,梯度越大。
所以 图(18)a 和 图(18)b 两张中, v1v_1v1​ 的特征值都是大于 v2v_2v2​,即 λ1\lambda_1λ1​ > λ2\lambda_2λ2​,所以 κ\kappaκ 大。

μ\muμ 方面:
图(18)a 中 v1v1v1 的长度大于 v2v_2v2​,即 ξ1\xi_1ξ1​ > ξ2\xi_2ξ2​,所以 μ\muμ 小。
图(18)b 中 v1v1v1 的长度小于 v2v_2v2​,即 ξ1\xi_1ξ1​ < ξ2\xi_2ξ2​,所以 μ\muμ 大。

图(18)c 和 图(18)d 中,κ\kappaκ 相对较小(俩特征值差不多),所以二次型接近圆形,无论起点在哪里都能快速收敛。

由于 AAA 是固定的,那 κ\kappaκ 就是常量,经过简单的推导可知,当 μ=±κ\mu = \pm \kappaμ=±κ 时,使得 式子(26) 最大。
在 图(17) 中你可以看到一条微弱的山脊,那就是 μ=±κ\mu = \pm \kappaμ=±κ 时的情况。

(图19)

对于本教程的例子里的 AAA,如果选择了一个最糟糕的起点,那就如 图(19) 所示。这样的起点不止一个,这条直线上都是: ξ2ξ1=±κ\dfrac{\xi_2}{\xi_1} = \pm \kappaξ1​ξ2​​=±κ 。

所以令 μ2=κ2\mu^2 = \kappa^2μ2=κ2,你就能找到 ω\omegaω 的上边界(对应于最糟糕的起点):ω2≤1−4κ4κ5+2κ4+κ3=1−κ5−2κ4+κ3κ5+2κ4+κ3=(κ−1)2(κ+1)2ω2≤κ−1κ+1(27)\begin{aligned} \omega^2 & \leq 1 - \frac{4 \kappa^4}{ \kappa^5 +2\kappa^4 +\kappa^3 } \\[1em] & = 1 - \frac{ \kappa^5 - 2\kappa^4 + \kappa^3}{ \kappa^5 +2\kappa^4 +\kappa^3 } \\[1em] & = \frac{(\kappa - 1)^2}{ (\kappa + 1) ^2} \\[1em] \omega^2 & \leq \frac{ \kappa - 1 }{ \kappa + 1 } \end{aligned} \tag{27} ω2ω2​≤1−κ5+2κ4+κ34κ4​=1−κ5+2κ4+κ3κ5−2κ4+κ3​=(κ+1)2(κ−1)2​≤κ+1κ−1​​(27)

(图20)

式(27) 的不等式如 图(20) 所示,如果矩阵越病态(ill-conditioned)(即条件数 κ\kappaκ 越大),则最陡下降的收敛越慢。
在 9.2节 中证明了当 n>2n>2n>2 时 式子(27) 依然成立。

如果对称且正定的矩阵的条件数被定义为:κ=λmaxλmin\kappa = \frac{\lambda_{max}}{\lambda_{min}} κ=λmin​λmax​​即最大的特征值比最小的特征值,则最速下降的收敛结果为:∥e(i)∥A≤(κ−1κ+1)i∥e(0)∥A(28)\| e_{(i)} \| _A \leq \left( \frac{\kappa -1}{\kappa+1} \right)^i \| e_{(0)} \| _A \tag{28}∥e(i)​∥A​≤(κ+1κ−1​)i∥e(0)​∥A​(28)
f(x(i))−f(x)f(x(0))−f(x)=12e(i)TAe(i)12e(0)TAe(0)(by equation 8)=(κ−1κ+1)2i\begin{aligned} \frac{ f(x_{(i)}) - f(x) }{ f(x_{(0)}) -f(x) } &= \frac{ \frac{1}{2} e_{(i)}^T A e_{(i)} }{ \frac{1}{2} e_{(0)}^T A e_{(0)} } \qquad \text{(by equation 8)} \\[1em] &= \left( \frac{ \kappa - 1 }{ \kappa + 1 } \right)^{2i} \end{aligned} f(x(0)​)−f(x)f(x(i)​)−f(x)​​=21​e(0)T​Ae(0)​21​e(i)T​Ae(i)​​(by equation 8)=(κ+1κ−1​)2i​

7. The Method of Conjugate Directions(共轭方向)

7.1 Conjugacy(共轭性)

最陡下降经常发现它自己走的方向和先前几步的方向相同(见 图(8))。
(最速下降每一步的方向是当前位置的导数的反方向)

那这样会不会好点呢:我们选择其它的方向,并且每次我们迈出步伐时,在该方向上一步到位。
这里有一个想法:我们取一组正交的搜索方向(search directions):d(0),d(1),…,d(n−1)d_{(0)},d_{(1)},\dots,d_{(n-1)}d(0)​,d(1)​,…,d(n−1)​。在每个搜索方向上,我们只需要走 111 步,这一步的长度正好与 xxx 成一条直线。迭代 nnn 步之后就搞定了。

(图21)

图(21) 展示了这一思想,这个例子把 222 个坐标轴当作搜索方向。
第一步(水平方向)在 x1x_1x1​ 的坐标轴上走到了正确的地方;
第二步(竖直方向,x2x_2x2​ 的轴)直接到达终点。
每个方向只需 111 步。

值得注意的是,误差 e(1)e_{(1)}e(1)​ 的方向与搜索方向 d(0)d_{(0)}d(0)​ 是正交的。

总的来说,每一步我们走到的点就是: x(i+1)=x(i)+α(i)d(i)(29)x_{(i+1)} = x_{(i)} + \alpha_{(i)}d_{(i)}\tag{29}x(i+1)​=x(i)​+α(i)​d(i)​(29)

为了找到 α(i)\alpha_{(i)}α(i)​ 的值,利用条件 “e(i+1)e_{(i+1)}e(i+1)​ 应当与 d(i)d_{(i)}d(i)​ 正交” ,于是走完这一步后,再也不需要在 d(i)d_{(i)}d(i)​ 的方向上前进了。利用这个条件,有:d(i)Te(i+1)=0d(i)T(e(i)+α(i)d(i))=0(by Equation 29)α(i)=−d(i)Te(i)d(i)Td(i)(30)\begin{aligned} d_{(i)}^T e_{{(i+1)}} &= 0 \\ d_{(i)}^T ( e_{(i)} + \alpha_{(i)} d_{(i)}) &= 0 \qquad \text{(by Equation 29)} \\[0.5em] \alpha_{(i)} &= - \dfrac{d_{(i)}^T e_{(i)}}{ d_{(i)}^T d_{(i)} } \end{aligned} \tag{30}d(i)T​e(i+1)​d(i)T​(e(i)​+α(i)​d(i)​)α(i)​​=0=0(by Equation 29)=−d(i)T​d(i)​d(i)T​e(i)​​​(30)

很遗憾,我们还有一些东西没有完成。
如果不知道 e(i)e_{(i)}e(i)​,就没办法算 α(i)\alpha_{(i)}α(i)​。
然而,要是知道了 e(i)e_{(i)}e(i)​,那这个问题都已经有解了。

所以,现在的做法是,使搜索方向 AAA-正交(A-orthogonal)。

如果满足: d(i)TAd(j)=0d^T_{(i)} A d_{(j)} = 0d(i)T​Ad(j)​=0 则称向量 d(i)d_{(i)}d(i)​ 和向量 d(j)d_{(j)}d(j)​ 是AAA-正交的。或者叫 共轭(conjugate)。

(图22)

图(22)a 展示了AAA-正交的向量是什么样子。想象这张图片是打印在一个泡泡球上,然后你拽着两端拉它,直到椭圆变成圆形。然后这些向量就成了正交的了,如 图(22)b。

我们现在的要求是,要 e(i+1)e_{(i+1)}e(i+1)​ AAA-正交于 d(i)d_{(i)}d(i)​。见图(23)a。

(图23)

翻译一下 图(23) 的说明:
共轭方向法用 nnn 步就收敛。
图(a):第1步沿着 d0d_{0}d0​ 的方向走,走到最小值点 x(1)x_{(1)}x(1)​。x(1)x_{(1)}x(1)​ 怎么选?在那一点要满足 e(1)e_{(1)}e(1)​ 与 d(0)d_{(0)}d(0)​ AAA-正交。也就是 e(1)TAd(0)=0e_{(1)}^T A d_{(0)} = 0e(1)T​Ad(0)​=0。
图(b):初始误差 e(0)e_{(0)}e(0)​ 可以表示为一组 AAA-正交 的向量(或者叫做组件,components)的和,如图中灰色的线。在共轭方向法中,每走一步,就能消掉其中一个组件。

这个正交性条件恰好等价于,沿着搜索方向 d(i)d_{(i)}d(i)​ 寻找最小点,就像最陡下降那样。

为了看到这一结论,把方向导数设为 000:
ddαf(x(i+1))=0f′(x(i+1))Tddαx(i+1)=0−r(i+1)Td(i)=0d(i)TAe(i+1)=0\begin{aligned} \frac{d}{d\alpha}f\left( x_{(i+1)} \right) &= 0 \\[0.5em] f' \left( x_{(i+1)} \right)^T \frac{d}{d\alpha} x_{(i+1)} &= 0 \\[1em] -r^T_{(i+1)} d_{(i)} &= 0 \\[0.5em] d_{(i)}^T A e_{(i+1)} &= 0 \end{aligned} dαd​f(x(i+1)​)f′(x(i+1)​)Tdαd​x(i+1)​−r(i+1)T​d(i)​d(i)T​Ae(i+1)​​=0=0=0=0​

可以看到 e(i+1)e_{(i+1)}e(i+1)​ 和 d(i)d_{(i)}d(i)​ 是 AAA-正交的。

按照公式(30)的推导过程,再把 e(i+1)=e(i)+α(i)d(i)e_{(i+1)} = e_{(i)} + \alpha_{(i)} d_{(i)}e(i+1)​=e(i)​+α(i)​d(i)​ 代到 d(i)TAe(i+1)=0d_{(i)}^T A e_{(i+1)}=0d(i)T​Ae(i+1)​=0 得:
α(i)=−d(i)TAe(i)d(i)TAd(i)(31)=−d(i)Tr(i)d(i)TAd(i)(32)\begin{aligned} \alpha_{(i)} &= - \dfrac{ d_{(i)}^T A e_{(i)} }{ d_{(i)}^T A d_{(i)} } \qquad \qquad (31)\\[1.5em] &= - \dfrac{ d_{(i)}^T r_{(i)} }{ d_{(i)}^T A d_{(i)} } \qquad \qquad (32) \end{aligned} α(i)​​=−d(i)T​Ad(i)​d(i)T​Ae(i)​​(31)=−d(i)T​Ad(i)​d(i)T​r(i)​​(32)​

不像 公式(30),上面的式子是可以算的。

值得注意的是,要是搜索向量(即搜索方向,ddd)刚好是残差,那这个公式就和最陡下降的公式(见式子(11))一样了。

为了证明确实只需要 nnn 步,我们把误差项 eee 表示为搜索方向 ddd 的线性组合,即:e(0)=∑j=0n−1δjd(j)(33)e_{(0)} = \sum^{n-1}_{j=0} \delta_j d_{(j)} \tag{33} e(0)​=j=0∑n−1​δj​d(j)​(33)

δj\delta_jδj​ 的值可以利用一个数学的技巧来找到。
由于搜索方向是 AAA-正交的,可以对 式(33) 左乘 d(k)TAd_{(k)}^T Ad(k)T​A 来消掉 δj\delta_jδj​:
d(k)TAe(0)=∑jδ(j)d(k)TAd(j)d(k)TAe(0)=δ(k)d(k)TAd(k)(by A-orthogonality of d vectors) δ(k)=d(k)TAe(0)d(k)TAd(k)=d(k)TAe(0)+d(k)TA(∑i=0k−1α(i)d(i))d(k)TAd(k)(by A-orthogonality of d vectors) =d(k)TA(e(0)+∑i=0k−1α(i)d(i))d(k)TAd(k)=d(k)TAe(k)d(k)TAd(k)(by Equation 29) (34)\begin{aligned} d_{(k)}^T A e_{(0)} &= \sum_j \delta_{(j)} d_{(k)}^T A d_{(j)} \\[0.5em] d_{(k)}^T A e_{(0)} &= \delta_{(k)} d_{(k)}^T A d_{(k)} \qquad \text{(by A-orthogonality of d vectors) } \\[0.5em] \delta_{(k)} &= \frac{d_{(k)}^T A e_{(0)} }{ d_{(k)}^T A d_{(k)} } \\[0.5em] &= \frac{d_{(k)}^T A e_{(0)} + d_{(k)}^T A \left( \sum_{i=0}^{k-1} \alpha_{(i)} d_{(i)} \right) }{ d_{(k)}^T A d_{(k)} } \qquad \text{(by A-orthogonality of d vectors) } \\[0.5em] &= \frac{d_{(k)}^T A \left( e_{(0)}+ \sum_{i=0}^{k-1} \alpha_{(i)} d_{(i)} \right) }{ d_{(k)}^T A d_{(k)} } \\[0.5em] &= \frac{d_{(k)}^T A e_{(k)} }{ d_{(k)}^T A d_{(k)} } \qquad \text{(by Equation 29) } \end{aligned} \tag{34} d(k)T​Ae(0)​d(k)T​Ae(0)​δ(k)​​=j∑​δ(j)​d(k)T​Ad(j)​=δ(k)​d(k)T​Ad(k)​(by A-orthogonality of d vectors) =d(k)T​Ad(k)​d(k)T​Ae(0)​​=d(k)T​Ad(k)​d(k)T​Ae(0)​+d(k)T​A(∑i=0k−1​α(i)​d(i)​)​(by A-orthogonality of d vectors) =d(k)T​Ad(k)​d(k)T​A(e(0)​+∑i=0k−1​α(i)​d(i)​)​=d(k)T​Ad(k)​d(k)T​Ae(k)​​(by Equation 29) ​(34)

通过 式(31) 和 式(34),我们发现 α(i)=−δ(i)\alpha_{(i)} = - \delta_{(i)}α(i)​=−δ(i)​。
这一现象让我们有一种新的方式看待误差项。

如下面的公式所示,一个组件一个组件地构建 xxx 的过程也可以看作是一个组件一个组件地减少误差项的过程(见 图(23)b)。
e(i)=e(0)+∑j=0i−1α(j)d(j)(by Equation 33 andα(i)=−δ(i))=∑j=0n−1δ(j)d(j)−∑j=0i−1δ(j)d(j)=∑j=in−1δ(j)d(j)(35)\begin{aligned} e_{(i)} &= e_{(0)} + \sum^{i-1}_{j=0} \alpha_{(j)} d_{(j)} \qquad \text{(by Equation 33 and} \; \; \alpha_{(i)} = - \delta_{(i)} \text{)}\\[0.5em] &= \sum^{n-1}_{j=0} \delta_{(j)} d_{(j)} - \sum^{i-1}_{j=0} \delta_{(j)} d_{(j)} \\[0.5em] &= \sum^{n-1}_{j=i} \delta_{(j)} d_{(j)} \end{aligned} \tag{35} e(i)​​=e(0)​+j=0∑i−1​α(j)​d(j)​(by Equation 33 andα(i)​=−δ(i)​)=j=0∑n−1​δ(j)​d(j)​−j=0∑i−1​δ(j)​d(j)​=j=i∑n−1​δ(j)​d(j)​​(35)

经过 nnn 步迭代,每一个组件都被干掉了,最后 e(n)=0e_{(n)} =0e(n)​=0,证明完毕。

7.2 Gram-Schmidt Conjugation(格拉姆-施密特共轭)

我们现在所需要的是,找到一组 AAA-正交的搜索方向 {d(i)}\{d_{(i)}\}{d(i)​}。
幸运的是,有一种简单的方法可以生成它们,叫做 共轭格拉姆-施密特过程(conjugate Gram-Schmidt process)。

假设我们有一组 nnn 个线性无关的向量 u0,u1,…,un−1u_0, u_1,\dots,u_{n-1}u0​,u1​,…,un−1​。
假设 (2维的情况) 其中某个 uiu_iui​ 由 222 个组件线性组合而成,一部分是 u∗u^{*}u∗,另一部分是 u+u^+u+。

为了构建 d(i)d_{(i)}d(i)​,令 uiu_iui​ 减掉自己 【与 d(i−1)d_{(i-1)}d(i−1)​ 非 AAA-正交 】的那个组件(即 图(24) 中的 u+u^+u+)。

(图24)

翻译一下 图(24) 的说明:
俩向量的格拉姆-施密特共轭。
首先,从两个线性无关的向量(u0u_0u0​ 和 u1u_1u1​)开始。令第一个方向向量 d(0)=u0d_{(0)}=u_0d(0)​=u0​。
然后,u1u_1u1​ 由两个组件组成:① u∗u^*u∗,它与 d(0)d_{(0)}d(0)​ 是AAA-正交的(或者称 ‘共轭’ )。② u+u^+u+,它与 d(0)d_{(0)}d(0)​ 是平行的。
共轭完成之后,只保留AAA-正交部分,d(1)=u∗d_{(1)}=u^*d(1)​=u∗。

用公式表达就是,先令 d(0)=u0d_{(0)}=u_0d(0)​=u0​,然后对于 i>0i>0i>0,令:d(i)=ui+∑k=0i−1βikd(k)d_{(i)} = u_i + \sum^{i-1}_{k=0} \beta_{ik} d_{(k)}d(i)​=ui​+k=0∑i−1​βik​d(k)​ 其中, i>ki>ki>k 的情况才有 βik\beta_{ik}βik​。

这个式子看着很绕,这个 β\betaβ 有 222 个下标,可以试着展开看来理解。假设 iii 为 444,也就是 444 维:
d(0)=u(0)d(1)=u(1)+(β10d(0))d(2)=u(2)+(β20d(0)+β21d(1))d(3)=u(3)+(β30d(0)+β31d(1)+β32d(2))\begin{aligned} d_{(0)} &= u_{(0)} \\ d_{(1)} &= u_{(1)} + \left( \beta_{10} d_{(0)} \right) \\ d_{(2)} &= u_{(2)} + \left( \beta_{20} d_{(0)} + \beta_{21} d_{(1)} \right) \\ d_{(3)} &= u_{(3)} + \left( \beta_{30} d_{(0)} + \beta_{31} d_{(1)} + \beta_{32} d_{(2)} \right) \end{aligned} d(0)​d(1)​d(2)​d(3)​​=u(0)​=u(1)​+(β10​d(0)​)=u(2)​+(β20​d(0)​+β21​d(1)​)=u(3)​+(β30​d(0)​+β31​d(1)​+β32​d(2)​)​

为了找到这些值,用回之前求 ξj\xi_jξj​ 的技巧:
d(i)TAd(j)=uiTAd(j)+∑k=0i−1βikd(k)TAd(j)0=uiTAd(j)+βijd(j)TAd(j),i>j(by A-orthogonality ofdvectors)βij=−uiTAd(j)d(j)TAd(j)(37)\begin{aligned} d_{(i)}^T A d_{(j)} &= u_i^T A d_{(j)} + \sum_{k=0}^{i-1} \beta_{ik} d_{(k)}^T A d_{(j)} \\ 0 &= u_i^T A d_{(j)} + \beta_{ij} d_{(j)}^T A d_{(j)}, \qquad i>j \qquad \text{(by A-orthogonality of} \;d \; \text{vectors)} \\[0.5em] \beta_{ij} &= - \frac{u_i^T A d_{(j)}}{ d_{(j)}^T A d_{(j)} } \tag{37} \end{aligned} d(i)T​Ad(j)​0βij​​=uiT​Ad(j)​+k=0∑i−1​βik​d(k)T​Ad(j)​=uiT​Ad(j)​+βij​d(j)T​Ad(j)​,i>j(by A-orthogonality ofdvectors)=−d(j)T​Ad(j)​uiT​Ad(j)​​​(37)

共轭方向法 (Conjugate Directions)中应用格拉姆-施密特共轭 (Gram-Schmidt conjugation)的难点在于,之前所有的搜索向量都要保存在内存里,用于生成新的搜索向量。生成全部搜索向量的复杂度是 O(n3)\mathcal{O}(n^3)O(n3)

事实上,如果搜索向量是由轴向单位向量(axial unit vectors)的共轭来构造的,那么共轭方向(Conjugate Directions)就等价于执行高斯消元(Gaussian elimination),见 图(25)。

(图25)

因此,在共轭梯度法(CG,Conjugate Gradient)被发现之前,共轭方向法(Conjugate Directions)很少被使用。CG 作为共轭方向法的一种,解决了这一问题。

理解共轭方向(以及共轭梯度)法的关键点是:图(25) 是 图(21) 的拉伸版!请记住,当你在执行共轭方向的方法时(或者共轭梯度法),此时你也是在一个拉伸了的空间上执行正交方向法(Orthogonal Directions)。

7.3 Optimality of the Error Term(误差项的最优性)

共轭方向法有一个有趣的特性:它在每一步都能在允许探索的范围内找到最优解。它能在哪里找呢?

令 DiD_iDi​ 为 iii 维子空间张成的空间 {d(0),d(1),…,d(i−1)}\{d_{(0)}, d_{(1)}, \dots, d_{(i-1)}\}{d(0)​,d(1)​,…,d(i−1)​}。
e(i)e_{(i)}e(i)​ 的值是从 e(0)+Die_{(0)} + \mathcal{D}_ie(0)​+Di​ 里选出来的。

我说的“最优解”是什么意思呢,意思是共轭方向法从 e(0)+Die_{(0)} + \mathcal{D}_ie(0)​+Di​ 选得一个值,使得 ∥e(i)∥A\|e_{(i)} \|_A∥e(i)​∥A​ 最小。 见 图(26)。实际上,有一些作者是通过在 e(0)+Die_{(0)} + \mathcal{D}_ie(0)​+Di​ 中最小化 ∥e(i)∥A\|e_{(i)} \|_A∥e(i)​∥A​ 来推导出共轭梯度法。

(图26)

同样,误差项 eee 可以表示为搜索方向 ddd 的线性组合。(公式(35) ) 它的能量范数可以表示为求和。
∥e(i)∥A=?=(∑j=in−1δ(j)d(j))TA(∑k=in−1δ(k)d(k))=∑j=in−1∑k=in−1δ(j)δ(k)d(j)TAd(k)(by Equation 35)=∑j=in−1δ(j)2d(j)TAd(j)(by A-orthogonality of dvectors)\begin{aligned} \|e_{(i)} \|_A &= \quad ? \\ &= \left( \sum_{j=i}^{n-1} \delta_{(j)} d_{(j)} \right)^T A \left( \sum_{k=i}^{n-1} \delta_{(k)} d_{(k)} \right) \\ &= \sum_{j=i}^{n-1} \sum_{k=i}^{n-1} \delta_{(j)} \delta_{(k)} d_{(j)}^T A d_{(k)} \qquad \text{(by Equation 35)} \\ &= \sum_{j=i}^{n-1} \delta_{(j)}^{2} d_{(j)}^T A d_{(j)} \qquad \text{(by A-orthogonality of } d \; \text{vectors)} \end{aligned} ∥e(i)​∥A​​=?=(j=i∑n−1​δ(j)​d(j)​)TA(k=i∑n−1​δ(k)​d(k)​)=j=i∑n−1​k=i∑n−1​δ(j)​δ(k)​d(j)T​Ad(k)​(by Equation 35)=j=i∑n−1​δ(j)2​d(j)T​Ad(j)​(by A-orthogonality of dvectors)​

这个求和公式的每一项都是关于没有被遍历过的搜索方向。
在 e(0)+Die_{(0)}+\mathcal{D}_ie(0)​+Di​ 空间中选择任意其它的 eee,其展开式中,也会有与上面求和公式中相同的项,因此 e(i)e_{(i)}e(i)​ 的能量范数一定是最小的。
(因为由于AAA-正交,很多项被消掉了。其它的 eee 还有很多项没有消掉,所以 e(i)e_{(i)}e(i)​ 比他们小。)

上面用公式证明了最优性,现在我们从直觉上来看看是怎么回事。想要把共轭方向的工作原理和过程可视化,也许最好的方法是对两个空间进行比较,一个是我们正在用的空间,另一个是 “拉伸了” 的空间,就像 图(22) 里那样。

(图27)

图(27)a 和 图(27)c 展示了共轭方向法在 R2\mathbb{R}^2R2 和 R3\mathbb{R}^3R3 上的特性,图示里垂直出现的线是正交的。
另外一方面,图(27)b 和 图(27)d 展示同样的画,但是它所在的空间是被拉伸过的(沿着特征向量的轴),因此等高线变成了圆形。
图里画的相互垂直的线都是 AAA-正交的。

在 图(27)a 里,共轭方向法从 x(0)x_{(0)}x(0)​ 开始,在 d(0)d_{(0)}d(0)​ 的方向上走一步,然后停在了 x(1)x_{(1)}x(1)​ 上,在那里的误差向量 e(1)e_{(1)}e(1)​ 与 d(0)d_{(0)}d(0)​ 是AAA-正交的。为什么我们预期这里是 x(0)+D1x_{(0)}+\mathcal{D}_1x(0)​+D1​ 的最小值点呢?答案在 图(27)b 里:在这个拉伸的空间里,e(1)e_{(1)}e(1)​ 与 d(0)d_{(0)}d(0)​ 垂直,因为他们是AAA-正交的。
误差向量 e(1)e_{(1)}e(1)​一组同心圆半径,这个 同心圆的轮廓由常量的 ∥e∥A\|e\|_A∥e∥A​ 形成。
因此,x(0)+D1x_{(0)}+\mathcal{D}_1x(0)​+D1​ 必定在 x(1)x_{(1)}x(1)​ 处与 x(1)x_{(1)}x(1)​ 所在的圆相切。
因此,x(1)x_{(1)}x(1)​ 就是在 x(0)+D1x_{(0)}+\mathcal{D}_1x(0)​+D1​ 空间上的能最小化 ∥e(1)∥A\|e_{(1)}\|_A∥e(1)​∥A​ 的那个点。

个人理解:
对于 图(27)a,x(0)+D1x_{(0)} + \mathcal{D_1}x(0)​+D1​ 这个空间是一条直线,第 111 步只能在这个空间上移动。
那么,x(1)x_{(1)}x(1)​ 降落在哪里,才能使 ∥e∥A\|e\|_A∥e∥A​ 最小呢?显然,是与同心圆相切的地方。

这并不奇怪,我们已经在 7.1 节见过,AAA-共轭(AAA-conjugacy)的搜索方向和误差项,等价于沿着搜索方向最小化 fff(同样也是最小化 ∥e∥A\|e\|_A∥e∥A​)。然而,在共轭方向法走了第 222 步之后,沿着第 222 个搜索方向 d(1)d_{(1)}d(1)​ 最小化 ∥e∥A\|e\|_A∥e∥A​,为什么我们会预计 ∥e∥A\|e\|_A∥e∥A​ 在方向 d(0)d_{(0)}d(0)​ 上仍然是被最小化的呢?走完 iii 步之后,为什么经过所有 x(0)+Dix_{(0)} + \mathcal{D}_ix(0)​+Di​ 之后 f(x(i))f(x_{(i)})f(x(i)​) 就是最小的呢?

在 图(27)b 里,d(0)d_{(0)}d(0)​ 和 d(1)d_{(1)}d(1)​ 表现为相互垂直,因为它们是AAA-正交的。很明显 d(1)d_{(1)}d(1)​ 指向解 xxx,因为 d(0)d_{(0)}d(0)​ 在 x(1)x_{(1)}x(1)​ 处与圆心为 xxx 的圆正切。然而,333 维的例子更有启发性。图(27)c 和 图(27)d 都各自展示了两个同心椭球体。x(1)x_{(1)}x(1)​ 位于外面一层的球体上,x(2)x_{(2)}x(2)​ 位于里面那层的球体上。仔细观察这些图:x(0)+D2x_{(0)}+\mathcal{D}_2x(0)​+D2​ 这个平面切片穿过较大的椭球体,并在 x(2)x_{(2)}x(2)​ 处于小椭球体相切。xxx 是球体的中心,在平面下面。

看着 图(27)c ,我们重新表述我们的问题。假设你和我都站在 x(1)x_{(1)}x(1)​ 处,想在 x(0)+D2x_{(0)} + \mathcal{D}_2x(0)​+D2​ 这个空间上走到某个位置,使得 ∥e∥\|e\|∥e∥ 最小。但我们只能沿着搜索方向 d(1)d_{(1)}d(1)​ 前进。如果 d(1)d_{(1)}d(1)​ 指向最小的点,那我们就成功了。有没有什么理由期望 d(1)d_{(1)}d(1)​ 会指向正确的方向呢?

图(27)d 给出了答案。由于 d(1)d_{(1)}d(1)​ 和 d(0)d_{(0)}d(0)​ 是AAA-正交的,它们在这个图中是垂直的。现在,假设你盯着平面 x(0)+D2x_{(0)}+\mathcal{D}_2x(0)​+D2​,就像它是一张纸一样;你所看到的景象将与 图(27)b 完全相同。点 x(2)x_{(2)}x(2)​ 将会在纸的中心,点 xxx 将会处于纸的正下方,直接就在点 x(2)x_{(2)}x(2)​ 正下面。因为 d(1)d_{(1)}d(1)​ 和 d(0)d_{(0)}d(0)​ 是垂直的, d(1)d_{(1)}d(1)​ 直接指向 x(2)x_{(2)}x(2)​,是在空间 x(0)+D2x_{(0)} + \mathcal{D}_2x(0)​+D2​ 里最靠近 xxx 的点。平面 x(0)+D2x_{(0)} + \mathcal{D}_2x(0)​+D2​ 与 x(2)x_{(2)}x(2)​ 所在的球面相切。如果你走第 333 步,就会直接从 x(2)x_{(2)}x(2)​ 下降到 xxx,在那个与 D2\mathcal{D}_2D2​ “AAA-正交” 的方向上。

要用另外一种方式理解 图(27)d 发生了什么,你可以想像你正站在解那里(解就是 xxx),拉动一条连着珠子的绳子,这个珠子被限定在平面 x(0)+Dix_{(0)}+\mathcal{D}_ix(0)​+Di​ 上。每当扩展子空间(expanding subspace) D\mathcal{D}D 被放大一个维度,珠子就可以自由地靠近你一点。如果你把这个空间拉成 图(27)c 那样,你就有了共轭方向法。

这个珠子的例子怎么解释呢?我是这样想的,x(0)+D1x_{(0)}+\mathcal{D}_1x(0)​+D1​ 这个空间是一条线,111 维的。一开始珠子只能在这上面移动,所以就算把牵着珠子的线拉直了,珠子还是很远(在 x(1)x_{(1)}x(1)​ 的地方)。然后珠子的活动空间扩展了一个维度,可以在 x(0)+D2x_{(0)}+\mathcal{D}_2x(0)​+D2​ 这个空间上活动,这个空间是一个面,222 维的。继续拉珠子上的线,拉直后珠子来到了 x(2)x_{(2)}x(2)​,离我们的 xxx 又更近了。最后,再扩展一个维度,珠子能够在整个 333 维空间上活动,这次再拉就把珠子拉到自己身边了,就到达了 xxx。

在这些插图中可以看到共轭方向的另一个重要性质,我们已经看到,在每一步中,超平面 x(0)+Dix_{(0)}+\mathcal{D}_ix(0)​+Di​ 与 x(i)x_{(i)}x(i)​ 所处的椭球体正切。回想第4章,任意一点的残差与该点的椭球面正交,因此,r(i)r_{(i)}r(i)​ 也与 Di\mathcal{D}_iDi​ 正交。要用数学方法来证明这个现象,用 −d(i)TA-d_{(i)}^TA−d(i)T​A 左乘 式子(35) 得:−d(i)TAe(j)=−∑j=in−1δ(j)d(i)TAd(j)(38)d(i)Tr(j)=0,i<j( by A-orthogonality ofd-vectors)(39)\begin{aligned} -d_{(i)}^TA e_{(j)}&= - \sum_{j=i}^{n-1} \delta_{(j)} d_{(i)}^TA d_{(j)} \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \; (38) \\ d_{(i)}^T r_{(j)} &= 0 , \qquad i<j \qquad \text{( by A-orthogonality of} \; d \text{-vectors)} \qquad (39) \end{aligned} −d(i)T​Ae(j)​d(i)T​r(j)​​=−j=i∑n−1​δ(j)​d(i)T​Ad(j)​(38)=0,i<j( by A-orthogonality ofd-vectors)(39)​

我们本可以通过另一种方法来推导出这个等式。回想一下,一旦我们朝着搜索方向迈出了一步,我们再也不需要朝着这个方向走了。误差项总是与所有旧的搜索方向AAA-正交。由于 r(i)=−Ae(i)r_{(i)} = -Ae_{(i)}r(i)​=−Ae(i)​,残差永远与所有旧的搜索方向正交。

由于搜索方向都是从向量 uuu 构建而来的,u0,…,ui−1u_0, \dots,u_{i-1}u0​,…,ui−1​ 跨越的子空间是 Di\mathcal{D}_iDi​,残差 r(i)r_{(i)}r(i)​ 同样与前面这些 uuu 向量正交(见 图(28))。通过计算 式子(36) 与 r(j)r_{(j)}r(j)​ 的内积可以证明。d(i)Tr(j)=uiTr(j)+∑k=0i−1βikd(k)Tr(j)(40)0=u(i)Tr(j),i<j( by Equation 39 )(41)\begin{aligned} d_{(i)}^T r_{(j)} &= u_i^T r_{(j)} + \sum_{k=0}^{i-1} \beta_{ik} d_{(k)}^T r_{(j)} \qquad \qquad \qquad \qquad \qquad (40) \\ 0 &= u_{(i)}^T r_{(j)} , \qquad i<j \qquad \text{( by Equation 39 )} \; \qquad (41) \end{aligned}d(i)T​r(j)​0​=uiT​r(j)​+k=0∑i−1​βik​d(k)T​r(j)​(40)=u(i)T​r(j)​,i<j( by Equation 39 )(41)​

还有一个等式我们稍后会用到。从 式子(40) 和 图(28) 有:
d(i)Tr(i)=uiTr(i)(42)d_{(i)}^T r_{(i)} = u_i^T r_{(i)} \tag{42}d(i)T​r(i)​=uiT​r(i)​(42)

(图28)

最后,注意到,与最陡下降法一样,通过使用递推求残差,可以将每次迭代的矩阵-向量乘法的数量减少为 111:r(i+1)=−Ae(i+1)=−A(e(i)+α(i)d(i))=r(i)−α(i)Ad(i)(43)\begin{aligned} r_{(i+1)} &= -A e_{(i+1)} \\ &= -A ( e_{(i)} + \alpha_{(i)} d_{(i)} ) \\ &= r_{(i)} - \alpha_{(i)} A d_{(i)} \tag{43} \end{aligned}r(i+1)​​=−Ae(i+1)​=−A(e(i)​+α(i)​d(i)​)=r(i)​−α(i)​Ad(i)​​(43)

共轭梯度法(Conjugate Gradients)(2)相关推荐

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

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

  2. 共轭梯度法(Conjugate Gradients)(4)

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

  3. 共轭梯度法(Conjugate Gradient Method)

    我们要求解线性方程组 Ax=b Ax=b 其中 A A 是对称正定矩阵(spd),给定RnR^n中n个线性无关的向量 r0,r1,⋯,rn−1 r_0,r_1,\cdots,r_{n-1}, 我们想要 ...

  4. Games201学习笔记3:欧拉视角

    学习教程来自:GAMES201:高级物理引擎实战指南2020 以下大部分图片来自教程PPT,仅作为笔记用于学习和分享,侵删 笔记内容大多为课程内容的翻译和转述,外加一些自己的理解,若有不正确的地方恳请 ...

  5. el-select 多选取值_数值优化|笔记整理(3)——线搜索中的步长选取方法,线性共轭梯度法...

    上一节笔记传送门: 学弱猹:数值优化|笔记整理(2)--线搜索:步长选取条件的收敛性​zhuanlan.zhihu.com ------------------------------------ 大 ...

  6. 回溯法采用的搜索策略_数值优化|笔记整理(3)——线搜索中的步长选取方法,线性共轭梯度法...

    上一节笔记传送门: 学弱猹:数值优化|笔记整理(2)--线搜索:步长选取条件的收敛性​zhuanlan.zhihu.com ------------------------------------ 大 ...

  7. 机器学习中导数最优化方法(基础篇)

    1. 前言 熟悉机器学习的童鞋都知道,优化方法是其中一个非常重要的话题,最常见的情形就是利用目标函数的导数通过多次迭代来求解无约束最优化问题.实现简单,coding 方便,是训练模型的必备利器之一.这 ...

  8. 几种常用的优化方法梯度下降法、牛顿法、)

                                                                       几种常用的优化方法 1. 前言 熟悉机器学习的童鞋都知道,优化方法 ...

  9. 生物大分子的计算机模拟就业,生物大分子模拟

    <生物大分子模拟>由会员分享,可在线阅读,更多相关<生物大分子模拟(14页珍藏版)>请在人人文库网上搜索. 1.第一1. computational biology计算机生物学 ...

最新文章

  1. python爬虫程序说明_Python即时网络爬虫:API说明
  2. 78、VLAN间路由配置实验之单臂路由
  3. 技术解密|阿里云多媒体 AI 团队是凭借什么拿下 CVPR2021 5冠1亚的?
  4. python封装成exe后运行失败_Python的带pandas包的程序封装成exe 2018-01-11
  5. java中的几个集合类
  6. iptables 学习笔记 二 参数指令
  7. 浅显理解*nix下的守护进程机制及fork函数
  8. wine linux 目录,wine的安装与microsoft office在linux上的运行
  9. 【android自定义控件】自定义Toast,AlterDialog,Notification 四
  10. 数据埋点与数据需求文档
  11. Visio科学图形包下载以及安装详细教程
  12. matlab两个运动同时进行,多体运动的matlab动画演示
  13. IBM AIX初级培训总结
  14. Egret Wing 项目结构
  15. MRAM学习笔记——3.SOT-MTJ SPICE model解析
  16. 详解cmd修复系统命令操作方法
  17. 今日头条视频如何收益
  18. C#中的cs0116Error
  19. Cannot Resolve method subscribe(anonymous org.reactivestreams.Subscriber 已解决
  20. MyBatis的核心对象

热门文章

  1. 酒店管理系统C语言课程设计
  2. Java基础-22总结登录注册IO版,数据操作流,内存操作流,打印流,标准输入输出流,转换流,随机访问流,合并流,序列化流,Properties
  3. 使用windows资源管理器刻录光盘
  4. 失踪人口回归微信小程序毕业设计(二)
  5. window mysql下载与安装
  6. Filter过滤器的这些内容(Filter的生命周期FilterChain过滤器链Filter的拦截路径...),你都理解了吗?
  7. Statement常用的方法回顾
  8. java pop3 接收邮件_JavaMail使用POP3协议接收并解析电子邮件
  9. git 同步远程和本地的同名分支
  10. 如何优雅的用POI导入Excel文件