前段时间想说看看机器学习相关的东西,结果果然为了大学线代没有好好学付出了代价, 吃了没文化的亏,所以还是先补一补基础知识。

在知乎上看到一个很不错的回答,推荐了一个现代的系列视频, 主要是帮忙构建线代的东西在几何上的表示。 还是很不错的,线性变换这些东西,还是有动画演示更容易建立直观的感受。 所以这只是个笔记,想要了解还是看视频效果比较好。

向量

向量就是一组数,比如 [1 0] 就是一个二维的向量。对应到二维平面上,我们可以把它理解为一个从原点指向点 (1, 0) 的箭头。或者不从原点开始也行,只要方向和大小一样,在哪都是一样的,这样把它理解为一种运动, 可能更加贴切一些。

向量可以进行两种操作,加法和乘法,两个向量相加得到一个新向量,每一个维度的值是两个向量相应维度的值的和。 像上面说到的,如果我们把二维向量理解成平面上面的一种运动,并把向量拆解称为基向量(下面会说到)再相加, 这样的结果就会显得很自然。乘法也很简单,比如我们把一个向量乘以一个常数,相当于让他每一项都乘以一个常数。

基向量

在我们比较常见的二维平面直角坐标系里面,常用的基向量是 i [1 0], j [0 1], 其他任意向量可以表示称为基向量的线性组合如 a * i + b * j 其中 a 和 b 都是常数。 但并不是说基向量只能选 i 和 j,其实基向量的选择是很自由的,只要平面上面的任意向量, 都能表示为基向量的线性组合就可以了。我们把基向量的所有线性组合组成的空间称为他们张成的空间。 当然两个向量如果碰巧共线的话,它们的张成空间就只能是一条直线了。

线性相关

考虑一个二维平面,要形成一个平面张成空间,我们至少须要两个二维向量,如果我们要扩展到三维空间, 那么我们还需要增加一个向量。但就像两个向量可能只张成一条直线,如果第三个向量落在前两个向量的张成空间, 也就是这个平面上面,那他们三个的张成空间还是这个平面。也就是说第三个向量对张成空间没有贡献。 这时候我们说这第三个向量和前两个向量线性相关。

线性变换

在几何上来说,满足这两个条件的变换就可以称为线性变换

  1. 空间中的直线,在变换后依然是直线,不会弯曲
  2. 原点不会变化 (书上常说的两条,可加性和齐次性其实跟着两条是等价的) 在空间进行了线性变换之后,变换前的线性组合在变换后依然成立。

举个例子,我们有一个常用的二维变换,通常叫斜切变换。在变换猴基向量 i 不变,还是 [1 0], 但基向量 j 变换到了 [1 1]。由于线性变换依然成立,比如说我们在变换前的向量为 [2 3], 相当于 2 * i + 3 * j,那么变换后依然还是成立的,也就是会变成 2 * [1 0] + 3 * [1 1], 结果就是 [5 3],这就是矩阵和向量的乘法的几何意义。也就是说,线性变换,可以用一个矩阵来表示, 这个矩阵由变换后的基向量组成。

矩阵乘法

接下来,我们考虑两个连续的线性变换,比如现旋转 90 度,然后再进行斜切操作。 上面说过,对一个向量进行线性变换,相当于让这个向量和变换对应的矩阵(变换矩阵)相乘。 连续进行两次变换,就相当于连续与两个矩阵相乘。而连续两个变换也可以看作是一个新的变换, 那么很明显,变换矩阵相乘就会得到这个新的变换的变换矩阵。

想象一下刚才说的旋转和斜切操作,先做旋转再做斜切,和先做斜切再做旋转得到的结果是不同的。 所以,矩阵相乘不能随意交换顺序也就很合理了。

如何计算矩阵相乘呢,当然我们有公式,但是也有与几何相关的方法来理解。之前说过, 变换矩阵其实可以由变换后的基向量组合而成,比如斜切变换,变换后的 i 是 [1 0], 变换后的 j 是 [1, 1] 那么我们可以很简单地把他们拼起来

     -   - 
    | 1 1 |
    | 0 1 |
     -   - 

其中第一列是向量 i 第二列是向量。经过这个变换之后基向量就变成了 [1 0] 和 [1 1]。 那同样的,我们可以知道,逆时针旋转 90° 的变换矩阵就是

     -    - 
    | 0 -1 |
    | 1  0 |
     -    - 

那么先对一个向量进行斜切再进行旋转,相当于这样

     -    -  -   -  - -
    | 0 -1 || 1 1 || x |
    | 1  0 || 0 1 || y |
     -    -  -   -  - -

让这个向量先乘以斜切变换矩阵,再乘以旋转变换矩阵 那么我们怎么计算下面这个乘积呢

     -    -  -   - 
    | 0 -1 || 1 1 |
    | 1  0 || 0 1 |
     -    -  -   - 

其实也很简单,我们将斜切矩阵也切成两个向量,让这两个基向量分别去进行旋转变换。 得到新的两个基向量,我们就获得了连续两次变换之后基向量的结果,当然,将他们拼起来, 就得到了两次连续变换的变换矩阵。

行列式

行列式的几何意义也挺简单,这表示这个变换对空间的缩放比例。比如我们考虑一个变换,

     -   -
    | 2 1 |
    | 0 1 |
     -   -

i 向量伸长了两倍,j 向量向右推了 1 个单位。我们考虑原空间中基向量围成的 1 * 1 正方形, 在经过变换之后,变成了一个面积为两倍的平行四边形,所以行列式的计算结果也是 2。

另外,如果一个变换,将向量空间压缩到更低的纬度,那么行列式就会为 0

矩阵的秩

像上面说的,一个变换有可能会造成空间的纬度压缩,秩表示的就是空间被变换后空间的维数, 如果维数等于矩阵的列数,则称为满秩。满秩的情况下,只有零向量能落在原点,其他情况下, 因为空间的压缩,会有其他的点压缩到原点

矩阵的核/零空间

上面说到的,由于某些变换导致的空间压缩,原空间中的某些向量会被压缩到原点,这些向量组成的空间, 称为矩阵的核,或者零空间。当我们用矩阵的方式来解线性方程组的时候,就会发现零空间是方程组可能解的集合。

非方阵

上面讲到的都是方阵在几何上的标识,而非方阵其实也表示了变换,只不过非方阵的变换可以导致空间纬度的变化。 比如说我们又一个 2 * 3 矩阵,每一列表示一个三维的向量,两个向量在三维空间中可以张成一个过原点的平面。 所以这个矩阵代表的是将一个二维空间变换到一个三维空间中的一个平面。

点积

对两个向量进行点积操作是很简单的,把对应的每一项乘起来求和就可以了。 点积的几何意义是一个向量正交投影到另一个向量上,然后将他们的值相乘。 利用一点相似三角形的特性很容易推论出,点积是可以交换位置的,谁放在前面并没有什么影响。 当然我们也可以从另一个角度来看,点积的操作其实看起来跟我们将一个向量转置,当成一个矩阵, 然后与另一个向量做乘法。其实如果仔细考虑一下,一个向量跟他转置形成的矩阵,有着一种神奇的对偶性。

叉积

叉积的计算方法是,先将两个向量组成矩阵,插入基向量作为第一列,求矩阵的行列式。 最终我们会得到一个向量,长度等于两个向量围成四边形的面积,但还是和上面一样,明白几何上的意义, 能帮助我们理解。

我们知道一个多维到一维的线性变换,可以用一个矩阵表示,而且这样的矩阵,可以找到一个对偶向量。 如果我们根据两个向量 v 和 w 构造一个这样的变换,那么它的对偶向量就是 v 和 w 的叉积。

这个过程比较复杂,假设我们有 3 个向量 u v w,而不是两个,把他们组成一个矩阵求行列式

 -        -
| u1 v1 w1 |
| u2 v2 w2 |
| u3 v3 w3 |
 -        -

我们可以得到的是 3 个向量组成的平行六面体的体积。我们把第一个向量 u 看做可变的向量

 -       -
| x v1 w1 |
| y v2 w2 |
| z v3 w3 |
 -       -

v 和 w 保持不变,然后求它的行列式。我们就得到了一个从三维空间到数轴的变换函数了, 输入 x, y, z 然后输出一个数字。这个函数在几何上你可以理解为,输入一个向量, 得到这个向量和一个确定的四边形底(v 和 w 围成的)组成的六面体的体积。 这个多维到一维的变换是线性的,那么他就可以用一个矩阵来描述,因为是三维到一维的变换, 所以是一个 3 * 1 的矩阵。而一个 3 * 1 的矩阵乘以一个目标向量,等于把这个矩阵转置得到一个转置向量, 把转置向量和目标向量点乘。

 -  -     - -          -       -
| p1 |   | x |        | x v1 w1 |
| p2 | . | y |  = det(| y v2 w2 |)
| p3 |   | z |        | z v3 w3 |
 -  -     - -          -       -

又因为我们知道叉积的几何意义是向量的正交投影的乘积,再加上底乘以高等于面积。等等, 我们是不是发现了什么。

这个转置向量,给个名字吧,比如叫 p,p 与任意向量的点积, 等于这个向量和一个底面围成的六面体的体积。我们知道 我们知道六面体的体积等于底乘以高,而点积又是正交投影。 不难想到,要这个等式成立,p 须要与 v x 的平面垂直,这样 xyz 擦能正交投影称为六面体的高。 然后 p 的值与底面四边形的面积相等。这就是叉积的计算为何会是计算这么一个行列式的原因了。

基变换

特征向量与特征值

未完待续