共轭梯度法


数学上,共轭梯度法是求解特定线性系统数值解的方法,其中那些矩阵为对称正定。共轭梯度法是一个迭代方法,所以它适用于稀疏矩阵系统,因为这些系统对于象乔莱斯基分解这样的直接方法太大了。这种系统在数值求解偏微分方程时相当常见。

共轭梯度法也可以用于求解无约束的最优化问题。

双共轭梯度法提供了一种处理非对称矩阵情况的推广。


目录


[隐藏




方法的表述

设我们要求解下列线性系统




其中n-×-n矩阵A是对称的(也即,AT= A),正定的(也即,xTAx> 0对于所有非0向量x属于Rn),并且是实系数的。

将系统的唯一解记作x*

最后算法

经过一些简化,可以得到下列求解Ax= b的算法,其中A是实对称正定矩阵。


x0 :=0

k :=0

r0 :=b

repeat untilrk is "sufficientlysmall":

k :=k + 1

if k = 1

p1 :=r0

else


endif


xk :=xk-1kpk

rk :=rk-1kApk

endrepeat

结果为xk

外部连接

参考

共轭梯度法最初出现于

  • Magnus R. Hestenesand Eduard Stiefel(1952),Methods of conjugate gradients for solvinglinear systems, J. Research Nat. Bur. Standards 49,409–436.

下列教科书中可以找到该方法的描述

  • KendellA. Atkinson(1988),An introduction to numerical analysis(2nded.),Section 8.9, John Wiley and Sons. ISBN 0-471-50023-2.
  • Gene H.Golub and Charles F. Van Loan, Matrix computations(3rded.),Chapter 10, Johns Hopkins University Press. ISBN 0-8018-5414-8.



共轭梯度法  

共轭梯度法是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse矩阵并求逆的缺点,共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一。
  共轭梯度法最早是又Hestenes和Stiefle(1952)提出来的,用于解正定系数矩阵的线性方程组,在这个基础上,Fletcher和Reeves(1964)首先提出了解非线性最优化问题的共轭梯度法。由于共轭梯度法不需要矩阵存储,且有较快的收敛速度和二次终止性等优点,现在共轭梯度法已经广泛地应用与实际问题中。
  共轭梯度法是一个典型的共轭方向法,它的每一个搜索方向是互相共轭的,而这些搜索方向d仅仅是负梯度方向与上一次迭代的搜索方向的组合,因此,存储量少,计算方便

ConjugateGradient

共轭梯度法的推导




数值线性代数 中, 共轭梯度法 是一种求解 对称 正定 线性方程组



迭代方法。共轭梯度法可以从不同的角度推导而得,包括作为求解最优化问题的共轭方向法的特例,以及作为求解特征值问题的Arnoldi/Lanczos迭代的变种。

本条目记述这些推导方法中的重要步骤。


目录




从共轭方向法推导

从Arnoldi/Lanczos 迭代推导

共轭梯度法可以看作Arnoldi/Lanczos 迭代应用于求解线性方程组时的一个变种。

一般Arnoldi 方法

Arnoldi 迭代从一个向量

开始,通过定义

,其中

逐步建立 Krylov子空间


的一组标准正交基

。换言之,对于


由将

相对于

进行 Gram-Schmidt正交化然后归一化得到。

写成矩阵形式,迭代过程可以表示为


其中


当应用于求解线性方程组时,Arnoldi迭代对应于初始解

的残量

开始迭代,在每一步迭代之后计算

和新的近似解

.

直接Lanzcos 方法

在余下的讨论中,我们假定

是对称正定矩阵。由于

的对称性, 上Hessenberg 矩阵

变成对阵三对角矩阵。于是它可以被更明确地表示为

这使得迭代中的

有一个简短的三项递推式。Arnoldi 迭代从而简化为 Lanczos 迭代。由于

对称正定,

同样也对称正定。因此,

可以通过不选主元LU分解分解为

其中


有简单的递推式:

改写


其中


此时需要观察到


实际上,


同样有简短的递推式:

通过这个形式,我们得到

的一个简单的递推式:

以上的递推关系立即导出比共轭梯度法稍微更复杂的直接Lanczos 方法。

从正交性和共轭性导出共轭梯度法

如果我们允许缩放

并通过常数因子补偿缩放的系数,我们可能可以的到以下形式的更简单的递推式:

作为简化的前提,我们现在推导

的正交性和

的共轭性,即对于

,

各个残量之间满足正交性的原因是

实际上可由

乘上一个系数而得。这是因为对于


,对于


要得到

的共轭性,只需证明

是对角矩阵:

是对称的下三角矩阵,因而必然是对角矩阵。

现在我们可以单纯由

的正交性和

的共轭性推导相对于缩放后的

的常数因子


。由于

的正交性,必然有

。于是

类似地,由于

的共轭性,必然有

。于是

推导至此完成。

参考文献

  1. Hestenes, M. R.;Stiefel, E.. Methods of conjugate gradients for solving linearsystems (PDF). Journal ofResearch of the National Bureau of Standards. 12 1952, 49(6).
  2. Saad, Y.. Chapter 6:Krylov Subspace Methods, Part I. Iterative methods for sparselinear systems. 2nd. SIAM. 2003. ISBN978-0898715347.

梯度下降法


梯度下降法是一个一阶最优化算法,通常也称为最速下降法


目录




描述


有关梯度下降法的描述 梯度下降法,基于这样的观察:如果实值函数

在点

可微且有定义,那么函数


点沿着梯度相反的方向

下降最快。

因而,如果


对于

为一个够小数值时成立,那么

。考虑到这一点,我们可以从函数

的局部极小值的初始估计

出发,并考虑如下序列

使得

因此可得到


如果顺利的话序列

收敛到期望的极值。注意每次迭代步长

可以改变。右侧的图片示例了这一过程,这里假设

定义在平面上,并且函数图像是一个形。蓝色的曲线是等高线(水平集),即函数

为常数的集合构成的曲线。红色的箭头指向该点梯度的反方向。(一点处的梯度方向与通过该点的等高线垂直)。沿着梯度下降方向,将最终到达碗底,即函数

值最小的点。

例子

梯度下降法处理一些复杂的非线性函数会出现问题,例如Rosenbrock函数


其最小值在

处,数值为

。但是此函数具有狭窄弯曲的山谷,最小值

就在这些山谷之中,并且谷底很平。优化过程是之字形的向极小值点靠近,速度非常缓慢。

下面这个例子也鲜明的示例了"之字"的下降,这个例子用梯度下降法求

的极小值。

缺点

由上面的两个例子,梯度下降法的缺点是[1]:

  • 靠近极小值时速度减慢。
  • 直线搜索可能会产生一些问题。
  • 可能会'之字型'地下降。

参阅

参考文献

  • MordecaiAvriel (2003). Nonlinear Programming: Analysis and Methods.Dover Publishing. ISBN 0-486-43227-0.
  • Jan A.Snyman (2005). Practical Mathematical Optimization: AnIntroduction to Basic Optimization Theory and Classical and NewGradient-Based Algorithms. Springer Publishing. ISBN 0-387-24348-8


牛顿法Newton'smethod)又称为牛顿-拉弗森方法Newton-Raphsonmethod),它是一种在实数域和复数域上近似求解方程的方法。方法使用函数

泰勒级数的前面几项来寻找方程

的根。


目录

[隐藏



起源

牛顿法最初由艾萨克·牛顿流数法Methodof Fluxions1671年完成,在牛顿死后的1736年公开发表)。约瑟夫·拉弗森也曾于1690年AnalysisAequationum中提出此方法。

方法说明


蓝线表示方程f而红线表示切线.可以看出xn+1xn更靠近f所要求的根x. 首先,选择一个接近函数

零点的

,计算相应的

和切线斜率

(这里

表示函数

导数)。然后我们计算穿过点

并且斜率为

的直线和

轴的交点的

坐标,也就是求如下方程的解:

我们将新求得的点的

坐标命名为

,通常

会比

更接近方程

的解。因此我们现在可以利用

开始下一轮迭代。迭代公式可化简为如下所示:

已经证明,如果

连续的,并且待求的零点

是孤立的,那么在零点

周围存在一个区域,只要初始值

位于这个邻近区域内,那么牛顿法必定收敛。并且,如果

不为0,那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。

其它例子

第一个例子

求方程f(x)= cos(x) − x3的根。两边求导,得f '(x)= −sin(x) − 3x2。由于-1≤ cos(x) ≤ 1(对于所有x),则-1 ≤ x3 ≤ 1,即-1 ≤ x ≤1,可知方程的根位于0和1之间。我们从x0 =0.5开始。


第二个例子

牛顿法亦可发挥与泰勒展开式,对于函式展开的功能。

求a的m次方根。

- a= 0设


而a的m次方根,亦是x的解,

以牛顿法来迭代: