文章目录
前言
在机器学习算法中,矩阵相乘非常常见。对矩阵乘法这种底层操作进行分析,有时候可以帮助我们更好地理解算法。那矩阵乘法的本质到底该怎样理解呢?
其实我们大体上可以从下面5个角度来理解。
一、方程组的几何解释
“矩阵最初的目的,只是为线性方程组提供一个简写形式”。一个矩阵可以看成方程组的系数。我们来看这样一个方程组:
记系数矩阵 A = [ 2 − 1 1 1 ] A = \begin{bmatrix}2 & -1 \\ 1 & 1\end{bmatrix} A=[21−11],参数矩阵 X = [ x y ] X = \begin{bmatrix}x \\ y\end{bmatrix} X=[xy],结果矩阵 b = [ 0 2 ] b = \begin{bmatrix}0 \\ 2\end{bmatrix} b=[02],则方程组 { 2 x − y = 0 x + y = 0 \begin{cases}2x - y = 0 \\ x + y = 0\end{cases} {2x−y=0x+y=0 用矩阵乘法表示即为: A X = b AX = b AX=b 。
在x,y坐标轴中,画出这两个方程对应的图像,如下图:
制图代码:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-5, 5, 100, True)
y1 = [2 * i for i in x]
y2 = [2 - i for i in x]
plt.figure(figsize=(10, 8), dpi=100)
plt.plot(x, y1, label='2x + y = 0')
plt.plot(x, y2, label='x + y = 2')
plt.xticks(range(-8, 8))
plt.yticks(range(-8, 8))
plt.grid(linestyle='--', alpha=0.8)
plt.legend()
plt.show()
很容易发现,两条直线的交点就是方程组的解,也就是矩阵乘法的解。
从方程组的角度来解释,矩阵 A A A 可以看成方程组的系数,一个矩阵对应唯一的一个方程组。向量 X X X 左乘矩阵 A A A 就是方程组的简化记法。
显然向量 X X X 的各属性取不同的值,我们就得到了不同的组合,不同组合的结果会显示在结果矩阵中。如果 X X X 看成药材,那么 A A A 就可以看成药材的配比组合。不同的药材使用相同的配比组合 A A A ,得到几种不同的配方。所以这里左乘的矩阵 A A A 也可以看成是一个线性映射关系,从数学的角度来讲,向量 X X X 左乘矩阵 A A A 就相当于对 X X X 进行了线性映射。
二、投影角度的集合解释
如何在空间中确定一个向量呢?在空间中设立一个坐标系(设立一组基),这里的基是一些线性不相关的向量。当然这里我们需要表示一个 n
维物体的时候我们就需要找到 n
个 n
维的向量,这 n
个线性无关的向量是一个坐标系的确定表示。所以 n
个线性无关的向量组成的 n
阶方阵,我们可以认为它是一个 n
维的坐标系。投影解释就是从这个角度出发的。考虑
A
B
=
C
AB = C
AB=C ,其中
A
R
×
N
,
B
N
×
M
,
C
R
×
M
A_{R \times N}, B_{N \times M}, C_{R \times M}
AR×N,BN×M,CR×M :
[
a
11
a
12
⋯
a
1
N
a
21
a
22
⋯
a
2
N
⋮
⋮
⋱
⋮
a
R
1
a
R
2
⋯
a
R
N
]
×
[
b
11
b
12
⋯
b
1
M
b
21
b
22
⋯
b
2
M
⋮
⋮
⋱
⋮
b
N
1
b
N
2
⋯
b
N
M
]
=
[
c
11
c
12
⋯
c
1
M
c
21
c
22
⋯
c
2
M
⋮
⋮
⋱
⋮
c
R
1
c
R
2
⋯
c
R
M
]
其中,
c
i
j
=
a
i
∗
b
j
\begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1N} \\ a_{21} & a_{22} & \cdots & a_{2N} \\ \vdots & \vdots & \ddots & \vdots \\ a_{R1} & a_{R2} & \cdots & a_{RN} \\ \end{bmatrix} \times \begin{bmatrix} b_{11} & b_{12} & \cdots & b_{1M} \\ b_{21} & b_{22} & \cdots & b_{2M} \\ \vdots & \vdots & \ddots & \vdots \\ b_{N1} & b_{N2} & \cdots & b_{NM} \\ \end{bmatrix} = \begin{bmatrix} c_{11} & c_{12} & \cdots & c_{1M} \\ c_{21} & c_{22} & \cdots & c_{2M} \\ \vdots & \vdots & \ddots & \vdots \\ c_{R1} & c_{R2} & \cdots & c_{RM} \\ \end{bmatrix} \quad \text{其中,$c_{ij} = a_i * b_j$}
⎣⎢⎢⎢⎡a11a21⋮aR1a12a22⋮aR2⋯⋯⋱⋯a1Na2N⋮aRN⎦⎥⎥⎥⎤×⎣⎢⎢⎢⎡b11b21⋮bN1b12b22⋮bN2⋯⋯⋱⋯b1Mb2M⋮bNM⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡c11c21⋮cR1c12c22⋮cR2⋯⋯⋱⋯c1Mc2M⋮cRM⎦⎥⎥⎥⎤其中,cij=ai∗bj
我们首先看下向量的点乘:
a
i
b
j
=
∣
a
i
∣
∗
∣
b
j
∣
∗
∣
c
o
s
(
a
i
,
b
j
)
∣
a_i b_j = |a_i| * |b_j| * |cos(a_i, b_j)|
aibj=∣ai∣∗∣bj∣∗∣cos(ai,bj)∣ 。如果令
∣
a
i
∣
=
1
|a_i| = 1
∣ai∣=1,
a
i
b
j
a_i b_j
aibj 就是
b
j
b_j
bj 在
a
i
a_i
ai 上的投影。其实我们常用的向量的坐标就是向量在各单位基向量上的投影值。
当
R
=
N
R = N
R=N 时且满秩时,
A
A
A 可以看成一个坐标系,
A
A
A 的每一行代表这个坐标系的一个基。
A
B
AB
AB 可以看成是
B
B
B 的每一个列向量
b
j
b_j
bj 在
A
A
A 的每一个行向量
a
i
a_i
ai (基向量)上进行投影,当
A
A
A 的每一个基向量的模都为 1
时,投影的结果恰好就是
B
B
B 在
A
A
A 坐标系中的坐标值。
而对一般情况,
A
A
A 不一定能代表坐标系,我们可以把矩阵相乘看成将右边矩阵的每一列向量投影(映射)到以左边矩阵 R
个行向量所表示的空间中去。
当然在二维平面我们默认选择 (1,0)
和 (0,1)
为单位向量,这样二维平面上坐标和向量就是直接对应,非常方便。实际上任意两个线性无关(在二维空间中不在同一条直线上)的向量都可以成为一组基,而且这两个线性无关的向量除以它们各自的模都可以使它们变成单位向量。 一般的,如果我们有 M
个 N
维向量,想将其变换为由 R
个 N
维向量表示的新空间中,那么首先将 R
个基按行组成矩阵
A
A
A ,然后将 M
个 N
维向量按列组成矩阵
B
B
B ,那么两矩阵的乘积
A
B
AB
AB 就是变换结果,其中
A
B
AB
AB 的第 m
列为
B
B
B 中第 m
列变换后的结果。
A
R
×
N
×
B
N
×
M
=
(
A
B
)
R
×
M
A_{R \times N} \times B_{N \times M} = (AB)_{R \times M}
AR×N×BN×M=(AB)R×M
(
p
1
p
2
⋮
p
R
)
×
(
a
1
a
2
⋯
a
M
)
=
(
p
1
a
1
p
1
a
2
⋯
p
1
a
M
p
2
a
1
p
2
a
2
⋯
p
2
a
M
⋮
⋮
⋱
⋮
p
R
a
1
p
R
a
2
⋯
p
R
a
M
)
\begin{pmatrix} p_1 \\ p_2 \\ \vdots \\ p_R \\ \end{pmatrix} \times \begin{pmatrix} a_1 & a_2 & \cdots & a_M \end{pmatrix} = \begin{pmatrix} p_1 a_1 & p_1 a_2 & \cdots & p_1 a_M \\ p_2 a_1 & p_2 a_2 & \cdots & p_2 a_M \\ \vdots & \vdots & \ddots & \vdots \\ p_R a_1 & p_R a_2 & \cdots & p_R a_M \\ \end{pmatrix}
⎝⎜⎜⎜⎛p1p2⋮pR⎠⎟⎟⎟⎞×(a1a2⋯aM)=⎝⎜⎜⎜⎛p1a1p2a1⋮pRa1p1a2p2a2⋮pRa2⋯⋯⋱⋯p1aMp2aM⋮pRaM⎠⎟⎟⎟⎞
其中
p
i
p_i
pi 是一个行向量,表示第 i
个基;
a
j
a_j
aj 是一个列向量,表示第 j
个原始数据记录。
这种从一个空间到另一个空间的变换关系,从更抽象的角度来说,就是数学意义上的线性映射。
三、坐标映射的几何解释
坐标映射是比较形象的一种角度,我们来看个例子吧。对于下面的矩阵乘法:
[
1
5
]
=
[
2
−
1
1
4
]
[
1
1
]
\begin{bmatrix}1 \\ 5\end{bmatrix} = \begin{bmatrix} 2 & -1 \\ 1 & 4\end{bmatrix} \begin{bmatrix}1 \\ 1\end{bmatrix}
[15]=[21−14][11]
画出
[
1
1
]
\begin{bmatrix}1 \\ 1\end{bmatrix}
[11],矩阵的列向量
[
2
1
]
\begin{bmatrix}2 \\ 1\end{bmatrix}
[21],
[
−
1
4
]
\begin{bmatrix}-1 \\ 4\end{bmatrix}
[−14] 和
[
1
5
]
\begin{bmatrix}1 \\ 5\end{bmatrix}
[15] :
这里由于向量的模为1,所以直接从图上不容易看出来。首先来看下,横轴和纵轴的单位向量在矩阵乘法之后对应的向量分别是什么?
对于横轴单位向量 (1,0)
,有:
[
2
−
1
1
4
]
[
1
0
]
=
[
2
1
]
\begin{bmatrix} 2 & -1 \\ 1 & 4\end{bmatrix} \begin{bmatrix}1 \\ 0\end{bmatrix} =\begin{bmatrix}2 \\ 1\end{bmatrix}
[21−14][10]=[21]
对于纵轴单位向量 (0,1)
,有:
[
2
−
1
1
4
]
[
0
1
]
=
[
−
1
4
]
\begin{bmatrix} 2 & -1 \\ 1 & 4\end{bmatrix} \begin{bmatrix}0 \\ 1\end{bmatrix} =\begin{bmatrix}-1 \\ 4\end{bmatrix}
[21−14][01]=[−14]
结论一目了然,对于横轴,也就是第一个维度的单位向量,变换后对应的就是变换矩阵的第一列的列向量 (2,1)
;对于纵轴,也就是第二个维度的单位向量,变换后对应的就是变换矩阵的第二列的列向量 (-1,4)
。
这个结论可以很容易地推广到高维情况:对于第 i
维度的单位向量,变换后对应的就是变换矩阵中的第 i
列的列向量。可以把这种变换形象地理解成一种坐标的映射,具体到本例,就是上图中:经过变换后原来的 (1,0)
对应的新坐标是 (2,1)
,(0,1)
对应的新坐标是 (-1,4)
。在这种对应关系下,考虑由 (0,0)
,(1,0)
,(1,1)
和 (0,1)
围起来的正方形,经过变换后相当于被拉伸成为由 (0,0)
,(2,1)
,(1,5)
和 (-1,4)
围起来的平行四边形,所以在原正方形中右上角的顶点 (1, 1)
,经过变换后就是被拉伸后的平行四边形对应的顶点 (1,5)
。
从坐标映射的角度来说,向量左乘矩阵是把向量各维度的分向量变换到新的位置(对每一维的坐标进行映射),然后通过向量加法(采用代数加法实现)得到结果。
所以对于 A X = b AX=b AX=b ,其中 A = [ 2 − 1 1 4 ] A = \begin{bmatrix} 2 & -1 \\ 1 & 4\end{bmatrix} A=[21−14] , X = [ 1 1 ] X = \begin{bmatrix}1 \\ 1\end{bmatrix} X=[11] , b = [ 1 5 ] b = \begin{bmatrix}1 \\ 5\end{bmatrix} b=[15] ;相当于 A A A 矩阵的各列通过某种线性组合得到 b b b 。也就是说: b b b 向量在 A A A 矩阵的列空间中。
四、坐标变换的几何解释
矩阵可以看作是对运动的描述。矩阵的几何意义,可以拆分为三个特性。
4.1 缩放
我们来看一个矩阵的缩放实例:
[
2
0
0
1
]
[
1
1
]
=
[
2
1
]
\begin{bmatrix} 2 & 0 \\ 0 & 1\end{bmatrix} \begin{bmatrix}1 \\ 1\end{bmatrix} =\begin{bmatrix}2 \\ 1\end{bmatrix}
[2001][11]=[21]
一个向量
X
X
X 左乘对角矩阵相当于对向量各维坐标值进行缩放,缩放的比例就是对角矩阵对角线上元素的值。当然了,这里的向量缩放也可以看成是对坐标轴进行了缩放,两者是等价的。为什么这么说呢?
如上图所示,可以理解为对基向量进行了缩放,即对坐标轴进行了缩放。对角矩阵都可以看成是缩放矩阵,对角线上的每一个元素代表对每一个基向量缩放的倍数。
4.2 旋转
首先看一个旋转的实例:
[
2
2
2
2
−
2
2
2
2
]
[
1
1
]
=
[
2
0
]
\begin{bmatrix} \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2} \\ -\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}\end{bmatrix} \begin{bmatrix}1 \\ 1\end{bmatrix} =\begin{bmatrix}\sqrt{2} \\ 0\end{bmatrix}
[22−222222][11]=[20]
显然左乘这个矩阵相当于把向量 (1,1)
顺时针旋转 45度
,相当于把坐标轴逆时针旋转 45度
。向量旋转和矩阵旋转的方向正好是相反的。从这个例子出发,我们可以得出沿坐标轴旋转的一些通用矩阵。下面三个矩阵表示向量绕
X
X
X,
Y
Y
Y 和
Z
Z
Z 轴的顺时针旋转 θ度
,或者说坐标轴绕
X
X
X,
Y
Y
Y 和
Z
Z
Z 轴逆时针旋转 θ度
的映射矩阵:
(
1
0
0
0
c
o
s
θ
s
i
n
θ
0
−
s
i
n
θ
c
o
s
θ
)
(
c
o
s
θ
0
s
i
n
θ
0
1
0
−
s
i
n
θ
0
c
o
s
θ
)
(
c
o
s
θ
s
i
n
θ
0
−
s
i
n
θ
c
o
s
θ
0
0
0
1
)
\begin{pmatrix}1 & 0 & 0 \\ 0 & cos\theta & sin\theta \\ 0 & -sin\theta & cos\theta\end{pmatrix} \begin{pmatrix} cos\theta & 0 & sin\theta \\ 0 & 1 & 0 \\ -sin\theta & 0 & cos\theta\end{pmatrix} \begin{pmatrix} cos\theta & sin\theta & 0 \\ -sin\theta & cos\theta & 0 \\ 0 & 0 & 1\end{pmatrix}
⎝⎛1000cosθ−sinθ0sinθcosθ⎠⎞⎝⎛cosθ0−sinθ010sinθ0cosθ⎠⎞⎝⎛cosθ−sinθ0sinθcosθ0001⎠⎞
看成坐标轴旋转时各向量位置不变;而看成向量旋转时坐标轴是固定的,此时从几何直观上讲,只有坐标轴上的分向量还在原来的方向上。
4.3 平移
让我们看一个小例子。如果我们想将点 (10,5,0)
移动 (-8,2,4)
。可以这样做:
(
X
_
t
r
a
n
s
l
a
t
e
d
Y
_
t
r
a
n
s
l
a
t
e
d
Z
_
t
r
a
n
s
l
a
t
e
d
1
)
=
(
1
0
0
−
8
0
1
0
2
0
0
1
4
0
0
0
1
)
∗
(
10
5
0
1
)
=
(
1
∗
10
+
(
−
8
)
∗
1
1
∗
5
+
2
∗
1
1
∗
0
+
4
∗
1
1
∗
1
)
=
(
2
7
4
1
)
\begin{pmatrix} X\_translated \\ Y\_translated \\ Z\_translated \\ 1\end{pmatrix} = \begin{pmatrix} 1 & 0 & 0 & -8 \\ 0 & 1 & 0 & 2 \\ 0 & 0 & 1 & 4 \\ 0 & 0 & 0 & 1 \end{pmatrix} * \begin{pmatrix} 10 \\ 5 \\ 0 \\ 1\end{pmatrix} = \begin{pmatrix} 1*10 + (-8)*1 \\ 1*5 + 2*1 \\ 1*0 + 4*1 \\ 1*1 \end{pmatrix} = \begin{pmatrix} 2 \\ 7 \\ 4 \\ 1\end{pmatrix}
⎝⎜⎜⎛X_translatedY_translatedZ_translated1⎠⎟⎟⎞=⎝⎜⎜⎛100001000010−8241⎠⎟⎟⎞∗⎝⎜⎜⎛10501⎠⎟⎟⎞=⎝⎜⎜⎛1∗10+(−8)∗11∗5+2∗11∗0+4∗11∗1⎠⎟⎟⎞=⎝⎜⎜⎛2741⎠⎟⎟⎞
第 4
个坐标没有几何意义,它只是让我们可以定义一个平移矩阵。 你会注意到有时这个常量不是 1
。事实上,通用规则是只需简单地将
X
X
X,
Y
Y
Y 和
Z
Z
Z 坐标除以第 4
个坐标,我们将第 4
个坐标称之为
W
W
W 坐标。 简单地说: (20,10,0,2) = (10,5,0,1)
,这两个坐标表示的是同一个 3D
点 (10,5,0)
,所以从 4
个坐标中获取 3D
点的简单规则是:
(
X
Y
Z
W
)
⇒
(
X
/
W
Y
/
W
Z
/
W
)
\begin{pmatrix} X \\ Y \\ Z \\ W \end{pmatrix} \Rightarrow \begin{pmatrix} X/W \\ Y/W \\ Z/W \end{pmatrix}
⎝⎜⎜⎛XYZW⎠⎟⎟⎞⇒⎝⎛X/WY/WZ/W⎠⎞
第四维坐标只是帮助我们可以定义一个平移矩阵,类似于平面几何的辅助线的作用。这里其实平移矩阵中增加第四列就已经够了,不需要再增添一行,可以简化成下列形式:
(
X
_
t
r
a
n
s
l
a
t
e
d
Y
_
t
r
a
n
s
l
a
t
e
d
Z
_
t
r
a
n
s
l
a
t
e
d
)
=
(
1
0
0
−
8
0
1
0
2
0
0
1
4
)
∗
(
10
5
0
)
=
(
1
∗
10
+
(
−
8
)
∗
1
1
∗
5
+
2
∗
1
1
∗
0
+
4
∗
1
)
=
(
2
7
4
)
\begin{pmatrix} X\_translated \\ Y\_translated \\ Z\_translated \\ \space \end{pmatrix} = \begin{pmatrix} 1 & 0 & 0 & -8 \\ 0 & 1 & 0 & 2 \\ 0 & 0 & 1 & 4 \\ \space \end{pmatrix} * \begin{pmatrix} 10 \\ 5 \\ 0 \\ \space \end{pmatrix} = \begin{pmatrix} 1*10 + (-8)*1 \\ 1*5 + 2*1 \\ 1*0 + 4*1 \\ \space \end{pmatrix} = \begin{pmatrix} 2 \\ 7 \\ 4 \\ \space \end{pmatrix}
⎝⎜⎜⎛X_translatedY_translatedZ_translated ⎠⎟⎟⎞=⎝⎜⎜⎛100 010001−824⎠⎟⎟⎞∗⎝⎜⎜⎛1050 ⎠⎟⎟⎞=⎝⎜⎜⎛1∗10+(−8)∗11∗5+2∗11∗0+4∗1 ⎠⎟⎟⎞=⎝⎜⎜⎛274 ⎠⎟⎟⎞
我们做进一步的拆分如下:
(
1
0
0
−
8
0
1
0
2
0
0
1
4
)
∗
(
10
5
0
1
)
=
(
1
0
0
0
1
0
0
0
1
)
∗
(
10
5
0
)
+
(
−
8
2
4
)
\begin{pmatrix} 1 & 0 & 0 & -8 \\ 0 & 1 & 0 & 2 \\ 0 & 0 & 1 & 4 \end{pmatrix} * \begin{pmatrix} 10 \\ 5 \\ 0 \\ 1 \end{pmatrix} = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix} * \begin{pmatrix} 10 \\ 5 \\ 0 \end{pmatrix} + \begin{pmatrix} -8 \\ 2 \\ 4 \end{pmatrix}
⎝⎛100010001−824⎠⎞∗⎝⎜⎜⎛10501⎠⎟⎟⎞=⎝⎛100010001⎠⎞∗⎝⎛1050⎠⎞+⎝⎛−824⎠⎞
=
(
1
∗
10
+
1
∗
(
−
8
)
1
∗
5
+
1
∗
2
1
∗
0
+
1
∗
4
)
= \begin{pmatrix} 1*10 + 1*(-8) \\ 1*5 + 1*2 \\ 1*0 + 1*4 \end{pmatrix}
=⎝⎛1∗10+1∗(−8)1∗5+1∗21∗0+1∗4⎠⎞
=
(
1
0
0
−
8
0
1
0
2
0
0
1
4
)
∗
(
10
5
0
1
)
= \begin{pmatrix} 1 & 0 & 0 & \color{#FF3030}{-8} \\ 0 & 1 & 0 & \color{#FF3030}{2} \\ 0 & 0 & 1 & \color{#FF3030}{4} \end{pmatrix} * \begin{pmatrix} 10 \\ 5 \\ 0 \\ \color{#FF3030}{1} \end{pmatrix}
=⎝⎛100010001−824⎠⎞∗⎝⎜⎜⎛10501⎠⎟⎟⎞
向量扩维,只需要在向量末端添加元素1,即可将偏置(bias)/平移向量包含在矩阵当中。
\text{向量扩维,只需要在向量末端添加元素1,即可将偏置(bias)/平移向量包含在矩阵当中。}
向量扩维,只需要在向量末端添加元素1,即可将偏置(bias)/平移向量包含在矩阵当中。
其实,这也可看成回归拟合问题
y
=
A
X
+
b
y = AX + b
y=AX+b 。
X
X
X 左乘矩阵
A
A
A 只能实现伸缩和旋转,而加上位移后,则可以轻松实现拟合。拟合的系数矩阵为
A
A
A 。
这个位移向量偏置在机器学习中是一种常见的参数,通常被称为偏置(bias),而形如 $y = AX + b $ 的变换形式也是机器学习中最常见的变换,称做仿射变换。简单来说,仿射变换就是一个线性变换接着一个位移。 从拟合的角度看,偏置对结果的影响主要和样本的分布相关,一般来说当样本方差大、维度高的时候,则偏置的影响就会小一些。偏置的引入让变换的灵活度更大,但却不再是线性变换,并且形式上变得比 y = A X y = AX y=AX 更加复杂。
4.4 一般矩阵的旋转与分解
我们已经知道,矩阵可以看作是对运动的描述。矩阵的几何意义,可以拆分为三个特性:伸缩,旋转和平移。其中平移需要扩维暂且不谈。所以矩阵的主要特性就是伸缩和旋转。很多矩阵都可以拆分为这两个特性的组合。
向量左乘对称矩阵:
(
2
1
1
2
)
∗
(
1
1
)
=
(
3
3
)
\begin{pmatrix} 2 & 1 \\ 1 & 2 \end{pmatrix} * \begin{pmatrix} 1 \\ 1 \end{pmatrix} = \begin{pmatrix} 3 \\ 3 \end{pmatrix}
(2112)∗(11)=(33)
变换如图:
变化过程可以表示如下:
(
1
,
0
)
→
(
2
,
1
)
(1, 0) \rightarrow (2, 1)
(1,0)→(2,1)
(
0
,
1
)
→
(
1
,
2
)
(0, 1) \rightarrow (1, 2)
(0,1)→(1,2)
(
1
,
1
)
→
(
3
,
3
)
(1, 1) \rightarrow (3, 3)
(1,1)→(3,3)
我们可以发现,向量在
x
′
x^{'}
x′ 方向上进行了3倍的拉伸,在
y
′
y^{'}
y′ 方向保持不变。我们可以把这个乘法看成将坐标轴逆时针旋转 θ=45
度,在
x
x
x 轴方向将向量拉伸 3
倍,然后再把坐标轴转回来。也就是:
(
c
o
s
θ
−
s
i
n
θ
s
i
n
θ
c
o
s
θ
)
∗
(
a
0
0
b
)
∗
(
c
o
s
θ
s
i
n
θ
−
s
i
n
θ
c
o
s
θ
)
∗
(
1
1
)
\begin{pmatrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{pmatrix} * \begin{pmatrix} a & 0 \\ 0 & b \end{pmatrix} * \begin{pmatrix} cos\theta & sin\theta \\ -sin\theta & cos\theta \end{pmatrix} * \begin{pmatrix} 1 \\ 1 \end{pmatrix}
(cosθsinθ−sinθcosθ)∗(a00b)∗(cosθ−sinθsinθcosθ)∗(11)
第一个矩阵表示坐标轴沿顺时针旋转
θ
度
第二个矩阵表示分别在对应的维度拉伸(压缩)为原来的a、b倍
第三个矩阵表示坐标轴沿逆时针旋转
θ
度
\text{第一个矩阵表示坐标轴沿顺时针旋转$\theta$度} \\ \text{第二个矩阵表示分别在对应的维度拉伸(压缩)为原来的a、b倍} \\ \text{第三个矩阵表示坐标轴沿逆时针旋转$\theta$度}
第一个矩阵表示坐标轴沿顺时针旋转θ度第二个矩阵表示分别在对应的维度拉伸(压缩)为原来的a、b倍第三个矩阵表示坐标轴沿逆时针旋转θ度
=
(
2
2
−
2
2
2
2
2
2
)
∗
(
3
0
0
1
)
∗
(
2
2
2
2
−
2
2
2
2
)
∗
(
1
1
)
⏟
注释①
= \begin{pmatrix} \frac{\sqrt{2}}{2} & -\frac{\sqrt{2}}{2} \\ \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2} \end{pmatrix} * \begin{pmatrix} 3 & 0 \\ 0 & 1 \end{pmatrix} * \underbrace{\begin{pmatrix} \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2} \\ -\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2} \end{pmatrix} * \begin{pmatrix} 1 \\ 1 \end{pmatrix}}_{\text{注释①}}
=(2222−2222)∗(3001)∗注释①
(22−222222)∗(11)
注释①:对向量(1, 1)的原始坐标轴沿逆时针旋转
θ
度,可以理解成将向量投影到新的坐标系中,下式中的向量(
2
, 0)即为投影后的向量。
\text{注释①:对向量(1, 1)的原始坐标轴沿逆时针旋转$\theta$度,可以理解成将向量投影到新的坐标系中,下式中的向量($\sqrt{2}$, 0)即为投影后的向量。}
注释①:对向量(1, 1)的原始坐标轴沿逆时针旋转θ度,可以理解成将向量投影到新的坐标系中,下式中的向量(2, 0)即为投影后的向量。
=
(
2
2
−
2
2
2
2
2
2
)
∗
(
3
0
0
1
)
∗
(
2
0
)
⏟
对向量(
2
, 0)进行拉伸
= \begin{pmatrix} \frac{\sqrt{2}}{2} & -\frac{\sqrt{2}}{2} \\ \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2} \end{pmatrix} * \underbrace{\begin{pmatrix} 3 & 0 \\ 0 & 1 \end{pmatrix} * \begin{pmatrix} \sqrt{2} \\ 0 \end{pmatrix}}_{\text{对向量($\sqrt{2}$, 0)进行拉伸}}
=(2222−2222)∗对向量(2, 0)进行拉伸
(3001)∗(20)
=
(
2
2
−
2
2
2
2
2
2
)
∗
(
3
2
0
)
⏟
注释②
= \underbrace{\begin{pmatrix} \frac{\sqrt{2}}{2} & -\frac{\sqrt{2}}{2} \\ \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2} \end{pmatrix} * \begin{pmatrix} 3\sqrt{2} \\ 0 \end{pmatrix}}_{\text{注释②}}
=注释②
(2222−2222)∗(320)
注释②:对向量(
3
2
, 0)的坐标轴沿顺时针旋转
θ
度,可以理解成将向量投影到原来的坐标系中,下式中的向量(3, 3)即为投影后的向量。
\text{注释②:对向量($3\sqrt{2}$, 0)的坐标轴沿顺时针旋转$\theta$度,可以理解成将向量投影到原来的坐标系中,下式中的向量(3, 3)即为投影后的向量。}
注释②:对向量(32, 0)的坐标轴沿顺时针旋转θ度,可以理解成将向量投影到原来的坐标系中,下式中的向量(3, 3)即为投影后的向量。
=
(
3
3
)
= \begin{pmatrix} 3 \\ 3 \end{pmatrix}
=(33)
从上面的图和分析步骤可以看出,向量左乘矩阵可以从坐标轴旋转和投影两个角度进行思考,其实效果都是一样的。我们将系数矩阵
A
A
A 进行分解,得到:
(
2
1
1
2
)
=
(
2
2
−
2
2
2
2
2
2
)
∗
(
3
0
0
1
)
∗
(
2
2
2
2
−
2
2
2
2
)
\begin{pmatrix} 2 & 1 \\ 1 & 2 \end{pmatrix} = \begin{pmatrix} \frac{\sqrt{2}}{2} & -\frac{\sqrt{2}}{2} \\ \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2} \end{pmatrix} * \begin{pmatrix} 3 & 0 \\ 0 & 1 \end{pmatrix} * \begin{pmatrix} \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2} \\ -\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2} \end{pmatrix}
(2112)=(2222−2222)∗(3001)∗(22−222222)
即:
A
=
U
S
U
T
=
U
S
U
−
1
\text{即:} A = USU^{T} = USU^{-1}
即:A=USUT=USU−1
接下来我们总结下矩阵
A
A
A 的分解过程:
①
X
1
=
U
T
X
X_1 = U^{T}X
X1=UTX 是将
X
X
X 投影到坐标系
U
U
U 中,由于
U
U
U 是正交矩阵(基的模为 1
),所以获得的是
X
X
X 在
U
U
U 中的坐标,也就是将坐标轴旋转后的坐标
X
1
X_1
X1 (此为旋转);
②
X
2
=
S
X
1
X_2 = SX_1
X2=SX1 是将
X
X
X 在新坐标系中,沿着坐标轴方向进行拉伸;
③
A
=
U
X
2
A = UX_2
A=UX2 是将向量
X
X
X 从新坐标系映射回原坐标系。因为
U
U
U 为正交矩阵,所以
U
T
=
U
−
1
U^T = U^{-1}
UT=U−1 ,
U
X
2
=
(
U
T
)
T
X
2
=
(
U
−
1
)
T
X
2
UX_2 = (U^T)^TX_2 = (U^{-1})^TX_2
UX2=(UT)TX2=(U−1)TX2 ,根据前面投影的分析我们知道,
(
U
−
1
)
T
X
2
(U^{-1})^TX_2
(U−1)TX2 是将
X
2
X_2
X2 映射到
U
−
1
U^{-1}
U−1 所表示的坐标轴中,坐标轴
U
U
U 下的
U
−
1
U^{-1}
U−1 就是原先的坐标轴。所以这里就是把
X
X
X 从新坐标轴投影回去,或者说将坐标轴旋转回去,得到的是在原坐标系中的坐标。
A
=
U
S
U
T
A = USU^T
A=USUT 其实就是对
A
A
A 进行特征值分解。我们可以推广到一般形式:若
A
A
A 为 n
阶实对称矩阵,则存在正交矩阵
U
U
U 和对角阵
S
S
S 使得
A
=
U
S
U
−
1
A = USU^{-1}
A=USU−1 ,其中
S
S
S 对角线的元素是矩阵
A
A
A 的特征值,
U
U
U 的列向量为
A
A
A 的特征向量。(注意这里只推广到实对称矩阵,并没有推广到可对角化矩阵。)
向量左乘一般矩阵:
所有的实矩阵都可以拆分出旋转和缩放的效果。上面讲的是实对称矩阵可以进行特征值分解,得到正交特征向量矩阵,效果是先旋转然后缩放然后转回来,非对称实矩阵能不能也这样拆分呢? 假设可以,那么对于非对称实矩阵
A
A
A ,一定存在正交矩阵
U
U
U ,使得
A
=
U
V
U
T
A = UVU^T
A=UVUT 。
关于一般矩阵的分解,请移步机器学习中的奇异值(SVD)分解。
五、行列式变换的代数解释
之前的四部分都是把矩阵相乘简化为向量左乘矩阵进行分析。如果从整体来看的话,初等矩阵左乘,相当于行变换,初等矩阵右乘,相当于列变换。这个大家在学习线性代数的时候应该都了解过,此处不做赘述。