数值计算之 共轭梯度法(1)线性共轭梯度法

前言

本篇继续无约束优化算法学习,线性共轭梯度法。

共轭梯度法的引出

回顾之前的牛顿法、拟牛顿法,目的都是寻找迭代方向。牛顿法中的 H Δ x = J H\Delta x=J HΔx=J,高斯牛顿的 J J T p = − J f JJ^Tp=-Jf JJTp=Jf,都涉及到一个解方程组的问题。如果方程组是线性的,则解线性方程组 A x = b Ax=b Ax=b的问题可以转化为一个优化问题:
A x = b → arg min ⁡ x f ( x ) = 1 2 x T A x − b T x b e c a u s e ∇ f ( x ) = A x − b = 0 w h e n f ( x ) = min ⁡ f ( x ) Ax=b \\ \to \argmin_{x} f(x) = \frac{1}{2}x^TAx-b^Tx \\ \quad \\ because \quad \nabla f(x)=Ax-b=0 \\ when \quad f(x)=\min f(x) Ax=bxargminf(x)=21xTAxbTxbecausef(x)=Axb=0whenf(x)=minf(x)

在梯度下降法中,迭代过程可能出现下图的折线。这是因为梯度下降法只考虑了一阶梯度,当前迭代的方向可能与上次迭代的方向线性相关,使得迭代过程来回抖动。
在这里插入图片描述
即使通过线搜索方法得到最优步长时,相邻两次迭代的梯度正交,如下图所示,将增量进行分解,不朝向极值点的分量仍然会导致抖动。

这里证明一下精确线搜索的梯度下降法,两次梯度正交:
最 优 步 长 处 , f 关 于 α 的 导 数 为 0 f ′ ( x k + 1 ) = f ′ ( x k + α ( − ∇ f ( x k ) ) ) = 0 → f ′ ( x k + α ( − ∇ f ( x k ) ) = − ∇ f ( x k ) T ∇ f ( x k + 1 ) = 0 最优步长处,f关于\alpha的导数为0 \\ f' (x_{k+1})=f'(x_k+\alpha (-\nabla f(x_k)))=0 \\ \to f'(x_k+\alpha (-\nabla f(x_k))= -\nabla f(x_k)^T\nabla f(x_{k+1}) =0 fα0f(xk+1)=f(xk+α(f(xk)))=0f(xk+α(f(xk))=f(xk)Tf(xk+1)=0
在这里插入图片描述
共轭梯度法要解决的就是生成下面这条绿线的迭代过程。
在这里插入图片描述

线性共轭梯度法

对于对称正定矩阵 A A A,如果存在一个向量组 { δ n } , δ i T A δ j = 0 \{ \delta _n\},\delta_i^TA\delta_j=0 {δn},δiTAδj=0对于任意两个不同的向量都成立,称向量组是 A A A的共轭向量组。共轭向量组是线性无关的,可以用反证法证明:
i f d 1 = λ 2 d 2 + ⋯ + λ n d n t h e n d i T A d j = ( λ 2 d 2 + ⋯ + λ n d n ) T A d j = λ d j T A d j = 0 t h e n ∀ j , d j = 0 ⃗ if \quad d_1=\lambda_2d_2+\dots+\lambda_nd_n \\ then \quad d_i^TAd_j=(\lambda_2d_2+\dots+\lambda_nd_n)^TAd_j \\ = \lambda d_j^TAd_j=0 \\ then \quad \forall j, \quad d_j=\vec 0 ifd1=λ2d2++λndnthendiTAdj=(λ2d2++λndn)TAdj=λdjTAdj=0thenj,dj=0

共轭梯度法证明了对于二次型的优化问题,可以通过构造共轭向量组 { δ n } \{ \delta _n\} {δn},依次沿着每个共轭向量(梯度)上优化后,就能得到极小值。也就是说,迭代 n n n次后就能得到结果。

共轭向量组构造

第一个共轭向量可以通过梯度下降法获得 p 0 p_0 p0,梯度下降法得到的相邻梯度是正交的(线性无关),因此可以用来构造共轭向量:
α 0 通 过 精 确 线 搜 索 获 得 p 0 = − ∇ f ( x 0 ) p ^ 1 = − ∇ f ( x 0 + α 0 p 0 ) p 1 = p ^ 1 + β 1 p 0 = ∇ f ( x 0 + α 0 p 0 ) − β 1 p 0 p 0 T A p 1 = 0 β 1 p 0 T A p 0 − p 0 T A ∇ f ( x 0 + α 0 p 0 ) = 0 β 1 = p 0 T A ∇ f ( x 0 + α 0 p 0 ) p 0 T A p 0 \alpha_0通过精确线搜索获得 \\ p_0 = -\nabla f(x_0) \\ \hat p_1=-\nabla f(x_0+\alpha_0 p_0) \\ p_1 =\hat p_1 + \beta_1p_0=\nabla f(x_0+\alpha_0 p_0)-\beta_1p_0 \\ \quad \\ p_0^TAp_1=0 \\ \beta_1p_0^TAp_0 - p_0^TA\nabla f(x_0+\alpha_0 p_0)=0 \\ \quad \\ \beta_1 = \frac{p_0^TA\nabla f(x_0+\alpha_0 p_0)}{p_0^TAp_0} \\ \quad \\ α0线p0=f(x0)p^1=f(x0+α0p0)p1=p^1+β1p0=f(x0+α0p0)β1p0p0TAp1=0β1p0TAp0p0TAf(x0+α0p0)=0β1=p0TAp0p0TAf(x0+α0p0)
然后迭代构造每一步的共轭向量:
α k 通 过 精 确 线 搜 索 获 得 p k + 1 = β k + 1 p k + p ^ k + 1 β k + 1 = p k T A ∇ f ( x k + α k p k ) p k T A p k \alpha_k通过精确线搜索获得 \\ p_{k+1} = \beta_{k+1} p_{k}+\hat p_{k+1} \\ \beta_{k+1}=\frac{p_k^T A \nabla f(x_k+\alpha_kp_k)}{p_k^TAp_k} αk线pk+1=βk+1pk+p^k+1βk+1=pkTApkpkTAf(xk+αkpk)
可以证明,上面的迭代出的共轭向量可以构成共轭向量组。

然后通过精确线搜索获得 α k + 1 \alpha_{k+1} αk+1
α k + 1 = p k + 1 T p ^ k + 1 p k + 1 T A p k + 1 \alpha_{k+1}=\frac{p_{k+1}^T\hat p_{k+1}}{p_{k+1}^TAp_{k+1}} αk+1=pk+1TApk+1pk+1Tp^k+1

线性共轭梯度流程

  1. 给定 x 0 x_0 x0,通过梯度下降法获得初始 p 0 , α 0 p_0,\alpha_0 p0,α0
  2. 迭代到第k次,判断收敛条件,若不满足,进入3;否则跳出循环
  3. 通过共轭梯度构造公式依次计算 x k + 1 , β k + 1 , p k + 1 , α k + 1 x_{k+1},\beta_{k+1},p_{k+1},\alpha_{k+1} xk+1,βk+1,pk+1,αk+1,判断收敛条件,若不满足则回到2

补充:线性共轭梯度法的简化

前面推导的时候,没有用到线性条件 ∇ f ( x ) = A x − b \nabla f(x)=Ax-b f(x)=Axb,这里可以进行简化。首先给出简化后的精确线搜索步长:
f ′ ( x k + α k p k ) = p k T ∇ f ( x k + α k p k ) = 0 → p k T ( A ( x k + α k p k ) − b ) = 0 → p k T A x k + α k p k T A p k = p k T b → α k = p k T ( b − A x k ) p k T A p k s e t b − A x k = r k , α k = r k T p k p k T A p k f'(x_k+\alpha_k p_k)=p_k^T\nabla f(x_k+\alpha_k p_k)=0 \\ \to p_k^T(A(x_k+\alpha_k p_k)-b)=0 \\ \to p_k^TAx_k+\alpha_k p_k^TAp_k=p_k^Tb \\ \quad \\ \to \alpha_k=\frac {p_k^T(b-Ax_k)}{p^T_kAp_k} \\ set \quad b-Ax_k=r_k, \quad \alpha_k = \frac {r^T_kp_k}{p^T_kAp_k} f(xk+αkpk)=pkTf(xk+αkpk)=0pkT(A(xk+αkpk)b)=0pkTAxk+αkpkTApk=pkTbαk=pkTApkpkT(bAxk)setbAxk=rk,αk=pkTApkrkTpk
然后构造共轭梯度向量:
p k + 1 = ∇ f ( x k + α k p k ) + β k + 1 p k a n d p k T A p k + 1 = 0 → p k T A ∇ f ( x k + α k p k ) + β k + 1 p k T A p k = 0 → β k + 1 p k T A p k = − p k T A ∇ f ( x k + α k p k ) β k + 1 = − p k T A ∇ f ( x k + α k p k ) p k T A p k = − p k T A ( A x k + 1 − b ) p k T A p k = r k + 1 T A p k p k T A p k p_{k+1}=\nabla f(x_{k}+\alpha_kp_k)+\beta_{k+1} p_k \\ and \quad p_{k}^TAp_{k+1}=0 \\ \to p_k^TA\nabla f(x_{k}+\alpha_kp_k)+\beta_{k+1} p_k^TAp_k=0 \\ \to \beta_{k+1} p_k^TAp_k= -p_k^TA\nabla f(x_{k}+\alpha_kp_k) \\ \quad \\ \beta_{k+1} = -\frac{p_k^TA\nabla f(x_{k}+\alpha_kp_k)}{p_k^TAp_k} \\ \quad \\ = -\frac {p_k^TA(Ax_{k+1}-b)}{p_k^TAp_k} \\ = \frac {r_{k+1}^TAp_{k}}{p_k^TAp_k} \\ pk+1=f(xk+αkpk)+βk+1pkandpkTApk+1=0pkTAf(xk+αkpk)+βk+1pkTApk=0βk+1pkTApk=pkTAf(xk+αkpk)βk+1=pkTApkpkTAf(xk+αkpk)=pkTApkpkTA(Axk+1b)=pkTApkrk+1TApk

最后梳理一下:

  1. 初始化 k = 0 k=0 k=0,计算 x 0 , p 0 x_0,p_0 x0,p0
  2. 迭代第 k + 1 k+1 k+1轮,判断收敛条件,不满足时继续循环
  3. α k = r k T p k p k T A p k \alpha_k=\frac {r^T_kp_k}{p^T_kAp_k} αk=pkTApkrkTpk
  4. x k + 1 = x k + α k p k x_{k+1}=x_k+\alpha_k p_k xk+1=xk+αkpk
  5. r k + 1 = b − A x k + 1 r_{k+1}=b-Ax_{k+1} rk+1=bAxk+1
  6. β k + 1 = r k + 1 T A p k p k T A p k \beta_{k+1}=\frac {r_{k+1}^TAp_{k}}{p_k^TAp_k} βk+1=pkTApkrk+1TApk
  7. 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
  8. k = k + 1 k=k+1 k=k+1
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值