下面的一系列分解,涉及了线性代数中的各个重要知识点:
关于求解方程组的分解:
- Ch1[矩阵乘法角度] 满秩分解: A \mathbf A A=列满秩矩阵 C \mathbf C C和行满秩矩阵 R \mathbf R R的乘积
- Ch2[消元解方程组] LU分解
- Ch3[施密特正交化] QR分解:将列向量线性无关的矩阵 A \mathbf A A,转为正交矩阵 Q \mathbf Q Q,且 R \mathbf R R必为上三角阵
关于特征值/特征向量/奇异值的分解:
- Ch5[相似对角化] 得到特征值和特征向量后,矩阵 A \mathbf A A相似于以特征值为对角元的对角阵 Λ \mathbf \Lambda Λ
- Ch4[对称矩阵] 对称矩阵 S \mathbf S S具有正交的特征向量,对角化得到 S = Q Λ Q T \mathbf S=\boldsymbol{Q} \boldsymbol{\Lambda} \boldsymbol{Q}^T S=QΛQT
- CH6[奇异值分解(“广义对角化”操作)] 任意矩阵可分解为 A = U Σ V T \mathbf A=\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^T A=UΣVT,其中 Σ \boldsymbol{\Sigma} Σ中左上角的对角阵对应将行空间中的标准正交基映射到列空间的标准正交基( A v i = σ i u i \mathbf {A}\mathbf v_i=\sigma_i \mathbf u_i Avi=σiui,这类似于找出特征值和特征向量); Σ \boldsymbol{\Sigma} Σ中其余部分为0元素,对应 A \mathbf {A} A的零空间中的一组正交基
Ch1. 矩阵乘法与CR分解
矩阵向量乘法的理解
- 应该将矩阵向量乘法视为矩阵列向量的线性组合,从整体视角看乘法: [ 1 4 5 3 2 5 2 1 3 ] [ x 1 x 2 x 3 ] = x 1 [ 1 3 2 ] + x 2 [ 4 2 1 ] + x 3 [ 5 5 3 ] \left[\begin{array}{lll}1 & 4 & 5 \\3 & 2 & 5 \\2 & 1 & 3\end{array}\right]\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}=x_1\begin{bmatrix}1\\3\\2\end{bmatrix}+x_2\begin{bmatrix}4\\2\\1\end{bmatrix}+x_3\begin{bmatrix}5\\5\\3\end{bmatrix} 132421553 x1x2x3 =x1 132 +x2 421 +x3 553
- 推论:
A
x
\mathbf {Ax}
Ax的结果,一定位于列空间
C
(
A
)
C(\mathbf A)
C(A)中(视为列向量的线性组合);
即使是 A B C x \mathbf {ABCx} ABCx,也位于列空间 C ( A ) C(\mathbf A) C(A)中,因为可以视为 A ( B C x ) \mathbf {A(BCx)} A(BCx)
应用:
当处理大型矩阵时,我们无法关注矩阵中的每一个元素,此时要做的就是采样
如果希望了解矩阵的列空间,一个自然的想法是直接对矩阵的列向量进行采样;
然而,更好的做法是随机采样:随机生成向量 x \mathbf {x} x(其元素值随机),然后将 A x \mathbf {Ax} Ax的结果作为对矩阵列空间的一个随机采样( A x \mathbf {Ax} Ax一定是列空间中的向量,并且是随机取的,能够更好的描述列空间)
列空间与秩
对于上述的矩阵向量乘法 A x \mathbf{Ax} Ax,尝试所有可能的 x \mathbf{x} x,就是在尝试所有可能的列向量线性组合,由此能够得到列空间 C ( A ) C(\mathbf A) C(A)
- 矩阵
A
\mathbf A
A的列空间
C
(
A
)
C(\mathbf A)
C(A)(也称为值域Range)是矩阵列向量组张成的空间;
矩阵 A \mathbf A A的列秩=列空间 C ( A ) C(\mathbf A) C(A)的维数=列空间基向量个数= A \mathbf A A中无关的列向量个数
例如上面的矩阵 A = [ 1 4 5 3 2 5 2 1 3 ] \mathbf A=\left[\begin{array}{lll}1 & 4 & 5 \\3 & 2 & 5 \\2 & 1 & 3\end{array}\right] A= 132421553 只有一列、二列是无关的,而第三列是前两列之和
因此, A \mathbf A A的秩为2,对应 C ( A ) C(\mathbf A) C(A)是二维平面,列空间只有两个基向量( A \mathbf A A的第一、二列是列空间的一组基);
- A \mathbf A A的秩 R a n k ( A ) Rank(\mathbf A) Rank(A)=列秩=行秩
- 方阵
A
\mathbf A
A不可逆
⟺
\iff
⟺
A
\mathbf A
A不满秩
⟺
\iff
⟺
A
\mathbf A
A的列向量组线性相关
⟺
A
x
=
0
\iff\mathbf A\mathbf x=0
⟺Ax=0有非零解
⟺
\iff
⟺
A
\mathbf A
A的零空间维度
n
−
r
>
0
n-r>0
n−r>0
ps. 向量组 x 1 , x 2 , . . . , x n \mathbf x_1,\mathbf x_2,...,\mathbf x_n x1,x2,...,xn线性相关 ⟺ \iff ⟺ a 1 x 1 + a 2 x 2 + . . . + a n x n = 0 a_1\mathbf x_1+a_2\mathbf x_2+...+a_n\mathbf x_n=0 a1x1+a2x2+...+anxn=0有非零解
CR分解/满秩分解(求矩阵列向量的最大无关组)
从矩阵 A \mathbf A A的列向量组中,提取最大无关组,它们给出了矩阵列空间 C ( A ) C(\mathbf A) C(A)的一组基:
例如,矩阵 A = [ 1 4 5 3 2 5 2 1 3 ] \mathbf A=\left[\begin{array}{ll} 1 & 4 &5\\ 3 & 2 &5\\ 2 & 1&3 \end{array}\right] A= 132421553 中,前两列构成最大无关组: C = [ 1 4 3 2 2 1 ] \mathbf C=\left[\begin{array}{ll} 1 & 4\\ 3 & 2\\ 2 & 1 \end{array}\right] C= 132421
那么,如何找出矩阵 A \mathbf A A的列向量的最大无关组?或者说,如何找出列空间的一组基?
这需要CR分解
矩阵
A
\mathbf A
A的满秩分解:
A
\mathbf A
A=列满秩矩阵
C
×
\mathbf C\times
C×行满秩矩阵
R
\mathbf R
R
A
=
C
R
\mathbf A=\mathbf C\mathbf R
A=CR
例如
[
1
4
5
3
2
5
2
1
3
]
=
[
1
4
3
2
2
1
]
[
1
0
1
0
1
1
]
\left[\begin{array}{ll} 1 & 4 &5\\ 3 & 2 &5\\ 2 & 1&3 \end{array}\right]= \left[\begin{array}{ll} 1 & 4 \\ 3 & 2 \\ 2 & 1 \end{array}\right]\left[\begin{array}{lll} 1 & 0 & 1 \\ 0 & 1 & 1 \end{array}\right]
132421553
=
132421
[100111]
其中:
-
C
\mathbf C
C有
r
r
r个列向量,即
A
\mathbf A
A的列空间(
r
r
r维)的一组基
R \mathbf R R有 r r r个行向量,即 A \mathbf A A的行空间( r r r维)的一组基
注意,上面的 C \mathbf C C完全取自 A \mathbf A A中真实存在的列向量,而 R \mathbf R R则不同: R \mathbf R R是行简化阶梯型
将 A \mathbf A A的各列视为 C \mathbf C C的列向量的线性组合, R \mathbf R R是相应的线性组合系数,则 R \mathbf R R中必然含有单位阵 I r \mathbf I_r Ir ps. 不考虑列的出现顺序的问题
若希望 R \mathbf R R也取自 A \mathbf A A中真实存在的行向量,则需要将式子修正为 A = C U R \mathbf A=\mathbf C\mathbf U\mathbf R A=CUR
- 理解1: C \mathbf C C的列向量为列空间的一组基, R \mathbf R R对这些列向量线性组合,表出 A \mathbf A A的所有列( R \mathbf R R是行简化阶梯型)
- 理解2: R \mathbf R R的列向量为行空间的一组基, C \mathbf C C对这些行向量线性组合,表出 A \mathbf A A的所有行
总结:
- CR分解给出了
A
\mathbf A
A列空间/行空间的一组基;
或者说给出了 A \mathbf A A的列向量的最大无关组,并指出如何由无关组表出整个 A \mathbf A A矩阵 - 实际上,CR分解,对应了将 A \mathbf A A进行行初等变换,得到行简化阶梯型 A ~ \tilde{\mathbf A} A~的过程(行简化阶梯型指出了 A \mathbf A A的主元列,也即列向量的最大无关组)
- CR分解的推论:任意矩阵的秩=行秩=列秩(行空间的维数=列空间的维数)
证明:
A = C R \mathbf A=\mathbf C\mathbf R A=CR中, C \mathbf C C可视为保留了 A \mathbf A A列空间的一组基; R \mathbf R R可视为保留了 A \mathbf A A行空间的一组基,根据矩阵乘法规则, C \mathbf C C的列数= R \mathbf R R的行数
这就是说,行空间和列空间维数相等,行秩=列秩
CR分解的问题:
- 难以处理,不是大型计算的最佳选择
- 当 A \mathbf A A为可逆方阵,所有列线性无关( C \mathbf C C就是 A \mathbf A A本身),此时 A = C R \mathbf A=\mathbf C\mathbf R A=CR变为 A = A I \mathbf A=\mathbf A\mathbf I A=AI(什么也没得到)
秩1矩阵=列向量乘以行向量
- 秩1矩阵的各行/各列 都是 第一行/第一列 的倍数;
- 秩1矩阵只有一个线性无关列向量,并且必然也只有一个线性无关的行向量(根据“行秩=列秩”的结论,这是显然的)
实际上,秩1矩阵是CR分解的特例:秩1矩阵=列向量 × \times ×行向量,秩=行秩=列秩=1
- 可见,列向量乘以行向量(外积),得到一个秩1矩阵
秩1矩阵是线性代数的基石Building Block,复杂的矩阵可以拆解为秩1矩阵
矩阵与矩阵乘法的理解:矩阵=秩1矩阵之和
通常将矩阵乘法理解为行向量乘以列向量
- 从“列向量乘行向量”入手,可将矩阵和矩阵的乘法视为一系列秩1矩阵的叠加
A B = ∑ i = 1 n A 的第 i 列 × B 的第 i 行 \mathbf A\mathbf B=\sum_{i=1}^n \mathbf A的第i列\times \mathbf B的第i行 AB=i=1∑nA的第i列×B的第i行(求和的每一项为一个秩1矩阵)
这是看待矩阵和矩阵乘法的全新视角!!!
下面介绍五个关键的矩阵分解时,均会使用这种“列向量乘行向量”的视角来进行解释。
后面将看到,这个视角也能解释LU、QR分解中为什么都出现了上三角矩阵
Ch2. 解方程组、LU分解与四个子空间
先研究齐次方程组 A x = 0 \mathbf A\mathbf x=\mathbf 0 Ax=0,再研究非齐次方程组 A x = b \mathbf A\mathbf x=\mathbf b Ax=b
消元法与LU分解
LU分解来源于使用高斯消元法解方程的过程
消元法解方程的过程如下:核心是不断减少某一行方程中的未知量个数
消元的所有操作,都可以用矩阵乘法LU来完美表示,这就是LU分解
A
=
L
U
\mathbf A=\mathbf L\mathbf U
A=LU
ps. 如果矩阵可逆的,则消元的过程一切顺利,并且主元不为零
ps. 需要行交换时,变为
P
A
=
L
U
\mathbf P\mathbf A=\mathbf L\mathbf U
PA=LU
上图不仅是消元的过程,也是矩阵分解为一系列秩1矩阵的过程(列向量*行向量),正是因为每次消元“带走”了一行,才导致
A
=
L
U
\mathbf A=\mathbf L\mathbf U
A=LU的
U
\mathbf U
U为上三角矩阵
四个子空间
对于秩为r的m x n 矩阵 A ∈ R r m × n \mathbf A\in\mathbb R^{m\times n}_r A∈Rrm×n,有四个基本的子空间
- 列空间 C ( A ) C(\mathbf A) C(A)上面已经介绍过,维度 r r r
- 行空间 C ( A T ) C(\mathbf A^T) C(AT),维度 r r r(因为行秩=列秩,这在CR分解部分证明过)
- 零空间 N ( A ) N(\mathbf A) N(A):即 A x = 0 \mathbf A\mathbf x=\mathbf 0 Ax=0所有可能的解 x \mathbf x x构成的空间,维度 n − r n-r n−r
为何零空间 N ( A ) N(\mathbf A) N(A)维度是 n − r n-r n−r?
方程组 A x = 0 \mathbf A\mathbf x=\mathbf 0 Ax=0看上去有 m m m行方程,但其中真正独立、“起作用”的只有 r r r个方程,剩余的 m − r m-r m−r个方程都是有效方程的线性组合、是多余的;
x \mathbf x x有 n n n个分量(未知数),这些未知数需要满足 r r r个独立约束(有效方程数),可认为 r r r个约束确定了 r r r个分量,那么剩下的 n − r n-r n−r个分量是自由变化的,即 A x = 0 \mathbf A\mathbf x=\mathbf 0 Ax=0的零空间维度 n − r n-r n−r
(对应消元后有 n − r n-r n−r个自由列,即零空间的 n − r n-r n−r个基向量)
- 左零空间 N ( A T ) N(\mathbf A^T) N(AT):维数 m − r m-r m−r
四个子空间的关系:
- 整个 R n \mathbf R^n Rn空间,可拆分为 r r r维行空间 C ( A T ) C(\mathbf A^T) C(AT)和 n − r n-r n−r维零空间 N ( A ) N(\mathbf A) N(A)
为何行空间和零空间是一对?
因为对于 A x = 0 \mathbf A\mathbf x=\mathbf 0 Ax=0,若 A \mathbf A A的行向量有 n n n个分量,则 x \mathbf x x必也有 n n n个分量(做矩阵向量乘法时维度对齐),故零空间和行空间都是 R n \mathbf R^n Rn空间的子空间
- 行空间 C ( A T ) C(\mathbf A^T) C(AT)与零空间 N ( A ) N(\mathbf A) N(A)互为正交补
原因:
对于方程组 A x = 0 \mathbf A\mathbf x=\mathbf 0 Ax=0,相当于 A \mathbf A A的每一行与 x \mathbf x x做点积,结果为0
这就是说, A \mathbf A A的任意行向量与 x \mathbf x x正交,从而行空间与零空间正交
- 列空间 C ( A ) C(\mathbf A) C(A)与左零空间 N ( A T ) N(\mathbf A^T) N(AT)的关系和上面类似,等价于讨论 A T \mathbf A^T AT的行空间和零空间
由此,整个
R
n
\mathbf R^n
Rn空间和
R
m
\mathbf R^m
Rm空间,可以分别拆解为一对子空间;
实际上,这两对子空间(行空间与零空间、列空间与左零空间)之间同样有联系:此时需要将
A
\mathbf A
A视为一种映射算子,它将
n
×
1
n \times 1
n×1向量
x
\mathbf x
x映射为
m
×
1
m \times 1
m×1向量
A
x
\mathbf {Ax}
Ax(
A
x
\mathbf A\mathbf x
Ax就是用行空间/零空间的向量
x
r
o
w
\mathbf x_{row}
xrow对
A
\mathbf A
A的列向量做线性组合,结果位于列空间中)
- 对于行空间中的 x \mathbf x x, A x = b \mathbf A\mathbf x=\mathbf b Ax=b,这是将行空间投影到列空间
- 对于零空间中的 x \mathbf x x, A x = 0 \mathbf A\mathbf x=\mathbf 0 Ax=0,这是将零空间投影到零向量(而不是左零空间)
- 将行空间投影到列空间
A
x
=
b
\mathbf A\mathbf x=\mathbf b
Ax=b是可逆的,而
A
x
=
0
\mathbf A\mathbf x=\mathbf 0
Ax=0则不可逆,这就是为什么说“零空间的存在(维度>0)会导致矩阵不可逆”,详见「伪逆」部分的笔记
ps. 从另一个角度来验证:存在零空间,其维度 n − r > 0 n-r>0 n−r>0,即 n > r n>r n>r不满秩,也就对应了不可逆
Ch3. 正交化、QR分解和最小二乘法
正交向量
正交Orthogonal可以理解为垂直Perpendicular的高级说法
向量的正交,就是内积为0:
x
T
y
=
0
\mathbf x^T\mathbf y=0
xTy=0
x
T
x
=
∥
x
∥
2
\mathbf x^T\mathbf x={\|\mathbf x \|}^2
xTx=∥x∥2 则对应了向量本身模长的平方
正交矩阵
正交矩阵
Q
\mathbf Q
Q的列向量构成一组标准正交基(各个基向量相互正交,模长为1)
正交矩阵
Q
\mathbf Q
Q的性质:
- 正交矩阵
Q
\mathbf Q
Q的逆矩阵
Q
−
1
=
Q
T
\mathbf Q^{-1}=\mathbf Q^T
Q−1=QT
原因:标准正交基满足 q i T q i = 1 , q i T q j = 0 \mathbf q_i^T\mathbf q_i=1,\mathbf q_i^T\mathbf q_j=0 qiTqi=1,qiTqj=0 ,故正交矩阵 Q \mathbf Q Q满足 Q T Q = Q Q T = I \mathbf Q^T\mathbf Q=\mathbf Q\mathbf Q^T=\mathbf I QTQ=QQT=I
图中①为正交矩阵,有 Q \mathbf Q Q满足 Q T Q = Q Q T = I \mathbf Q^T\mathbf Q=\mathbf Q\mathbf Q^T=\mathbf I QTQ=QQT=I;
而②并不是真正的正交矩阵(只有两列,不是方阵),但由于各个列向量标准正交,仍有 Q T Q = I \mathbf Q^T\mathbf Q=\mathbf I QTQ=I,而 Q Q T ≠ I \mathbf Q\mathbf Q^T\neq\mathbf I QQT=I
尽管如此, Q Q T \mathbf Q\mathbf Q^T QQT仍为一种投影矩阵(因为多次相乘,仍得到它本身)
- 将正交矩阵
Q
\mathbf Q
Q视为线性变换,则几何意义是对原有基向量的旋转
进而,两个正交矩阵的乘积 Q 1 Q 2 \mathbf Q_1\mathbf Q_2 Q1Q2仍为正交矩阵 - 正交矩阵与其他向量相乘,不改变其长度
- 正交矩阵 Q \mathbf Q Q特征值满足 ∣ λ ∣ = 1 |\lambda|=1 ∣λ∣=1(可能为复数)
Gram-Schmidt正交化和QR分解
对于矩阵 A \mathbf A A(前提:各个列向量线性无关),我们希望使其列向量 a 1 . . . a n \mathbf a_1...\mathbf a_n a1...an变为正交的列向量 q 1 . . . q n \mathbf q_1...\mathbf q_n q1...qn,且各个列向量的模长标准化为1,这就是Gram-Schmidt正交化
用矩阵形式表达,就是QR分解
A
=
Q
R
\mathbf A=\mathbf Q\mathbf R
A=QR,其中
R
=
Q
T
A
\mathbf R=\mathbf Q^T\mathbf A
R=QTA为上三角阵
例如,原来的列向量 a 1 = r 11 q 1 \mathbf a_1=r_{11}\mathbf q_1 a1=r11q1(第一个基向量,只需要标准化, r 11 = ∥ a 1 ∥ r_{11}=\|\mathbf a_1\| r11=∥a1∥)
而 a 2 = r 12 q 1 + r 22 q 2 \mathbf a_2=r_{12}\mathbf q_1+r_{22}\mathbf q_2 a2=r12q1+r22q2(原来的第二个基向量,是标准化后的第一个/第二个基向量的线性组合)
仍然可以从秩1矩阵的角度入手,将QR分解进一步分解为若干秩1矩阵
最小二乘法:QR分解的主要应用
当
A
x
=
b
\mathbf A\mathbf x=\mathbf b
Ax=b的方程个数过多时(
m
>
n
m>n
m>n,行数大于未知量个数),意味着约束条件过多
此时,
A
\mathbf A
A的列空间只是整个
R
m
\mathbf R^m
Rm空间中的一个平面,然而
b
\mathbf b
b极有可能不在这个平面内,此时方程无解
我们将 b \mathbf b b投影到 A \mathbf A A的列空间内,从而寻找最优的近似解 x ^ \hat{\mathbf x} x^(此时误差 ∥ e ∥ 2 = ∥ b − A x ^ ∥ 2 \|\mathbf e\|^2=\|\mathbf b-\mathbf A\hat{\mathbf x}\|^2 ∥e∥2=∥b−Ax^∥2最小)
- 可以体会到
A
T
\mathbf A^T
AT矩阵的重要性:
同时乘以 A T \mathbf A^T AT,能让 A x = b \mathbf A\mathbf x=\mathbf b Ax=b变得有解
乘以 A T \mathbf A^T AT,任意矩阵 A \mathbf A A变为方阵 A T A \mathbf A^T\mathbf A ATA(至少半正定) - 若有
A
=
Q
R
\mathbf A=\mathbf Q\mathbf R
A=QR,最小二乘法写为
R
x
^
=
Q
T
b
\mathbf R\hat{\mathbf x}=\mathbf Q^T\mathbf b
Rx^=QTb
这就是说,将 A \mathbf A A的列向量标准正交化后,求解最小二乘变得更加容易