首页IT科技共轭梯度法原理(共轭梯度法(Conjugate Gradients)(1))

共轭梯度法原理(共轭梯度法(Conjugate Gradients)(1))

时间2025-09-18 15:17:58分类IT科技浏览5903
导读:最近在看ATOM,作者在线训练了一个分类器,用的方法是高斯牛顿法和...

最近在看ATOM                ,作者在线训练了一个分类器                      ,用的方法是高斯牛顿法共轭梯度法              。看不懂      ,于是恶补了一波                      。学习这些东西并不难            ,只是难找到学习资料        。简单地搜索了一下                       ,许多文章都是一堆公式         ,这谁看得懂啊           。

后来找到一篇《An Introduction to the Conjugate Gradient Method Without the Agonizing Pain》        ,解惑了                     。

为什么中文没有这么良心的资料呢?英文看着费劲                        ,于是翻译过来搬到自己的博客             ,以便回顾            。

由于原文比较长    ,一共

66

66

66 页的PDF                        ,所以这里分成几个部分来写        。

目录

共轭梯度法(Conjugate Gradients)(1)

共轭梯度法(Conjugate Gradients)(2)

共轭梯度法(Conjugate Gradients)(3)

共轭梯度法(Conjugate Gradients)(4)

共轭梯度法(Conjugate Gradients)(5)

Abstract (摘要)

共轭梯度法(Conjugate Gradient Method)是求解稀疏线性方程组最棒的迭代方法                     。然鹅                 ,许多教科书上面既没有插图,也没有解说                    ,学生无法得到直观的理解                。时至今日(今日指1993年                     ,因为这份教材是1993年发表的)   ,仍然能看到这些教材的受害者们在图书馆的角落里毫无意义地琢磨    。只有少数的大佬破译了这些正常人看不懂的教材                ,有深刻地几何上的理解                     。然而                      ,共轭梯度法只是一些简单的              、优雅的思路的组合      ,像你一样的读者都可以毫不费力气学会                    。

本文介绍了二次型(quadratic forms)            ,用于推导最速下降(Steepest Descent)                       ,共轭方向(Conjugate Directions)和共轭梯度(Conjugate Gradients)。

解释了特征向量(Eigenvectors)         ,用于检验雅可比方法(Jacobi Method)                      、最速下降        、共轭梯度的收敛性                 。

还有其它的主题        ,包括预处理(preconditioning)和非线性共轭梯度法(nonlinear Conjugate Gradient Method)

本文的结构:

1. Introduction(简介)

当我决定准备学共轭梯度法(Conjugate Gradient Method                        , 简称 CG)的时候             ,读了

4

4

4 种不同的版本    ,恕我直言                        ,一个都看不懂                       。很多都是简单地给出公式                 ,证明了一下它的性质    。没有任何直观解释,没有告诉你 CG 是怎么来的                    ,怎么发明的              。我感到沮丧                     ,于是写下了这篇文章   ,希望你能从中学到丰富和优雅的算法                ,而不是被大量的公式困惑                      。

CG 是一种最常用的迭代方法                      ,用于求解大型线性方程组      ,对于这种形式的问题非常有效:

A

x

=

b

(1)

Ax=b\tag{1}

Ax=b(1)

其中:

x

x

x
是未知向量            ,

b

b

b

是已知向量        。

A

A

A
是已知的 方形的(square)           、对称的(symmetric)                     、正定

的(positive-definite)矩阵           。

(如果你忘了什么是“正定              ”                       ,不用担心         ,我会先给你回顾一下                     。)

这样的系统会出现在许多重要场景中        ,如求解偏微分方程(partial differential equations)的有限差分(finite difference)和有限元(finite element)法            、结构分析        、电路分析和你的数学作业            。

像 CG 这样的迭代方法适合用稀疏(sparse)矩阵        。如果

A

A

A 是稠密(dense)矩阵                        ,最好的方法可能是对

A

A

A
进行因式分解(factor)             ,通过反代入来求解方程                     。对稠密矩阵

A

A

A
做因式分解的耗时和迭代求解的耗时大致相同                。一旦对

A

A

A
进行因式分解后    ,就可以通过多个

b

b

b
的值快速求解    。稠密矩阵和大一点的稀疏矩阵相比                        ,占的内存差不多                     。稀疏的

A

A

A
的三角因子通常比

A

A

A
本身有更多的非零元素                    。由于内存限制                 ,因式分解不太行,时间开销也很大                    ,即使是反求解步骤也可能比迭代解法要慢。另外一方面                     ,绝大多数迭代法稀疏矩阵不占内存速度快                 。

下面开始   ,我就当作你已经学过线性代数(linear algebra)                ,对矩阵乘法(matrix multiplication)和线性无关(linear independence)等概念都很熟悉                      ,尽管那些特征值特征向量什么的可能已经不太记得了                       。我会尽量清楚地讲解 CG 的概念    。

2. Notation(标记)

\bullet

除了一些特例      ,这里一般用大写字母表示矩阵(matrix)            ,小写字母表示向量(vector)                       ,希腊字母表示标量(scalar)              。

   所以

A

A

A 是一个

n

×

n

n\times n

n×n
的矩阵         ,

x

x

x

b

b

b
是向量(同时也是

n

×

1

n \times 1

n×1

矩阵)                      。公式(1) 的完整写法:

[

A

11

A

12

A

1

n

A

21

A

22

A

2

n

A

n

1

A

n

2

A

n

n

]

[

x

1

x

2

x

n

]

=

[

b

1

b

2

b

n

]

\begin{bmatrix} A_{11} & A_{12} & \dots & A_{1n} \\[0.5em] A_{21} & A_{22} & \dots & A_{2n} \\[0.5em] \vdots & & \ddots & \vdots \\[0.5em] A_{n1} & A_{n2} & \dots & A_{nn} \\ \end{bmatrix} \begin{bmatrix} x_1 \\[0.5em] x_2 \\[0.5em] \vdots \\[0.5em] x_n \end{bmatrix} = \begin{bmatrix} b_1 \\[0.5em] b_2 \\[0.5em] \vdots \\[0.5em] b_n \end{bmatrix}

A11A21An1A12A22An2A1nA2nAnnx1x2xn=b1b2bn

\bullet

两个向量的内积(inner product)写成

x

T

y

x^{T}y

xTy
        ,可以用标量的和

i

=

1

n

x

i

y

i

\sum^{n}_{i=1} x_i y_i

i=1nxiyi
来表示        。

   注意这里

x

T

y

=

y

T

x

x^T y = y^T x

xTy=yTx           。 如果

x

x

x

y

y

y
正交(orthogonal)的                        ,则

x

T

y

=

x^T y = 0

xTy=0
                     。

x

T

y

=

y

T

x

=

i

=

1

n

x

i

y

i

x

T

y

=

x^{T}y = y^T x = \sum^{n}_{i=1} x_i y_i \\[0.5em]x^T y = 0 (正交)

xTy=yTx=i=1nxiyixTy=0

   一般来说             ,这些运算会得到

1

×

1

1 \times 1

1×1 的矩阵            。像

x

T

y

x^T y

xTy

x

T

A

x

x^T A x

xTAx
这种    ,运算结果是一个标量值        。

\bullet

对于任意非零向量

x

x

x
                        ,如果下面的 公式(2) 成立                 ,则矩阵

A

A

A
正定

(positive-definite)的:

x

T

A

x

>

(2)

x^T A x > 0 \tag{2}

xTAx>0(2)

   这可能对你来说没什么意义,但是不要感到难过                     。

   因为它不是一种很直观的概念                    ,很难去想像一个正定和非正定的矩阵看起来有什么不同                。

   当我们看到它怎么对二次型的造成影响时                     ,你就会对“正定                      ”产生感觉了    。

\bullet

最后   ,还有一些基本的定义:

(

A

B

)

T

=

B

T

A

T

(

A

B

)

1

=

B

1

A

1

(AB)^T = B^T A^T \\[0.5em] (AB)^{-1} = B^{-1} A^{-1}

(AB)T=BTAT(AB)1=B1A1

3. The Quadratic Form(二次型)

二次型

(quadratic form)简单来说是一个标量                     。

一个向量的二次型方程具有以下形式:

f

(

x

)

=

1

2

x

T

A

x

b

T

x

+

c

(3)

f(x) = \frac{1}{2} x^T A x - b^T x + c \tag{3}

f(x)=21xTAxbTx+c(3)

其中

A

A

A 是一个矩阵                ,

b

b

b
是一个向量                      ,

c

c

c
是一个标量常数                    。

如果

A

A

A对称(symmetric) 且正定(positive-definite)      ,则

f

(

x

)

f(x)

f(x)
的最小化问题等同于求解

A

x

=

b

Ax=b

Ax=b
。

本文的所有例子都基于下面的值来讲解:

A

=

[

3

2

2

6

]

            ,

b

=

[

2

8

]

                       ,

c

=

(4)

A = \begin{bmatrix} 3 & 2 \\ 2 & 6 \end{bmatrix}         , \quad b = \begin{bmatrix} 2 \\ -8 \end{bmatrix}        , \quad c=0 \tag{4}

A=[3226]                        ,b=[28]             ,c=0(4)

可以把 (4) 代入 (3) 得到:

f

(

x

)

=

1

2

[

x

1

x

2

]

[

3

2

2

6

]

[

x

1

x

2

]

[

2

8

]

[

x

1

x

2

]

+

=

1

2

[

x

1

x

2

]

[

3

x

1

+

2

x

2

2

x

1

+

6

x

2

]

(

2

x

1

8

x

2

)

=

1

2

(

x

1

(

3

x

1

+

2

x

2

)

+

x

2

(

2

x

1

+

6

x

2

)

)

2

x

1

+

8

x

2

=

3

2

x

1

2

+

3

x

2

2

+

2

x

1

x

2

2

x

1

+

8

x

2

\begin{aligned} f(x) &= \dfrac{1}{2} \cdot \begin{bmatrix} x_1 & x_2 \end{bmatrix} \begin{bmatrix} 3 & 2 \\[0.5em] 2 & 6 \end{bmatrix} \begin{bmatrix} x_1 \\[0.5em] x_2 \end{bmatrix} - \begin{bmatrix} 2 & -8 \end{bmatrix} \cdot \begin{bmatrix} x_1 \\[0.5em] x_2 \end{bmatrix} + 0 \\[1.5em] &= \dfrac{1}{2} \cdot \begin{bmatrix} x_1 & x_2 \end{bmatrix} \begin{bmatrix} 3x_1 + 2x_2 \\[0.5em] 2x_1 + 6x_2 \end{bmatrix} - (2x_1 - 8x_2) \\[1.5em] &= \dfrac{1}{2} \cdot {\Large(} x_1\left( 3x_1+ 2x_2 \right) + x_2 \left( 2x_1 + 6x_2\right) {\Large)} - 2x_1 + 8x_2 \\[1.5em] &= \frac{3}{2}x_1^2 + 3x_2^2 + 2x_1 x_2 -2x_1 + 8x_2 \end{aligned}

f(x)=21[x1x2][3226][x1x2][28][x1x2]+0=21[

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
win10 1903怎么升级2004(微请注意!Win10 1903版将强制升级至1909或2004版本) wps office的超链接在哪(WordPress自动超链插件-简化链接管理的神器)