RethinkFun深度学习 · Part 1 linear algebra

从头开始补习一下Deep learning

[TOC]

RethinkFun深度学习 · GitBook

https://www.bilibili.com/video/BV1A9tszhEpp/

不知道开了第几个坑,这里需要从头开始补一下深度学习

但是这里会比较浅,稍微过一下我忘记的知识

Pre

  • 传统:专家系统、知识图谱,本质上都是设定好规则,没什么美感
    • 适合已有既定规则、规律的任务(物理规则、计算)
  • 机器学习:从数据中自动挖掘规律
    • 难以描述的规律、规则(识别猫和狗)
    • 黑盒
  • 深度学习:机器学习的子集
    • 更黑盒

线性代数

  • 标量(scalar):年龄、身高……等单一数值
  • 向量(vector)
    • 物理中的意义非凡
    • 机器学习中其实就是一个对象的在不同维度的属性,简称一组有序的数

区分一下向量的缩放,缩放的英语单词为scaling

请阅读:3blue1brown 线性代数的本质

线性相关

线性不相关的向量

  • 线性相关:如果一组向量里至少有一个向量可以表示为其他向量的线性组合,那么就称这一组向量线性相关。

  • 基:向量空间的一组基是指张成该空间的一个线性无关的向量组

线性变换

可以理解为对向量的一个函数:

  • 输入:一个向量
  • 输出:一个向量

但这个函数需要满足:

  • 加法封闭性:$T(u+v) = T(u) + T(v)$
  • 数乘封闭性:$T(cu) = cT(u)$

向量的基本操作就两个:一个是数乘,一个是向量加法

但是这样对理解来说过于复杂,不如把线性变换定义为:

线性变换

  • 平面上任意直线都不会扭曲
  • 原点不变

通过基向量在变换前后的变换情况,我们可以推出平面上所有向量的变换后结果:

矩阵

(a,c)和(b,d)就是(1,0)和(0,1)在二维平面上变换后的向量

同理,线性变换可以复合,因此可以表示为矩阵乘法:

矩阵乘法

行列式

反映了线性变换对空间的**“体积”**影响

行列式

线性变换后,平面的面积会由于变换发生变换,行列式恰好反应了这一变换系数

同时面积是具有方向的(A向量到B向量之间的面积与B向量到A向量之间的面积相反)

因此行列式可以是负数

  • 对于二维的线性变换矩阵,若行列式为0
    • 所有向量被线性变换压缩到一条直线或点上
    • 两个新的基向量是线性相关的
  • 对于三维,可能被压缩到平面、直线、点中……
$$ \det(M_1M_2)=\det(M_1)\det(M_2) $$

线性方程组

线性方程组

我们通过将线性方程组写成矩阵方程的形式

似乎可以表示为:求解一个向量$x$,通过线性变换$A$,与向量$v$重叠

  • 当$A$的行列式不为0时
    • 显然线性变化是可逆的(空间并没有被压缩)
    • 因此逆矩阵是存在的,且逆矩阵可以使得$AA^{-1}$的结果为一个什么都没做的线性变换,即单位矩阵
    • 所以只需要对$v$应用一个逆线性变换即可求解
    • 且解唯一
  • 当行列式为0,此时不存在逆矩阵(无法恢复被压缩的空间)
    • 因此此时解的情况非常复杂

Rank

从线性变换后的空间出发,秩被定义为:线性变换后的空间的维数

对于线性变换矩阵$A$​,其每一个列向量就是基向量的一部分

列空间

由其列向量的线性组合张成的空间即为列空间

秩就是列空间的维数

零空间

线性变换后落在零点的向量,构成零空间,或者

$$ Ax = 0 $$

非方阵

线性变换

  • $n\times m$维的矩阵,表示$m$维空间转化到$n$维的一个线性变换

点积

点积

同样从几何意义出发,两个向量的点积,象征了一个向量在另一个向量的投影与该向量长度的乘积

通过这一层意义,我们可以知道点积的正、负、零的关系所带来的一些意义

但是为什么点积的计算是符合这个几何意义的?

点积->线性变换

两个列向量的点积,其实可以看做一个向量基于一个线性变换,最终被压缩到了一个一维空间

证明

我们可以构造任意一条过原点的向量,且引入一个二维向量$u$,长度为1,恰好在这条直线的刻度1上

我们可以把空间中所有点都线性变换到这个直线所在的一维空间

显然这个过程可以使用一个$1\times 2$矩阵表示

因此我们只需要求解$i,j$变换后在直线上的刻度值,即可得到这个矩阵

投影

由于$i,j,u$的长度都是相同的(都是1),因此实质上具备对称性:

  • $i$线性变换后的刻度值 = $u$投影到$i$的长度 = $u_x$
  • $j$线性变换后的刻度值 = $u$投影到$j$的长度 = $u_y$
$$ \begin{bmatrix} u_x & u_y \end{bmatrix} $$$$ \begin{bmatrix} u_x & u_y \end{bmatrix} \begin{bmatrix} x\\y \end{bmatrix} = u_x\times x+u_y\times y $$

因此任意向量在指定单位向量上的投影值,可以表示为与这个单位向量的点积

对于非单位向量,似乎只是$u_x,u_y$乘上了一个长度系数

对于点积的结果,正是投影长度乘以这个长度系数

对偶向量

$$ f_v(w) = v \cdot w $$

此时向量$f_v(w)$就是一个通过线性变换$v$,由$w$得到的一个一维向量

这一类向量$f_v$被称为对偶向量

即:构造了一个等价的线性函数,描述了一类操作

叉积

叉积

  • 对于二维平面,在几何意义上,叉积代表了两向量之间的有向面积
  • 并且这个值可以通过行列式(反应面积)衍生而来

更具意义的是,两个向量的叉积,实质上得到的是一个新向量

叉积的实质

  • 法向量的长度等于两个向量的有向面积
  • 方向符合右手定则

这里我们仿造点积部分,我们希望定义一个线性变换,找到其对偶向量,并且说明对偶向量就是叉积的结果

对于两个三维的向量,其叉积的结果:

$$ \begin{bmatrix} x_1\y_1\z_1

\end{bmatrix} \times \begin{bmatrix} x_2\y_2\z_2

\end{bmatrix} = \det (\begin{bmatrix} i & x_1 & x_2\ j & y_1 & y_2\ k & z_1 & z_2

\end{bmatrix} ) $$

最后得到的$(i,j,k)$系数,即为对应的叉积向量

我们不如把$(i,j,k)$抽象成一个函数:

$$ f(\begin{bmatrix} x\y\z

\end{bmatrix}) = \det (\begin{bmatrix} x & x_1 & x_2\ y & y_1 & y_2\ z & z_1 & z_2

\end{bmatrix} ) $$

我们的目标是找到一个对偶向量$p$,使得:

$$ p\cdot \begin{bmatrix} x\y\z

\end{bmatrix} =\begin{bmatrix} p_1\p_2\p_3

\end{bmatrix}\cdot \begin{bmatrix} x\y\z

\end{bmatrix} = f(\begin{bmatrix} x\y\z

\end{bmatrix}) = \det (\begin{bmatrix} x & x_1 & x_2\ y & y_1 & y_2\ z & z_1 & z_2

\end{bmatrix} ) $$

则有:

$$ p_1x+p_2y+p_3z = x(y_1z_2-z_1y_2)+y(z_1x_2-x_1z_2)+z(z_1y_2-y_1z_2) $$

因此:

$$ p = \begin{bmatrix} y_1z_2-z_1y_2\z_1x_2-x_1z_2\z_1y_2-y_1z_2

\end{bmatrix} $$

当我们构造出这个对偶向量时,回到点积的几何意义上

  • 将向量$(x,y,z)^T$投影到$p$上,并且将长度与$|p|$相乘

再回到三维叉积的几何意义上:

  • 三个向量所围成的平行六面体的有向体积

我们可以计算一下这个六面体的有向体积:

定义$v = (x_1,y_1,w_1)^T, w = (x_2,y_2,w_2)^T$

以v和w为底部的体积计算

因此可以说明为:将$(x,y,z)^T$投影到$v,w$法向量上,并且与$v,w$的平行四边形的有向面积相乘

注意:法向量的长度,恰好等于$v,w$的平行四边形的有向面积

因此整个过程可以被概括为:$(x,y,z)^T$与$v,w$法向量的点积

基变换

选用不同的基向量,表达的方式自然会有些不同

  • 选用$i,j$:网格方方正正
  • 选用其他基向量:网格有一定倾斜

基向量

对于空间中的同一个向量,不同的基向量选择,自然会使用不同的线性组合进行表示

假设选取一组基向量:

$$ b_1 = \begin{bmatrix} 2\1

\end{bmatrix},b_2 = \begin{bmatrix} -1\1

\end{bmatrix} $$

对于向量$(-4,1)^T$,可以表示为以下两种方式:

  • $(-4,-1)^T = -4i+j$
  • $(-4,1)^T = -b_1 + 2b_2$

似乎可以通过矩阵表示:

$$ \begin{bmatrix} 2 & -1\1 & 1

\end{bmatrix}\begin{bmatrix} -1\2

\end{bmatrix} = \begin{bmatrix} -4 \1

\end{bmatrix} $$

概括这个线性变换:

$$ \begin{bmatrix} 2 & -1\1 & 1

\end{bmatrix}v = w $$

  • $v$代表$b_1,b_2$空间下的向量表示
  • $w$代表$i,j$空间下的向量表示

有趣的是,$b_1,b_2$的数值是基于$i,j$进行表示的

也就是使用了$b_1,b_2$视角下的$v$,左乘了$i,j$视角下的基向量矩阵,得到$v$在$i,j$视角下的$w$


假设我们使用一个线性变换:逆时针旋转90°

对于$i,j$作为基向量的空间,只需要追踪$i,j$变换后的位置,这个线性变换可以轻松表示为:

$$ M = \begin{bmatrix} 0 & -1\1 & 0

\end{bmatrix} $$

我们好奇在$b_1,b_2$视角下的旋转矩阵应该是怎么样的

对于需要旋转的向量$v$($b_1,b_2$视角),我们可以先把他转化到$i,j$下

$$ \begin{bmatrix} 2 & -1\1 & 1

\end{bmatrix}v $$

然后就可以自然代入旋转矩阵:

$$ \begin{bmatrix} 0 & -1\1 & 0

\end{bmatrix}\begin{bmatrix} 2 & -1\1 & 1

\end{bmatrix}v $$

最后我们需要转化回$b_1,b_2$视角,乘上一个逆矩阵即可:

$$ \begin{bmatrix} 2 & -1\1 & 1

\end{bmatrix}^{-1}\begin{bmatrix} 0 & -1\1 & 0

\end{bmatrix}\begin{bmatrix} 2 & -1\1 & 1

\end{bmatrix}v $$

令这个转化矩阵为$A$,则整个旋转矩阵可以归纳为:

$$ A^{-1}MA $$

特征变换与特征值

对于一个线性变换$A$,总有一些向量在变换前后,仍然在同一条过原点的直线上

这些向量被称为特征向量$v$

同时由于存在一定比例的拉伸,这个比例被称为特征值$\lambda$

$$ Av = \lambda v $$

由于右边是数乘,会比较麻烦,所以通常处理为:

$$ Av = (\lambda I)v \\ (A-\lambda I)v =0 $$

也就是说一个向量$v$要被线性变换$A-\lambda I$压缩成零向量

能做到这一点的只能是$rank=0$的线性变换

这里通过行列式就能求解

抽象向量空间

接下来我们将超出2、3维,把线性抽象到函数层面

我们对于函数也能做线性变化

  • $L(f,g) = L(f) + L(g)$
  • $L(f) = cL(f)$

很巧,求导完美符合这两条性质

因此对于一个多项式,求导可以使用矩阵进行表示

线性变换 - 求导

使用 Hugo 构建
主题 StackJimmy 设计