最近在看的MLAPP第七章中出现了多次SVD的内容,大学的时候只学了实对称矩阵的对角化,这次趁机会好好弥补一下。
师兄给我发了一个张志华老师的SVD总结,总共一百多页,很数学让我看了就头大。相比之下,上面这篇文章就很基础和直观。
文章大概的脉络如下:
- 对一个向量左乘一个矩阵 M M M相当于在M的列向量上进行了伸缩
- 但是M的列向量不一定是正交的,可能进行旋转伸缩后得到的形状很奇怪
- 我们想要将变化后的向量组(也就是M的列向量)变成一个正交的形式
- 为此我们将X先分解为由一组正交基向量构成的形式( x ⃗ = v 1 ⃗ v 1 ⃗ T x ⃗ + ⋯ + v n ⃗ v n ⃗ T x ⃗ \vec{x} =\vec{v_1}\vec{v_1}^T\vec{x}+\cdots+\vec{v_n}\vec{v_n}^T\vec{x} x=v1v1Tx+⋯+vnvnTx)
- 对上述等式乘左 M M M后,我们希望选取的正交基向量组在乘以M后得到的向量组仍是相互正交的
- 但是该如何选取向量组
{
V
⃗
}
\{\vec{V}\}
{V}呢?文章举了二维例子,变化后的
M
v
1
⃗
M\vec{v_1}
Mv1应该是其长轴的方向。那么问题就是变成了一个优化问题,即
arg max v 1 ⃗ v 1 ⃗ T M T M v 1 ⃗ \arg\max_{\vec{v_1}}\vec{v_1}^TM^TM\vec{v_1} argv1maxv1TMTMv1
s . t v 1 ⃗ T v 1 ⃗ = 1 s.t \ \vec{v_1}^T\vec{v_1}=1 s.t v1Tv1=1
利用朗格朗日乘子法得到 v 1 ⃗ \vec{v_1} v1应为 M T M M^TM MTM的特征向量。
而矩阵 U U U则为对应的 M v ⃗ M\vec{v} Mv的单位向量。
文章强调说, σ \sigma σ的值越大,则该方向越重要。
我的理解是,如果把矩阵 M M M看作一个对于向量 x ⃗ \vec{x} x的·变换,那么我们可以用 U Σ V T U\Sigma V^T UΣVT等效的来代替 M M M。其中V是对 x ⃗ \vec{x} x做了正交分解,正交矩阵U是规定了方向, σ \sigma σ越小则该方向的长度就越小,如果足够的小,我们就可以忽略该方向在重构 x ⃗ \vec{x} x时也能较好的表现 x ⃗ \vec{x} x。