不积代数,无以至千里:线性代数基础
在图像处理/数据优化/机器学习方法方面,看了一些需要代数背景的代码比较糊涂,决定以个人视角记录一些线性代数基础,也是想做很久的一件事。参考了多方资料,包括宋浩线性代数(理解细节参考)、张宇线性代数(排版、总结、详略、公式非常好)以及来自MIT的线性代数课程(思想、与工程结合性出众),可能比较综合(杂乱)。
逐渐更新。
矩阵基础
理解矩阵
矩阵的定义不值一提,但从不同视角看待更容易理解矩阵的本质。
行图像(Row Picture)与列图像(Column Picture)
平时习惯以行图像的时间看待矩阵,例如上述矩阵可以看成线性方程组的求解,对于二维矩阵求的是两直线的交点,三维则求三个面的交点:
列图像将矩阵看成是列向量的线性组合:
解的存在性和个数取决于两个向量的线性组合是否可达至目标向量。
如果目标向量B是任意的,从行向量看代表两条直线关系是随机的,如果是三维,则代表了空间中三个平面的关系是随机的;而从列图像理解更容易得多,因为其系数矩阵是不变的,无论是二维还是n维空间,关键在于系数向量的线性组合是否能够表示n维空间中任意的向量,其答案也显然的,如果n维系数均是线性无关的,那么一定能表示空间中任意向量。
提醒
反对称矩阵
对称矩阵容易理解,满足
矩阵多项式
那么矩阵多项式有:
运算
矩阵运算中不能以代数视角计算,例如:
同理:
此外AB=0不能推断A=0或者B=0,故:
矩阵转置规律
正交矩阵
对于方阵,满足
A为正交矩阵,其特征很明显:
- 首先求逆极其简单:两边右乘
有:
- 意味着A的行向量组成的向量组以及列向量组成的向量组,均是标准正交基(见下文向量基础),由于
可见a向量自身模长为1,与b、c均正交,b、c同理,故a、b、c行向量组成的向量组均是标准正交基,列向量同理。
矩阵的逆
对于方阵A,若 |A|
不为0。
一些计算规律:
余子式与代数余子式
伴随矩阵前要了解一些行列式基本计算,对于一个矩阵中某个元素,去除该元素所在行、列的所有元素,顺序不变组成的子式就是余子式,例如对于矩阵:
同理对于元素5,其余子式为:
代数余子式是值在余子式的基础上,考虑行列和的奇偶性决定符号:
例如元素2的代数余子式
对于n阶方阵,其行列式值等于某行或者某列元素乘上其代数余子式:
j取值可以是1到n任一列(注意是一列,不是全部列都要)。
伴随矩阵
有了代数余子式的概念,就知道A的伴随矩阵由每个位置对应的代数余子式组成,但是注意对应关系的行列位置是相反的(
一些计算性质:
矩阵和的伴随同样没有固定规律。
这里最重要的是通过伴随矩阵求逆的公式,因此也推导出了二阶矩阵的逆快捷计算:主对角线元素对换、副对角线元素取反,再除以原行列式值:
初等矩阵
矩阵初等变换有三种:交换两行/两列、数乘某行/某列、倍乘某行/某列后加到另一行/列。
单位矩阵经过一次初等变换得到的矩阵,称初等矩阵,以三阶矩阵,其表示和记号如下:
- E的第二行(或第二列)乘k倍:
E的1、2行(或1、2列)互换:
E的第1行的k倍加到第3行(或者第3列的k倍加到第1列):
初等矩阵运算性质
行列式:
转置:
逆:
重要定理:若矩阵A可逆,A可以经过有限次初等行变换化成单位矩阵:
也等同于A是一系列初等行变换的乘积结果。
- 左乘行变换、右乘列变换。
LU分解
线性方程组最常用的求解方法是通过增广矩阵+高斯消元法,所谓高斯消元法,实际上就是行与行间消元化出一个得到上三角矩阵,而且知道,这种消元实际上是行变换,行变换的本质是左乘了初等变换矩阵,从原始矩阵A开始:
上三角矩阵对应的是U
符号,其变成上三角矩阵的过程是第一行的-2倍加到第二行、第一行的-2倍加到第三行、第二行的-3倍加到第三行,即左乘了三个初等矩阵:
此处上三角矩阵,将每行的第一个非0元素称为主元(pivot),这里我们仅讨论方程满秩的情况,消元后一个方程组的主元分布可能不是完全按一条斜线分布,这种情况先调换一下行顺序(线性方程顺序)即可。
所以:
至此得到了
其原理也是分块矩阵+基本变换,当相当于两个分块都左乘了
因此下三角矩阵求逆时,仍然是前面的行对后面的行消元,所以其逆仍然是一个下三角矩阵,于是乎
一点题外话是既然IA = U
已经有两个上下三角矩阵了,为什么还要写成A = LU
,这里还有一个特点是通过L能清楚看到所有的初等变换步骤,而I做不到,上述I和
可以看出,
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分解的数值稳定性取决于主元的选择,常用的主要是对行主元的选择,LU分解会引入行置换矩阵P,例如表示第一行和第二行交换
LU分解写成PA = LU
,这也是大多数算法的实现原理。假如不引入这样的P,对于矩阵:
有一类矩阵被称为严格对角占优矩阵(strictly diagonally dominant
matrix),其每个对角线元素绝对值,都大于元素所在行其他元素绝对值之和,即:
这类矩阵的LU分解稳定性较高,而且无需置换矩阵。
最后,对于LU分解,其目的性很单一,就是为了求解线性方程组,所以对于奇异矩阵,讨论LU分解的意义并不大,LU分解并不限定矩阵是否奇异,奇异矩阵无非通过高斯消元后得到的U有全0行,通过P保证全0行均在后面几行,仍然能表示出对应的LU,但这种LU方程既不能求精确解,也不能保证数值稳定性,因此算法实现一般不去处理奇异矩阵。
向量基础
内积与正交
设
其内积表示为
若满足:
标准正交基
亦称规范正交基、标准正交向量组。对于一个单位向量组成的列向量组[α_{1}, α_{2}, ...α_{n}],如果满足任意两个向量均正交,即:
那么该向量组被称为标准/单位正交向量组。
施密特正交化
正交关系除了表征向量关系是线性无关的,还有的好处是容易看出基向量,对线性方程组求解、变换关系处理等都比较方便。
线性无关的向量均可以被正交化,这里记住常用的施密特二维/三维公式即可:
两个线性无关向量组成的向量组
进行标准正交化:
得到的
向量组
对于三维的情况,正交化公式为:
单位化同理。
线性方程组
子空间(Subspaces)
在向量空间
子空间向量都属于
子空间本身是一个对线性运算封闭的空间,包括数乘、线性组合,意味着子空间中向量乘上任意倍数,或者组合都仍然属于子空间向量,也意味着子空间必须包括零向量。
对于二维向量空间
注意,子空间与子空间的交集常常是一个子空间,但子空间与子空间的并集,未必是一个子空间,例如
理解线性方程组矩阵,有很多视角可以做到,这里介绍一下MIT的方法(避免看不懂别人的文章),需要了解矩阵两个重要的子空间,即列空间和零空间。
列空间(Column Space)
矩阵的列空间是矩阵列向量张成的子空间,矩阵空间的维度决定了矩阵自身的向量空间,例如一个5×3矩阵,其自身维度空间最大可能是行数5,即
这里一点细节容易使人混淆:为什么秩最大为3,却可以有5个独立方程呢,秩等于3不是意味着有两行全0行吗,所以只有3个独立方程?
事实上列空间讨论的是Ax = b问题,假设这里秩等于3,指的是矩阵A可以化出2个全0行,但是这种化法可能无法将[A|b]增广矩阵也化出两个全0行,意味着5个方程是独立的。从列图像角度可能更加简单,关键在于b能否由A列向量的线性组合得到,即b是否属于列空间,对于“瘦高矩阵”,列数不够意味着组合系数的自由度不足,无法张满整个空间,而对于“矮胖矩阵”