在图像处理/数据优化/机器学习方法方面,看了一些需要代数背景的代码比较糊涂,决定以个人视角记录一些线性代数基础,也是想做很久的一件事。参考了多方资料,包括宋浩线性代数(理解细节参考)、张宇线性代数(排版、总结、详略、公式非常好)以及来自MIT的线性代数课程(思想、与工程结合性出众),可能比较综合(杂乱)。

逐渐更新。

矩阵基础

理解矩阵

矩阵的定义不值一提,但从不同视角看待更容易理解矩阵的本质。

行图像(Row Picture)与列图像(Column Picture)

平时习惯以行图像的时间看待矩阵,例如上述矩阵可以看成线性方程组的求解,对于二维矩阵求的是两直线的交点,三维则求三个面的交点: 解的存在性和个数取决于交点的存在性和分布规律。

列图像将矩阵看成是列向量线性组合:

解的存在性和个数取决于两个向量的线性组合是否可达至目标向量。

如果目标向量B是任意的,从行向量看代表两条直线关系是随机的,如果是三维,则代表了空间中三个平面的关系是随机的;而从列图像理解更容易得多,因为其系数矩阵是不变的,无论是二维还是n维空间,关键在于系数向量的线性组合是否能够表示n维空间中任意的向量,其答案也显然的,如果n维系数均是线性无关的,那么一定能表示空间中任意向量。

提醒

反对称矩阵

对称矩阵容易理解,满足,即元素关于主对角线对称();反对称矩阵满足,除了满足主对角线对称元素均为相反数(),还要满足主对角线元素均为0()。

矩阵多项式

那么矩阵多项式有:

运算

矩阵运算中不能以代数视角计算,例如: 所以一些展开式也应该遵循顺序:

同理:

此外AB=0不能推断A=0或者B=0,故: 即使也不能说明

矩阵转置规律

正交矩阵

对于方阵,满足,称A为正交矩阵。

A为正交矩阵,其特征很明显:

  1. 首先求逆极其简单:两边右乘有:

  1. 意味着A的行向量组成的向量组以及列向量组成的向量组,均是标准正交基(见下文向量基础),由于

可见a向量自身模长为1,与b、c均正交,b、c同理,故a、b、c行向量组成的向量组均是标准正交基,列向量同理。

矩阵的逆

对于方阵A,若 为矩阵的逆,不是所有矩阵都有逆,其充要条件对应行列式|A|不为0

一些计算规律: 两矩阵和的逆没有固定规律

余子式与代数余子式

伴随矩阵前要了解一些行列式基本计算,对于一个矩阵中某个元素,去除该元素所在行、列的所有元素,顺序不变组成的子式就是余子式,例如对于矩阵: 对于第一个元素1,其余子式就是:

同理对于元素5,其余子式为:

代数余子式是值在余子式的基础上,考虑行列和的奇偶性决定符号:

例如元素2的代数余子式

对于n阶方阵,其行列式值等于某行或者某列元素乘上其代数余子式:

j取值可以是1到n任一列(注意是一列,不是全部列都要)。

伴随矩阵

有了代数余子式的概念,就知道A的伴随矩阵由每个位置对应的代数余子式组成,但是注意对应关系的行列位置是相反的(对应在位置):

一些计算性质:

矩阵和的伴随同样没有固定规律。

这里最重要的是通过伴随矩阵求逆的公式,因此也推导出了二阶矩阵的逆快捷计算:主对角线元素对换、副对角线元素取反,再除以原行列式值:

初等矩阵

矩阵初等变换有三种:交换两行/两列、数乘某行/某列、倍乘某行/某列后加到另一行/列。

单位矩阵经过一次初等变换得到的矩阵,称初等矩阵,以三阶矩阵,其表示和记号如下:

  1. E的第二行(或第二列)乘k倍:

  1. E的1、2行(或1、2列)互换:

  2. E的第1行的k倍加到第3行(或者第3列的k倍加到第1列):

初等矩阵运算性质

  1. 行列式:

  2. 转置:

  3. 逆:

  4. 重要定理:若矩阵A可逆,A可以经过有限次初等行变换化成单位矩阵:

也等同于A是一系列初等行变换的乘积结果。

  1. 左乘行变换、右乘列变换。

LU分解

线性方程组最常用的求解方法是通过增广矩阵+高斯消元法,所谓高斯消元法,实际上就是行与行间消元化出一个得到上三角矩阵,而且知道,这种消元实际上是行变换,行变换的本质是左乘初等变换矩阵,从原始矩阵A开始:

上三角矩阵对应的是U符号,其变成上三角矩阵的过程是第一行的-2倍加到第二行、第一行的-2倍加到第三行、第二行的-3倍加到第三行,即左乘了三个初等矩阵:

此处上三角矩阵,将每行的第一个非0元素称为主元(pivot),这里我们仅讨论方程满秩的情况,消元后一个方程组的主元分布可能不是完全按一条斜线分布,这种情况先调换一下行顺序(线性方程顺序)即可。

所以:

至此得到了的形式,可见,写成,这就完成了A的LU分解,其中毫无疑问的是U是一个上三角矩阵,而且A到U做左乘时,总是前面的行对后面的行做消元,所以E应该是一个下三角矩阵,而下三角矩阵求逆时,将矩阵和一个单位阵按行拼接,然后将I通过行变换化成E,然后E就变成了

其原理也是分块矩阵+基本变换,当相当于两个分块都左乘了,这不难接受。

因此下三角矩阵求逆时,仍然是前面的行对后面的行消元,所以其逆仍然是一个下三角矩阵,于是乎的形式,实际上就是将A分解成下三角矩阵L上三角矩阵U的过程,这就是LU分解的基本过程和含义。

一点题外话是既然IA = U已经有两个上下三角矩阵了,为什么还要写成A = LU,这里还有一个特点是通过L能清楚看到所有的初等变换步骤,而I做不到,上述I和没有明显关系,而

可以看出,全是矩阵L的因子。

LU分解的线性方程组求解

线性代数的根本目的是解线性方程组,只讨论分解不讨论求解无异于虎头蛇尾。

使用A构造一组方程组,Ax=b为:

从增广矩阵的角度可以说很简单,这里走一次LU分解的流程,从上述已知:

所以Ax = b可以写成LUx = b,令y = Ux,所以有方程Ly = b: 可见,因为是下三角矩阵,其答案很容易看出:

再列出Ux = y有:

上三角矩阵也容易看出结果:

这就是Ax = b方程组的解。

LU分解特点

从求解过程可以看出,LU分解的本质实际上类似增广矩阵求解,都是通过高斯消元法来得到上三角/下三角矩阵回代来获取结果。对于一个n阶方阵,第一行需要对n-1行乘上(n-1)个不同倍数进行消元,可见一行的消元开销是平方级别,一共有n行元素,所以LU分解的总体复杂度为。 复杂度与增广矩阵是一致的,但从求解过程也可以看见,LU分解保留了初等变换信息,初等变换只和系数矩阵A有关,与输出矩阵b无关,因此经历一次复杂度为的LU分解后,尽管输出矩阵b不同,线性方程组求解的复杂度是(都是回代过程,第一个方程需要n次回代、第二个需要n-1次回代...最后一个需要一次回代,求和为平方级别)。对于增广矩阵方法,而每次b变化增广矩阵最后一列都不同,都需要不断做复杂度为的上三角/下三角变换,因此LU分解在解大量系数不变的线性方程组时性能较高。

LU分解数值稳定性取决于主元的选择,常用的主要是对行主元的选择,LU分解会引入行置换矩阵P,例如表示第一行和第二行交换

LU分解写成PA = LU,这也是大多数算法的实现原理。假如不引入这样的P,对于矩阵: 是一个很小的小数,这种情况下使用高斯消元,需要将第一行除以负的加到第二行,对于第一行的其他元素,会变得很大,从而放大了整个矩阵输入系数误差,所以得到的结果是不稳定的,假设交换1和2行,让1成为第一行的主元,则没有该问题,这就是引入置换矩阵的原因,这种策略称Partial Pivoting(部分主元选择)。一些情况下为了应对非常病态的矩阵,甚至会对列主元选择和整体最大值筛选,但是复杂度较高,很少成为通用方法。

有一类矩阵被称为严格对角占优矩阵(strictly diagonally dominant matrix),其每个对角线元素绝对值,都大于元素所在行其他元素绝对值之和,即:

这类矩阵的LU分解稳定性较高,而且无需置换矩阵

最后,对于LU分解,其目的性很单一,就是为了求解线性方程组,所以对于奇异矩阵讨论LU分解的意义并不大,LU分解并不限定矩阵是否奇异,奇异矩阵无非通过高斯消元后得到的U有全0行,通过P保证全0行均在后面几行,仍然能表示出对应的LU,但这种LU方程既不能求精确解,也不能保证数值稳定性,因此算法实现一般不去处理奇异矩阵。

向量基础

内积与正交

其内积表示为 其中,

若满足: 且二者均非0向量,称二者正交。

标准正交基

亦称规范正交基、标准正交向量组。对于一个单位向量组成的列向量组[α_{1}, α_{2}, ...α_{n}],如果满足任意两个向量均正交,即:

那么该向量组被称为标准/单位正交向量组。

施密特正交化

正交关系除了表征向量关系是线性无关的,还有的好处是容易看出基向量,对线性方程组求解、变换关系处理等都比较方便。

线性无关的向量均可以被正交化,这里记住常用的施密特二维/三维公式即可:

两个线性无关向量组成的向量组

进行标准正交化:

得到的为两个正交向量,进行单位化即可:

向量组

对于三维的情况,正交化公式为:

单位化同理。

线性方程组

子空间(Subspaces)

在向量空间中,子空间需要满足两个条件:

  1. 子空间向量都属于

  2. 子空间本身是一个对线性运算封闭的空间,包括数乘、线性组合,意味着子空间中向量乘上任意倍数,或者组合都仍然属于子空间向量,也意味着子空间必须包括零向量。

对于二维向量空间,其子空间可以是原点自身、或一个过原点向量直线;对于三维的向量空间,其子空间除了可以是原点和过原点直线,也可以是两个线性无关向量(需贡献两个向量方向)张成的过原点的面,再者,子空间也可以是自身空间。

注意,子空间与子空间的交集常常是一个子空间,但子空间与子空间的并集,未必是一个子空间,例如向量空间,过原点直线和过原点的面都是子空间,但是直线向量和过原点面上的一个向量的线性组合向量,可能既不属于直线也不属于面,因此不满足封闭性条件,故二者并集不是子空间。

理解线性方程组矩阵,有很多视角可以做到,这里介绍一下MIT的方法(避免看不懂别人的文章),需要了解矩阵两个重要的子空间,即列空间和零空间。

列空间(Column Space)

矩阵的列空间是矩阵列向量张成的子空间,矩阵空间的维度决定了矩阵自身的向量空间,例如一个5×3矩阵,其自身维度空间最大可能是行数5,即,而矩阵列空间的维度取决于矩阵的秩,所以对于那些类似5×3,行数大于列数的瘦高矩阵,子空间的向量无论如何是无法张满整个空间的,所以表现在五个独立方程、三个未知数无解。

这里一点细节容易使人混淆:为什么秩最大为3,却可以有5个独立方程呢,秩等于3不是意味着有两行全0行吗,所以只有3个独立方程?

事实上列空间讨论的是Ax = b问题,假设这里秩等于3,指的是矩阵A可以化出2个全0行,但是这种化法可能无法将[A|b]增广矩阵也化出两个全0行,意味着5个方程是独立的。从列图像角度可能更加简单,关键在于b能否由A列向量的线性组合得到,即b是否属于列空间,对于“瘦高矩阵”,列数不够意味着组合系数的自由度不足,无法张满整个空间,而对于“矮胖矩阵”

零空间(Nullspace)

未完待续