Numerical Optimization Ch5. Conjugate Gradient Methods

第五章: 共轭梯度法


共轭梯度法的作用主要体现在两个方面:

  • 它们可高效求解大规模的线性方程组;
  • 经调整, 它们可用于求解非线性优化问题.

线性共轭梯度法最早由Hestenes和Steifel在上世纪五十年代提出, 用于迭代求解带正定系数矩阵的线性系统. 由于它在大规模问题上的优越性, 它很快受到了广泛的欢迎. 而第一个非线性共轭梯度法则由Fletcher和Reeves于上市就六十年代提出. 而这也是最早的用于求解大规模非线性优化问题的算法之一. 迄今, 已出现了共轭梯度法的许多变体. 而它们所共同的关键特征, 就是无需矩阵存储且要快于最速下降法. 这为处理大规模问题提供了方便.

1. 线性共轭梯度法

线性共轭梯度法主要用于求解下面的线性系统: A x = b , Ax=b, Ax=b,其中 A A A n × n n\times n n×n对称正定矩阵. 该问题可等价地描述成泛函极值问题, 即 min ⁡ ϕ ( x ) = d e f 1 2 x T A x − b T x . \min\phi(x)\xlongequal{def}\frac{1}{2}x^TAx-b^Tx. minϕ(x)def 21xTAxbTx. 因此线性共轭梯度法即可用于求解线性系统, 也可用于求解一类凸二次规划问题. 注意 ϕ \phi ϕ的梯度等于线性系统的残差, 即 ∇ ϕ ( x ) = A x − b = d e f r ( x ) , \nabla\phi(x)=Ax-b\xlongequal{def} r(x), ϕ(x)=Axbdef r(x),对于某一特定 x = x k x=x_k x=xk, 简记 r k = A x k − b . r_k=Ax_k-b. rk=Axkb.

1.1 共轭方向法

为了获取一些广而泛的特征与直观, 我们先来讨论共轭方向法. 实际上线性共轭梯度法是共轭方向法的一种特殊情形. 所谓"共轭", 此处指的是对于对称正定矩阵 A A A的共轭, 即对于一组非零向量 { p 0 , p 1 , … , p l } \{p_0,p_1,\ldots,p_l\} {p0,p1,,pl}, 有 p i T A p j = 0 , ∀ i ≠ j . p_i^TAp_j=0,\quad\forall i\ne j. piTApj=0,i̸=j. 共轭方向法的好处在于, 它可在 n n n步内达到 ϕ \phi ϕ的最小. 给定初始 x 0 ∈ R n x_0\in\mathbb{R}^n x0Rn, 并先不考虑生成方案地给定一组共轭方向 { p 0 , p 1 , … , p n − 1 } \{p_0,p_1,\ldots,p_{n-1}\} {p0,p1,,pn1}, 则有生成序列 x k + 1 = x k + α k p k , x_{k+1}=x_k+\alpha_kp_k, xk+1=xk+αkpk,其中 α k \alpha_k αk为二次函数 ϕ \phi ϕ沿着 x k + α p k x_k+\alpha p_k xk+αpk的一维最小点, 我们可以解析地算出其表达式: d d α ϕ ( x k + α p k ) = ∇ ϕ ( x k + α p k ) T p k = ( r k + α A p k ) T p k = s e t 0 \frac{\mathrm{d}}{\mathrm{d}\alpha}\phi(x_k+\alpha p_k)=\nabla\phi(x_k+\alpha p_k)^Tp_k=(r_k+\alpha Ap_k)^Tp_k\xlongequal{set}0 dαdϕ(xk+αpk)=ϕ(xk+αpk)Tpk=(rk+αApk)Tpkset 0 ⇒ α k = − r k T p k p k T A p k . \Rightarrow \alpha_k=-\frac{r_k^Tp_k}{p_k^TAp_k}. αk=pkTApkrkTpk. (进一步验算 d 2 d 2 α ϕ ( x k + α p k ) = p k T A p k > 0 \frac{\mathrm{d}^2}{\mathrm{d}^2\alpha}\phi(x_k+\alpha p_k)=p_k^TAp_k>0 d2αd2ϕ(xk+αpk)=pkTApk>0, 因此为最小点.)

定理1 对于任意 x 0 ∈ R n x_0\in\mathbb{R}^n x0Rn, 由共轭方向产生的序列 { x k } \{x_k\} {xk}至多 n n n收敛到线性系统的解 x ∗ x^* x.
证明: 注意到共轭方向 { p i } \{p_i\} {pi}必定是线性无关的(这与 A A A是正定的有直接的关系), 因此它们张成 R n \mathbb{R}^n Rn. 从而存在坐标 ( σ 0 , σ 1 , … , σ n − 1 ) (\sigma_0,\sigma_1,\ldots,\sigma_{n-1}) (σ0,σ1,,σn1), x ∗ − x 0 = σ 0 p 0 + σ 1 p 1 + ⋯ + σ n − 1 p n − 1 . x^*-x_0=\sigma_0p_0+\sigma_1p_1+\cdots+\sigma_{n-1}p_{n-1}. xx0=σ0p0+σ1p1++σn1pn1. ∀ k \forall k k, 在上式两边左乘 p k T A p_k^TA pkTA, 并利用共轭性质, 得到 σ k = p k T A ( x ∗ − x 0 ) p k T A p k . \sigma_k=\frac{p_k^TA(x^*-x_0)}{p_k^TAp_k}. σk=pkTApkpkTA(xx0).下面证明这些 σ k \sigma_k σk恰好就是步长 α k \alpha_k αk. 由迭代公式, x k = x 0 + α 0 p 0 + α 1 p 1 + ⋯ + α k − 1 p k − 1 . x_k=x_0+\alpha_0p_0+\alpha_1p_1+\cdots+\alpha_{k-1}p_{k-1}. xk=x0+α0p0+α1p1++αk1pk1.同样两边左乘 p k T A p_k^TA pkTA得到 p k T A ( x k − x 0 ) = 0. p_k^TA(x_k-x_0)=0. pkTA(xkx0)=0.因此 p k T A ( x ∗ − x 0 ) = p k T A ( x ∗ − x k ) = p k T ( b − A x k ) = − p k T r k . p_k^TA(x^*-x_0)=p_k^TA(x^*-x_k)=p_k^T(b-Ax_k)=-p_k^Tr_k. pkTA(xx0)=pkTA(xxk)=pkT(bAxk)=pkTrk.从而 α k = − r k T p K p k T A p k = p k T A ( x ∗ − x 0 ) p k T A p k = σ k . \alpha_k=-\frac{r_k^Tp_K}{p_k^TAp_k}=\frac{p_k^TA(x^*-x_0)}{p_k^TAp_k}=\sigma_k. αk=pkTApkrkTpK=pkTApkpkTA(xx0)=σk.证毕.

对于共轭方向法有一种简单的直观解释: 设 A A A是对角阵, 从而 ϕ \phi ϕ的等高线为椭球, 其轴向与坐标轴平行. 令 { p i } \{p_i\} {pi}为标准正交基, 从而有图示如下 (以 n = 2 n=2 n=2为例):
共轭方向法

图中 x ∗ x^* x经过两步沿着坐标轴的搜索即可达到. 不过可以想象, 当 A A A不再是对角阵时, 情形应当会有所不同. 图示如下:共轭方向法2

图中 ϕ \phi ϕ的等高线依然是椭圆, 但轴向不再与坐标轴平行. 此时再沿着标准正交基构成的方向集搜索, 将不再能保证在 n n n步以内 (甚至有限步内) 达到 x ∗ x^* x. 这是因为 { e i } \{e_i\} {ei}不再是其共轭方向. 不过我们可以将 A A A转化成对角阵后再做搜索. 具体说, 由于 A A A是对称正定矩阵, 所以可以正交对角化, 即存在正交矩阵 S S S, 使得 S T A S S^TAS STAS为对角阵 Λ \Lambda Λ. 作变量代换 y = S − 1 x y=S^{-1}x y=S1x, 则对应的泛函极值问题化为 min ⁡ ϕ ^ ( y ) = d e f 1 2 y T Λ y − ( S T b ) T y . \min\hat{\phi}(y)\xlongequal{def}\frac{1}{2}y^T\Lambda y-(S^Tb)^Ty. minϕ^(y)def 21yTΛy(STb)Ty.对应于变换后的坐标系, { p i = S e i } \{p_i=Se_i\} {pi=Sei}就是原坐标系下的对于 A A A的共轭方向 (其实就是 S S S n n n列). 我们也可以在新的坐标系下得到 y ∗ y^* y, 再令 x ∗ = S y ∗ x^*=Sy^* x=Sy得到原问题的解.
在上面提到的对角阵的情形中, 我们可以发现: 每一次迭代都将确定 x ∗ x^* x的一个分量. 换句话说, 再做完 k k k次一维最小化后, ϕ \phi ϕ已经在 s p a n { e 1 , e 2 , … , e k } \mathrm{span}\{e_1,e_2,\ldots,e_k\} span{e1,e2,,ek}上达到最小了. 下面我们将对任一对称正定矩阵证明这一性质. 为方便说明, 我们指出 r k r_k rk也有类似于 x k x_k xk的更新公式: r k + 1 = A x k + 1 − b = A x k − b + A ( x k + 1 − x k ) = r k + α k A p k . r_{k+1}=Ax_{k+1}-b=Ax_k-b+A(x_{k+1}-x_k)=r_k+\alpha_kAp_k. rk+1=Axk+1b=Axkb+A(xk+1xk)=rk+αkApk.

定理2 (扩张子空间最小化) 设 x 0 ∈ R n x_0\in\mathbb{R}^n x0Rn为任意选定的初始点, { x k } \{x_k\} {xk}为生成的迭代序列. 则 r k T p i = 0 , i = 0 , 1 , … , k − 1 , r_k^Tp_i=0,\quad i=0,1,\ldots,k-1, rkTpi=0,i=0,1,,k1, x k x_k xk ϕ ( x ) \phi(x) ϕ(x) S k = d e f { x ∣ x = x 0 + s p a n { p 0 , p 1 , … , p k − 1 } } S_k\xlongequal{def}\{x|x=x_0+\mathrm{span}\{p_0,p_1,\ldots,p_{k-1}\}\} Skdef {xx=x0+span{p0,p1,,pk1}}上的极小点.

证明: 我们先证明 x ~ \tilde{x} x~ S k S_k Sk上极小化 ϕ \phi ϕ当且仅当 r ( x ~ ) T p i = 0 , i = 0 , 1 , … , k − 1. r(\tilde{x})^Tp_i=0,i=0,1,\ldots,k-1. r(x~)Tpi=0,i=0,1,,k1. 定义 h ( σ ) = ϕ ( x 0 + σ 0 p 0 + ⋯ + σ k − 1 p k − 1 ) h(\sigma)=\phi(x_0+\sigma_0p_0+\cdots+\sigma_{k-1}p_{k-1}) h(σ)=ϕ(x0+σ0p0++σk1pk1), 其中 σ = ( σ 0 , σ 1 , … , σ k − 1 ) T \sigma=(\sigma_0,\sigma_1,\ldots,\sigma_{k-1})^T σ=(σ0,σ1,,σk1)T. 由于 h ( σ ) h(\sigma) h(σ)是严格凸的二次函数, 所有它有唯一极小点 σ ∗ \sigma^* σ, 且满足一阶稳定条件 ∂ h ( σ ) ∂ σ i ∣ σ = σ ∗ = 0 , i = 0 , 1 , … , k − 1 \left.\frac{\partial h(\sigma)}{\partial\sigma_i}\right|_{\sigma=\sigma^*}=0,\quad i=0,1,\ldots,k-1 σih(σ)σ=σ=0,i=0,1,,k1 ⇒ ∇ ϕ ( x 0 + σ 0 ∗ p 0 + ⋯ + σ k − 1 ∗ p k − 1 ) T p i = 0 , i = 1 , 2 , … , k − 1 \Rightarrow \nabla\phi(x_0+\sigma_0^*p_0+\cdots+\sigma_{k-1}^*p_{k-1})^Tp_i=0,\quad i=1,2,\ldots,k-1 ϕ(x0+σ0p0++σk1pk1)Tpi=0,i=1,2,,k1 ⇒ r ( x ~ ) T p i = 0 , i = 1 , 2 , … , k − 1. \Rightarrow r(\tilde{x})^Tp_i=0,\quad i=1,2,\ldots,k-1. r(x~)Tpi=0,i=1,2,,k1.下面归纳证明 r k T p i = 0 r_k^Tp_i=0 rkTpi=0, 从而有 x k x_k xk ϕ ( x ) \phi(x) ϕ(x) S k S_k Sk上的极小点.

  • 对于 k = 1 k=1 k=1, 我们由 x 1 = x 0 + α 0 p 0 x_1=x_0+\alpha_0p_0 x1=x0+α0p0 ϕ \phi ϕ沿 { x 0 + α p 0 } \{x_0+\alpha p_0\} {x0+αp0}的极小得到 r 1 T p 0 = 0 r_1^Tp_0=0 r1Tp0=0.
  • 假设 r k − 1 T p i = 0 , i = 0 , 1 , … , k − 2 r_{k-1}^Tp_i=0,i=0,1,\ldots,k-2 rk1Tpi=0,i=0,1,,k2. 从而 p k − 1 T r k = p k − 1 T r k − 1 + α k − 1 p k − 1 T A p k − 1 = α k − 1 的 定 义 0. p_{k-1}^Tr_k=p_{k-1}^Tr_{k-1}+\alpha_{k-1}p_{k-1}^TAp_{k-1}\xlongequal{\alpha_{k-1}的定义}0. pk1Trk=pk1Trk1+αk1pk1TApk1αk1 0.而对于 p i , i = 0 , 1 , … , k − 2 p_i,i=0,1,\ldots,k-2 pi,i=0,1,,k2, 由归纳假设以及共轭性质有 p i T r k = p i T r k − 1 + α k − 1 p i T A p k − 1 = 0. p_i^Tr_k=p_i^Tr_{k-1}+\alpha_{k-1}p_i^TAp_{k-1}=0. piTrk=piTrk1+αk1piTApk1=0.从而 r k T p i = 0 , i = 0 , 1 , … , k − 1 r_k^Tp_i=0,i=0,1,\ldots,k-1 rkTpi=0,i=0,1,,k1, 证毕.

这个定理指出: 当前的残差 r k r_k rk与之前所有的搜索方向都正交. 这一性质在本章将被大量应用.
共轭方向法的优良性质不言而喻, 但随之而来的问题是: 这样好的共轭方向如何产生 (以及储存). 一种方法是之前提到的正交相似, 其中得到的正交矩阵的列向量组即是共轭方向. 然而对于大规模问题, 要得到所有的特征向量耗费巨大, 而且储存也成问题 (当然我们可以算出一个扔掉一个). 一种替代的方法是修正Gram-Schmidt正交化从而产生相互共轭的方向集, 而这样储存就成了主要的问题, 因为我们势必要存下全部的方向集. 基于以上, 所谓的线性共轭梯度法应运而生.

1.2 线性共轭梯度法的基本性质

线性共轭梯度法是特殊的共轭方向法, 只不过在产生其共轭方向时采用了特殊的方法: 在产生 p k p_k pk需要用到 p k − 1 p_{k-1} pk1. 这一点已经说明了其在计算与存储上的巨大优势 (实际计算上还具有其他优势, 下面会提到).
具体说来, p k p_k pk被假定为负残差 − r k -r_k rk (也即 ϕ \phi ϕ x k x_k xk处的最速下降方向)和前一个方向 p k − 1 p_{k-1} pk1线性组合: p k = − r k + β k p k − 1 , p_k=-r_k+\beta_k p_{k-1}, pk=rk+βkpk1,其中 β k \beta_k βk被选定为用于满足共轭性质. 上式两端左乘 p k − 1 T A p_{k-1}^TA pk1TA并利用共轭性质得到 β k = r k T A p k − 1 p k − 1 T A p k − 1 . \beta_k=\frac{r_k^TAp_{k-1}}{p_{k-1}^TAp_{k-1}}. βk=pk1TApk1rkTApk1.当然这里仅保证了相邻两方向的共轭性, 而完整的共轭性将在后面给出证明. 从这里我们会发现"共轭梯度法"实际上是一种误称: 不是梯度相互共轭, 而是搜索方向相互共轭. 注意 p 0 p_0 p0选定为 x 0 x_0 x0处的最速下降方向. α k \alpha_k αk仍采用一维搜索的方式解析确定. 从而得到如下算法:

算法1 (CG-Preliminary Version)
Given x 0 x_0 x0;
Set r 0 ← A x 0 − b , p 0 ← − r 0 , k ← 0 r_0\leftarrow Ax_0-b,p_0\leftarrow-r_0,k\leftarrow0 r0Ax0b,p0r0,k0;
while r k ≠ 0 r_k\ne0 rk̸=0
α k ← − r k T p k p k T A p k \quad\quad\alpha_k\leftarrow-\frac{r_k^Tp_k}{p_k^TAp_k} αkpkTApkrkTpk;
x k + 1 ← x k + α k p k \quad\quad x_{k+1}\leftarrow x_k+\alpha_kp_k xk+1xk+αkpk;
r k + 1 ← A x k + 1 − b \quad\quad r_{k+1}\leftarrow Ax_{k+1}-b rk+1Axk+1b;
β k + 1 ← r k + 1 T A p k p k T A p k \quad\quad\beta_{k+1}\leftarrow\frac{r_{k+1}^TAp_k}{p_k^TAp_k} βk+1pkTApkrk+1TApk;
p k + 1 ← − r k + 1 + β k + 1 p k \quad\quad p_{k+1}\leftarrow-r_{k+1}+\beta_{k+1}p_k pk+1rk+1+βk+1pk;
k ← k + 1 \quad\quad k\leftarrow k+1 kk+1;
end (while)

既然是Preliminary Version, 就说明我们后面会给出更加简洁且易于实施的版本. 下面的定理将说明以下问题:

  • p 0 , p 1 , … , p n − 1 p_0,p_1,\ldots,p_{n-1} p0,p1,,pn1相互共轭, 从而CG能在至多 n n n步内终止;
  • 残差 r i r_i ri部分先前的 p k p_k pk共轭;
  • 残差 r i r_i ri相互正交;
  • 搜索方向 p k p_k pk和残差 r k r_k rk都包含在 r 0 r_0 r0 k k k阶Krylov子空间, 其定义为 K ( r 0 ; k ) = d e f s p a n { r 0 , A r 0 , … , A k r 0 } . \mathscr{K}(r_0;k)\xlongequal{def}\mathrm{span}\{r_0,Ar_0,\ldots,A^kr_0\}. K(r0;k)def span{r0,Ar0,,Akr0}.

定理3 设共轭梯度法生成的第 k k k个迭代项不是 x ∗ x^* x. 则以下性质成立:

  1. r k T r i = 0 , i = 0 , 1 , … , k − 1 r_k^Tr_i=0,\quad i=0,1,\ldots,k-1 rkTri=0,i=0,1,,k1;
  2. s p a n { r 0 , r 1 , … , r k } = K ( r 0 ; k ) \mathrm{span}\{r_0,r_1,\ldots,r_k\}=\mathscr{K}(r_0;k) span{r0,r1,,rk}=K(r0;k);
  3. s p a n { p 0 , p 1 , … , p k } = K ( r 0 ; k ) \mathrm{span}\{p_0,p_1,\ldots,p_k\}=\mathscr{K}(r_0;k) span{p0,p1,,pk}=K(r0;k);
  4. p k T A p i = 0 , i = 0 , 1 , … , k − 1 p_k^TAp_i=0,\quad i=0,1,\ldots,k-1 pkTApi=0,i=0,1,,k1;
  5. r k T A p i = 0 , i = 0 , 1 , … , k − 2. r_k^TAp_i=0,\quad i=0,1,\ldots,k-2. rkTApi=0,i=0,1,,k2.

从而序列 { x k } \{x_k\} {xk}经至多 n n n步收敛到 x ∗ x^* x.

证明: 用数学归纳法证明第2,3,4条, 第5条为证明过程中的副产品. 其中第2,3条对于 k = 0 k=0 k=0显然成立, 第4条对于 k = 1 k=1 k=1显然成立. 假设这三条对于某个 k k k仍然成立, 下面证明 k + 1 k+1 k+1的情形.

  • 第2条的证明. 先证明左包含于右. 由归纳假设, r k ∈ K ( r 0 ; k ) , p k ∈ K ( r 0 ; k ) . r_k\in\mathscr{K}(r_0;k),\quad p_k\in\mathscr{K}(r_0;k). rkK(r0;k),pkK(r0;k).在第二个式子两边左乘 A A A得到 A p k ∈ s p a n { A r 0 , … , A k + 1 r 0 } . Ap_k\in\mathrm{span}\{Ar_0,\ldots,A^{k+1}r_0\}. Apkspan{Ar0,,Ak+1r0}.因为 r k + 1 = r k + α k A p k r_{k+1}=r_k+\alpha_kAp_k rk+1=rk+αkApk, 所以 r k + 1 ∈ K ( r 0 ; k + 1 ) ⇒ s p a n { r 0 , r 1 , … , r k , r k + 1 } ⊂ K ( r 0 ; k + 1 ) . r_{k+1}\in\mathscr{K}(r_0;k+1)\Rightarrow \mathrm{span}\{r_0,r_1,\ldots,r_k,r_{k+1}\}\subset\mathscr{K}(r_0;k+1). rk+1K(r0;k+1)span{r0,r1,,rk,rk+1}K(r0;k+1).为证明相反方向, 利用第3条的归纳假设, 得到 A k + 1 r 0 = A ( A k r 0 ) ∈ s p a n { A p 0 , A p 1 , … , A p k } . A^{k+1}r_0=A(A^kr_0)\in\mathrm{span}\{Ap_0,Ap_1,\ldots,Ap_k\}. Ak+1r0=A(Akr0)span{Ap0,Ap1,,Apk}.由残差的更新公式我们可以反过来得到 A p i = ( r i + 1 − r i ) / α i , i = 0 , 1 , … , k Ap_i=(r_{i+1}-r_i)/\alpha_i,i=0,1,\ldots,k Api=(ri+1ri)/αi,i=0,1,,k, 因此 A k + 1 r 0 ∈ s p a n { r 0 , r 1 , … , r k + 1 } ⇒ K ( r 0 ; k + 1 ) ⊂ s p a n { r 0 , r 1 , … , r k + 1 } . A^{k+1}r_0\in\mathrm{span}\{r_0,r_1,\ldots,r_{k+1}\}\Rightarrow\mathscr{K}(r_0;k+1)\subset\mathrm{span}\{r_0,r_1,\ldots,r_{k+1}\}. Ak+1r0span{r0,r1,,rk+1}K(r0;k+1)span{r0,r1,,rk+1}.因此第二条对于 k + 1 k+1 k+1仍然成立.
  • 第3条的证明. s p a n { p 0 , p 1 , … , p k , p k + 1 } = s p a n { p 0 , p 1 , … , p k , r k + 1 } ( ∵ p k + 1 = − r k + 1 + β k + 1 p k ) = s p a n { r 0 , A r 0 , … , A k r 0 , r k + 1 ) ( 由 归 纳 假 设 ) = s p a n { r 0 , r 1 , … , r k , r k + 1 ) ( 由 第 2 条 ) = K ( r 0 ; k + 1 ) . \begin{aligned} &\mathrm{span}\{p_0,p_1,\ldots,p_k,p_{k+1}\}\\ &=\mathrm{span}\{p_0,p_1,\ldots,p_k,r_{k+1}\}(\because p_{k+1}=-r_{k+1}+\beta_{k+1}p_k)\\ &=\mathrm{span}\{r_0,Ar_0,\ldots,A^kr_0,r_{k+1})(由归纳假设)\\ &=\mathrm{span}\{r_0,r_1,\ldots,r_k,r_{k+1})(由第2条)\\ &=\mathscr{K}(r_0;k+1).\end{aligned} span{p0,p1,,pk,pk+1}=span{p0,p1,,pk,rk+1}(pk+1=rk+1+βk+1pk)=span{r0,Ar0,,Akr0,rk+1)()=span{r0,r1,,rk,rk+1)(2)=K(r0;k+1).
  • 第4条的证明. 在 p k + 1 = − r k + 1 + β k + 1 p k p_{k+1}=-r_{k+1}+\beta_{k+1}p_k pk+1=rk+1+βk+1pk两端右乘 A p i , i = 0 , 1 , … , k Ap_i,i=0,1,\ldots,k Api,i=0,1,,k, 得到 p k + 1 T A p i = − r k + 1 T A p i + β k + 1 p k T A p i . p_{k+1}^TAp_i=-r_{k+1}^TAp_i+\beta_{k+1}p_k^TAp_i. pk+1TApi=rk+1TApi+βk+1pkTApi. β k \beta_k βk的定义, 上式右端当 i = k i=k i=k时为0. 而对于 i ≤ k − 1 i\le k-1 ik1则需要另做讨论. 由归纳假设, p 0 , p 1 , … , p k p_0,p_1,\ldots,p_k p0,p1,,pk相互共轭, 因此上式右端第二项为0, 只需证明第一项为0 (此即第5条). 由定理2推出 r k + 1 T p i = 0 , i = 0 , 1 , … , k . r_{k+1}^Tp_i=0,\quad i=0,1,\ldots,k. rk+1Tpi=0,i=0,1,,k.反复利用第3条, 我们得到对于 i = 0 , 1 , … , k − 1 i=0,1,\ldots,k-1 i=0,1,,k1, 以下成立: A p i ∈ A K ( r 0 ; i ) = s p a n { A r 0 , A 2 r 0 , … , A i + 1 r 0 } ⊂ s p a n { p 0 , p 1 , … , p i + 1 } . Ap_i\in A\mathscr{K}(r_0;i)=\mathrm{span}\{Ar_0,A^2r_0,\ldots,A^{i+1}r_0\}\subset\mathrm{span}\{p_0,p_1,\ldots,p_{i+1}\}. ApiAK(r0;i)=span{Ar0,A2r0,,Ai+1r0}span{p0,p1,,pi+1}.因此 r k + 1 T A p i = 0 , i = 0 , 1 , … , k − 1. r_{k+1}^TAp_i=0,\quad i=0,1,\ldots,k-1. rk+1TApi=0,i=0,1,,k1.从而第4条 (顺便第5条) 得证. 这也得出共轭梯度法求解线性系统至多 n n n步终止.
  • 第1条的证明. 这里我们不再使用数学归纳法. 从方向集的共轭性质以及定理2我们得到 r k T p i = 0 , i = 0 , 1 , … , k − 1 , k = 1 , 2 , … , n − 1 r_k^Tp_i=0,i=0,1,\ldots,k-1,k=1,2,\ldots,n-1 rkTpi=0,i=0,1,,k1,k=1,2,,n1. 由残差的更新公式我们得到 r i ∈ s p a n { p i , p i − 1 } , i = 1 , … , k − 1 r_i\in\mathrm{span}\{p_i,p_{i-1}\},i=1,\ldots,k-1 rispan{pi,pi1},i=1,,k1. 因此 r k T r i = 0 , i = 1 , … , k − 1 r_k^Tr_i=0,i=1,\ldots,k-1 rkTri=0,i=1,,k1. 而 i = 0 i=0 i=0的情形是显然的: r k T r 0 = − r k T p 0 = 0 r_k^Tr_0=-r_k^Tp_0=0 rkTr0=rkTp0=0. 这就完成了全部的证明.

值得注意的是, 定理的证明要依赖于 p 0 p_0 p0的选取, 即至少要与初始负梯度 r 0 r_0 r0同方向, 否则定理的第3条对 k = 0 k=0 k=0就不成立了, 从而会影响第4条的证明, 进而"共轭"不再共轭.

1.3 实用共轭梯度法

我们可以利用定理2和定理3的结论推出更加经济高效的共轭梯度法. 这主要通过改变一些量的计算方法得到.

  • α k \alpha_k αk的计算: 利用 p k + 1 = − r k + 1 + β k + 1 p k p_{k+1}=-r_{k+1}+\beta_{k+1}p_k pk+1=rk+1+βk+1pk以及残差与搜索方向的正交性, 得到 α k = p k T ( r k + 1 − r k ) p k T A p k = − p k T r k p k T A p k = r k T r k p k T A p k . \alpha_k=\frac{p_k^T(r_{k+1}-r_k)}{p_k^TAp_k}=\frac{-p^T_kr_k}{p_k^TAp_k}=\frac{r_k^Tr_k}{p_k^TAp_k}. αk=pkTApkpkT(rk+1rk)=pkTApkpkTrk=pkTApkrkTrk.
  • β k + 1 \beta_{k+1} βk+1的计算: 由残差更新公式 r k + 1 = r k + α k A p k r_{k+1}=r_k+\alpha_kAp_k rk+1=rk+αkApk以及上面用到的搜索方向更新公式、正交性, 得到 β k + 1 = r k + 1 T A p k p k T A p k = r k + 1 T ( r k + 1 − r k ) / α k p k T ( r k + 1 − r k ) / α k = r k + 1 T r k + 1 r k T r k . \beta_{k+1}=\frac{r_{k+1}^TAp_k}{p_k^TAp_k}=\frac{r_{k+1}^T(r_{k+1}-r_k)/\alpha_k}{p_k^T(r_{k+1}-r_k)/\alpha_k}=\frac{r_{k+1}^Tr_{k+1}}{r_k^Tr_k}. βk+1=pkTApkrk+1TApk=pkT(rk+1rk)/αkrk+1T(rk+1rk)/αk=rkTrkrk+1Trk+1.

利用以上就可以得到实用版本的共轭梯度法.

算法2 (CG)
Given x 0 x_0 x0;
Set r 0 ← A x 0 − b , p 0 ← − r 0 , k ← 0 r_0\leftarrow Ax_0-b,p_0\leftarrow-r_0,k\leftarrow0 r0Ax0b,p0r0,k0;
while r k ≠ 0 r_k\ne0 rk̸=0
α k ← r k T r k p k T A p k \quad\quad\alpha_k\leftarrow\frac{r_k^Tr_k}{p_k^TAp_k} αkpkTApkrkTrk;
x k + 1 ← x k + α k p k \quad\quad x_{k+1}\leftarrow x_k+\alpha_kp_k xk+1xk+αkpk;
r k + 1 ← r k + α k A p k \quad\quad r_{k+1}\leftarrow r_k+\alpha_kAp_k rk+1rk+αkApk;
β k + 1 ← r k + 1 T r k + 1 r k T r k \quad\quad\beta_{k+1}\leftarrow\frac{r_{k+1}^Tr_{k+1}}{r_k^Tr_k} βk+1rkTrkrk+1Trk+1;
p k + 1 ← − r k + 1 + β k + 1 p k \quad\quad p_{k+1}\leftarrow-r_{k+1}+\beta_{k+1}p_k pk+1rk+1+βk+1pk;
k ← k + 1 \quad\quad k\leftarrow k+1 kk+1;
end (while)

对于算法2, 我们在每一步都只需要 x , r , p x,r,p x,r,p的至多两项. 因此 (正如前述), 共轭梯度法对于存储量的需求是很小的. 而主要的计算量就落在矩阵-向量乘积 A p k , p k T A p k , r k + 1 T r k + 1 Ap_k,p_k^TAp_k,r_{k+1}^Tr_{k+1} Apk,pkTApk,rk+1Trk+1上, 后二者都可在 O ( n ) O(n) O(n)计算量内解决, 而前者则需 O ( n 2 ) O(n^2) O(n2).
注意, 共轭梯度法只在大规模问题中具有优越性, 否则诸如Gauss消去或者其他的如奇异值分解的矩阵分解方法将更加有效, 这主要是因为它们对于舍入误差更加强健. 而对于大型问题, 共轭梯度法还有一个优点是不会改变系数矩阵以及一定程度上保证矩阵的稀疏性. 另一个优点就得从收敛速度上说了.

1.4 收敛速度

我们知道, 在无舍入误差的计算下共轭梯度法将在至多 n n n步终止. 不过更加有意思的是, 当系数矩阵 A A A的特征值分布具有一定的特点时, 算法往往仅需远少于 n n n步终止. 我们先来以一种稍微不同的角度审视定理2, 从而说明算法2在某种程度上是最优的.
由迭代公式和定理3中的第3条可知, 存在 γ i , i = 0 , 1 , … , k \gamma_i, i=0,1,\ldots,k γi,i=0,1,,k使得 x k + 1 = x 0 + α 0 p 0 + ⋯ + α k p k = x 0 + γ 0 r 0 + γ 1 A r 0 + ⋯ + γ k A k r 0 . \begin{aligned}x_{k+1}&=x_0+\alpha_0p_0+\cdots+\alpha_kp_k\\ &=x_0+\gamma_0r_0+\gamma_1Ar_0+\cdots+\gamma_kA^kr_0.\end{aligned} xk+1=x0+α0p0++αkpk=x0+γ0r0+γ1Ar0++γkAkr0.定义 P k ∗ ( ⋅ ) P_k^*(\cdot) Pk()为带系数 γ 0 , γ 1 , … , γ k \gamma_0,\gamma_1,\ldots,\gamma_k γ0,γ1,,γk k k k次多项式, 从而 x k + 1 = x 0 + P k ∗ ( A ) r 0 . x_{k+1}=x_0+P_k^*(A)r_0. xk+1=x0+Pk(A)r0.下面我们证明, 在Krylov空间 K ( r 0 ; k ) \mathscr{K}(r_0;k) K(r0;k)内寻得 k k k步的所有算法中, 算法2表现最好, 即: k k k步之后算法2达到的迭代项离 x ∗ x^* x是最近的. 这里的距离为加权范数诱导的距离, ∥ z ∥ A 2 = z T A z . \Vert z\Vert_A^2=z^TAz. zA2=zTAz.(回忆我们在最速下降法的分析中也用到了这种带权的距离, 我们还会在后面比较共轭梯度法与最速下降法.) 使用这一范数, 我们可得到 1 2 ∥ x − x ∗ ∥ A 2 = 1 2 ( x − x ∗ ) T A ( x − x ∗ ) = ϕ ( x ) − ϕ ( x ∗ ) . \frac{1}{2}\Vert x-x^*\Vert_A^2=\frac{1}{2}(x-x^*)^TA(x-x^*)=\phi(x)-\phi(x^*). 21xxA2=21(xx)TA(xx)=ϕ(x)ϕ(x).也就是说自变量的带权距离反映了函数值的差.
定理2是说, x k + 1 x_{k+1} xk+1 S k S_k Sk上极小化 ϕ \phi ϕ, 也就是 ∥ x − x ∗ ∥ A 2 \Vert x-x^*\Vert_A^2 xxA2. 换句话说, 就是 P k ∗ P_k^* Pk是如下问题的解: min ⁡ P k ∥ x 0 + P k ( A ) r 0 − x ∗ ∥ A . \min_{P_k}\Vert x_0+P_k(A)r_0-x^*\Vert_A. Pkminx0+Pk(A)r0xA.我们对上述问题做一些变换. 由于 r 0 = A x 0 − b = A x 0 − A x ∗ = A ( x 0 − x ∗ ) , r_0=Ax_0-b=Ax_0-Ax^*=A(x_0-x^*), r0=Ax0b=Ax0Ax=A(x0x),所以 x k + 1 − x ∗ = x 0 + P k ∗ ( A ) r 0 − x ∗ = [ I + P k ∗ ( A ) A ] ( x 0 − x ∗ ) . x_{k+1}-x^*=x_0+P_k^*(A)r_0-x^*=[I+P_k^*(A)A](x_0-x^*). xk+1x=x0+Pk(A)r0x=[I+Pk(A)A](x0x). 0 &lt; λ 1 ≤ λ 2 ≤ ⋯ ≤ λ n 0&lt;\lambda_1\le\lambda_2\le\cdots\le\lambda_n 0<λ1λ2λn A A A的特征值, v 1 , v 2 , … , v n v_1,v_2,\ldots,v_n v1,v2,,vn为对应的相互标准正交的特征向量, 因此有 A A A的谱分解 A = ∑ i = 1 n λ i v i v i T . A=\sum_{i=1}^n\lambda_iv_iv_i^T. A=i=1nλiviviT.因为特征向量全体张成整个 R n \mathbb{R}^n Rn, 所以存在 ξ i , i = 1 , … , n \xi_i,i=1,\ldots,n ξi,i=1,,n使得 x 0 − x ∗ = ∑ i = 1 n ξ i v i . x_0-x^*=\sum_{i=1}^n\xi_iv_i. x0x=i=1nξivi.从而 x k + 1 − x ∗ = ∑ i = 1 n [ 1 + λ i P k ∗ ( λ i ) ] ξ i v i . x_{k+1}-x^*=\sum_{i=1}^n[1+\lambda_iP_k^*(\lambda_i)]\xi_iv_i. xk+1x=i=1n[1+λiPk(λi)]ξivi.由于 ∥ z ∥ A 2 = z T A z = ∑ i = 1 n λ i ( v i T z ) 2 \Vert z\Vert_A^2=z^TAz=\sum_{i=1}^n\lambda_i(v_i^Tz)^2 zA2=zTAz=i=1nλi(viTz)2, 所以 ∥ x k + 1 − x ∗ ∥ A 2 = ∑ i = 1 n λ i [ 1 + λ i P k ∗ ( λ i ) ] 2 ξ i 2 . \Vert x_{k+1}-x^*\Vert_A^2=\sum_{i=1}^n\lambda_i[1+\lambda_iP_k^*(\lambda_i)]^2\xi_i^2. xk+1xA2=i=1nλi[1+λiPk(λi)]2ξi2.由于由共轭梯度法诱导的多项式 P k ∗ P_k^* Pk在此范数下是最优的, 因此有 ∥ x k + 1 − x ∗ ∥ A 2 = min ⁡ P k ∑ i = 1 n λ i [ 1 + λ i P k ( λ i ) ] 2 ξ i 2 . \Vert x_{k+1}-x^*\Vert_A^2=\min_{P_k}\sum_{i=1}^n\lambda_i[1+\lambda_iP_k(\lambda_i)]^2\xi_i^2. xk+1xA2=Pkmini=1nλi[1+λiPk(λi)]2ξi2.提出最大的 [ 1 + λ i P k ( λ i ) ] 2 [1+\lambda_iP_k(\lambda_i)]^2 [1+λiPk(λi)]2, 我们有 ∥ x k + 1 − x ∗ ∥ A 2 ≤ min ⁡ P k max ⁡ 1 ≤ i ≤ n [ 1 + λ i P k ( λ i ) ] 2 ( ∑ j = 1 n λ j ξ j 2 ) = min ⁡ P k max ⁡ 1 ≤ i ≤ n [ 1 + λ i P k ( λ i ) ] 2 ∥ x 0 − x ∗ ∥ A 2 . \begin{aligned}\Vert x_{k+1}-x^*\Vert_A^2&amp;\le\min_{P_k}\max_{1\le i\le n}[1+\lambda_iP_k(\lambda_i)]^2\left(\sum_{j=1}^n\lambda_j\xi_j^2\right)\\&amp;=\min_{P_k}\max_{1\le i\le n}[1+\lambda_iP_k(\lambda_i)]^2\Vert x_0-x^*\Vert_A^2.\end{aligned} xk+1xA2Pkmin1inmax[1+λiPk(λi)]2(j=1nλjξj2)=Pkmin1inmax[1+λiPk(λi)]2x0xA2.上式使我们可通过估计 min ⁡ P k max ⁡ 1 ≤ i ≤ n [ 1 + λ i P k ( λ i ) ] 2 \min_{P_k}\max_{1\le i\le n}[1+\lambda_iP_k(\lambda_i)]^2 Pkmin1inmax[1+λiPk(λi)]2来量化共轭梯度法的收敛速度. 换句话说, 我们可以找到一个 P k P_k Pk (不见得是 P k ∗ P_k^* Pk) 使得这一表达式尽可能地小. 在某些特殊情形下, 我们可以解析地找到这个多项式并得到关于共轭梯度法的一些有趣的性质. 下面就是一个例子.

定理4 A A A仅有 r r r个不同的特征值, 则共轭梯度法至多 r r r终止.
证明: 假设 λ 1 , λ 2 , … , λ n \lambda_1,\lambda_2,\ldots,\lambda_n λ1,λ2,,λn中有 r r r个不同的特征值 τ 1 &lt; τ 2 &lt; ⋯ &lt; τ r \tau_1&lt;\tau_2&lt;\cdots&lt;\tau_r τ1<τ2<<τr. 定义多项式 Q r ( λ ) Q_r(\lambda) Qr(λ) Q r ( λ ) = ( − 1 ) r τ 1 τ 2 ⋯ τ r ( λ − τ 1 ) ( λ − τ 2 ) ⋯ ( λ − τ r ) . Q_r(\lambda)=\frac{(-1)^r}{\tau_1\tau_2\cdots\tau_r}(\lambda-\tau_1)(\lambda-\tau_2)\cdots(\lambda-\tau_r). Qr(λ)=τ1τ2τr(1)r(λτ1)(λτ2)(λτr).注意 Q r ( λ i ) = 0 , i = 1 , 2 , … , n , Q r ( 0 ) = 1 Q_r(\lambda_i)=0, i=1,2,\ldots,n,Q_r(0)=1 Qr(λi)=0,i=1,2,,n,Qr(0)=1. 从而 Q r ( λ ) − 1 Q_r(\lambda)-1 Qr(λ)1 r r r次多项式且由一根 λ = 0 \lambda=0 λ=0. 由此定义 r − 1 r-1 r1次多项式 P ˉ r − 1 \bar{P}_{r-1} Pˉr1 P ˉ r − 1 = Q r ( λ ) − 1 λ . \bar{P}_{r-1}=\frac{Q_r(\lambda)-1}{\lambda}. Pˉr1=λQr(λ)1. min ⁡ P k max ⁡ 1 ≤ i ≤ n [ 1 + λ i P k ( λ i ) ] 2 \min_{P_k}\max_{1\le i\le n}[1+\lambda_iP_k(\lambda_i)]^2 Pkmin1inmax[1+λiPk(λi)]2中令 k = r − 1 k=r-1 k=r1我们有 0 ≤ min ⁡ P r − 1 max ⁡ 1 ≤ i ≤ n [ 1 + λ i P r − 1 ( λ i ) ] 2 ≤ max ⁡ 1 ≤ i ≤ n [ 1 + λ i P ˉ r − 1 ( λ i ) ] 2 = max ⁡ 1 ≤ i ≤ n Q r 2 ( λ i ) = 0. 0\le\min_{P_{r-1}}\max_{1\le i\le n}[1+\lambda_iP_{r-1}(\lambda_i)]^2\le\max_{1\le i\le n}[1+\lambda_i\bar{P}_{r-1}(\lambda_i)]^2=\max_{1\le i\le n}Q_r^2(\lambda_i)=0. 0Pr1min1inmax[1+λiPr1(λi)]21inmax[1+λiPˉr1(λi)]2=1inmaxQr2(λi)=0.因此对于 k = r − 1 k=r-1 k=r1, min ⁡ P k max ⁡ 1 ≤ i ≤ n [ 1 + λ i P k ( λ i ) ] 2 = 0. \min_{P_k}\max_{1\le i\le n}[1+\lambda_iP_k(\lambda_i)]^2=0. Pkmin1inmax[1+λiPk(λi)]2=0.所以 ∥ x r − x ∗ ∥ A 2 = 0 ⇒ x r = x ∗ \Vert x_r-x^*\Vert_A^2=0\Rightarrow x_r=x^* xrxA2=0xr=x. 证毕.

更有甚者, 我们有以下估计:
定理5 A A A有特征值 λ 1 ≤ λ 2 ≤ ⋯ ≤ λ n \lambda_1\le\lambda_2\le\cdots\le\lambda_n λ1λ2λn, 则我们有 ∥ x k + 1 − x ∗ ∥ A 2 ≤ ( λ n − k − λ 1 λ n − k + λ 1 ) 2 ∥ x 0 − x ∗ ∥ A 2 . \Vert x_{k+1}-x^*\Vert_A^2\le\left(\frac{\lambda_{n-k}-\lambda_1}{\lambda_{n-k}+\lambda_1}\right)^2\Vert x_0-x^*\Vert_A^2. xk+1xA2(λnk+λ1λnkλ1)2x0xA2.
证明 (Sketch): 选取多项式 P ˉ k \bar{P}_k Pˉk使得多项式 Q k + 1 ( λ ) = 1 + λ P ˉ k ( λ ) Q_{k+1}(\lambda)=1+\lambda\bar{P}_k(\lambda) Qk+1(λ)=1+λPˉk(λ) k k k个最大的特征值 λ n , λ n − 1 , … , λ n − k + 1 \lambda_n,\lambda_{n-1},\ldots,\lambda_{n-k+1} λn,λn1,,λnk+1 λ 1 \lambda_1 λ1 λ n − k \lambda_{n-k} λnk的中点为根. 可以证明 Q k + 1 Q_{k+1} Qk+1在余下的特征值 λ 1 , λ 2 , … , λ n − k \lambda_1,\lambda_2,\ldots,\lambda_{n-k} λ1,λ2,,λnk上的最大值就是 ( λ n − k − λ 1 ) / ( λ n − k + λ 1 ) (\lambda_{n-k}-\lambda_1)/(\lambda_{n-k}+\lambda_1) (λnkλ1)/(λnk+λ1).

比起定理5的详细证明, 其对于共轭梯度法在一些问题上表现的解释更加吸引人. 假设特征值如下图一般分布:特征值的簇

其中 A A A m m m个较大的特征值和 n − m n-m nm个较小的在1附近的特征值. 定义 ϵ = λ n − m − λ 1 \epsilon=\lambda_{n-m}-\lambda_1 ϵ=λnmλ1, 则定理5告诉我们在 m + 1 m+1 m+1步之后 ∥ x m + 1 − x ∗ ∥ A ≈ ϵ ∥ x 0 − x ∗ ∥ A . \Vert x_{m+1}-x^*\Vert_A\approx\epsilon\Vert x_0-x^*\Vert_A. xm+1xAϵx0xA.对于较小的 ϵ \epsilon ϵ, 我们有信心说共轭梯度法可在 m + 1 m+1 m+1步之后就提供解的较好估计.
我们也可以反过来用共轭梯度法的表现得到一些关于矩阵 A A A特征值分布的信息. 比如下图:共轭梯度法确定特征值分布

其中实线表示的是 A A A具有5个最大的特征值, 而剩下的较小特征值在0.95~1.05之间的情形, 虚线表示的是 A A A特征值随机分布的情形. 对于实线情形 (这时我们也说 A A A的谱呈簇状), 定理5会说误差对数会在第6步迭代得到一次显著的下降. 但实际上 (图中), 在第5步就已经下降了许多. 这也说明定理5只是给出了估计上界, 收敛速度可能会更快些. 进一步, 我们观察到下一步迭代又带来了误差对数的显著下降. 从定理4我们可以说, A A A几乎只有6个不同的特征值: 5个较大的特征值和1. 此时定理5就会说, 我们差不多可以在6步迭代后得到收敛. 不过实际上却是7步, 这是特征值在1附近的分散带来的效果. 相比之下, 不成簇的谱带来的收敛曲线是平缓均匀的.
另一方面, 我们可以得到基于 A A A的条件数的共轭梯度法的收敛估计. 由2-范数诱导的2-条件数的性质, 我们有 κ ( A ) = ∥ A ∥ 2 ∥ A − 1 ∥ 2 = λ n / λ 1 . \kappa(A)=\Vert A\Vert_2\Vert A^{-1}\Vert_2=\lambda_n/\lambda_1. κ(A)=A2A12=λn/λ1.可以证明 ∥ x k − x ∗ ∥ A ≤ 2 ( κ ( A ) − 1 κ ( A ) + 1 ) k ∥ x 0 − x ∗ ∥ A . \Vert x_k-x^*\Vert_A\le2\left(\frac{\sqrt{\kappa(A)}-1}{\sqrt{\kappa(A)}+1}\right)^k\Vert x_0-x^*\Vert_A. xkxA2(κ(A) +1κ(A) 1)kx0xA.这由定理5可以轻松证出, 这里我们给出不一样的证明方法.

定理6 共轭梯度法的误差有估计 ∥ x k − x ∗ ∥ A ≤ 2 ( κ ( A ) − 1 κ ( A ) + 1 ) k ∥ x 0 − x ∗ ∥ A . \Vert x_k-x^*\Vert_A\le2\left(\frac{\sqrt{\kappa(A)}-1}{\sqrt{\kappa(A)}+1}\right)^k\Vert x_0-x^*\Vert_A. xkxA2(κ(A) +1κ(A) 1)kx0xA.证明: 事实上, 从前面的推导中我们得到 ∥ x k − x ∗ ∥ A 2 ≤ min ⁡ P k − 1 max ⁡ 1 ≤ i ≤ n [ 1 + λ i P k − 1 ( λ i ) ] 2 ∥ x 0 − x ∗ ∥ A 2 ≤ min ⁡ P k − 1 max ⁡ a ≤ λ ≤ b [ 1 + λ P k − 1 ( λ ) ] 2 ∥ x 0 − x ∗ ∥ A 2 , \begin{aligned}\Vert x_k-x^*\Vert_A^2&amp;\le\min_{P_{k-1}}\max_{1\le i\le n}[1+\lambda_iP_{k-1}(\lambda_i)]^2\Vert x_0-x^*\Vert_A^2\\&amp;\le\min_{P_{k-1}}\max_{a\le\lambda\le b}[1+\lambda P_{k-1}(\lambda)]^2\Vert x_0-x^*\Vert_A^2,\end{aligned} xkxA2Pk1min1inmax[1+λiPk1(λi)]2x0xA2Pk1minaλbmax[1+λPk1(λ)]2x0xA2,其中 a = λ 1 , b = λ n a=\lambda_1,b=\lambda_n a=λ1,b=λn. 由Chebyshev多项式逼近定理知, 最优化问题 min ⁡ P k − 1 max ⁡ a ≤ λ ≤ b [ 1 + λ P k − 1 ( λ ) ] 2 \min_{P_{k-1}}\max_{a\le\lambda\le b}[1+\lambda P_{k-1}(\lambda)]^2 Pk1minaλbmax[1+λPk1(λ)]2具有唯一解 1 + λ P ˉ k − 1 ( λ ) = T k ( b + a − 2 λ b − a ) T k ( b + a b − a ) , 1+\lambda \bar{P}_{k-1}(\lambda)=\frac{T_k\left(\frac{b+a-2\lambda}{b-a}\right)}{T_k\left(\frac{b+a}{b-a}\right)}, 1+λPˉk1(λ)=Tk(bab+a)Tk(bab+a2λ),其中 T k ( x ) T_k(x) Tk(x) k k kChebyshev多项式. 由Chebyshev多项式的性质知 max ⁡ a ≤ λ ≤ b ∣ 1 + λ P ˉ k − 1 ( λ ) ∣ = 1 T k ( b + a b − a ) ≤ 2 ( κ ( A ) − 1 κ ( A ) + 1 ) k , \max_{a\le\lambda\le b}|1+\lambda\bar{P}_{k-1}(\lambda)|=\frac{1}{T_k\left(\frac{b+a}{b-a}\right)}\le2\left(\frac{\sqrt{\kappa(A)}-1}{\sqrt{\kappa(A)}+1}\right)^k, aλbmax1+λPˉk1(λ)=Tk(bab+a)12(κ(A) +1κ(A) 1)k,于是就有 ∥ x k − x ∗ ∥ A ≤ 2 ( κ ( A ) − 1 κ ( A ) + 1 ) k ∥ x 0 − x ∗ ∥ A . \Vert x_k-x^*\Vert_A\le2\left(\frac{\sqrt{\kappa(A)}-1}{\sqrt{\kappa(A)}+1}\right)^k\Vert x_0-x^*\Vert_A. xkxA2(κ(A) +1κ(A) 1)kx0xA.

此定理给出的误差上界往往要大于实际, 不过它仍能够为我们带来一些重要的信息: 共轭梯度法的收敛速度依赖于 A A A的2-条件数, 或具体说依赖于 A A A最大特征值与最小特征值的比值. 若 A A A本身的2-条件数足够接近1或者等价地说 A A A的特征值较集聚, 则此定理充分地推出共轭梯度法的收敛速度将非常快. 否则, 我们应当在共轭梯度法实施之前对 A A A做一些"手脚", 这就是下面要谈及的预处理问题.

这里再提一下共轭梯度法与最速下降法收敛速度之比较. 回忆第三章中最速下降法的收敛速度 ∥ x k + 1 − x ∗ ∥ Q ≤ ( λ n − λ 1 λ n + λ 1 ) ∥ x k − x ∗ ∥ Q = ( κ ( Q ) − 1 κ ( Q ) + 1 ) ∥ x k − x ∗ ∥ Q . \Vert x_{k+1}-x^*\Vert_Q\le\left(\frac{\lambda_n-\lambda_1}{\lambda_n+\lambda_1}\right)\Vert x_k-x^*\Vert_Q=\left(\frac{\kappa(Q)-1}{\kappa(Q)+1}\right)\Vert x_k-x^*\Vert_Q. xk+1xQ(λn+λ1λnλ1)xkxQ=(κ(Q)+1κ(Q)1)xkxQ.递推得到 ∥ x k − x ∗ ∥ Q ≤ ( κ ( Q ) − 1 κ ( Q ) + 1 ) k ∥ x 0 − x ∗ ∥ Q . \Vert x_k-x^*\Vert_Q\le\left(\frac{\kappa(Q)-1}{\kappa(Q)+1}\right)^k\Vert x_0-x^*\Vert_Q. xkxQ(κ(Q)+1κ(Q)1)kx0xQ.因为 λ − 1 λ + 1 \frac{\lambda-1}{\lambda+1} λ+1λ1 λ &gt; 1 \lambda&gt;1 λ>1时是单调递增的, 因此共轭梯度法的 (渐进)收敛速度是优于最速下降法的. 注意这里共轭梯度法的误差上界还是保守估计, 而且共轭梯度法还具有计算和存储的双重优势. 可以说在求解线性系统上, 共轭梯度法要优于最速下降法.

1.5 预处理

1.4中我们谈到共轭梯度法的误差上界与系数矩阵 A A A的2-条件数紧密相关, 具体说, 若 A A A的2-条件数越接近于1, 则理论上共轭梯度法的收敛速度会更快; 极端情况下, A A A的2-条件数就是1, 此时共轭梯度法将一步收敛.
而对于一般的 A A A, 我们不能先验地苛求其特征值具有何种特殊的分布. 相比之下, 后验地对其处理才更加易于实施. 受 A A A的原有正交相似的启发, 我们可寻求可逆变换矩阵 C C C使得 C − T A C − 1 C^{-T}AC^{-1} CTAC1的特征值的分布要优于 A A A, 从而我们只需求解以 C − T A C − 1 C^{-T}AC^{-1} CTAC1为系数矩阵的问题, 再最后变换为原解即可. 具体说来, 设有可逆矩阵 C C C, 做变量代换 y = C x y=Cx y=Cx, 则 ϕ \phi ϕ此时变成 ϕ ^ ( y ) = 1 2 y T ( C − T A C − 1 ) y − ( C − T b ) T y . \hat{\phi}(y)=\frac{1}{2}y^T(C^{-T}AC^{-1})y-(C^{-T}b)^Ty. ϕ^(y)=21yT(CTAC1)y(CTb)Ty.使用算法2极小化 ϕ ^ \hat{\phi} ϕ^等价于求解线性系统 ( C − T A C − 1 ) y = C − T b . (C^{-T}AC^{-1})y=C^{-T}b. (CTAC1)y=CTb.此时收敛速度就取决于 C − T A C − 1 ≜ A ~ C^{-T}AC^{-1}\triangleq\tilde{A} CTAC1A~的特征值分布.
C C C的作用应当有:

  • 使得 A ~ \tilde{A} A~的条件数显著小于 A A A的条件数; 或者
  • 使得 A ~ \tilde{A} A~的特征值更加集聚成簇, 从而共轭梯度法能在更少的步数下收敛.
1.5.1 算法2的预处理版本

我们不需要显式地作变换 y = C x y=Cx y=Cx. 相比之下, 将变换内嵌入算法2显得更加经济实惠 (否则需要矩阵-矩阵乘积). 我们也不显式地使用 C C C, 而是设 M = C T C M=C^TC M=CTC, 此矩阵也称作预处理子. 实际上若 C − T A C − 1 C^{-T}AC^{-1} CTAC1的特征值都接近于1, 即有 C − T A C − 1 ≈ I ⇒ M = C T C ≈ A . C^{-T}AC^{-1}\approx I\Rightarrow M=C^TC\approx A. CTAC1IM=CTCA.此时 M M M相当于是 A A A的逆.

算法3 (Preconditioned CG)
Given x 0 x_0 x0, preconditioner M M M;
Set r 0 ← A x 0 − b r_0\leftarrow Ax_0-b r0Ax0b;
Solve M y 0 = r 0 My_0=r_0 My0=r0 for y 0 y_0 y0;
Set p 0 = − y 0 , k ← 0 p_0=-y_0,k\leftarrow 0 p0=y0,k0;
while r k ≠ 0 r_k\ne0 rk̸=0
α k ← r k T y k p k T A p k \quad\quad\alpha_k\leftarrow\frac{r_k^Ty_k}{p_k^TAp_k} αkpkTApkrkTyk;
x k + 1 ← x k + α k p k \quad\quad x_{k+1}\leftarrow x_k+\alpha_kp_k xk+1xk+αkpk;
r k + 1 ← r k + α k A p k \quad\quad r_{k+1}\leftarrow r_k+\alpha_kAp_k rk+1rk+αkApk;
S o l v e &MediumSpace; M y k + 1 = r k + 1 \quad\quad\mathrm{Solve}\:My_{k+1}=r_{k+1} SolveMyk+1=rk+1;
β k + 1 ← r k + 1 T y k + 1 r k T y k \quad\quad\beta_{k+1}\leftarrow\frac{r_{k+1}^Ty_{k+1}}{r_k^Ty_k} βk+1rkTykrk+1Tyk+1;
p k + 1 ← − y k + 1 + β k + 1 p k \quad\quad p_{k+1}\leftarrow-y_{k+1}+\beta_{k+1}p_k pk+1yk+1+βk+1pk;
k ← k + 1 \quad\quad k\leftarrow k+1 kk+1;
end (while)

若在算法3中令 M = I M=I M=I, 则回到算法2. 此时残差的正交性变成了 r i T M − 1 r j = 0 , i ≠ j . r_i^TM^{-1}r_j=0,\quad i\ne j. riTM1rj=0,i̸=j.就计算量而言, 算法3与算法2的主要区别在于是否需要求解 M y = r My=r My=r (当然若有 C C C的显式表达, 我们就可以设计更好的算法求解之).

1.5.2 实用预处理子

没有任何一种预处理的方式是普适最佳的. 我们在设计预处理的时候需要关注许多方面的问题, 例如

  • M M M的有效性, 即是否是 A A A的较好近似, 亦或能够使 A ~ \tilde{A} A~的特征值聚集成簇;
  • M M M的计算与存储;
  • 线性系统 M y = r My=r My=r的求解.

往往这些目标不能同时达到, 此时我们需要权衡利弊 (tradeoff) 以获得更佳方案. 预处理子的设计没有统一的方案, 随着问题的不同而不同. 例如在数值求解偏微分方程时, 我们选取的 M M M往往使得 M y = r My=r My=r为系统 A x = b Ax=b Ax=b较为粗糙的近似 (例如ILU预处理). 而在其他的领域, 问题的结构和起源则会成为设计预处理子的关键.
尽管如此, 还是有一些一般性的预处理子可供选择, 它们在各个问题的表现有所不同. 其中包括: 对称逐次超松弛(SSOR)预处理子、不完全Cholesky分解预处理子与带状预处理子. 一般不完全Cholesky分解预处理子是最高效的. 其想法很简单, 我们不精确地计算 A A A的Cholesky分解 A = L L T A=LL^T A=LLT, 而是计算近似的因子 L ~ \tilde{L} L~ (比 L L L更加稀疏), 使得 A ≈ L ~ L ~ T A\approx\tilde{L}\tilde{L}^T AL~L~T. 令 C = L ~ T C=\tilde{L}^T C=L~T, 就有 M = L ~ L ~ T M=\tilde{L}\tilde{L}^T M=L~L~T以及 C − T A C − 1 = L ~ − 1 A L ~ − T ≈ I . C^{-T}AC^{-1}=\tilde{L}^{-1}A\tilde{L}^{-T}\approx I. CTAC1=L~1AL~TI.此时具有显式 C C C的表达, 且 C C C还是上三角矩阵, 从而我们不需要在算法3中显式计算 M M M; M y = r My=r My=r的求解也可用回代-前代的方式经济地求解.
不完全Cholesky分解也有一定的缺陷. 例如, 其导出的 M M M可能不是(充分)正定的, 因此需要我们增加一些防护措施 (safeguard). 再比如, 由于我们在 L ~ \tilde{L} L~上强加了稀疏性的限制, 这可能会带来数值上的不稳定. 当然我们可以使用更稠密的 L ~ \tilde{L} L~增加稳定性, 但这样一来计算量也就有所提升.

2. 非线性共轭梯度法

之前指出, 线性共轭梯度法可用于求解凸二次函数的规划问题. 那么我们自然要问: 该算法能否推广至求解一般的凸函数问题或者非线性问题. 本节我们就来讨论非线性情形下线性共轭梯度法的变体——非线性共轭梯度法——及其优良的性质.

2.1 Fletcher-Reeves(FR)方法

FR方法想法很直接, 其只在算法2上改动两处:

  1. α k \alpha_k αk的计算: 先前我们能在凸二次函数的基础上解析地计算 α k \alpha_k αk的表达式. 但在一般情形下, 解析计算难以实施. 我们应当使用某种手段近似地获取 ϕ \phi ϕ在搜索方向上的最小值点;
  2. 残差与梯度: 先前在凸二次函数上残差就等于梯度. 一般情形下, 我们需要额外估计梯度.

算法4 (FR)
Given x 0 x_0 x0;
Evaluate f 0 = f ( x 0 ) , ∇ f 0 = ∇ f ( x 0 ) f_0=f(x_0),\nabla f_0=\nabla f(x_0) f0=f(x0),f0=f(x0);
Set p o ← − ∇ f 0 , k ← 0 p_o\leftarrow -\nabla f_0,k\leftarrow 0 pof0,k0;
while ∇ f k ≠ 0 \nabla f_k\ne0 fk̸=0
\quad\quad Compute α k \alpha_k αk and set x k + 1 = x k + α k p k x_{k+1}=x_k+\alpha_kp_k xk+1=xk+αkpk;
\quad\quad Evaluate ∇ f k + 1 \nabla f_{k+1} fk+1;
β k + 1 F R ← ∇ f k + 1 T ∇ f k + 1 ∇ f k T ∇ f k \quad\quad\beta_{k+1}^{\mathrm{FR}}\leftarrow\frac{\nabla f_{k+1}^T\nabla f_{k+1}}{\nabla f_k^T\nabla f_k} βk+1FRfkTfkfk+1Tfk+1;
p k + 1 ← − ∇ f k + 1 + β k + 1 F R p k \quad\quad p_{k+1}\leftarrow -\nabla f_{k+1}+\beta_{k+1}^{\mathrm{FR}}p_k pk+1fk+1+βk+1FRpk;
k ← k + 1 \quad\quad k\leftarrow k+1 kk+1;
end (while)

注意当 f f f为严格凸二次函数时, 算法4就回到了算法2. 算法4在处理大型非线性优化时具有独到的优势:

  • 每步迭代只需要函数值和梯度;
  • 每步计算均不涉及矩阵运算;
  • 只需存储少量的向量.

下面我们来完善算法4中的细节—— α k \alpha_k αk的选取. α k \alpha_k αk选取不善, 则 p k p_k pk就可能不是个下降方向. 对 p k = − ∇ f k + β k F R p k − 1 p_k=-\nabla f_k+\beta_k^{\mathrm{FR}}p_{k-1} pk=fk+βkFRpk1两边内积上向量 ∇ f k \nabla f_k fk, 得到 ∇ f k T p k = − ∥ ∇ f k ∥ 2 + β k F R ∇ f k T p k − 1 . \nabla f_k^Tp_k=-\Vert \nabla f_k\Vert^2+\beta_k^{\mathrm{FR}}\nabla f_k^Tp_{k-1}. fkTpk=fk2+βkFRfkTpk1.

  • 若对于 α k − 1 \alpha_{k-1} αk1的线搜索精确, 则 α k − 1 \alpha_{k-1} αk1就是 f f f沿着方向 p k − 1 p_{k-1} pk1的局部极小点, 从而 ∇ f k T p k − 1 = 0. \nabla f_k^Tp_{k-1}=0. fkTpk1=0.此时有 ∇ f k T p k &lt; 0 \nabla f_k^Tp_k&lt;0 fkTpk<0, 从而 p k p_k pk确为下降方向.
  • 若对于 α k − 1 \alpha_{k-1} αk1的线搜索非精确, 则 β k F R ∇ f k T p k − 1 \beta_k^{\mathrm{FR}}\nabla f_k^Tp_{k-1} βkFRfkTpk1就可能决定右端的正负, 进而可能会导致 ∇ f k T p k &gt; 0 \nabla f_k^Tp_k&gt;0 fkTpk>0. 此时若在线搜索上加强Wolfe条件, 即 f ( x k + α k p k ) ≤ f ( x k ) + c 1 α k ∇ f k T p k , ∣ ∇ f ( x k + α k p k ) T p k ∣ ≤ − c 2 ∇ f k T p k , \begin{aligned}f(x_k+\alpha_kp_k)&amp;\le f(x_k)+c_1\alpha_k\nabla f_k^Tp_k,\\|\nabla f(x_k+\alpha_kp_k)^Tp_k|&amp;\le-c_2\nabla f_k^Tp_k,\end{aligned} f(xk+αkpk)f(xk+αkpk)Tpkf(xk)+c1αkfkTpk,c2fkTpk,其中 0 &lt; c 1 &lt; c 2 &lt; 1 2 0&lt;c_1&lt;c_2&lt;\frac{1}{2} 0<c1<c2<21 (这要比之前 c 2 &lt; 1 c_2&lt;1 c2<1要强), 利用我们接下来要证明的定理7, 就可以说 p k p_k pk是下降方向.

2.2 Polak-Ribiere(PR)方法及其变体

FR方法具有许多变体, 它们的主要区别都在于 β k \beta_k βk的选取上.

  • PR方法: Polak与Ribiere提出的参数为 β k + 1 P R = ∇ f k + 1 T ( ∇ f k + 1 − ∇ f k ) ∥ ∇ f k ∥ 2 . \beta_{k+1}^{\mathrm{PR}}=\frac{\nabla f_{k+1}^T(\nabla f_{k+1}-\nabla f_k)}{\Vert\nabla f_k\Vert^2}. βk+1PR=fk2fk+1T(fk+1fk).注意到, 当 f f f时强凸二次函数且线搜索精确时, 由于不同迭代步上的梯度是相互正交的 (因为残差相互正交), 所以 β k + 1 P R = β k + 1 F R \beta_{k+1}^{\mathrm{PR}}=\beta_{k+1}^{\mathrm{FR}} βk+1PR=βk+1FR. 然而当用于一般的非线性函数且线搜索非精确时, FR与PR的表现差异就相当大了. 数值实验表示, PR方法一般要更加强健和高效.
    不过PR方法也有缺陷: 尽管加强Wolfe条件, 我们仍不能保证 p k p_k pk是下降方向. 不过如果我们修正 β \beta β β k + 1 + = max ⁡ { β k + 1 P R , 0 } , \beta_{k+1}^+=\max\{\beta_{k+1}^{\mathrm{PR}},0\}, βk+1+=max{βk+1PR,0},从而得到PR+方法, 此时只需稍稍改变强Wolfe条件即可产生下降方向 (后面我们会提到这相当于一种重启策略).
  • HS方法: 还有许多其他的 β k + 1 \beta_{k+1} βk+1可供选择, 在目标函数强凸二次且线搜索精确时, 它们都与FR方法中的 β k + 1 F R \beta_{k+1}^{\mathrm{FR}} βk+1FR相契合. 例如Hestenes-Stiefel(HS)方法, 其中 β k + 1 H S = ∇ f k + 1 T ( ∇ f k + 1 − ∇ f k ) ( ∇ f k + 1 − ∇ f k ) T p k . \beta_{k+1}^{\mathrm{HS}}=\frac{\nabla f_{k+1}^T(\nabla f_{k+1}-\nabla f_k)}{(\nabla f_{k+1}-\nabla f_k)^Tp_k}. βk+1HS=(fk+1fk)Tpkfk+1T(fk+1fk).HS方法的理论收敛性质和实际表现与PR方法都很相近. 实际上, HS方法的公式可通过要求相邻搜索方向对 [ x k , x k + 1 ] [x_k,x_{k+1}] [xk,xk+1]上的平均Hessian相互共轭得到, 其中平均Hessian定义为 G ˉ k = ∫ 0 1 [ ∇ 2 f ( x k + τ α k p k ) ] &ThinSpace; d τ . \bar{G}_k=\int_0^1[\nabla^2f(x_k+\tau\alpha_kp_k)]\,\mathrm{d}\tau. Gˉk=01[2f(xk+ταkpk)]dτ.由Taylor定理我们知道, ∇ f k + 1 = ∇ f k + α k G ˉ k p k \nabla f_{k+1}=\nabla f_k+\alpha_k\bar{G}_kp_k fk+1=fk+αkGˉkpk, 从而若对 p k + 1 = − ∇ f k + 1 + β k + 1 p k p_{k+1}=-\nabla f_{k+1}+\beta_{k+1}p_k pk+1=fk+1+βk+1pk要求 p k + 1 T G ˉ k p k = 0 p_{k+1}^T\bar{G}_kp_k=0 pk+1TGˉkpk=0就可以得到 β k + 1 H S \beta_{k+1}^{\mathrm{HS}} βk+1HS.
  • FR-PR方法: 后面我们会看到, 所有满足 ∣ β k ∣ ≤ β k F R , ∀ k ≥ 2 |\beta_k|\le\beta_k^{\mathrm{FR}}, \quad \forall k\ge2 βkβkFR,k2 β k \beta_k βk都能保证全局收敛性. 这一命题启发我们在PR方法上做一些修正, 即在 k ≥ 2 k\ge2 k2上令 β k = { − β k F R i f &MediumSpace; β k P R &lt; − β k F R , β k P R i f &MediumSpace; ∣ β k P R ∣ ≤ β k F R , β k F R i f &MediumSpace; β k P R &gt; β k F R . \beta_k=\left\{\begin{array}{rl}-\beta_k^{\mathrm{FR}} &amp; \mathrm{if}\:\beta_k^{\mathrm{PR}}&lt;-\beta_k^{\mathrm{FR}},\\\beta_k^{\mathrm{PR}} &amp; \mathrm{if}\:|\beta_k^{\mathrm{PR}}|\le\beta_k^{\mathrm{FR}},\\\beta_k^{\mathrm{FR}}&amp; \mathrm{if}\:\beta_k^{\mathrm{PR}}&gt;\beta_k^{\mathrm{FR}}.\end{array}\right. βk=βkFRβkPRβkFRifβkPR<βkFR,ifβkPRβkFR,ifβkPR>βkFR.这样的 β k \beta_k βk在某些应用上表现很好, 我们称对应的方法为FR-PR方法.
  • 其他: 以下二者具有良好的理论性质和数值表现. 而且仅需在线搜索上加Wolfe条件即可保证下降.
    1. β k + 1 = ∥ f k + 1 ∥ 2 ( ∇ f k + 1 − ∇ f k ) T p k \beta_{k+1}=\frac{\Vert f_{k+1}\Vert^2}{(\nabla f_{k+1}-\nabla f_k)^Tp_k} βk+1=(fk+1fk)Tpkfk+12;
    2. β k + 1 = ( y ^ k − 2 p k ∥ y ^ k ∥ 2 y ^ k T p k ) ∇ f k + 1 y ^ k T p k , y ^ k = ∇ f k + 1 − ∇ f k \beta_{k+1}=\left(\hat{y}_k-2p_k\frac{\Vert\hat{y}_k\Vert^2}{\hat{y}_k^Tp_k}\right)\frac{\nabla f_{k+1}}{\hat{y}_k^Tp_k},\quad \hat{y}_k=\nabla f_{k+1}-\nabla f_k βk+1=(y^k2pky^kTpky^k2)y^kTpkfk+1,y^k=fk+1fk.

2.3 二次终止性与重启

二次终止性是指, 当非线性共轭梯度法用于处理严格凸二次函数时, 算法退化为线性情形下的算法2, 从而同样能达到在至多 n n n步内终止. 值得注意的是, 为了保证这一点, 我们需要在步长 α k \alpha_k αk的选取上加一些条件. 例如, 使用第三章中的插值方法获取 α k \alpha_k αk.
重启是非线性共轭梯度法的一种修正手段, 其操作即为每 n n n步在 p k + 1 = − ∇ f k + 1 + β k + 1 p k p_{k+1}=-\nabla f_{k+1}+\beta_{k+1}p_k pk+1=fk+1+βk+1pk中令 β k + 1 = 0 \beta_{k+1}=0 βk+1=0, 从而取负梯度为当前搜索方向 (从而一定是下降方向, 这一点在算法的进行会使得 p k p_k pk逐渐与负梯度正交时显得尤为重要). 重启的作用在于, 定期地清理算法中的无益的过期信息. 我们甚至可以证明关于重启的一个较强的结论: 重启的共轭梯度法是 n n n-步二次收敛的, 即 ∥ x k + n − x ∗ ∥ = O ( ∥ x k − x ∗ ∥ 2 ) . \Vert x_{k+n}-x^*\Vert=O(\Vert x_k-x^*\Vert^2). xk+nx=O(xkx2).这一点并不奇怪, 我们从以下两种情形说明:

  • 当解附近 f f f为强凸二次函数, 但在其他地方并不是二次函数. 假设算法产生的迭代点收敛于解, 从而最终会进入二次区域. 从某一点开始, 算法重启, 而往后就直接是在实施线性共轭梯度法. 特别地, 算法在 n n n步内终止. 此时重启是重要的, 因为线性共轭梯度法的 n n n步终止的前提, 是初始搜索方向为负梯度.
  • 当解附近并不是二次函数. 由Taylor定理, 目标函数仍然可以用二次函数近似. 不过因此, 我们也不能再苛求 n n n步收敛.

尽管 n n n-步二次收敛在理论上很好, 但并不能用于实际操作. 这是因为, 共轭梯度法仅在大规模问题上应用良好 (中小规模的问题上, 共轭梯度法对舍入误差的敏感性会有影响. 这种问题上, 可能远没到 n n n步算法就已经收敛, 来不及重启了). 因此, 非线性共轭梯度法在实际应用中要么不重启, 要么以不同于迭代计数的方式重启. 例如, 我们知道在 f f f为二次函数时, 有梯度之间的正交关系. 因此规定, 当两相邻梯度"相当"不正交时, 即 ∣ ∇ f k T ∇ f k − 1 ∣ ∥ ∇ f k ∥ 2 ≥ v , \frac{|\nabla f_k^T\nabla f_{k-1}|}{\Vert\nabla f_k\Vert^2}\ge v, fk2fkTfk1v,我们就重启算法. 这里 v v v的常用取值为0.1.
之前提到, PR+方法中的 β k + 1 \beta_{k+1} βk+1实际上就是一种重启策略. 回忆 β k + 1 + = max ⁡ { β k + 1 P R , 0 } , \beta_{k+1}^+=\max\{\beta_{k+1}^{\mathrm{PR}},0\}, βk+1+=max{βk+1PR,0},以及 β k + 1 P R = ∇ f k + 1 T ( ∇ f k + 1 − ∇ f k ) ∥ ∇ f k ∥ 2 . \beta_{k+1}^{\mathrm{PR}}=\frac{\nabla f_{k+1}^T(\nabla f_{k+1}-\nabla f_k)}{\Vert\nabla f_k\Vert^2}. βk+1PR=fk2fk+1T(fk+1fk).PR+中, 只要 β k + 1 P R &lt; 0 \beta_{k+1}^{\mathrm{PR}}&lt;0 βk+1PR<0即取负梯度为下一个搜索方向, 实现重启. 而 β k + 1 P R &lt; 0 \beta_{k+1}^{\mathrm{PR}}&lt;0 βk+1PR<0当且仅当 ∇ f k + 1 T ∇ f k \nabla f_{k+1}^T\nabla f_k fk+1Tfk充分大 (至少大于 ∥ f k + 1 ∥ 2 \Vert f_{k+1}\Vert^2 fk+12), 而这也就说明梯度之间的正交性被破坏了. 等价地就是上面 v v v取1的情形. 因此相比于上面陈述的重启方案, PR+方法的重启更加不频繁.

2.4 FR方法的收敛性

2.4.1 FR方法的性质

下面这个定理说的是, 在一定条件下, FR方法产生的搜索方向都是下降方向.

定理7 假设算法4中的步长选取满足强Wolfe条件 (其中 0 &lt; c 2 &lt; 1 2 0&lt;c_2&lt;\frac{1}{2} 0<c2<21) (只需假设水平集 L = { x : f ( x ) ≤ f ( x 0 ) } \mathcal{L}=\{x:f(x)\le f(x_0)\} L={x:f(x)f(x0)}有界以及 f f f二阶连续可微, 由第三章的定理即可得存在性), 则算法产生的下降方向 p k p_k pk满足以下不等式: − 1 1 − c 2 ≤ ∇ f k T p k ∥ ∇ f k ∥ 2 ≤ 2 c 2 − 1 1 − c 2 , k = 0 , 1 , … . -\frac{1}{1-c_2}\le\frac{\nabla f_k^Tp_k}{\Vert\nabla f_k\Vert^2}\le\frac{2c_2-1}{1-c_2},\quad k=0,1,\ldots. 1c21fk2fkTpk1c22c21,k=0,1,.
证明: 首先注意函数 t ( ξ ) = d e f ( 2 ξ − 1 ) / ( 1 − ξ ) t(\xi)\xlongequal{def}(2\xi-1)/(1-\xi) t(ξ)def (2ξ1)/(1ξ)在区间 [ 0 , 1 / 2 ] [0,1/2] [0,1/2]上单调递增, 且 t ( 0 ) = − 1 , t ( 1 / 2 ) = 0 t(0)=-1,t(1/2)=0 t(0)=1,t(1/2)=0. 因此对于 c 2 ∈ ( 0 , 1 / 2 ) c_2\in(0,1/2) c2(0,1/2), 有 − 1 &lt; 2 c 2 − 1 1 − c 2 &lt; 0. -1&lt;\frac{2c_2-1}{1-c_2}&lt;0. 1<1c22c21<0.因此若不等式成立, 则立得 p k p_k pk是下降方向.
下面使用数学归纳法证明不等式.

  1. k = 0 k=0 k=0时, 不等式中间为-1, 从而成立;
  2. 假设对于某个 k ≥ 1 k\ge1 k1成立不等式. 由搜索方向公式和 β k + 1 \beta_{k+1} βk+1的计算公式, 我们有 ∇ f k + 1 T p k + 1 ∥ ∇ f k + 1 ∥ 2 = − 1 + β k + 1 ∇ f k + 1 T p k ∥ ∇ f k + 1 ∥ 2 = − 1 + ∇ f k + 1 T p k ∥ ∇ f k ∥ 2 . \frac{\nabla f_{k+1}^Tp_{k+1}}{\Vert\nabla f_{k+1}\Vert^2}=-1+\beta_{k+1}\frac{\nabla f_{k+1}^Tp_k}{\Vert\nabla f_{k+1}\Vert^2}=-1+\frac{\nabla f_{k+1}^Tp_k}{\Vert\nabla f_k\Vert^2}. fk+12fk+1Tpk+1=1+βk+1fk+12fk+1Tpk=1+fk2fk+1Tpk.由强Wolfe条件的曲率条件, 我们有 ∣ ∇ f k + 1 T p k ∣ ≤ − c 2 ∇ f k T p k , |\nabla f_{k+1}^Tp_k|\le-c_2\nabla f_k^Tp_k, fk+1Tpkc2fkTpk,
    与之前的等式结合, 就推出 − 1 + c 2 ∇ f k T p k ∥ ∇ f k ∥ 2 ≤ ∇ f k + 1 T p k + 1 ∥ ∇ f k + 1 ∥ 2 ≤ − 1 − c 2 ∇ f k T p k ∥ ∇ f k ∥ 2 . -1+c_2\frac{\nabla f_k^Tp_k}{\Vert\nabla f_k\Vert^2}\le\frac{\nabla f_{k+1}^Tp_{k+1}}{\Vert\nabla f_{k+1}\Vert^2}\le-1-c_2\frac{\nabla f_k^Tp_k}{\Vert\nabla f_k\Vert^2}. 1+c2fk2fkTpkfk+12fk+1Tpk+11c2fk2fkTpk.由归纳假设, − 1 − c 2 1 − c 2 ≤ ∇ f k + 1 T p k + 1 ∥ ∇ f k + 1 ∥ 2 ≤ − 1 + c 2 1 − c 2 . -1-\frac{c_2}{1-c_2}\le\frac{\nabla f_{k+1}^Tp_{k+1}}{\Vert\nabla f_{k+1}\Vert^2}\le-1+\frac{c_2}{1-c_2}. 11c2c2fk+12fk+1Tpk+11+1c2c2.因此不等式对 k + 1 k+1 k+1也成立. 证毕.

注意上述结论只用到了强Wolfe条件的曲率条件, 而Armijo条件则用于证明后面的全局收敛性. ∇ f k T p k \nabla f_k^Tp_k fkTpk的界表明了 ∥ p k ∥ \Vert p_k\Vert pk增长速度的限制, 进而在下面的分析中能起到关键性的作用.
定理7同样可用来解释FR方法的一个缺陷: 我们说, 如果FR产生了一个"较坏"的搜索方向以及一个较小的步长, 则会产生连锁效应. 同第三章一样, 令 θ k \theta_k θk表示 p k p_k pk和负梯度方向 − ∇ f k -\nabla f_k fk之间的夹角, 即 cos ⁡ θ k = − ∇ f k T p k ∥ ∇ f k ∥ ∥ p k ∥ . \cos\theta_k=\frac{-\nabla f_k^Tp_k}{\Vert\nabla f_k\Vert\Vert p_k\Vert}. cosθk=fkpkfkTpk.假设 p k p_k pk"不好", 即 θ k \theta_k θk将近 9 0 ∘ 90^{\circ} 90. 在之前不等式中同乘 ∥ ∇ f k ∥ / ∥ p k ∥ \Vert\nabla f_k\Vert/\Vert p_k\Vert fk/pk, 得到 1 − 2 c 2 1 − c 2 ∥ ∇ f k ∥ ∥ p k ∥ ≤ cos ⁡ θ k ≤ 1 1 − c 2 ∥ ∇ f k ∥ ∥ p k ∥ , k = 0 , 1 , … . \frac{1-2c_2}{1-c_2}\frac{\Vert\nabla f_k\Vert}{\Vert p_k\Vert}\le\cos\theta_k\le\frac{1}{1-c_2}\frac{\Vert\nabla f_k\Vert}{\Vert p_k\Vert},\quad k=0,1,\ldots. 1c212c2pkfkcosθk1c21pkfk,k=0,1,.从这, 我们得出 cos ⁡ θ k ≈ 0 \cos\theta_k\approx0 cosθk0当且仅当 ∥ ∇ f k ∥ ≪ ∥ p k ∥ \Vert\nabla f_k\Vert\ll\Vert p_k\Vert fkpk. 由于 p k p_k pk与梯度几近正交, 所以 x k + 1 ≈ x k x_{k+1}\approx x_k xk+1xk, 从而 ∇ f k + 1 ≈ ∇ f k \nabla f_{k+1}\approx\nabla f_k fk+1fk, 推出 β k + 1 F R ≈ 1 \beta_{k+1}^{\mathrm{FR}}\approx1 βk+1FR1. 再由 ∥ ∇ f k + 1 ∥ ≈ ∥ ∇ f k ∥ ≪ ∥ p k ∥ \Vert\nabla f_{k+1}\Vert\approx\Vert\nabla f_k\Vert\ll\Vert p_k\Vert fk+1fkpk, 所以 p k + 1 ≈ p k p_{k+1}\approx p_k pk+1pk. 于是新产生的搜索方向相较于原来并没有多大改善. 因此若 θ k ≈ 9 0 ∘ \theta_k\approx90^{\circ} θk90在某个 k k k成立且接下来的步长很小, 则后续会产生一系列几近无效的迭代项. 此时, 我们需要在FR方法中嵌入一些重启的策略以保证收敛.

相比之下, PR方法在这样的情形下会有十分不同的表现. 由PR方法中的公式, 我们反而由 β k + 1 P R ≈ 0 \beta_{k+1}^{\mathrm{PR}}\approx0 βk+1PR0. 从而下一个搜索方向 p k + 1 p_{k+1} pk+1将与负梯度相近, cos ⁡ θ k + 1 ≈ 1 \cos\theta_{k+1}\approx1 cosθk+11. 也就是说, PR方法在遇到了一个"坏"方向后会选择重启. PR+和HS方法也有同样的效果. 对于FR-PR方法, 我们已经有 β k + 1 F R ≈ 1 , β k + 1 P R ≈ 0 \beta_{k+1}^{\mathrm{FR}}\approx1,\beta_{k+1}^{\mathrm{PR}}\approx0 βk+1FR1,βk+1PR0, 从而 β k + 1 = β k + 1 P R \beta_{k+1}=\beta_{k+1}^{\mathrm{PR}} βk+1=βk+1PR.

2.4.2 全局收敛性

不想线性共轭梯度法, 非线性共轭梯度法往往具有较为奇特的收敛性质. 下面我们对于FR和PR方法做一些说明. 为方便起见, 我们不过分地假设目标函数具有以下性质:

假设

  1. 水平集 L : = { x ∣ f ( x ) ≤ f ( x 0 ) } \mathcal{L}:=\{x|f(x)\le f(x_0)\} L:={xf(x)f(x0)}有界;
  2. L \mathcal{L} L的某个开邻域 N \mathcal{N} N中, f f fLipschitz连续可微, 即存在常数 γ ˉ \bar{\gamma} γˉ使得 ∥ ∇ f ( x ) ∥ ≤ γ ˉ , ∀ x ∈ L . \Vert\nabla f(x)\Vert\le\bar{\gamma},\quad \forall x\in\mathcal{L}. f(x)γˉ,xL.

我们主要的工具是第三章的Zoutendijk定理. 它表示, 在以上假设下, 有 ∑ k = 0 ∞ cos ⁡ 2 θ k ∥ ∇ f k ∥ 2 &lt; ∞ , \sum_{k=0}^{\infty}\cos^2\theta_k\Vert\nabla f_k\Vert^2&lt;\infty, k=0cos2θkfk2<,其中 p k p_k pk为下降方向, α k \alpha_k αk为满足Wolfe条件的搜索步长. 我们可以利用这一结论证明周期重启的算法的弱全局收敛性: 若 k 1 , k 2 , … k_1,k_2,\ldots k1,k2,表示重启发生的位置, 则从Zoutendijk条件得 ∑ k = k 1 , k 2 , … ∥ ∇ f k ∥ 2 &lt; ∞ . \sum_{k=k_1,k_2,\ldots}\Vert\nabla f_k\Vert^2&lt;\infty. k=k1,k2,fk2<.从而 lim ⁡ j → ∞ ∥ ∇ f k j ∥ = 0 ⇒ lim&ThinSpace;inf ⁡ k → ∞ ∥ ∇ f k ∥ = 0. \lim_{j\to\infty}\Vert\nabla f_{k_j}\Vert=0\Rightarrow\liminf_{k\to\infty}\Vert\nabla f_k\Vert=0. jlimfkj=0kliminffk=0.比起这个, 我们更在意不重启的算法的收敛性. 下面证明FR方法的弱全局收敛性.

定理8 在假设条件满足, 且算法4中线搜索满足强Wolfe条件 (其中 0 &lt; c 1 &lt; c 2 &lt; 1 2 0&lt;c_1&lt;c_2&lt;\frac{1}{2} 0<c1<c2<21)时, 有 lim&ThinSpace;inf ⁡ k → ∞ ∥ ∇ f k ∥ = 0. \liminf_{k\to\infty}\Vert\nabla f_k\Vert=0. kliminffk=0.
证明: 用反证法证明. 假设不然, 存在常数 γ &gt; 0 \gamma&gt;0 γ>0使得对于充分大的 k k k, ∥ ∇ f k ∥ ≥ γ . \Vert\nabla f_k\Vert\ge\gamma. fkγ. cos ⁡ θ k ≥ 1 − 2 c 2 1 − c 2 ∥ ∇ f k ∥ ∥ p k ∥ \cos\theta_k\ge\frac{1-2c_2}{1-c_2}\frac{\Vert\nabla f_k\Vert}{\Vert p_k\Vert} cosθk1c212c2pkfk代入Zoutendijk条件, 我们得到 ∑ k = 0 ∞ ∥ ∇ f k ∥ 4 ∥ p k ∥ 2 &lt; ∞ . \sum_{k=0}^{\infty}\frac{\Vert\nabla f_k\Vert^4}{\Vert p_k\Vert^2}&lt;\infty. k=0pk2fk4<.由曲率条件和定理7, 我们有 ∣ ∇ f k T p k − 1 ∣ ≤ − c 2 ∇ f k − 1 T p k − 1 ≤ c 2 1 − c 2 ∥ ∇ f k − 1 ∥ 2 . |\nabla f_k^Tp_{k-1}|\le-c_2\nabla f_{k-1}^Tp_{k-1}\le\frac{c_2}{1-c_2}\Vert\nabla f_{k-1}\Vert^2. fkTpk1c2fk1Tpk11c2c2fk12.由搜索方向公式, 有 ∥ p k ∥ 2 ≤ ∥ ∇ f k ∥ 2 + 2 β k F R ∣ ∇ f k T p k − 1 ∣ + ( β k F R ) 2 ∥ p k − 1 ∥ 2 ≤ ∥ ∇ f k ∥ 2 + 2 c 2 1 − c 2 β k F R ∥ ∇ f k − 1 ∥ 2 + ( β k F R ) 2 ∥ p k − 1 ∥ 2 = ( 1 + c 2 1 − c 2 ) ∥ ∇ f k ∥ 2 + ( β k F R ) 2 ∥ p k − 1 ∥ 2 . \begin{aligned}\Vert p_k\Vert^2&amp;\le\Vert\nabla f_k\Vert^2+2\beta_k^{\mathrm{FR}}|\nabla f_k^Tp_{k-1}|+(\beta_k^{\mathrm{FR}})^2\Vert p_{k-1}\Vert^2\\&amp;\le\Vert\nabla f_k\Vert^2+\frac{2c_2}{1-c_2}\beta_k^{\mathrm{FR}}\Vert\nabla f_{k-1}\Vert^2+(\beta_k^{\mathrm{FR}})^2\Vert p_{k-1}\Vert^2\\&amp;=\left(\frac{1+c_2}{1-c_2}\right)\Vert\nabla f_k\Vert^2+(\beta_k^{\mathrm{FR}})^2\Vert p_{k-1}\Vert^2.\end{aligned} pk2fk2+2βkFRfkTpk1+(βkFR)2pk12fk2+1c22c2βkFRfk12+(βkFR)2pk12=(1c21+c2)fk2+(βkFR)2pk12.定义 c 3 = d e f ( 1 + c 2 ) / ( 1 − c 2 ) ≥ 1 c_3\xlongequal{def}(1+c_2)/(1-c_2)\ge1 c3def (1+c2)/(1c2)1, 重复应用上述, 可得 ∥ p k ∥ 2 ≤ c 3 ∥ ∇ f k ∥ 2 + ( β k F R ) 2 ( c 3 ∥ ∇ f k − 1 ∥ 2 + ( β k − 1 F R ) 2 ( c 3 ∥ f k − 2 ∥ 2 + ⋯ + ( β 1 F R ) 2 ∥ p 0 ∥ 2 ) ) ⋯ &ThinSpace; ) = c 3 ∥ ∇ f k ∥ 4 ∑ j = 0 k ∥ ∇ f j ∥ − 2 . ( ∵ ( β k F R ) 2 ( β k − 1 F R ) 2 ⋯ ( β k − i F R ) 2 = ∥ ∇ f k ∥ 4 ∥ ∇ f k − i − 1 ∥ 4 , p 0 = − ∇ f 0 ) \begin{aligned}\Vert p_k\Vert^2&amp;\le c_3\Vert\nabla f_k\Vert^2+(\beta_k^{\mathrm{FR}})^2(c_3\Vert\nabla f_{k-1}\Vert^2+(\beta_{k-1}^{\mathrm{FR}})^2(c_3\Vert f_{k-2}\Vert^2+\cdots+(\beta_1^{\mathrm{FR}})^2\Vert p_0\Vert^2))\cdots)\\&amp;=c_3\Vert\nabla f_k\Vert^4\sum_{j=0}^k\Vert\nabla f_j\Vert^{-2}.(\because (\beta_k^{\mathrm{FR}})^2(\beta_{k-1}^{\mathrm{FR}})^2\cdots(\beta_{k-i}^{\mathrm{FR}})^2=\frac{\Vert\nabla f_k\Vert^4}{\Vert\nabla f_{k-i-1}\Vert^4}, p_0=-\nabla f_0)\end{aligned} pk2c3fk2+(βkFR)2(c3fk12+(βk1FR)2(c3fk22++(β1FR)2p02)))=c3fk4j=0kfj2.((βkFR)2(βk1FR)2(βkiFR)2=fki14fk4,p0=f0)由Lipshcitz连续可微条件以及一开始的反证条件, 可得 ∥ p k ∥ 2 ≤ c 3 γ ˉ 4 γ 2 ( k + 1 ) , \Vert p_k\Vert^2\le\frac{c_3\bar{\gamma}^4}{\gamma^2}(k+1), pk2γ2c3γˉ4(k+1),于是 ∑ k = 1 ∞ 1 ∥ p k ∥ 2 ≥ γ 4 ∑ k = 1 ∞ 1 k + 1 = ∞ , \sum_{k=1}^{\infty}\frac{1}{\Vert p_k\Vert^2}\ge\gamma_4\sum_{k=1}^{\infty}\frac{1}{k+1}=\infty, k=1pk21γ4k=1k+11=,其中 γ 4 \gamma_4 γ4为一正常数.
另一方面, 从 ∥ ∇ f k ∥ ≥ γ \Vert\nabla f_k\Vert\ge\gamma fkγ ∑ k = 0 ∞ ∥ ∇ f k ∥ 4 ∥ p k ∥ 2 &lt; ∞ \sum_{k=0}^{\infty}\frac{\Vert\nabla f_k\Vert^4}{\Vert p_k\Vert^2}&lt;\infty k=0pk2fk4<可得 ∑ k = 1 ∞ 1 ∥ p k ∥ 2 &lt; ∞ . \sum_{k=1}^{\infty}\frac{1}{\Vert p_k\Vert^2}&lt;\infty. k=1pk21<.因而矛盾! 所以FR方法的弱全局收敛性成立.

从定理的证明过程中可知, 此全局收敛性对于所有 ∣ β k ∣ ≤ β k F R |\beta_k|\le\beta_k^{\mathrm{FR}} βkβkFR均成立, 例如FR-PR方法.
特别地, 我们可以增强条件以获得更强的全局收敛性质. 例如若存在常数 c 4 , c 5 &gt; 0 c_4,c_5&gt;0 c4,c5>0使得 cos ⁡ θ k ≥ c 4 ∥ ∇ f k ∥ ∥ p k ∥ , ∥ ∇ f k ∥ ∥ p k ∥ ≥ c 5 &gt; 0 , k = 1 , 2 , … , \cos\theta_k\ge c_4\frac{\Vert\nabla f_k\Vert}{\Vert p_k\Vert},\quad\frac{\Vert\nabla f_k\Vert}{\Vert p_k\Vert}\ge c_5&gt;0,\quad k=1,2,\ldots, cosθkc4pkfk,pkfkc5>0,k=1,2,,则从Zoutendijk条件即知 lim ⁡ k → ∞ ∥ ∇ f k ∥ = 0. \lim_{k\to\infty}\Vert\nabla f_k\Vert=0. klimfk=0.事实上, 在 f f f强凸时使用带精确线搜索的PR方法即可得到全局收敛性. 而对一般的(非凸)函数, 即使使用了"理想"的步长 α k \alpha_k αk (这里"理想"指的是 α k \alpha_k αk是一阶稳定点), PR方法仍然可能会陷入循环无法到达解.

定理9 考虑带理想线搜索的PR方法. 存在二阶连续可微函数 f : R 3 → R f:\mathbb{R}^3\to\mathbb{R} f:R3R以及初始点 x 0 ∈ R 3 x_0\in\mathbb{R}^3 x0R3使得梯度范数序列 { ∥ ∇ f k ∥ } \{\Vert\nabla f_k\Vert\} {fk}始终位于0的某个邻域以外.

定理9的证明中需要两相邻搜索方向几近相反, 即 p k + 1 ≈ − α p k , α &gt; 0 p_{k+1}\approx -\alpha p_{k},\alpha&gt;0 pk+1αpk,α>0. 而在理想线搜索的前提下, 有 ∇ f k + 1 T p k = 0 \nabla f_{k+1}^Tp_k=0 fk+1Tpk=0. 由搜索方向公式, p k + 1 = − ∇ f k + 1 + β k + 1 p k ⇒ p k = 1 α + β k + 1 ∇ f k + 1 p_{k+1}=-\nabla f_{k+1}+\beta_{k+1} p_{k}\Rightarrow p_k=\frac{1}{\alpha+\beta_{k+1}}\nabla f_{k+1} pk+1=fk+1+βk+1pkpk=α+βk+11fk+1. 代入前一个等式得 ∥ ∇ f k + 1 ∥ 2 ⋅ 1 α + β k + 1 = 0 \Vert\nabla f_{k+1}\Vert^2\cdot\frac{1}{\alpha+\beta_{k+1}}=0 fk+12α+βk+11=0. 从而必有 β k + 1 &lt; 0 \beta_{k+1}&lt;0 βk+1<0. 这里就需要PR+方法重启. 我们之前谈到, 在PR+方法的线搜索上只需对Wolfe条件加微小修正即可保证PR+方法的所有搜索方向均为下降方向. 因此, 我们可以对PR+方法证明类似定理8的全局收敛性. 而对于那两个比较奇怪的 β k \beta_k βk公式, 令人惊讶的是, 它们的全局收敛性甚至不需要对Wolfe条件作任何修正即可获取.

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值