基于
图解机器学习的数学直觉
机器学习本质上是使用合适的模型,利用数据来拟合模型获得最好的参数,在这个过程中的各种计算都需要用到线性代数,所以必须要知道线性代数的基本概念和计算方法。
线性代数就是使用矩阵或者向量等做次方为一次的各类加减乘除计算。
向量
在二维坐标系里看是一个有向的线段,在代数上看是一列数字,向量有分配律、结合律等。
向量的点积dot product
, 就是把两个向量相应位置的元素相乘,然后再求和得到一个标量。
向量的长度
可以用毕达哥拉斯定理求得。
余弦定理 cosine rule
,一个三角形有三条边,那么有以下关系
c
2
=
a
2
+
b
2
−
2
a
b
cos
θ
c^2 = a^2+b^2-2ab\cos \theta
c
2
=
a
2
+
b
2
−
2
a
b
cos
θ
,余弦定理应用到向量的点积上,可以得到
r
⋅
s
=
∣
r
∣
⋅
∣
s
∣
cos
θ
r \cdot s=|r|\cdot|s|\cos \theta
r
⋅
s
=
∣
r
∣
⋅
∣
s
∣
cos
θ
,所以如果两个向量有正交关系的话,它们的点积就等于零。
投影 vector projection
,计算一个向量在另一个向量上的投影,s 在 r 上的投影长度为
r
⋅
s
∣
r
∣
=
∣
s
∣
cos
θ
\frac{r \cdot s}{|r|}=|s|\cos \theta
∣
r
∣
r
⋅
s
=
∣
s
∣
cos
θ
,得到投影长度了,那么如何得到 s 在 r 上的投影向量呢? 那就是再乘以 r 方向上的单位向量
r
∣
r
∣
\frac{r}{|r|}
∣
r
∣
r
,也就是
r
⋅
s
∣
r
∣
⋅
r
∣
r
∣
=
∣
s
∣
cos
θ
⋅
r
∣
r
∣
\frac{r \cdot s}{|r|}\cdot\frac{r}{|r|}=|s|\cos \theta \cdot \frac{r}{|r|}
∣
r
∣
r
⋅
s
⋅
∣
r
∣
r
=
∣
s
∣
cos
θ
⋅
∣
r
∣
r
基变换
,同一个向量,在其本身无变化的情况下,可以变化其基向量,并得到这个向量在新的基中的位置,这叫做基变换。选取的基向量可以垂直也可以不垂直,最好用垂直的,方便计算。
变换的方法就是,求原向量在新的基坐标系各维度的投影。需要知道的是,向量在一个坐标系内的位置,就是其在每个维度的投影,而且每个维度上的数值就是其在每个维度上关于单位向量的倍数。那么这个向量在某一个新维度上的值就是
r
⋅
s
∣
r
∣
2
\frac{r \cdot s}{|r|^2}
∣
r
∣
2
r
⋅
s
,也就是先计算投影长度,再除以这个新维度的单位向量的长度
∣
r
∣
|r|
∣
r
∣
,得到的数值其实就是向量在这个新维度上是新维度单位向量长度的倍数,也就是向量的在这个新维度的坐标的值。
机器学习中存在很多变换 Transformation。
一个空间的
基向量
是 n 个向量的组合,这些向量是线性无关(linearly independent)的,也就是向量之间不能通过简单的线性计算得到彼此,它们必须都能单独表示一个维度。比如两个向量 b1 和 b2 定义一个平面,b3 就不能在它们所定义的平面内,b3 必须能增加另外一个维度,才能成为一个基向量。基向量最好还是正交关系。
矩阵
矩阵 Matrix,可以看成是对空间进行变形,
(
M
a
t
r
i
x
)
⋅
(
V
e
c
t
o
r
)
=
(
V
e
c
t
o
r
)
(Matrix)\cdot (Vector)=(Vector)
(
M
a
t
r
i
x
)
⋅
(
V
e
c
t
o
r
)
=
(
V
e
c
t
o
r
)
,可以把 Matrix 看成是对 Vector 进行了一个变换,Vector 的每一个维度都改变了长度和方向。
机器学习中,我们可以把每个example的数据作为一行,总行数就是example的数量,这样就得到了一个由example组成的矩阵,然后矩阵乘以参数组成的向量,得到最后的结果label,)
(我的思考:是不是可以把参数矩阵看成变形方式,参数乘以一个example向量,就可以把example向量变形为一个新的向量,这个新的向量就容易总结出更好的特征。)
其实这个过程也可以有另外一种理解,就是Matrix改变基向量,然后原来的Vector乘改变后的基向量,也能得到新的Vector。因为一个
M
a
t
r
i
x
⋅
I
=
M
a
t
r
i
x
Matrix \cdot I=Matrix
M
a
t
r
i
x
⋅
I
=
M
a
t
r
i
x
,I 是单位矩阵,其实也可以看成是空间的基向量组成的矩阵,Matrix乘以 I,等于是 Matrix 把原来的基矩阵 I 变成了新空间的基矩阵 Matrix;随后这个新的基矩阵乘以一个 Vector,就表示把这个 Vector 进行了新空间的变形。
机器学习的计算过程本质,就是不断地对高纬度的features数据进行有意义的降维,提炼出更有意义的特征。
Matrix可以做各种各样的变形,比如:单位矩阵(Identity Matrix),对角线上元素是1,其他元素都是0,它乘以一个向量,向量无变化。剪切变换(shear transformation),是一种平行四边形式的倾斜变换;旋转(rotation)变换等。
看上图左上方,如果已知A矩阵乘以r矩阵得到结果r’,求 r 矩阵中向量a、b、c的值,可以在左右两边同乘以A的逆矩阵
A
−
1
A^{-1}
A
−
1
,把左边变成单位矩阵
I
I
I
乘以 r 矩阵,就可以得到a、b、c的值了。不过逆矩阵很难得到,所以可以用elimination和back-substitution方法逐步得到各个值,也就是消元法。
当然,也可以手动求
A
−
1
A^{-1}
A
−
1
,可以用上面的方法,因为A
与其逆矩阵的点积为单位矩阵
A
⋅
A
−
1
=
I
A\cdot A^{-1}=I
A
⋅
A
−
1
=
I
,把A用消元法逐步变成
I
I
I
,得到右侧的B就是A的逆矩阵了。
行列式
看上图,
行列式(determinant)
,是在求解变换后的面积或体积(二维是面积,三维是体积,高维度是XX),可以帮我们识别矩阵中的向量是否是线性无关的,如果行列式等于0,说明有向量是线性相关的,也就是有向量处在了其他向量张成的空间内了,那么矩阵就不存在逆矩阵,也就无法求解参数矩阵。所以在机器学习中,我们希望数据之间也是线性无关的。
矩阵相乘
A
⋅
B
=
C
A\cdot B=C
A
⋅
B
=
C
,要求A的列等于B的行。
特征向量和特征值
特征向量(Eigen Vector)
:对向量空间进行变形,在空间变形以后,有一些向量所在的轴(span)并没有发生变化,这些向量就是特征向量,那么这些向量只发生了大小变化,或者方向上的正反变化,其中大小发生的变化叫做
特征值(Eigen Value)
。
公式化的
定义
,
A
x
=
λ
x
Ax=\lambda x
A
x
=
λ
x
,
A
A
A
是一个矩阵,表示对空间进行变形,求在这个变形情况下的特征向量
x
x
x
,和特征值
λ
\lambda
λ
。比如
A
=
(
1
0
0
2
)
A=\begin{pmatrix}1&0\\0&2\end{pmatrix}
A
=
(
1
0
0
2
)
,表示对二维空间进行变形,x 轴不变,y 轴变为原来的 2 倍,可想而知,只有 x 轴和 y 轴上的向量是保持轴不变的。最后可以求得两个解:
λ
=
1
,
x
=
(
t
0
)
;
λ
=
2
,
x
=
(
0
t
)
\lambda = 1, x=\begin{pmatrix}t\\0\end{pmatrix}; \lambda = 2, x=\begin{pmatrix}0\\t\end{pmatrix}
λ
=
1
,
x
=
(
t
0
)
;
λ
=
2
,
x
=
(
0
t
)
求解的方法是:
A
x
=
λ
x
Ax=\lambda x
A
x
=
λ
x
A
x
−
λ
x
=
0
Ax-\lambda x=0
A
x
−
λ
x
=
0
(
A
−
λ
I
)
x
=
0
(A-\lambda I)x=0
(
A
−
λ
I
)
x
=
0
可以推出括号内矩阵的行列式为0,
d
e
t
(
A
−
λ
I
)
=
0
det(A-\lambda I)=0
d
e
t
(
A
−
λ
I
)
=
0
因为其实
A
A
A
是已知的矩阵,所以可以求出
λ
\lambda
λ
,求出之后,代回到
(
A
−
λ
I
)
x
=
0
(A-\lambda I)x=0
(
A
−
λ
I
)
x
=
0
,就能求出向量
x
x
x
特征向量和特征值在机器学习中的应用
在机器学习中,涉及到很多的向量空间变形,如果有很多变形的时候,计算成本就会很高,比如一个向量 x 进行 n 次的 矩阵 T 变形,就是要计算
T
n
⋅
x
T^n\cdot x
T
n
⋅
x
,为了方便计算,可以使用特征向量和特征值。我们知道
A
x
=
λ
x
Ax=\lambda x
A
x
=
λ
x
,可以理解成 A 对 它的特征向量 x 进行变形等于是对特征向量进行拉伸,那么
T
C
=
C
D
TC=CD
T
C
=
C
D
,其中 C 是 T 的特征向量组成的矩阵,每一列是一个特征向量,D 是各特征向量的特征值组成的对角矩阵,也就是特征值在对角线上,其他元素都是 0;我们左右两边都乘以
C
−
1
C^{-1}
C
−
1
,就得到了
T
=
C
D
C
−
1
T = CDC^{-1}
T
=
C
D
C
−
1
,那么进行 n 次 T 变形,就是
T
n
=
(
C
D
C
−
1
)
n
T^n=(CDC^{-1})^n
T
n
=
(
C
D
C
−
1
)
n
,右侧的连乘可以化简,所以结果是
T
n
=
C
D
n
C
−
1
T^n=CD^nC^{-1}
T
n
=
C
D
n
C
−
1
,为什么要这样计算呢,因为计算
D
n
D^n
D
n
比较容易。最后,对一个向量 x 进行 n 次 T 变形,
T
n
⋅
x
=
C
D
n
C
−
1
⋅
x
T^n\cdot x=CD^nC^{-1}\cdot x
T
n
⋅
x
=
C
D
n
C
−
1
⋅
x