美文网首页
MIT线性代数 30 奇异值分解

MIT线性代数 30 奇异值分解

作者: 光能蜗牛 | 来源:发表于2022-07-25 09:59 被阅读0次

    奇异值分解

    全称Singular Value Decomposition,简称SVD分解
    任意矩阵都可以进行的一种分解
    A=U\Sigma V^T
    其中U为正交矩阵\Sigma为对角矩阵 V为正交矩阵

    我们知道正定矩阵的奇异值分解是
    A=Q\Lambda Q^T ,也就是说对于正定矩阵不需要两个矩阵UV,这只需要一个Q就可以放在特征值\Lambda左右两边

    而奇异值分解要研究的如下图,寻找矩阵A的行空间的正交向量如v_1,v_2,通过A的变换之后会转换到A的列空间的正交向量u_1,u_2

    image.png

    为啥教授说
    A=U\Sigma V^T这个等式V在矩阵A的行空间,U在矩阵A的列空间

    这里笔者做一个证明
    对等式稍作整理可得AV=U\Sigma
    根据我们之前的求解AX=b的解方程的经验,可以很明显的知道bA的列空间的线性组合时候有解,同样类比AV=U\Sigma即,A可以被这样分解的前提在于U向量的每一列都是A向量列空间的线性组合,因此U在矩阵A的列空间
    V向量的分析同理
    AV=U\Sigma取转置
    V^TA^T=\Sigma^TU^T取转置
    A^TU=V\Sigma^T,类比上面的分析,可见VA^T的列空间,即VA的行空间

    上面我们没有提到零空间,如果把零空间补全等式大概是这样的
    A\begin{bmatrix} v_1&v_2&...&v_r&v_{r+1}&...&v_n \end{bmatrix}= \begin{bmatrix} u_1&u_2&...&u_r&u_{r+1}&...&u_m \end{bmatrix} \begin{bmatrix} \sigma_1 \\&\sigma_2 \\&&\ddots \\&&&u_r \\&&&&u_{r+1} \\&&&&&\ddots \\&&&&&&u_m&0&0 \end{bmatrix}

    其中
    v_1,v_2,....v_r是矩阵A的行空间标准正交基
    v_{r+1},...,v_n是矩阵的A的零空间,我们知道矩阵A的行空间和零空间是互为正交补的,他们共同补全了\mathbb{R}^n空间
    再看
    u_1,u_2,u_r 是矩阵A的列空间标准正交基
    u_{r+1},...,u_m 是矩阵A的左零空间,它和矩阵A的列空间互为\mathbb{R}^m的正交补共同构成\mathbb{R}^m空间
    这里再多做一点说明
    右边\Sigma矩阵的0列数占几列取决于n-m的正值是多少,若为负或0,则不需要额外补0

    接下来的问题是应该如何求矩阵ASVD分解的UV矩阵
    基本的思路很简单
    虽然A可能是长方形的,即不一定是对称矩阵,这会导致
    A=U\Sigma V^T的左右两边的正交矩阵不是同一个
    ,但我们发现
    A^TA是一个性质很好的对称矩阵
    A^TA=V\Sigma^T U^TU\Sigma V^T=V\Sigma^T\Sigma V^T
    我们发现这个V\Sigma^T\Sigma V^T很像对称矩阵的Q\Lambda Q^T,其实不能说像,因为它本来就是对称矩阵,而且我们发现它还是一个正定矩阵,因为特征值全为正的,这样只需要对A^TA进行特征值分解就可以把特征向量矩阵V和特征值矩阵\Sigma求出来

    而对于另一个矩阵U,同理
    AA^T也是一个性质很好的对称矩阵
    AA^T=U\Sigma V^TV\Sigma^T U^T=U\Sigma \Sigma^TU^T
    这同样是一个对称正定矩阵,对AA^T进行特征值分解即可得到特征向量矩阵U和特征值矩阵\Sigma

    接下来来个实际的例子
    A=\begin{bmatrix} 4&4 \\-3&3 \end{bmatrix}进行SVD分解

    1. V

    B=A^TA=V\Sigma^T\Sigma V^T=\begin{bmatrix} 4&-3 \\4&3 \end{bmatrix}\begin{bmatrix} 4&4 \\-3&3 \end{bmatrix} =\begin{bmatrix} 25&7 \\7&25 \end{bmatrix}

    特征值的乘积等于行列式\lambda_1 \lambda_2=25^2-7^2
    特征值的和等于迹\lambda_1 + \lambda_2=50

    于是\lambda_1=32,\lambda_2=18
    代入(B-\lambda I)V=0
    \lambda_1=32
    (B-\lambda I)=\begin{bmatrix} 25-32&7 \\7&25-32 \end{bmatrix}
    B的特征向量即是(B-\lambda I)零空间基向量v_1=\begin{bmatrix} 1/\sqrt{2} \\1/\sqrt{2} \end{bmatrix}(注意归一化)

    \lambda_2=18
    (B-\lambda I)=\begin{bmatrix} 25-18&7 \\7&25-18 \end{bmatrix}
    B的特征向量即是(B-\lambda I)零空间基向量v_2=\begin{bmatrix} 1/\sqrt{2} \\-1/\sqrt{2} \end{bmatrix}

    于是V=\begin{bmatrix} v_1 &v_2 \end{bmatrix}=\begin{bmatrix} 1/\sqrt{2}&1/\sqrt{2} \\1/\sqrt{2}&-1/\sqrt{2} \end{bmatrix}

    1. U

    C=AA^T=U\Sigma \Sigma^T U^T=\begin{bmatrix} 4&4 \\-3&3 \end{bmatrix}\begin{bmatrix} 4&-3 \\4&3 \end{bmatrix} =\begin{bmatrix} 32&0 \\0&18 \end{bmatrix}

    其实特征值和特征向量一眼就看出来了,不过我们还是算一算
    特征值的乘积等于行列式\lambda_1 \lambda_2=32*18
    特征值的和等于迹\lambda_1 + \lambda_2=50

    于是\lambda_1=32,\lambda_2=18
    代入(C-\lambda I)U=0
    \lambda_1=32
    (C-\lambda I)=\begin{bmatrix} 32-32&0 \\0&18-32 \end{bmatrix}
    C的特征向量即是(C-\lambda I)零空间基向量u_1=\begin{bmatrix} 1 \\0 \end{bmatrix}(注意归一化)

    \lambda_2=18
    (C-\lambda I)=\begin{bmatrix} 32-18&0 \\0&18-18 \end{bmatrix}
    C的特征向量即是(C-\lambda I)零空间基向量u_2=\begin{bmatrix} 0 \\1 \end{bmatrix}

    于是U=\begin{bmatrix}u_1 &u_2 \end{bmatrix}=\begin{bmatrix} 1&0 \\0&1 \end{bmatrix}

    最后
    A=\begin{bmatrix} 4&4 \\-3&3 \end{bmatrix}=U\Sigma V^T把上面算的V,U\Sigma代入发现
    =\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}
    我们发现结果并不一致,出现问题的原因是因为选择的特征基向量组V和特征向量组U没有形成关联,即前面我们提到的,给定v_1,v_2,通过AV的方式得到正交的u_1,u_2,即,u_1应该是由v_1关联而来,u_2应该由v_2关联而来,而像上面这种分开计算的方法虽然特征向量没问题,但是特征向量的方向性就无法确定了
    U\Sigma =AV
    u_1\sigma_1=Av_1\Longrightarrow \sqrt{32}u_1=\begin{bmatrix} 4&4 \\-3&3 \end{bmatrix}\begin{bmatrix} 1/\sqrt{2} \\1/\sqrt{2} \end{bmatrix}=1/\sqrt{2}\begin{bmatrix} 8 \\0 \end{bmatrix}\Longrightarrow u_1=\begin{bmatrix} 1 \\0 \end{bmatrix}
    u_2\sigma_2=Av_2\Longrightarrow \sqrt{18}u_2=\begin{bmatrix} 4&4 \\-3&3 \end{bmatrix}\begin{bmatrix} 1/\sqrt{2} \\-1/\sqrt{2} \end{bmatrix}=1/\sqrt{2}\begin{bmatrix} 0 \\-6 \end{bmatrix}\Longrightarrow u_2=\begin{bmatrix} 0 \\-1 \end{bmatrix}
    所以正确的U=\begin{bmatrix} 1&0 \\0&-1 \end{bmatrix}

    =========================
    接下里看第二个例子,秩1矩阵的分解
    A=\begin{bmatrix} 4&3 \\8&6 \end{bmatrix}
    在开始之前我们先分析一下这个矩阵,因为秩为1,所以矩阵的行空间和列空间都是一维的
    我们选择行空间基v_1=\frac{1}{5}\begin{bmatrix} 4\\3 \end{bmatrix},列空间基u_1=\frac{1}{\sqrt{5}}\begin{bmatrix} 1\\2 \end{bmatrix}
    V矩阵的另一列v_2怎么找呢,没错它在矩阵A的零空间,零空间和行空间垂直,我们利用正交性直接写出v_2=\frac{1}{5}\begin{bmatrix} 3\\-4 \end{bmatrix}
    同理U矩阵的第二列怎么找,和上面一样,它在A的左零空间,即A^T的零空间,于是也可以直接根据正交性写出u_2=\frac{1}{\sqrt{5}}\begin{bmatrix} 2\\-1 \end{bmatrix}

    于是
    V=\frac{1}{5}\begin{bmatrix} 4&3 \\3&-4 \end{bmatrix}

    U=\frac{1}{\sqrt{5}}\begin{bmatrix} 1&2 \\2&-1 \end{bmatrix}
    那么\Sigma怎么求,
    我们来计算A^TA=\begin{bmatrix} 4&8 \\3&6 \end{bmatrix}\begin{bmatrix} 4&3 \\8&6 \end{bmatrix}
    =\begin{bmatrix}80&60\\60&45 \end{bmatrix}
    考虑到A是秩1矩阵,A^TA并不会改变矩阵A的秩,因此其中一个特征值肯定是0,因为特征值之和等于迹,所以另一个特征值肯定是125
    因此A=U\Sigma V^T=\frac{1}{\sqrt{5}}\begin{bmatrix} 1&2 \\2&-1 \end{bmatrix}\begin{bmatrix} \sqrt{125}&0 \\0&0 \end{bmatrix}\frac{1}{5}\begin{bmatrix} 4&3 \\3&-4 \end{bmatrix}
    一般而言可以这么做,当然实际情况下,要自己稍微验算以下,以防符号出错
    以上的等式也充分说明了四个基本子空间之间的关系

    题外话:笔者最近看slam关于求AH=0的解的问题

    在slam话题中,A矩阵是由一系列匹配点生成的矩阵,问题在于如何求解对AH=0的问题,实际上因为误差关系,AH=0的解一般是不存在的,即不存在一个精确解H使得等式成立,
    但是我们会想,既然不存在这样的精确解,但可以肯定是存在一个H使得AH=b,即,我们希望这里的b的模长尽量足够小,
    不过这里也需要做一些限定,毕竟如果H直接为0向量,其实就是最优解了,因此需要限定H是非零向量,我们限定||H||=1
    于是问题就转换为求||AH||的最小值
    于是
    ||AH||=\sqrt{(AH)^TAH}
    =\sqrt{H^TA^TAH}
    根据奇异值分解的知识
    A^TA=V\Sigma^TU^TU\Sigma V^T=V\Sigma^T\Sigma V^T
    于是||AH||=\sqrt{H^TV\Sigma^T\Sigma V^TH}
    Y=V^TH
    ||AH||^2=Y^T\Sigma^T\Sigma Y
    =\begin{bmatrix}y_1&y_2&...&y_n\end{bmatrix} \begin{bmatrix}\sigma_1^2\\&\sigma_2^2\\&&\ddots\\&&&\sigma_n^2\end{bmatrix} \begin{bmatrix}y_1\\y_2\\\vdots\\y_n\end{bmatrix}
    =\begin{bmatrix}\sigma_1^2y_1^2+\sigma_2^2y_2^2+...+\sigma_n^2y_n^2\end{bmatrix}
    假设\sigma_n<=\sigma_2<=...<=\sigma_1
    那么(\sigma_n^2y_1^2+\sigma_n^2y_2^2+...+\sigma_n^2y_n^2)<=(\sigma_1^2y_1^2+\sigma_2^2y_2^2+...+\sigma_n^2y_n^2)<=(\sigma_1^2y_1^2+\sigma_1^2y_2^2+...+\sigma_1^2y_n^2)
    \sigma_n^2(y_1^2+y_2^2+...+y_n^2)<=(\sigma_1^2y_1^2+\sigma_2^2y_2^2+...+\sigma_n^2y_n^2)<=\sigma_1^2(y_1^2+y_2^2+...+y_n^2)
    \sigma_n^2Y^TY<=(\sigma_1^2y_1^2+\sigma_2^2y_2^2+...+\sigma_n^2y_n^2)<=\sigma_1^2Y^TY
    因为Y^TY=H^TVV^TH=||H||=1
    所以\sigma_n^2<=(\sigma_1^2y_1^2+\sigma_2^2y_2^2+...+\sigma_n^2y_n^2)<=\sigma_1^2
    上面这段什么意思呢,
    其实就是说,
    当对A矩阵执行A^TA的分解的所有\sigma^2其实就是原来矩阵A的SVD分解的所有的奇异值\sigma,即
    Av_1=\sigma_1u_1
    Av_2=\sigma_2u_2
    ...
    Av_n=\sigma_nu_n
    v_i,u_i都是单位向量,如果分别取
    \sigma_n<=(||Av_i||=||\sigma_iu_i||=\sigma_i)<=\sigma_1
    可见最小的那个奇异值对应的v_i,,即就是我们需要找的最小的目标向量,反之,最大的那个奇异值对应的v_i则是误差最大的目标向量,一般在SVD的分解中\Sigma会按\sigma从大到小排序,因此最优解一般是V矩阵的最后一列,也就是V^T的最后一行
    这其实表明了一个事实,任意一个矩阵对单位圆上的向量执行左乘,比如这里的AX,假设AX=Y,那么目标向量Y的模长是和A的奇异值相关的,即Y的模长不会小于A的最小的奇异值,也不会大于A的最大的奇异值

    下面找了一张图方便理解,椭圆长轴向量模长表示大的奇异值,椭圆的短轴向量模长表示小的奇异值,而其他方向向量的模长都在二者之间

    image.png

    相关文章

      网友评论

          本文标题:MIT线性代数 30 奇异值分解

          本文链接:https://www.haomeiwen.com/subject/qavxirtx.html