matlab共轭梯度法_Ax = b 的迭代解法-从梯度下降到共轭梯度

线性方程组 Ax =b 除了高斯消元法以外,还有一些很有趣的迭代解法, 比如雅可比法(Jacobi Method),高斯-赛德尔迭代(Gauss–Seidel method)。

这里只针对 A 满足 对称 (

), 正定(即
),并且是实系数的,那么我们可以用 梯度下降 和 共轭梯度 来解线性方程组 :

梯度下降 Gradient descent

梯度下降(Gradient descent)完全配得上大名鼎鼎四个字,它这么大名鼎鼎是因为在 Machine Learning 中大放光彩。

梯度下降是用于找到可微函数的局部最小值的一阶迭代优化算法。 为了使用梯度下降找到函数的局部最小值,我们采取与该函数在当前点的梯度(或近似梯度)的负值成比例的步骤。 但是,如果我们改为采取与梯度的正比成比例的步骤,则会逼近该函数的局部最大值。 该过程称为梯度上升。

梯度下降本身的数学原理还是比较简单,还有这里虽然叫 ‘梯度下降’ 来找局部最小值,其实我们走的是 梯度 的负方向,因为 梯度 本身指向的方向是函数

增加的最快的方向。
就像一元函数的导数表示这个函数图形的切线的斜率,如果多元函数在点 P 上的梯度不是零向量,它的方向是这个函数在 P 上最大增长的方向,而它的量是在这个方向上的增长率。

考虑函数:

如果我们要求

的最小值,那么:

梯度下降法要做的是:

  • , 选择最合适的
    使得

对于

:

求导:

令上面的式子为0:

, 所以:

总结算法:

这个算法本身不是特别常用,它的收敛速度取决于

的最大与最小特征值之比。

共轭梯度 Conjugate gradient

为什么梯度下降没有那么常用呢? 因为我们有共轭梯度。

da18220d919c5ebf047eec819fbec7fe.png
图片来自wikipedia

绿色是梯度下降的路线,红色是共轭梯度的路线,明显共轭梯度走的次数少一些/更快收敛。

梯度下降在下降的过程中会走 z 字,感性的想一想这是合理的,比如我在这个方向走到最多的下降的,再朝这个方向走我们就不是下降了,所以当然我们接下来就会走朝它垂直的方向。

而共轭梯度,它好像更聪明一点,在这张图中,n = 2,走完第一步,下一步它就直接走到了最小值。

作为更像call 共轭梯度 API 的人,暂时我也没有完全数学的理解它,下面这个链接有具体的背景和数学推导:

共轭梯度法通俗讲义

感性的理解一下,就是共轭梯度这里的关键是需要理解‘共轭(conjugate)’,向量

是共轭的 (相对于A )如果满足:

下面这张图,里面的两两向量都是针对所在梯度处的矩阵‘共轭’的:

4d1bafde077f968632a6ba4fc2f6ce7c.png
图片来自上文链接

当我们把梯度变换一下,就更明显的看出‘共轭’其实也就是某种正交:

ce8bb5d1137193f012aea817a3e4787c.png
图片来自上文链接

这种正交带给我们的好处是更甚于上面的梯度下降的,我们可以一次在某个共轭的方向走到头,然后下一次就无需再走走过的共轭方向。

算法-from wikipedia:

wikipedia 上也能找到 共轭梯度法 的 MATLAB 代码。

这个知乎回答也很好:

梯度下降法和共轭梯度法有何异同?​www.zhihu.com

总结

针对

因为 A 的不同性质,我们可以有不同的选择:

  • 矩阵稠密,或者数量级较小(dense and/or small): 高斯消元法
  • 矩阵稀疏,数量级很大(large and sparse, or not available explicitly):如果矩阵没有一些特殊的性质(实对称正定),那一般来说是没什么好的办法,考虑使用迭代法
  • 带状矩阵(narrow-banded):要看是那种带状,如果是比如这样,只有对角线和对角线上方和下面的一条或者两条,那么高斯消元法应该还行:

Tridiagonal matrix:

Pentadiagonal matrix:

但是如果是类似带状,但是还有一些其它的非0项在矩阵中的话,那么我们就需要考虑矩阵的性质了。

  • 实对称正定,稠密,数量级小(symmetric positive definite,dense and/or small): Cholesky 分解
  • 实对称正定,稀疏,数量级大(symmetric positive definite,large and sparse): 共轭梯度!毫无疑问的!
  • 对称不定,稠密,数量级小(symmetric indefinite, dense and/or small):Bunch–Kaufman
  • 对称不定,稀疏,数量级大(symmetric indefinite, large and sparse): MINRES
  • 不对称,稀疏,数量级大(nonsymmetric, large and sparse): GMRES,BiCGSTAB or IDR

参考:

  • https://en.wikipedia.org/wiki/Gradient_descent
  • https://en.wikipedia.org/wiki/Conjugate_gradient_method
  • Solution of Linear Systems via Chen Greif
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值