前面已经对SVD进行了推导,但自己一直理解不够深入,知道看了Strang教授的视频才恍然大悟。

思考

  • 对于对称矩阵,我们知道,可以分解为A=QΛQTA = Q\Lambda Q^T,这是很美妙和对称的式子,但对于一般的矩阵,我们怎么能得到类似的式子呢?

  • 我们的目标是想要找到两组不同的正交矩阵(UUVV)和对角矩阵Λ\Lambda,来表示AA

  • 因此,SVD就是对于任意矩阵的“对角化”过程。

子空间

  • 这里,我们回到四个基本子空间。我们可以在行空间(row space)中找到一组标准正交基(这很容易),将其进行映射后(通过AA),转化为列空间(column space)中的标准正交基。也就是说,在行空间中的V1V_1,通过AV1AV_1转化为列空间中的U1U_1

    • AV1=σ1U1AV_1 = \sigma_1 U_1

    • 其中σ1\sigma_1为伸缩因子。

  • 将所有行空间和列空间中的标准正交基写成矩阵的形式:

    • A(V1,...,Vr)=(U1,...,Ur)diag(σ1,...,σr)A(V_1,...,V_r) = (U_1,...,U_r)diag(\sigma_1,...,\sigma_r)

    • 其中,rr表示矩阵的秩。

  • 我们很容易将其扩充为整个行空间和列空间:

    • A(V1,...,Vr,Vr+1,....Vm)=(U1,...,Ur,Ur+1,...,Un)diag(σ1,...,σr,0,...,0)A(V_1,...,V_r,V_{r+1},....V_m) = (U_1,...,U_r,U_{r+1},...,U_n)diag(\sigma_1,...,\sigma_r,0,...,0)
  • 其中,扩充的基向量来源于零空间和左零空间(这很容易)。

回到SVD

  • 这样,我们整理一下就得到:

    AV=UA V=U\sum

    A=UV1=UVTA = U\sum V^{-1} = U\sum V^T

  • 这就是SVD分解:我们需要在行空间和列空间中找到两组不同的基,并且这两组基可以通过AA相互转换。

  • 然而,这还不够。我们不知道如何求得UUVV。最常见的想法就是:我们把一个变量消去,只保留一个变量,这样就容易求解了。

  • 幸运的是,这很容易,考虑:

    ATA=VTUTUV=V2VT=Vdiag(σ12,...)VTA^TA = V\sum^TU^TU\sum V = V\sum^2V^T = V diag(\sigma_1^2,...)V^T

    • 我们发现,ATAA^TA这个对称矩阵中,VV就是其特征向量,而它的所有非零特征向量都是正的,因此这个矩阵是半正定的。
  • 可以对AATAA^T同样进行求解求得UU

  • 我们发现,尽管AA是任意矩阵,但ATAA^TAAATAA^T很特殊,并且可以通过求其的特征向量来对AA进行奇异值分解。

  • 实际上,ATAA^TAAATAA^T还有更为特殊的关系(特征值相同等等),严格的推导可以参考我这篇博客

总结

其实SVD没什么特别的,就是我们对于实对称矩阵的推广。

经过分析,我们发现在列空间和行空间中找到一组基,可以使得任意矩阵分解成A=UVTA = U\sum V^T 的形式。

并且,求解UUVV并不复杂,与AATAA^TATAA^TA有关。

在求解时,先求AATAA^T的特征值和特征向量,其特征向量单位化后就是UU的前r列,再将其扩充到左零空间;同样,求ATAA^TA的特征向量,单位化后就是VV的前r列,再将其扩充到零空间;填充\sum,即可求解。

results matching ""

    No results matching ""