1. 线性变换与矩阵
为了搞清矩阵的来历,从线性变换出发是最直观的(线性变换有很多可视化的例子,见3B1B的视频)。
定义
设做线性变换的函数为 f f f ,取向量 u , v u, v u , v 和标量 λ λ λ 。f f f 是线性的,满足两个关键性质:
f ( u + v ) = f ( u ) + f ( v ) f(u+v) = f(u) + f(v) f ( u + v ) = f ( u ) + f ( v )
f ( λ u ) = λ f ( u ) f(\lambda u) = \lambda f(u) f ( λ u ) = λ f ( u )
下面以二维空间 R 2 R^2 R 2 为例,设基向量为 e 1 , e 2 e_1, e_2 e 1 , e 2 。在空间中任取一个向量 v v v ,它可以表示为基底的线性组合:
v = v 1 e 1 + v 2 e 2 v = v_1e_1 + v_2e_2 v = v 1 e 1 + v 2 e 2
上式中 v 1 , v 2 v_1, v_2 v 1 , v 2 是标量 ,即 v v v 的坐标。现在施加任意线性函数 f f f :
f ( v ) = f ( v 1 e 1 + v 2 e 2 ) = v 1 f ( e 1 ) + v 2 f ( e 2 ) f(v) = f(v_1 e_1 + v_2 e_2) = v_1 f(e_1) + v_2 f(e_2) f ( v ) = f ( v 1 e 1 + v 2 e 2 ) = v 1 f ( e 1 ) + v 2 f ( e 2 )
上式中可以见到,结果中我们已经知道了 v 1 , v 2 v_1,v_2 v 1 , v 2 ,要得知 f ( v ) f(v) f ( v ) 的话,还需要知道 f f f 作用在两个基向量上的结果 f ( e 1 ) f(e_1) f ( e 1 ) 和 f ( e 2 ) f(e_2) f ( e 2 ) ,即这个结果和坐标 v 1 , v 2 v_1, v_2 v 1 , v 2 无关,而完全取决于 f f f 在基向量上的作用 f ( e 1 ) f(e_1) f ( e 1 ) 和 f ( e 2 ) f(e_2) f ( e 2 ) 。
f ( e 1 ) f(e_1) f ( e 1 ) 和 f ( e 2 ) f(e_2) f ( e 2 ) 仍在 R 2 R^2 R 2 空间中,因此可以用基向量表示:
f ( e 1 ) = a e 1 + b e 2 , f ( e 2 ) = c e 1 + d e 2 f(e_1) = a e_1 + b e_2,\quad f(e_2) = c e_1 + d e_2 f ( e 1 ) = a e 1 + b e 2 , f ( e 2 ) = c e 1 + d e 2
代入 f ( v ) f(v) f ( v ) 得 v v v 的坐标经 f f f 后变为:
v = ( v 1 , v 2 ) ↦ ( a v 1 + c v 2 , b v 1 + d v 2 ) v = (v_1, v_2) \mapsto (a v_1 + c v_2,\ b v_1 + d v_2) v = ( v 1 , v 2 ) ↦ ( a v 1 + c v 2 , b v 1 + d v 2 )
注意, e 1 e_1 e 1 在 f f f 下变更为原基下的坐标 ( a , b ) (a,b) ( a , b ) , e 2 e_2 e 2 在 f f f 下变更为原基下的坐标 ( c , d ) (c,d) ( c , d ) 。我们的向量一直用列向量书写,因此 f f f 真正本质的信息(对基的作用)由这一对列向量 传达:
M = ( a c b d ) M = \begin{pmatrix} a & c \\ b & d \end{pmatrix} M = ( a b c d )
这一列对向量包含了你想知道的、f f f 作用于任何可能向量的全部信息。它也表明:在所有可能的线性变换构成的函数空间中选一个特定的 f f f ,有四个自由变量可选——即这个函数空间是四维的 (也是一个抽象向量空间)。
矩阵中保存了这样线性变换 f f f 的信息,甚至可以将矩阵乘法看成线性变换的函数:
f ( v ) = [ a c b d ] ⋅ [ v 1 v 2 ] = [ a v 1 + c v 2 b v 1 + d v 2 ]
f(v) = \begin{bmatrix} a & c \\ b & d \end{bmatrix} \cdot \begin{bmatrix} v_1 \\ v_2 \end{bmatrix} = \begin{bmatrix} a v_1 + c v_2 \\ b v_1 + d v_2 \end{bmatrix}
f ( v ) = [ a b c d ] ⋅ [ v 1 v 2 ] = [ a v 1 + c v 2 b v 1 + d v 2 ]
在这种理解之上,f f f 的矩阵通过乘法作用到 v v v 上,而不再直接通过 f f f 作用到 v v v 上。
如图,可以想象基向量从 ( 1 , 0 ) T , ( 0 , 1 ) T (1, 0)^T , (0, 1)^T ( 1 , 0 ) T , ( 0 , 1 ) T 变换为 ( a , c ) T , ( b , d ) T (a, c)^T, (b,d)^T ( a , c ) T , ( b , d ) T 的情形。
另外,借助这个视角,可以更好的理解矩阵乘法
多次矩阵乘法实际上是几个连续的线性变换复合 的结果
矩阵乘法应当从右向左 读(最右变换是第一层变换)
矩阵乘法的结合律自然成立
2. 行列式与叉积
行列式(determinant)在我们的线性代数学习中,通常用来判断线性方程组有没有唯一解。但在线性变换的视角,可以赋予行列式更直观的含义:线性变换可以将 n n n 维空间中的所有内容映射到该 n n n 维空间中的其他位置,或者将该 n n n 维空间压缩到较低维空间(如直线或平面)。在每种情况下,我们都可以进行计算来计算出总体上有多少空间被压缩或扩展 ,而不管转换的其他影响如何,这个计算的结果就是行列式。
下面仍以二维空间进行演示。在二维空间中,基向量将围成一个平行四边形 ,其面积(相较于单位基向量构成图形面积的比例)反映了空间变换的影响。例如,将基向量设定为 [ 3 , 0 ] T , [ 0 , 2 ] T [3,0]^T, [0,2]^T [ 3 , 0 ] T , [ 0 , 2 ] T ,那么恰好围成一个矩形,其面积为 6,即变成单位面积的 6 倍。
因为变换是线性的(产生的网格线保持平行且等距分布),因而所有其他的面积其变化因素跟上述比例是相同的。
如果一个线性变换对应的行列式,其值为 0,说明它将基向量张成的二维平面压缩为一条线(甚至一个点),如下图所示。
此时,矩阵代表的线性变换将空间压缩到了更低的维度 (甚至这个过程中丢失了信息,因而是不可逆的)。
上述几何意义可以用于解释初等行变换对行列式 d e t det d e t 的影响:
R i ↔ R j R_i \leftrightarrow R_j R i ↔ R j ,那么 d e t ′ = − d e t det' = -det d e t ′ = − d e t ,行列式的值变号
R i → k R i R_i \rightarrow kR_i R i → k R i ,那么 d e t ′ = k ∗ d e t det' = k * det d e t ′ = k ∗ d e t ,行列式的值被 k k k 缩放
R j → R j + k R i R_j \rightarrow R_j + kR_i R j → R j + k R i ,那么 d e t ′ = d e t det'=det d e t ′ = d e t ,行列式的值不变
对于初等行变换,我们将矩阵的每一行都看成一个向量,那么这些行向量 将张开一个线性空间。在二维情形下,此矩阵的行列式的值为这些基向量张成的平行四边形的面积。
对于交换两行,实际上没有改变面积的大小,但是行列式代表的面积(体积等)是有向的,交换两向量相当于将基向量所围的平行四边形翻个面 ,因此翻转方向后需要变号。
对于将某行向量缩放 k k k ,可以将此行向量所在的边视为平行四边形的底。那么,在高不变的情形,仅仅对底边缩放,其对整个图形的面积的缩放效果是一致的。
对于将某行向量加上另一被缩放 k k k 的行向量。我们考虑向量的加法,可以知道原行向量仅仅是在另一基向量的方向上有了一个分量 ,因此这个变换在二维即一个剪切变换(shear) ,对平行四边形的面积没有产生影响(底和高都没变,可以拿单位矩阵思考,其形状发生剪切后,将从矩形变为被拉斜的平行四边形)。
另外,对于矩阵的行操作和列操作,有常用的视角(区分于矩阵作用于列向量 如 A x \text{如}Ax 如 A x ):
E A EA E A ,左乘矩阵 E E E 通常对原矩阵 A A A 的各个行向量做线性组合
A E AE A E ,右乘矩阵 E E E 通常对原矩阵 A A A 的各个列向量做线性组合
行列式的一些性质也可以解释(不严谨地):
det ( α A ) = α n det A \det(\alpha A)=\alpha^n\det A det ( α A ) = α n det A
因为 n n n 维空间每个方向上的基向量均被缩放 α \alpha α 的倍数
det ( A B ) = det A det B \det(AB)=\det A\det B det ( A B ) = det A det B
因为先做 B B B 再做 A A A ,体积先缩放 det B \det B det B 倍,再缩放 det A \det A det A 倍。
上述视角都围绕二维展开,试着向三维深入一下。例如,将行列式计算从二阶扩展到三阶。
这里先引入一下叉积的概念。叉积的结果仍旧是一个向量,其:
大小等于这两个向量构成的平行四边形的面积
方向符合右手定则
借助叉积,我们可以方便的将行列式的计算(以及几何理解)从二维推向三维。
给出以下的三阶矩阵:
A = [ a b c d e f g h i ] A= \begin{bmatrix} a & b & c \\ d & e & f \\ g & h & i \end{bmatrix} A = a d g b e h c f i
将其按第一行展开,我们有:
det A = a ∣ e f h i ∣ − b ∣ d f g i ∣ + c ∣ d e g h ∣ \det A = a\begin{vmatrix} e & f \\ h & i \end{vmatrix} -b\begin{vmatrix} d & f \\ g & i \end{vmatrix} +c\begin{vmatrix} d & e \\ g & h \end{vmatrix} det A = a e h f i − b d g f i + c d g e h
上式从几何上,可以认为是计算一个三维平行六面体的有向体积 。下面展示如何从叉积出发,根据 det A \det A det A 的几何意义推出上述代数式。
将矩阵 A A A 视为由行向量张开的空间,那么有行向量:
r 1 = ( a , b , c ) r 2 = ( d , e , f ) r 3 = ( g , h , i ) \begin{aligned}
\mathbf{r}_1 &= (a,b,c) \\
\mathbf{r}_2 &= (d,e,f) \\
\mathbf{r}_3 &= (g,h,i)
\end{aligned} r 1 r 2 r 3 = ( a , b , c ) = ( d , e , f ) = ( g , h , i )
三个向量张成的平行六面体的有向体积即为 det A \det A det A 的值,即:
det A = V = r 1 ⋅ ( r 2 × r 3 ) \det A = V =\mathbf{r}_1\cdot(\mathbf{r}_2\times\mathbf{r}_3) det A = V = r 1 ⋅ ( r 2 × r 3 )
其中,r 2 × r 3 \mathbf{r}_2\times\mathbf{r}_3 r 2 × r 3 的大小等于它们所张开的平行四边形的面积,方向垂直于它们所张开的平面。设 n = r 2 × r 3 ∣ r 2 × r 3 ∣ \mathbf{n}=\frac{\mathbf{r}_2\times\mathbf{r}_3}{|\mathbf{r}_2\times\mathbf{r}_3|} n = ∣ r 2 × r 3 ∣ r 2 × r 3 ,那么 r 1 ⋅ n \mathbf{r}_1\cdot \mathbf{n} r 1 ⋅ n 能够得到 r 1 \mathbf{r}_1 r 1 在底面法向量方向上的投影(即有向高度),从而得到上式(称为混合积):
V = ∣ r 2 × r 3 ∣ ( r 1 ⋅ r 2 × r 3 ∣ r 2 × r 3 ∣ ) = r 1 ⋅ ( r 2 × r 3 ) V=|\mathbf{r}_2\times\mathbf{r}_3|\left(\mathbf{r}_1\cdot\frac{\mathbf{r}_2\times\mathbf{r}_3}{|\mathbf{r}_2\times\mathbf{r}_3|}\right)=\mathbf{r}_1\cdot(\mathbf{r}_2\times\mathbf{r}_3) V = ∣ r 2 × r 3 ∣ ( r 1 ⋅ ∣ r 2 × r 3 ∣ r 2 × r 3 ) = r 1 ⋅ ( r 2 × r 3 )
将叉积 r 2 × r 3 \mathbf{r}_2\times\mathbf{r}_3 r 2 × r 3 写为分量形式,即
r 2 × r 3 = ( n x , n y , n z ) \mathbf{r}_2\times\mathbf{r}_3=(n_x,n_y,n_z) r 2 × r 3 = ( n x , n y , n z )
又 r 2 × r 3 \mathbf{r}_2\times\mathbf{r}_3 r 2 × r 3 本身既是个面积向量,又是个法向量。因此,需要找到 r 2 × r 3 \mathbf{r}_2\times\mathbf{r}_3 r 2 × r 3 其面积向量在以x , y , z x,y,z x , y , z 三个法向方向上的分量,即找到 r 2 × r 3 \mathbf{r}_2\times\mathbf{r}_3 r 2 × r 3 这个面在三个坐标平面的有向投影面积 :
r 2 × r 3 = ( S y z , S x z , S x y ) \mathbf{r}_2\times\mathbf{r}_3=(S_{yz},S_{xz},S_{xy}) r 2 × r 3 = ( S y z , S x z , S x y )
而 r 1 = ( a , b , c ) \mathbf{r}_1 = (a,b,c) r 1 = ( a , b , c ) ,那么
det A = r 1 ⋅ ( r 2 × r 3 ) = a S y z + b S x z + c S x y \det A =\mathbf{r}_1\cdot(\mathbf{r}_2\times\mathbf{r}_3)=a\ S_{yz} + b \ S_{xz} + c \ S_{xy} det A = r 1 ⋅ ( r 2 × r 3 ) = a S y z + b S x z + c S x y
这样就已经得到 d e t A det\ A d e t A 的展开式了, 有向面积 S y z , S x z , S x y S_{yz},S_{xz},S_{xy} S y z , S x z , S x y 的计算即我们已经掌握的二阶行列式的计算。例如计算 S y z S_{yz} S y z ,有投影 r 2 ′ = ( e , f ) , r 3 ′ = ( h , i ) \mathbf{r}^{'}_2 = (e,f),\mathbf{r}^{'}_3 = (h,i) r 2 ′ = ( e , f ) , r 3 ′ = ( h , i ) ,所以 S y z = ∣ e f h i ∣ = e i − f h S_{yz} = \begin{vmatrix} e & f \\ h & i \end{vmatrix} = ei-fh S y z = e h f i = e i − f h 。
注意
余子式展开的正负号交替,在三维情形下跟右手系有关(更高维的情形下,本质是排列/置换的奇偶性(这可用逆序数判断)。发生取向反转时会使有向体积变号)。
在三维坐标系下有:
e x × e y = e z \mathbf{e}_x\times\mathbf{e}_y=\mathbf{e}_z e x × e y = e z
e y × e z = e x \mathbf{e}_y\times\mathbf{e}_z=\mathbf{e}_x e y × e z = e x
e z × e x = e y \mathbf{e}_z\times\mathbf{e}_x=\mathbf{e}_y e z × e x = e y
那么,e x × e z = − e y \mathbf{e}_x\times\mathbf{e}_z=-\mathbf{e}_y e x × e z = − e y ,S x z S_{xz} S x z 跟正向 z x zx z x 方向是反的,因此展开式中此项带有负号。
3. 逆矩阵与秩
前面提到矩阵是线性变换的体现,因此逆矩阵其实代表该线性变换的逆变换。
从机器学习的角度看,矩阵 A A A 往往代表一个线性变换,求解 A x = b Ax=b A x = b 就是寻找一个输入 x x x ,使变换后的结果落在目标 b b b 上。
我们依旧可以从二维情形入手,例如:
我们如何理解这个方程的解,取决于 A A A 所对应的变换
要么把整个空间挤压到更低的维度,比如一条线或一个点
要么仍然张成原来的完整二维空间
这就与行列式相关,若行列式不为零,那么说明变换后的空间维度没变(信息未损失),那么可以通过逆变换来得到解;若行列式为零,那么说明变换后的空间被压缩了(信息已损失),那么对应的逆变换就不存在,就没法求出逆矩阵。此时,b b b 要么完全不在变换后的空间内,要么很多的 x x x 在变换后都被压到 b b b (某些维度被压到零导致的)。
对逆矩阵定义如下:
A − 1 A = A A − 1 = I A^{-1}A = AA^{-1} = I A − 1 A = A A − 1 = I
如果 A − 1 A^{-1} A − 1 存在,那么从 A x = b Ax=b A x = b 出发,左乘 A − 1 A^{-1} A − 1 就得到:
x = A − 1 b x=A^{-1}b x = A − 1 b
用行列式为零去描述降维情形,显然不够具体。为此,引入了矩阵的秩去描述变换后空间的维度信息。矩阵所有可能的输出所组成的集合——无论它是一条线、一个平面还是整个三维空间——叫作这个矩阵的列空间。矩阵的列向量告诉你各个基向量落在了哪里,而这些变换后基向量的张成空间,就给出了所有可能的输出。换句话说,列空间就是矩阵各列向量的张成空间。
因此,秩的定义为列空间的维数。当这个秩达到最大值、等于矩阵的列数时,这个矩阵就称为满秩矩阵。教材定义中,常给出一个矩阵 A A A 的列秩是 A A A 的线性无关的列的极大数目。类似地,行秩是 A A A 的线性无关的行的极大数目。矩阵的列秩和行秩总是相等的,因此它们可以简单地称作矩阵 A A A 的秩。
注意
零向量总会包含在列空间中,因为线性变换必须保持原点不动。
对于满秩变换,唯一会落到原点的向量就是零向量本身。但对于非满秩矩阵,也就是会把空间挤压到更小维度的矩阵,可能会有大量向量都落到零向量上。
如果一个三维变换把空间挤压到一个平面,那么会有一整条直线上的向量最终落到原点
如果一个三维变换把空间挤压到一条直线,那么会有一整个平面上的向量最终落到原点
这些最终落到原点的向量所组成的集合,叫作这个矩阵的零空间 ,也叫核。根据定义,零空间就是线性齐次方程组 A x = 0 Ax = 0 A x = 0 的所有解的集合。
有结论:
A 可逆 ⟺ det A ≠ 0 ⟺ A x = 0 只有零解 ⟺ r a n k ( A ) = n A\text{可逆} \iff \det A \neq 0 \iff Ax=0\text{只有零解} \iff \mathrm{rank}(A)=n A 可逆 ⟺ det A = 0 ⟺ A x = 0 只有零解 ⟺ rank ( A ) = n
4. 点积、正交与投影
待续
5. 特征值与特征向量
待续
6. SVD 与伪逆
待续
参考
线性代数的本质
https://www.bilibili.com/video/BV1ys411472E/
https://mathomablog.wordpress.com/2017/02/11/who-cares-about-matrices-why-3blue1brown-presents-linear-algebra-correctly/
线性代数 — Machine Learning From Scratch
https://machine-learning-from-scratch.readthedocs.io/zh-cn/latest/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0.html
交互式行列式教程
https://intuitive-math.club/linear-algebra/determinant/