在南方科技大学学习何炳生老师的数值分析课程期间有很多收获与感悟,由衷的感谢何老师的谆谆教导,当然我希望能将课程中所学习到的,能应用到未来科研和工作中的这部分知识,以学习笔记的方式记录下来,也希望能通过这种帖子将自己作为小白对于这些知识的通俗理解分享给大家,文中一些不够准确或错误的表达,还望大家指证。
【数值分析】学习笔记目录
本章节将分享数值分析中一种用于求解超定方程组的方法——最小线性二乘
老样子,学习一个技术,我认为需要按照它用来干什么,它是什么,它怎么实现的,我们怎么使用它这样的逻辑进行学习,故在学习最小线性二乘之前,首先得知道它用来干什么。这里引用何老师课上一个关于测量山峰高度的例子
举个例子:有一个测量员要测量3座山峰的高度,他先站在地面的一个基准点,用工具测量了三座山峰的高度,高度(米)分别为
x 1 = 1237 x 2 = 1914 x 3 = 2417 x1 = 1237\\ x2 = 1914\\ x3 = 2417 x1=1237x2=1914x3=2417为了测量准确起见,他又分别爬到每一个山头测量了山与山之间山顶高度的差距,即:
x 2 − x 1 = 711 x 3 − x 1 = 1177 x 3 − x 2 = 475 x2 - x1 = 711\\ x3 - x1 = 1177\\ x3 - x2 = 475 x2−x1=711x3−x1=1177x3−x2=475这样一来,他就得到了六个方程,通过求解这个方程组 A x = b Ax=b Ax=b就可以得到每个山头的高度。但这存在一个问题:根据线性代数中的知识,对于线性方程组,其存在解的前提条件是它的系数矩阵 A A A的秩等于增广矩阵 ( A ∣ b ) (A | b) (A∣b)的秩,且小于等于未知数 x x x 的个数。
在很多实际应用都会用比未知数多的方程去求解未知量,这样的冗余降低了所得结果受噪声的影响,使结果更接近于真实值。
很明显,对于这个方程组其方程的数量大于未知数数量,且由于实际测量存在误差,很容易出现无解的情况,那对于这样的情况,该如何求解其最好的近似解呢,这就需要用到 最小线性二乘法。换而言之,最小线性二乘法就是一种将高维空间的向量投影到低维空间的方法。
本章节内容会涉及较多范数与条件数的概念【有关范数和条件数的介绍请参照笔记1:范数与条件数】
对于一个方程组,如果其方程数量大于其未知量个数,我们就称它为一个超定方程组,写成矩阵的形式:
A x = b Ax=b Ax=b其中 A A A为 m ∗ n m * n m∗n矩阵,且 m > n m > n m>n, b b b 是 m m m 维向量, x x x 是 n n n 维向量。
刚刚说到,对于线性方程组而言,其存在解需要满足一定的条件,这个条件换句话说就是就是 b b b 能否表达成 A A A 的列向量的线性组合,而对于超定方程组而言,除非 b b b 恰好属于空间 s p a n ( A ) span(A) span(A),否则必然无解,即 b − A x ≠ 0 b - Ax \neq0 b−Ax=0,向量 b b b 与向量 A x Ax Ax 这部分差距 r r r,即 r = b − A x r = b - Ax r=b−Ax就称作残差向量。
在最小线性二乘中,我们并不期望将 r r r 降为0,而是使其范数(通常为2-范数)极小化,从而得到一个近似解(最小二乘解),即
m i n { ∥ r ∥ } = m i n { ∥ b − A x ∥ } min\left \{ \left \| r \right \| \right \} = min\left \{ \left \| b - Ax \right \|\right \} \\ min{∥r∥}=min{∥b−Ax∥}使得
A x ≅ b Ax\cong b Ax≅b【通俗的理解:残差向量的2-范数 ∥ r ∥ \left \| r \right \| ∥r∥实际就是向量 b b b 到向量 A x Ax Ax 的距离,通过使它极小时得到的近似解 x x x 可以使得两个向量此时最为接近,这个解即为最优解】
最小线性二乘法具体的实现有两种方法,即法方程法和QR分解。
由于2-范数带根号,计算量大,法方程法采用2-范数的平方作为目标函数,即
和完全平方的计算是一样的
φ ( x ) = ∥ r ∥ 2 = ∥ b − A x ∥ 2 = b T b − 2 x T A T b + x T A T A x \varphi (x) = \left \| r \right \|^{2} = \left \| b - Ax \right \|^{2} = b^{T}b-2x^{T}A^{T}b+x^{T}A^{T}Ax φ(x)=∥r∥2=∥b−Ax∥2=bTb−2xTATb+xTATAx要使这个目标函数最小,则必要条件是此时的 x x x 使得它的一阶导数(即梯度)为0【函数极值点的要求】,即
∇ φ ( x ) = − 2 A T b + 2 A T A x = 0 \nabla\varphi (x) = -2A^{T}b+2A^{T}Ax=0 ∇φ(x)=−2ATb+2ATAx=0整理即
A T A x = A T b A^{T}Ax=A^{T}b ATAx=ATb上述线性方程组中,系数矩阵 A T A A^{T}A ATA为 n ∗ n n * n n∗n矩阵,结果向量 A T b A^{T}b ATb 是一个 n n n 维向量, x x x 也是 n n n 维向量,可见这个线性方程组就是常见的非齐次线性方程组。
当 A A A是列满秩时, A T A A^{T}A ATA 正定(特征值均大于0,也表明 A T A A^{T}A ATA满秩),此时上述方程组有唯一解
此时我们就将一个无解的超定方程组转换为了一个有解的非齐次线性方程组,而这个方程组,就称为正规方程组。对于它的求解就可以用线性代数中最熟悉的高斯消去法或者数值分析中的三角分解法等即可
法方程法的思路非常直接,也很简单易懂,但它存在一个致命的缺陷:不够稳定!
这里用条件数来表示就一目了然了
c o n d ( A T A ) = [ c o n d ( A ) ] 2 cond(A^{T}A) = [cond(A)]^{2} cond(ATA)=[cond(A)]2可以看到正规方程组的系数矩阵的条件数是原超定方程组系数矩阵条件数的两倍,这意味着正规方程组很容易病态,一旦观测数据中有轻微的变化,得到的近似解就会天差地别。
这意味着我们需要有一种更为稳定的算法来实现最小线性二乘——QR分解
先看一种特殊的最小二乘问题:当系数矩阵为上三角阵时,此时 A x = b Ax=b Ax=b 可以写作
[ R 0 ] x ≅ [ C 1 C 2 ] \begin{bmatrix} R\\ 0 \end{bmatrix}x\cong\begin{bmatrix} C_{1}\\ C_{2} \end{bmatrix} [R0]x≅[C1C2] R R R为 n ∗ n n*n n∗n的上三角阵,此时残差向量的2-范数可以写为
∥ r ∥ 2 = ∥ C 1 − R x ∥ 2 + ∥ C 2 ∥ 2 \left \| r \right \|^{2} = \left \| C_{1}-Rx \right \|^{2}+\left \| C_{2} \right \|^{2} ∥r∥2=∥C1−Rx∥2+∥C2∥2可以看到 ∥ C 2 ∥ 2 \left \| C_{2} \right \|^{2} ∥C2∥2是个常数,求梯度的时候就被没了,这意味着它与 x x x的取值无关,即只需要求解非齐次线性方程组 R x = C 1 Rx = C_{1} Rx=C1,此时得到的解 x x x就是原超定方程组 A x = b Ax=b Ax=b 的最小二乘解!此时对应的残差就是 ∥ C 2 ∥ 2 \left \| C_{2} \right \|^{2} ∥C2∥2
而通过正交变换将系数矩阵 A A A转换为上三角阵的方法,就是QR分解。
正交阵:若一元素均为实数的方阵 Q Q Q 满足 Q T Q = I ( 单 位 矩 阵 ) Q^{T}Q=I(单位矩阵) QTQ=I(单位矩阵) ,则 Q Q Q 被称为正交阵
正交变换:用一个正交阵乘以某个向量,就称为这个向量的正交变换。
正交变换具有非常重要的一个性质,即正交变换不改变向量的2-范数
证明: 一正交阵 Q Q Q,和一个向量 α \alpha α,其2-范数
∥ Q α ∥ 2 = ( Q α ) T ( Q α ) = α T Q T Q α = α T α = ∥ α ∥ 2 \left \| Q\alpha \right \|^{2} = (Q\alpha)^{T}(Q\alpha)=\alpha^{T}Q^{T}Q\alpha=\alpha^{T}\alpha=\left \| \alpha \right \|^{2} ∥Qα∥2=(Qα)T(Qα)=αTQTQα=αTα=∥α∥2
由于这一特性,在最小二乘问题的超定方程组两边乘以一个正交阵,并不会改变最小二乘解,适合用来做系数矩阵的变换。
用正交变换将将系数矩阵 A A A转换为上三角阵的方法,即QR分解
左端: A = Q [ R 0 ] A = Q\begin{bmatrix} R\\ 0 \end{bmatrix} A=Q[R0]右端:
Q T b = [ C 1 C 2 ] Q^{T}b=\begin{bmatrix} C_{1}\\ C_{2} \end{bmatrix} QTb=[C1C2]
QR分解有三种具体算法来实现:
Householder分解是比较常用的一种QR分解,它使用到的正交阵称为Householder矩阵 H H H
Householder矩阵: 一种正交且对称的矩阵,即 H = H T = H − 1 H=H^{T}=H^{-1} H=HT=H−1,其矩阵形式为
H = I − 2 v v T v T v H=I-2\frac{vv^{T}}{v^{T}v} H=I−2vTvvvT对一向量 α \alpha α,通过设置Householder向量 v v v,可以得到 H H H,使得正交变换后的向量 H α H\alpha Hα中任意元素之后的元素均为0。
Householder分解:首先,对于系数矩阵 A A A,可以将其写为列向量的集合形式,即 c o l ( A ) = [ a 1 , a 2 , . . . , a n ] col(A)=[a_{1},a_{2},...,a_{n}] col(A)=[a1,a2,...,an]
由于Householder矩阵的特点,系数矩阵 A A A的QR分解形式可以写为
A = Q [ R 0 ] ⇒ H A = [ R 0 ] A = Q\begin{bmatrix} R\\ 0 \end{bmatrix}\Rightarrow HA=\begin{bmatrix} R\\ 0 \end{bmatrix} A=Q[R0]⇒HA=[R0]由于系数矩阵 A A A可以看做很多列向量的集合,那对于每一个列向量,都可以找到一个Householder矩阵将其某个元素之后的元素消去,从而实现将 A A A中主对角线以下的所有元素全部变为0,即
( H 1 H 2 . . . H n ) A = [ R 0 ] (H_{1}H_{2}...H_{n})A=\begin{bmatrix} R\\ 0 \end{bmatrix} (H1H2...Hn)A=[R0]
由于确定了 v v v即可得到对应的Householder矩阵,若要使一个向量正交变换后任意元素之后的元素均为0,以 A A A的第一个列向量 a 1 a_{1} a1为例,由于要消去的是第一个元素之后的所有元素,此处
v 1 = a 1 − α 1 e 1 v_{1}=a_{1}-\alpha_{1} e_{1} v1=a1−α1e1其中 α 1 = − s i g n ( a 11 ) ∥ a 1 ∥ \alpha_{1}=-sign(a_{11}) \left \| a_{1} \right \| α1=−sign(a11)∥a1∥, e 1 e_{1} e1为单位矩阵 I I I的第一个列向量即 [ 1 , 0 , . . . , 0 ] T [1,0,...,0]^{T} [1,0,...,0]T。
以此类推,即可求解出n个Householder矩阵,对整个超定方程组做正交变换后,即可将该最小二乘问题转化为一个上三角阵作为系数矩阵的简单最小二乘问题,从而求解出最小二乘解。
通过本章节的学习,可以大致了解最小线性二乘的基本原理及一些常见算法。在很多实际应用中,由于各种误差及人为因素的存在,需要用到更多的方程来抵消误差,这意味着我们往往无法得到一个问题的最真实答案,只能得到一个尽可能接近精确解的近似解,这就需要掌握最小二乘法的思想和算法。
题外话:何老师及网上其他大牛在讲解这部分知识时还用了很多图形化语言进行辅助,但我感觉还是没有吃的很深刻,建议大家如果有兴趣的话可以通过那样的方式理解最小二乘,我觉得会比我这种生推硬背强很多。