SVD分解正确分解流程

SVD分解
网上大多的SVD分解流程会是这种,写出这种流程的博客、知乎也好,基本上应该都是东抄抄西抄抄,未在实际中使用或者在实际使用中发现问题也没解决?

网上常见的分解流程:
A = U Σ V T A=U\Sigma V^T A=UΣVT

  • 1、计算 A T ∗ A A^T*A ATA A ∗ A T A*A^T AAT的值;
  • 2、分别 A T ∗ A A^T*A ATA A ∗ A T A*A^T AAT特征向量及其特征值;
  • 3、 A ∗ A T A*A^T AAT 的特征向量组成 U;而 A T ∗ A A^T*A ATA 的特征向量组成 V;
  • 4、 A ∗ A T A*A^T AAT A T ∗ A A^T*A ATA特征根是相等的,对非零特征值求平方根,对应上述特征向量的位置,填入 Σ 的对角元。

上述问题:
例如下面的矩阵A= [ 4 4 − 3 3 ] \begin{bmatrix} 4&4\\ -3&3\\ \end{bmatrix} [4343]对齐进行SVD分解

  • A T ∗ A A^T*A ATA = [ 4 − 3 4 3 ] ∗ [ 4 4 − 3 3 ] = [ 25 7 7 25 ] \begin{bmatrix} 4&-3\\4&3\\\end{bmatrix} * \begin{bmatrix} 4&4\\-3&3\\\end{bmatrix}=\begin{bmatrix} 25&7\\7&25\\\end{bmatrix} [4433][4343]=[257725]求得特征值 λ 1 = 32 , λ 2 = 18 \lambda_1=32,\lambda_2=18 λ1=32,λ2=18对应特征向量 [ 1 1 ] \begin{bmatrix} 1\\1\\\end{bmatrix} [11] [ 1 − 1 ] \begin{bmatrix} 1\\-1\\\end{bmatrix} [11]
  • 对于 A ∗ A T A*A^T AAT = [ 4 4 − 3 3 ] ∗ [ 4 − 3 4 3 ] ∗ = [ 32 0 0 18 ] \begin{bmatrix} 4&4\\-3&3\\\end{bmatrix}*\begin{bmatrix} 4&-3\\4&3\\\end{bmatrix} *=\begin{bmatrix} 32&0\\0&18\\\end{bmatrix} [4343][4433]=[320018]求得特征值 λ 1 = 32 , λ 2 = 18 \lambda_1=32,\lambda_2=18 λ1=32,λ2=18对应特征向量 [ 1 0 ] \begin{bmatrix} 1\\0\\\end{bmatrix} [10] [ 0 1 ] \begin{bmatrix} 0\\1\\\end{bmatrix} [01]
  • Σ = [ 32 0 0 18 ] , U = [ 1 0 0 1 ] , V = [ 1 / 2 1 / 2 1 / 2 − 1 / 2 ] (备注: V 矩阵对 V 特征向量进行了正则化) \Sigma=\begin{bmatrix} \sqrt{32}&0\\0&\sqrt{18}\\\end{bmatrix},U=\begin{bmatrix} 1&0\\0&1\\\end{bmatrix},V=\begin{bmatrix} 1/\sqrt{2}&1/\sqrt{2}\\1/\sqrt{2}&-1/\sqrt{2}\\\end{bmatrix}(备注:V矩阵对V特征向量进行了正则化) Σ=[32 0018 ],U=[1001],V=[1/2 1/2 1/2 1/2 ](备注:V矩阵对V特征向量进行了正则化),
  • 验证 U Σ V T 等于 A 吗 U\Sigma V^T等于A吗 UΣVT等于A
  • U Σ V T = [ 1 0 0 1 ] [ 32 0 0 18 ] [ 1 / 2 1 / 2 1 / 2 − 1 / 2 ] = [ 4 4 3 − 3 ] ≠ A U\Sigma V^T =\begin{bmatrix} 1&0\\0&1\\\end{bmatrix}\begin{bmatrix} \sqrt{32}&0\\0&\sqrt{18}\\\end{bmatrix}\begin{bmatrix} 1/\sqrt{2}&1/\sqrt{2}\\1/\sqrt{2}&-1/\sqrt{2}\\\end{bmatrix} =\begin{bmatrix} 4&4\\3&-3\\\end{bmatrix}\neq A UΣVT=[1001][32 0018 ][1/2 1/2 1/2 1/2 ]=[4343]=A

问题原因:
经历上述1、2、3步解出来的U、V能保证 Σ ∗ Σ T \Sigma*\Sigma^T ΣΣT内元素的平方和 A T ∗ A A^T*A ATA A ∗ A T A*A^T AAT的特征值的关系,并不保证 Σ T \Sigma^T ΣT的元素一定为正值,为了满足奇异值定义,我们需要选取奇异值为特征的正平方根这是我们的目的。

正确的做法

  • 1、计算 A T ∗ A A^T*A ATA
  • 2、计算 A T ∗ A A^T*A ATA特征向量及其特征值;
  • 3、选择 A T ∗ A A^T*A ATA 的特征向量组成 V;
  • 4、 A ∗ A T A*A^T AAT A T ∗ A A^T*A ATA特征根是相等的,对非零特征值求平方根,对应上述特征向量的位置,填入 Σ 的对角元。
  • 5、假如初始组成了V则根据 A V = U Σ AV=U\Sigma AV=UΣ去求解得到满足要求的U

你可能感兴趣的:(计算机视觉)