序号 | 内容 |
---|---|
1 | 【数理知识】自由度 degree of freedom 及自由度的计算方法 |
2 | 【数理知识】刚体 rigid body 及刚体的运动 |
3 | 【数理知识】刚体基本运动,平动,转动 |
4 | 【数理知识】向量数乘,内积,外积,matlab代码实现 |
5 | 【数理知识】协方差,随机变量的的协方差,随机变量分别是单个数字和向量时的协方差 |
6 | 【数理知识】旋转矩阵的推导过程,基于向量的旋转来实现,同时解决欧式变换的非线性局限 |
文章目录
- 1. 奇异值分解
- 2. 由数据的线性变换出发
- 1. 缩放
- 2. 旋转
- 3. 补充知识:如何分辨矩阵的变换效果
- 3. 从 2 × 2 2 \times 2 2×2 矩阵中得到 SVD 公式
- 4. SVD 推广到 m × n m \times n m×n 矩阵
- 5. 求 SVD 分解
- Ref
1. 奇异值分解
讲解奇异值分解(Sigular Value Decomposition,SVD)的教程有很多,我这里不做赘述,仅记录下自己的理解。
针对以下奇异值分解公式:
M = U Σ V T \begin{aligned} M &= U \Sigma V^\text{T} \end{aligned} M=UΣVT
其中:
M
M
M 矩阵可以不是方阵,也就是其维度为
m
×
n
m \times n
m×n。
U
U
U 矩阵是
m
×
m
m \times m
m×m 的方阵,表示分解后的基向量。
Σ
\Sigma
Σ 矩阵是非方阵维度为
m
×
n
m \times n
m×n 的对角矩阵,对角元素是奇异值。
V
V
V 矩阵是维度为
n
×
n
n \times n
n×n 的正交矩阵。
比如说,当 M M M 的矩阵维度为 4 × 2 4 \times 2 4×2 时,奇异值分解公式就可以写成如下形式
M = U Σ V T [ x 1 y 1 x 2 y 2 x 3 y 3 x 4 y 4 ] = [ — — — — — — — — — — — — — — — — ] [ a 0 0 b 0 0 0 0 ] [ — — — — ] \begin{aligned} M &= U \Sigma V^\text{T} \\ \left[\begin{matrix} x_1 & y_1 \\ x_2 & y_2 \\ x_3 & y_3 \\ x_4 & y_4 \\ \end{matrix}\right] &= \left[\begin{matrix} — & — & — & — \\ — & — & — & — \\ — & — & — & — \\ — & — & — & — \\ \end{matrix}\right] \left[\begin{matrix} a & 0 \\ 0 & b \\ 0 & 0 \\ 0 & 0 \\ \end{matrix}\right] \left[\begin{matrix} — & — \\ — & — \\ \end{matrix}\right] \end{aligned} M x1x2x3x4y1y2y3y4 =UΣVT= ———————————————— a0000b00 [————]
到这里可能不太明白,没关系,之前只是为了先把 SVD 公式回顾一下,往下继续看就行了。
2. 由数据的线性变换出发
数据的线性变换(Linear Transformation)是一个数学上的概念,通常用于更改数据的表示或基准,但不改变数据的本质结构或关系。而在向量空间中,线性变换可以通过乘以一个矩阵来实现。
假如存在一个二维平面的向量,线性变换可以是缩放、旋转、倾斜等操作。
例如,
-
一个缩放操作可以使用矩阵 S = [ 2 0 0 1 ] S = \left[\begin{matrix} 2 & 0 \\ 0 & 1 \\ \end{matrix}\right] S=[2001] 表示,此矩阵会将 x x x 坐标乘以 2, y y y 坐标乘以 1。
-
一个旋转操作可以使用矩阵 R = [ cos ( θ ) − sin ( θ ) sin ( θ ) cos ( θ ) ] R = \left[\begin{matrix} \cos(\theta) & -\sin(\theta) \\ \sin(\theta) & \cos(\theta) \\ \end{matrix}\right] R=[cos(θ)sin(θ)−sin(θ)cos(θ)] 表示,此矩阵会将 x x x 和 y y y 旋转 θ \theta θ 角度。
上述两个矩阵 S S S 和 R R R 也可以从正交基 i ⃗ , j ⃗ \vec{i}, \vec{j} i,j 的变换上分别看到 S S S 和 R R R 矩阵的变换效果。
如果原本正交基为
i
⃗
=
[
1
0
]
,
j
⃗
=
[
0
1
]
\vec{i} = \left[\begin{matrix} 1 \\ 0 \\ \end{matrix}\right],\vec{j} = \left[\begin{matrix} 0 \\ 1 \\ \end{matrix}\right]
i=[10],j=[01],经过
S
S
S 矩阵的变换后,
变换后正交基变为
S
i
⃗
=
[
2
0
]
,
S
j
⃗
=
[
0
1
]
S\vec{i} = \left[\begin{matrix} 2 \\ 0 \\ \end{matrix}\right],S\vec{j} = \left[\begin{matrix} 0 \\ 1 \\ \end{matrix}\right]
Si=[20],Sj=[01]。
如果原本正交基为
i
⃗
=
[
1
0
]
,
j
⃗
=
[
0
1
]
\vec{i} = \left[\begin{matrix} 1 \\ 0 \\ \end{matrix}\right],\vec{j} = \left[\begin{matrix} 0 \\ 1 \\ \end{matrix}\right]
i=[10],j=[01],经过
R
R
R 矩阵的变换后,
变换后正交基变为
R
i
⃗
=
[
cos
(
θ
)
sin
(
θ
)
]
,
R
j
⃗
=
[
−
sin
(
θ
)
cos
(
θ
)
]
R\vec{i} = \left[\begin{matrix} \cos(\theta) \\ \sin(\theta) \\ \end{matrix}\right],R\vec{j} = \left[\begin{matrix} -\sin(\theta) \\ \cos(\theta) \\ \end{matrix}\right]
Ri=[cos(θ)sin(θ)],Rj=[−sin(θ)cos(θ)]。
在视频【学长小课堂】什么是奇异值分解SVD–SVD如何分解时空矩阵 - bilibili中,举例用的是一组向量
D = [ x 1 x 2 x 3 x 4 y 1 y 2 y 3 y 4 ] D = \left[\begin{matrix} x_1 & x_2 & x_3 & x_4 \\ y_1 & y_2 & y_3 & y_4 \\ \end{matrix}\right] D=[x1y1x2y2x3y3x4y4]
也可以理解为一群二维平面的数据点。
接下来再看一下这一群数据点的拉伸和旋转操作,因为视频中有相应的动画,更便于理解。
1. 缩放
针对上述 D D D 数据点矩阵,看一下变换矩阵 S S S 的效果。
从形式上可以看到矩阵 S S S 的作用是缩放,这一点也可以从以下数据运算上看出,即当 D D D 左乘一个变换矩阵 S S S 后, D D D 变为
S D = [ 2 0 0 1 ] [ x 1 x 2 x 3 x 4 y 1 y 2 y 3 y 4 ] = [ 2 x 1 2 x 2 2 x 3 2 x 4 y 1 y 2 y 3 y 4 ] \begin{aligned} SD = \left[\begin{matrix} 2 & 0 \\ 0 & 1 \\ \end{matrix}\right] \left[\begin{matrix} x_1 & x_2 & x_3 & x_4 \\ y_1 & y_2 & y_3 & y_4 \\ \end{matrix}\right] =\left[\begin{matrix} 2x_1 & 2x_2 & 2x_3 & 2x_4 \\ y_1 & y_2 & y_3 & y_4 \\ \end{matrix}\right] \end{aligned} SD=[2001][x1y1x2y2x3y3x4y4]=[2x1y12x2y22x3y32x4y4]
上述变换也可以从以下动态图上看到数据的变换效果。
2. 旋转
接下来看一下旋转矩阵 R R R 的效果。
从形式上可以看到矩阵 R R R 的作用是旋转,这一点也可以从以下数据运算上看出,即当经过拉伸的 S D SD SD 矩阵再左乘一个变换矩阵 R R R 后, S D SD SD 变为
R S D = [ cos ( θ ) − sin ( θ ) sin ( θ ) cos ( θ ) ] [ x 1 x 2 x 3 x 4 y 1 y 2 y 3 y 4 ] = [ x 1 cos ( θ ) − y 1 sin ( θ ) x 2 cos ( θ ) − y 2 sin ( θ ) ⋯ x 1 sin ( θ ) + y 1 cos ( θ ) x 2 sin ( θ ) + y 2 cos ( θ ) ⋯ ] \begin{aligned} RSD = \left[\begin{matrix} \cos(\theta) & -\sin(\theta) \\ \sin(\theta) & \cos(\theta) \\ \end{matrix}\right] \left[\begin{matrix} x_1 & x_2 & x_3 & x_4 \\ y_1 & y_2 & y_3 & y_4 \\ \end{matrix}\right] =\left[\begin{matrix} x_1 \cos(\theta) - y_1 \sin(\theta) & x_2 \cos(\theta) - y_2 \sin(\theta) & \cdots \\ x_1 \sin(\theta) + y_1 \cos(\theta) & x_2 \sin(\theta) + y_2 \cos(\theta) & \cdots \\ \end{matrix}\right] \end{aligned} RSD=[cos(θ)sin(θ)−sin(θ)cos(θ)][x1y1x2y2x3y3x4y4]=[x1cos(θ)−y1sin(θ)x1sin(θ)+y1cos(θ)x2cos(θ)−y2sin(θ)x2sin(θ)+y2cos(θ)⋯⋯]
数据 S D SD SD 的旋转效果可观察如下动态图。
3. 补充知识:如何分辨矩阵的变换效果
要分析一个矩阵的变换效果(是否是缩放、旋转或倾斜),我们需要考虑矩阵如何操作基向量或观察它的特定属性。
-
缩放:
缩放矩阵会在对角线上有非 1 的值,其它位置为 0。例如,二维空间中的缩放矩阵为:
[ s x 0 0 s y ] \left[\begin{matrix} s_x & 0 \\ 0 & s_y \\ \end{matrix}\right] [sx00sy]
其中 s x , s y s_x, s_y sx,sy 分别是 x x x 方向和 y y y 方向的缩放因子。 -
旋转:
旋转矩阵在二维空间中具有以下形式:
[ cos ( θ ) − sin ( θ ) sin ( θ ) cos ( θ ) ] \left[\begin{matrix} \cos(\theta) & -\sin(\theta) \\ \sin(\theta) & \cos(\theta) \\ \end{matrix}\right] [cos(θ)sin(θ)−sin(θ)cos(θ)]
其中 θ \theta θ 是旋转的角度。旋转矩阵的行列式为 1,且其逆矩阵是它的转置。
另外,三维空间旋转矩阵的基向量形式请参考【数理知识】旋转矩阵的推导过程,基于向量的旋转来实现,同时解决欧式变换的非线性局限,欧拉角形式请参考:第3章-数理知识基础 -> 坐标转换。 -
倾斜或剪切:
在二维空间中, x x x 和 y y y 方向的倾斜矩阵为:
[ 1 s 0 1 ] , [ 1 0 s 1 ] \left[\begin{matrix} 1 & s \\ 0 & 1 \\ \end{matrix}\right], \quad \left[\begin{matrix} 1 & 0 \\ s & 1 \\ \end{matrix}\right] [10s1],[1s01]
其中 s s s 是剪切或倾斜的量。
在实际的应用中,一个矩阵可能同时表示了多种变换,也就是一个矩阵是多种变化的组合。为了确定其作用,我们通常需要对其进行分解,例如常见的 SVD 分解可以得到旋转、缩放和剪切矩阵。
同时,如果想直观地了解矩阵是如何操作的,也可以将其应用在标准基向量(如二维空间中的 [ 1 0 ] \left[\begin{matrix} 1 \\ 0 \\ \end{matrix}\right] [10] 和 [ 0 1 ] \left[\begin{matrix} 0 \\ 1 \\ \end{matrix}\right] [01])上,观察向量基的变换结果。
3. 从 2 × 2 2 \times 2 2×2 矩阵中得到 SVD 公式
有了上述基础知识,现在我们假设存在一个 2 × 2 2 \times 2 2×2 的矩阵 M M M。可以知道 M M M 矩阵一定是表示了某种线性变换,至于是一种还是多种的组合,我们需要进一步分析。
假设 M M M 矩阵的变换效果如下图所示
我们可以在变换前的坐标轴上找到一组标准正交基,称为 v ⃗ 1 , v ⃗ 2 \vec{v}_1, \vec{v}_2 v1,v2,经过 M M M 线性变换后, v ⃗ 1 \vec{v}_1 v1 变为 u ⃗ 1 \vec{u}_1 u1, v ⃗ 2 \vec{v}_2 v2 变为 u ⃗ 2 \vec{u}_2 u2,同时长度分别为 σ 1 \sigma_1 σ1 和 σ 2 \sigma_2 σ2。此过程可以用如下关系式表示
M v ⃗ 1 = σ 1 u ⃗ 1 M v ⃗ 2 = σ 2 u ⃗ 2 \begin{aligned} M \vec{v}_1 &= \sigma_1 \vec{u}_1 \\ M \vec{v}_2 &= \sigma_2 \vec{u}_2 \end{aligned} Mv1Mv2=σ1u1=σ2u2
解析来用矩阵来表示正交基,也就是
V = [ v ⃗ 1 v ⃗ 2 ] , U = [ u ⃗ 1 u ⃗ 2 ] , Σ = [ σ 1 0 0 σ 2 ] \begin{aligned} V=\left[\begin{matrix} \vec{v}_1 & \vec{v}_2 \\ \end{matrix}\right] , \quad U &= \left[\begin{matrix} \vec{u}_1 & \vec{u}_2 \\ \end{matrix}\right] , \quad \Sigma = \left[\begin{matrix} \sigma_1 & 0 \\ 0 & \sigma_2 \\ \end{matrix}\right] \end{aligned} V=[v1v2],U=[u1u2],Σ=[σ100σ2]
那么有
M [ v ⃗ 1 v ⃗ 2 ] = [ u ⃗ 1 u ⃗ 2 ] [ σ 1 0 0 σ 2 ] M V = U Σ M V V − 1 = U Σ V − 1 M = U Σ V T ( V 是正交矩阵,故 V − 1 = V T ) \begin{aligned} M \left[\begin{matrix} \vec{v}_1 & \vec{v}_2 \\ \end{matrix}\right] &= \left[\begin{matrix} \vec{u}_1 & \vec{u}_2 \\ \end{matrix}\right] \left[\begin{matrix} \sigma_1 & 0 \\ 0 & \sigma_2 \\ \end{matrix}\right] \\ MV &= U \Sigma \\ MVV^{-1} &= U \Sigma V^{-1} \\ M &= U \Sigma V^{\text{T}} \quad (V 是\text{正交矩阵,故} V^{-1} = V^\text{T}) \end{aligned} M[v1v2]MVMVV−1M=[u1u2][σ100σ2]=UΣ=UΣV−1=UΣVT(V是正交矩阵,故V−1=VT)
从图形变换上来看 SVD 分解,矩阵 M M M 等价于先经过旋转矩阵 V T V^\text{T} VT 进行旋转,再经过缩放矩阵 Σ \Sigma Σ 进行缩放,最后通过旋转矩阵 U U U 进行旋转,就达到了和 M M M 矩阵一样的线性变换效果。
4. SVD 推广到 m × n m \times n m×n 矩阵
上述奇异值分解例子中
M = U Σ V T \begin{aligned} M &= U \Sigma V^{\text{T}} \end{aligned} M=UΣVT
矩阵的维度分别为:
M
M
M:
2
×
2
2 \times 2
2×2,
U
U
U:
2
×
2
2 \times 2
2×2,
Σ
\Sigma
Σ:
2
×
2
2 \times 2
2×2,
V
V
V:
2
×
2
2 \times 2
2×2。
若
M
M
M 的矩阵维度为
m
×
n
m \times n
m×n,那么有
U
U
U:
m
×
m
m \times m
m×m,
Σ
\Sigma
Σ:
m
×
n
m \times n
m×n,
V
V
V:
n
×
n
n \times n
n×n。
到这里也就与我们第一步所讲述的对应上了。
5. 求 SVD 分解
我们知道 SVD 分解的基本形式为
M = U Σ V T \begin{aligned} M &= U \Sigma V^{\text{T}} \end{aligned} M=UΣVT
那么
M
T
M
=
(
U
Σ
V
T
)
T
U
Σ
V
T
M
T
M
=
V
Σ
T
U
T
U
Σ
V
T
\begin{aligned} M^\text{T} M &= (U \Sigma V^{\text{T}})^\text{T} U \Sigma V^{\text{T}} \\ M^\text{T} M &= V \Sigma^\text{T} U^\text{T} U \Sigma V^{\text{T}} \end{aligned}
MTMMTM=(UΣVT)TUΣVT=VΣTUTUΣVT
因为 U U U 是正交矩阵,所以有 U T U = I U^\text{T} U = I UTU=I,那么
M T M = V Σ T U T U Σ V T M T M = V Σ T I Σ V T M T M = V Σ T Σ V T \begin{aligned} M^\text{T} M &= V \Sigma^\text{T} U^\text{T} U \Sigma V^{\text{T}} \\ M^\text{T} M &= V \Sigma^\text{T} I \Sigma V^{\text{T}} \\ M^\text{T} M &= V \Sigma^\text{T} \Sigma V^{\text{T}} \end{aligned} MTMMTMMTM=VΣTUTUΣVT=VΣTIΣVT=VΣTΣVT
又因为 Σ \Sigma Σ 是对角矩阵,所以有 Σ T = Σ \Sigma^\text{T} = \Sigma ΣT=Σ,即
M T M = V Σ T Σ V T M T M = V Σ Σ V T \begin{aligned} M^\text{T} M &= V \Sigma^\text{T} \Sigma V^{\text{T}} \\ M^\text{T} M &= V \Sigma \Sigma V^{\text{T}} \end{aligned} MTMMTM=VΣTΣVT=VΣΣVT
令 L = Σ Σ L = \Sigma \Sigma L=ΣΣ,有
M T M = V Σ Σ V T M T M = V L V T \begin{aligned} M^\text{T} M &= V \Sigma \Sigma V^{\text{T}} \\ M^\text{T} M &= V L V^{\text{T}} \end{aligned} MTMMTM=VΣΣVT=VLVT
因为 V V V 也是正交矩阵,故可以进行如下移项
M T M = V L V T M T M V = V L V T V = V L V − 1 V M T M V = V L \begin{aligned} M^\text{T} M &= V L V^{\text{T}} \\ M^\text{T} M V &= V L V^{\text{T}} V = V L V^{-1} V \\ M^\text{T} M V &= V L \end{aligned} MTMMTMVMTMV=VLVT=VLVTV=VLV−1V=VL
这里需要使用特征向量的定义,忘记的可以参考文章【数理知识】特征值、特征向量、左特征向量。
当我们想去求取 M T M M^\text{T} M MTM 的特征向量时,根据定义式有
M T M v ⃗ 1 = λ 1 v ⃗ 1 M T M v ⃗ 2 = λ 2 v ⃗ 2 \begin{aligned} M^\text{T} M \vec{v}_1 &= \lambda_1 \vec{v}_1 \\ M^\text{T} M \vec{v}_2 &= \lambda_2 \vec{v}_2 \end{aligned} MTMv1MTMv2=λ1v1=λ2v2
换种形式写一下有
M T M [ v ⃗ 1 v ⃗ 2 ] = [ v ⃗ 1 v ⃗ 2 ] [ λ 1 0 0 λ 2 ] \begin{aligned} M^\text{T} M \left[\begin{matrix} \vec{v}_1 & \vec{v}_2 \\ \end{matrix}\right] &= \left[\begin{matrix} \vec{v}_1 & \vec{v}_2 \\ \end{matrix}\right] \left[\begin{matrix} \lambda_1 & 0 \\ 0 & \lambda_2\\ \end{matrix}\right] \end{aligned} MTM[v1v2]=[v1v2][λ100λ2]
再看一下之前得到的结论
M T M V = V L \begin{aligned} M^\text{T} M V &= V L \end{aligned} MTMV=VL
所以 V V V 是 M T M M^\text{T} M MTM 矩阵的特征向量, L L L 是其特征值。
而 L = Σ Σ L = \Sigma \Sigma L=ΣΣ 矩阵是对角线矩阵 Σ \Sigma Σ 的乘,即
L = Σ Σ = [ σ 1 0 0 σ 2 ] [ σ 1 0 0 σ 2 ] = [ σ 1 2 0 0 σ 2 2 ] = [ λ 1 0 0 λ 2 ] \begin{aligned} L &= \Sigma \Sigma = \left[\begin{matrix} \sigma_1 & 0 \\ 0 & \sigma_2 \\ \end{matrix}\right] \left[\begin{matrix} \sigma_1 & 0 \\ 0 & \sigma_2 \\ \end{matrix}\right] = \left[\begin{matrix} \sigma_1^2 & 0 \\ 0 & \sigma_2^2 \\ \end{matrix}\right] \\ &= \left[\begin{matrix} \lambda_1 & 0 \\ 0 & \lambda_2 \\ \end{matrix}\right] \end{aligned} L=ΣΣ=[σ100σ2][σ100σ2]=[σ1200σ22]=[λ100λ2]
同时 Σ \Sigma Σ 矩阵中的元素 σ 1 \sigma_1 σ1 我们称之为奇异值。
通过上式我们也知道为什么奇异值和特征值之间是一个平方的关系了。
同理,我们可以得到
M M T U = U L \begin{aligned} M M^\text{T} U &= U L \end{aligned} MMTU=UL
往下也是同样的结论,即 U U U 是 M M T MM^\text{T} MMT 矩阵的特征向量。
总结下来,求解 SVD 的过程为
- 求 M T M M^\text{T}M MTM 的特征向量得到 V V V,
- 求 M M T MM^\text{T} MMT 的特征向量得到 U U U,
- 求 M T M M^\text{T}M MTM 或 M M T MM^\text{T} MMT 的特征值,开方得到奇异值,
- 用奇异值构成对角阵 Σ \Sigma Σ。
Ref
- 如何通俗易懂地讲解什么是 PCA(主成分分析)? - 知乎
- 【机器学习】降维——PCA(非常详细) - 知乎
- 【学长小课堂】什么是奇异值分解SVD–SVD如何分解时空矩阵 - bilibili
- 如何通俗地理解奇异值? - 马同学