机器学习: 共轭梯度算法(PCG)

今天介绍数值计算和优化方法中非常有效的一种数值解法,共轭梯度法。我们知道,在解大型线性方程组的时候,很少会有一步到位的精确解析解,一般都需要通过迭代来进行逼近,而 PCG 就是这样一种迭代逼近算法。

我们先从一种特殊的线性方程组的定义开始,比如我们需要解如下的线性方程组:

Ax=b A x = b

这里的 A(n×n) A ( n × n ) 是对称,正定矩阵, b(n×1) b ( n × 1 ) 同样也是已知的列向量,我们需要通过 A A b b 来求解 x(n×1) x ( n × 1 ) , 这其实是我们熟知的一些线性系统的表达式。

直接求解

首先,我们来看一种直观的解法,我们定义满足如下关系的向量为关于 矩阵 A A 的共轭向量,

uTAv=0 u T A v = 0

因为矩阵 A A 是对称正定矩阵,所以矩阵 A A 定义了一个内积空间:

u,vA:=Au,v=u,ATv=u,Av=uTAv ⟨ u , v ⟩ A := ⟨ A u , v ⟩ = ⟨ u , A T v ⟩ = ⟨ u , A v ⟩ = u T A v

基于此,我们可以定义一组向量 P P

P={p1,,pn} P = { p 1 , … , p n }

其中的向量 p1 p 1 , p2 p 2 , … , pn p n 都是互为共轭的,那么 P P 构成了 Rn R n 空间的一个基,上述方程的解 x x ∗ 可以表示成 P P 中向量的线性组合:

x=i=1nαipi x ∗ = ∑ i = 1 n α i p i

根据上面的表达式,我们可以得到:

Ax=i=1nαiApipTkAx=i=1nαipTkApi(Multiply left by pTk)pTkb=i=1nαipk,piA(Ax=b and u,vA=uTAv)pk,b=αkpk,pkA(uTv=u,v and ik:pk,piA=0) A x ∗ = ∑ i = 1 n α i A p i p k T A x ∗ = ∑ i = 1 n α i p k T A p i (Multiply left by  p k T ) p k T b = ∑ i = 1 n α i ⟨ p k , p i ⟩ A ( A x ∗ = b  and  ⟨ u , v ⟩ A = u T A v ) ⟨ p k , b ⟩ = α k ⟨ p k , p k ⟩ A ( u T v = ⟨ u , v ⟩  and  ∀ i ≠ k : ⟨ p k , p i ⟩ A = 0 )

这意味着:

αk=pk,bpk,pkA α k = ⟨ p k , b ⟩ ⟨ p k , p k ⟩ A

所以,如果我们要直接求解的,可以先对矩阵 A A 进行特征值分解,求出一系列的共轭向量,然后求出系数,最后可以得到方程的解 x x ∗

迭代求解

上面的方法已经说明, x x ∗ 是一系列共轭向量 p p 的线性组合,学过 PCA 的都知道,可以用前面占比高的向量组合进行逼近,而不需要把所有的向量都组合到一起,PCG 也是用到了这种思想,通过仔细的挑选共轭向量 p p 来重建方程的解 x x ∗

我们先来看下面的一个方程:

f(x)=12xTAxxTb,xRn f ( x ) = 1 2 x T A x − x T b , x ∈ R n

对上面的方程求导,我们可以得到:

D2f(x)=A D 2 f ( x ) = A

Df(x)=Axb D f ( x ) = A x − b

可以看到,方程的一阶导数就是我们需要解的线性方程组,令一阶导数为 0,那么我们需要解的就是这样一个线性方程组了。

假设我们随机定义 x x 的一个初始向量为 x0 x 0 ,那么我们可以定义第一个共轭向量为 p0=bAx0 p 0 = b − A x 0 , 后续的基向量都是和梯度共轭的,所以称为共轭梯度法。

下面给出详细的算法流程:

这里写图片描述

而 preconditioned conjugate gradient method 与共轭梯度法的不同之处在于预先定义了一个特殊矩阵 M M

这里写图片描述

参考来源:wiki 百科

https://en.wikipedia.org/wiki/Conjugate_gradient_method#The_preconditioned_conjugate_gradient_method

  • 7
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值