前面已经对SVD进行了推导,但自己一直理解不够深入,知道看了Strang教授的视频才恍然大悟。
思考
对于对称矩阵,我们知道,可以分解为 ,这是很美妙和对称的式子,但对于一般的矩阵,我们怎么能得到类似的式子呢?
我们的目标是想要找到两组不同的正交矩阵( , )和对角矩阵 ,来表示 。
子空间
这里,我们回到四个基本子空间。我们可以在行空间(row space)中找到一组标准正交基(这很容易),将其进行映射后(通过 ),转化为列空间(column space)中的标准正交基。也就是说,在行空间中的 ,通过 转化为列空间中的 :
其中 为伸缩因子。
将所有行空间和列空间中的标准正交基写成矩阵的形式:
扫描二维码关注公众号,回复: 1069713 查看本文章其中, 表示矩阵的秩。
我们很容易将其扩充为整个行空间和列空间:
其中,扩充的基向量来源于零空间和左零空间(这很容易)。
回到SVD
这样,我们整理一下就得到:
这就是SVD分解:我们需要在行空间和列空间中找到两组不同的基,并且这两组基可以通过 相互转换。
然而,这还不够。我们不知道如何求得 和 。最常见的想法就是:我们把一个变量消去,只保留一个变量,这样就容易求解了。
幸运的是,这很容易,考虑:
我们发现,在 这个对称矩阵中, 就是其特征值,而它的所有非零特征向量都是正的,因此这个矩阵是半正定的。
可以对 同样进行求解求得 。
我们发现,尽管 是任意矩阵,但 和 很特殊,并且可以通过求其的特征向量来对 进行奇异值分解。
实际上, 和 还有更为特殊的关系(特征值相同等等),严格的推导可以参考我这篇博客。
总结
其实SVD没什么特别的,就是我们对于实对称矩阵的推广。
经过分析,我们发现在列空间和行空间中找到一组基,可以使得任意矩阵分解成 的形式。
并且,求解 和 并不复杂,与 和 有关。
在求解时,先求 的特征值和特征向量,其特征向量单位化后就是 的前r列,再将其扩充到左零空间;同样,求 的特征向量,单位化后就是 的前r列,再将其扩充到零空间;填充 ,即可求解。