• 线性代数学习笔记10-1:奇异值分解SVD(从四个子空间角度理解)


    回顾:

    • 对于有n个线性无关特征向量的矩阵,可对角化 A = S Λ S − 1 \boldsymbol{A} =\boldsymbol{S} \boldsymbol{\Lambda} \boldsymbol{S}^{-1} A=SΛS1,特征向量矩阵 S \boldsymbol{S} S列向量为特征向量
    • 对于正定矩阵,特征值都是正数,所有特征向量之间是正交的,故特征向量矩阵 Q \boldsymbol{Q} Q为正交矩阵,其对角化结果 A = Q Λ Q T \boldsymbol{A} =\boldsymbol{Q} \boldsymbol{\Lambda} \boldsymbol{Q}^{T} A=QΛQT(视为奇异值分解的特殊情况)
    • 对于一般的任意矩阵,奇异值分解 A = U Σ V T \boldsymbol{A} =\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T} A=UΣVT,其中 U \boldsymbol{U} U V \boldsymbol V V为正交矩阵

    当对角化(特征值分解)不可用时,我们转而寻求奇异值分解SVD,可将其视为“广义的特征值分解”

    下面将看到,奇异值分解是矩阵最终的、最好的分解
    ps.本文主要从“广义的特征值分解”角度来介绍SVD,也可从几何意义上理解

    奇异值分解SVD

    若矩阵 A m × n \boldsymbol{A}_{m\times n} Am×n的秩为 r r r,行数为 m m m,列数为 n n n

    奇异值分解SVD(Singular value decomposition):任意矩阵可分解为 A m × n = U m × m Σ m × n V n × n T \boldsymbol{A}_{m\times n} =\boldsymbol{U}_{m\times m} \boldsymbol{\Sigma}_{m\times n} \boldsymbol{V}^{T}_{n\times n} Am×n=Um×mΣm×nVn×nT其中正交矩阵 U \boldsymbol{U} U保存左奇异向量,正交矩阵 V \boldsymbol V V保存右奇异向量
    对角矩阵 Σ \boldsymbol{\Sigma} Σ保存了奇异值 σ \sigma σ,并且一定有奇异值 σ ≥ 0 \sigma\geq 0 σ0(或为正奇异值,或为0)

    SVD的由来

    对于方阵,其特征向量满足 A x = λ x \boldsymbol{A} \mathbf{x}=\lambda \mathbf{x} Ax=λx,矩阵形式为 A S = S Λ \boldsymbol{A}\boldsymbol{S}=\boldsymbol{S} \boldsymbol{\Lambda} AS=SΛ
    在此基础上,若存在 n n n个无关特征向量( S \boldsymbol{S} S可逆),即可获得 A = S Λ S − 1 \boldsymbol{A} =\boldsymbol{S} \boldsymbol{\Lambda} \boldsymbol{S}^{-1} A=SΛS1

    对于一般的“长方形矩阵”,向量 A x \boldsymbol{A} \mathbf{x} Ax x \mathbf{x} x维度直接不对齐
    我们退而求其次,类比“特征向量”,定义奇异向量: A v i = σ i u i , i = 1 , ⋯   , r \boldsymbol{A} \mathbf{v}_{i}=\sigma_{i} \mathbf{u}_{i}, i=1, \cdots, r Avi=σiui,i=1,,r
    写为矩阵形式 A V r × n = U m × r Σ r × r A [ v 1 ⋯ v r ] = [ u 1 ⋯ u r ] [ σ 1 ⋱ σ r ] AVr×n=Um×rΣr×rA[v1vr]=[u1ur][σ1σr] AVr×nA[v1vr]=Um×rΣr×r=[u1ur]σ1σr
    要注意的是,由于矩阵秩 r r r的限制,上面只能找到 r r r σ i > 0 \sigma_i>0 σi>0

    此即 U m × n V ^ n × r = U ^ m × r Σ ^ r × r \mathbf U_{m\times n}\hat{\mathbf V}_{n\times r}=\hat{\mathbf U}_{m\times r}\hat{\mathbf \Sigma}_{r\times r} Um×nV^n×r=U^m×rΣ^r×r,对应下图中的红色部分
    在这里插入图片描述
    下面将蓝色部分“填充”完整,得到正交矩阵(方阵) U \boldsymbol{U} U V \boldsymbol{V} V

    剩下的奇异值 σ i = 0 \sigma_i=0 σi=0,满足关系 A v i = 0 ( = σ i u i ) , i = r + 1 , ⋯   , n \boldsymbol{A} \mathbf{v}_{i}=0(=\sigma_{i} \mathbf{u}_{i}), i=r+1, \cdots, n Avi=0(=σiui),i=r+1,,n
    A V n × n = U m × m Σ m × n A [ v 1 ⋯ v r ⋯ v n ] = [ u 1 ⋯ u r ⋯ u m ] [ σ 1 ⋱ σ r ] AVn×n=Um×mΣm×nA[v1vrvn]=[u1urum][σ1σr] AVn×nA[v1vrvn]=Um×mΣm×n=[u1urum]σ1σr
    最终,我们得到了SVD: A V = U Σ ⇒ A = U Σ V T \mathbf A\mathbf V=\mathbf U\mathbf \Sigma\Rightarrow\mathbf A=\mathbf U\mathbf \Sigma\mathbf V^T AV=UΣA=UΣVT

    • 正交矩阵 V n × n \boldsymbol{V}_{n\times n} Vn×n对应 R n \mathbf R^n Rn空间中的一组标准正交基
    • 正交矩阵 U m × m \boldsymbol{U}_{m\times m} Um×m对应 R m \mathbf R^m Rm空间中的一组标准正交基
    • 注意,这时 Σ m × n \boldsymbol{\Sigma}_{m\times n} Σm×n不是对角阵,但是其中蕴含了一个对角阵

    奇异值分解SVD等价于:在整个 R n \mathbf R^n Rn空间中,找出一组标准正交基 v i \mathbf{v}_{i} vi,且这组基经过矩阵 A \mathbf {A} A的线性变换后,能够生成 R m \mathbf R^m Rm空间中的一组标准正交基 u i \mathbf u_i ui,且满足 A v i = σ i u i \mathbf {A}\mathbf v_i=\sigma_i \mathbf u_i Avi=σiui σ i \sigma_i σi为伸缩因子)

    这里的美妙之处在于,我们找到了一组特殊的标准正交基 V \mathbf V V,它们经过 A \mathbf {A} A的线性变换后,仍得到一组标准正交基 U \mathbf U U A V = U Σ \mathbf A\mathbf V=\mathbf U\mathbf \Sigma AV=UΣ

    实际上,而正定矩阵的对角化 A = Q Λ Q T \boldsymbol{A} =\boldsymbol{Q} \boldsymbol{\Lambda} \boldsymbol{Q}^{T} A=QΛQT可以视为这里SVD的特殊情况,其 U = V = Q \mathbf U=\mathbf V=\mathbf Q U=V=Q
    ps. 必须正定/半正定,从而特征值非负,对应这里的 Σ = Λ \boldsymbol{\Sigma}=\boldsymbol{\Lambda} Σ=Λ

    如何获取 A = U Σ V T \boldsymbol{A} =\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T} A=UΣVT中的 U \boldsymbol{U} U V \boldsymbol{V} V

    前置知识:
    矩阵 A T A \boldsymbol{A}^{T} \boldsymbol{A} ATA A A T \boldsymbol{A} \boldsymbol{A}^{T} AAT是对称矩阵,并且必为半正定/正定矩阵(特征值全为非负数)
    A \mathbf A A列满秩 r = n r=n r=n时为正定的,正定矩阵对角化结果 A = Q Λ Q T \boldsymbol{A} =\boldsymbol{Q} \boldsymbol{\Lambda} \boldsymbol{Q}^{T} A=QΛQT

    根据上面,SVD就是要找出两组标准正交基,满足 A v i = σ i u i \mathbf {A}\mathbf v_i=\sigma_i \mathbf u_i Avi=σiui σ i ≥ 0 \sigma_i\geq0 σi0为伸缩因子),两组标准正交基分别组成了正交矩阵 U \boldsymbol{U} U和正交矩阵 V \boldsymbol{V} V

    SVD中,我们要找正交矩阵,并且还需要非负数的奇异值,自然可以联想到对 A T A \boldsymbol{A}^{T} \boldsymbol{A} ATA做特征值分解/相似对角化,其中正好出现了正交矩阵非负数的特征值

    1. 如何获取正交矩阵 V \boldsymbol{V} V
      根据 A = U Σ V T \boldsymbol{A} =\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T} A=UΣVT可得 A T A = V Σ T U T U Σ V T = V Σ T Σ V T = V [ σ 1 2 σ 2 2 ⋱ σ r 2 ] V T ( 当 Σ 为 对 角 阵 )
      ATA=VΣTUTUΣVT=VΣTΣVT=V[σ12σ22σr2]VTΣ" role="presentation">ATA=VΣTUTUΣVT=VΣTΣVT=V[σ12σ22σr2]VTΣ
      ATA=VΣTUTUΣVT=VΣTΣVT=Vσ12σ22σr2VTΣ
      上式就相当于正定矩阵 A T A \boldsymbol{A}^{T} \boldsymbol{A} ATA的相似对角化
      其中 σ i 2 = λ i \sigma_i^2=\lambda_i σi2=λi对应 A T A \boldsymbol{A}^{T} \boldsymbol{A} ATA的特征值(正奇异值 σ i = λ i \sigma_i=\sqrt\lambda_i σi=λ i),
      V \boldsymbol{V} V对应对称阵 A T A \boldsymbol{A}^{T} \boldsymbol{A} ATA的(标准正交)特征向量
    2. 如何获取正交矩阵 U \boldsymbol{U} U(不完全正确的做法)
      类似上面,有 A A T = U Σ Σ T U T \boldsymbol{A}\boldsymbol{A}^{T}=\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{\Sigma}^{T} \boldsymbol{U}^{T} AAT=UΣΣTUT σ i 2 \sigma_i^2 σi2对应 A A T \boldsymbol{A}\boldsymbol{A}^{T} AAT的特征值,
      U \boldsymbol{U} U对应正交矩阵 A A T \boldsymbol{A}\boldsymbol{A}^{T} AAT的(标准正交)特征向量;

    表面上 A A T \boldsymbol{A}\boldsymbol{A}^{T} AAT m m m阶方阵(有 m m m个特征值), A T A \boldsymbol{A}^{T}\boldsymbol{A} ATA n n n阶方阵(有 n n n个特征值)
    实际上 A A T \boldsymbol{A}\boldsymbol{A}^{T} AAT A T A \boldsymbol{A}^{T}\boldsymbol{A} ATA有相同的非零特征值,不匹配的那部分都是0特征值,这与之前的推导一致
    (特征值的性质: A B \boldsymbol{A}\boldsymbol{B} AB B A \boldsymbol{B}\boldsymbol{A} BA有相同的非零特征值;当 A \boldsymbol{A} A B \boldsymbol{B} B均为 n n n阶方阵, A B \boldsymbol{A}\boldsymbol{B} AB B A \boldsymbol{B}\boldsymbol{A} BA有相同特征值)
    实际上,0奇异值对应的那些左/右奇异向量,也就是 A A T \boldsymbol{A} \boldsymbol{A}^{T} AAT A T A \boldsymbol{A}^{T} \boldsymbol{A} ATA的零空间中的正交向量
    另外,若 A \boldsymbol{A} A为对称/反对称矩阵,则满足 A A T = A T A \boldsymbol{A}\boldsymbol{A}^{T}=\boldsymbol{A}^{T}\boldsymbol{A} AAT=ATA,此时 U = V \boldsymbol{U}=\boldsymbol{V} U=V

    但注意,这样的做法是错误
    原因:有可能求出的特征向量 v i \mathbf{v}_i vi u i \mathbf{u}_i ui符号不匹配(从而 A = U Σ V T \boldsymbol{A} =\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T} A=UΣVT不成立),这是因为在 A v i = σ i u i \mathbf {A}\mathbf v_i=\sigma_i \mathbf u_i Avi=σiui中我们默认 σ i > 0 \sigma_i>0 σi>0
    因此,获取 U \boldsymbol{U} U时,应当用 A V = U Σ \boldsymbol{A}\boldsymbol{V} =\boldsymbol{U} \boldsymbol{\Sigma} AV=UΣ来帮助确定特征向量 u i \mathbf{u}_i ui所取的符号

    1. 如何获取正交矩阵 U \boldsymbol{U} U(正确做法)
      u i = A v i σ i \mathbf u_i=\frac{\mathbf {A}\mathbf v_i}{\sigma_i} ui=σiAvi,其中 σ i \sigma_i σi的选择要使 u i \mathbf u_i ui标准化(长为1)

    这里还有一个小问题:若把 u i \mathbf u_i ui视为上述的 A A T \boldsymbol{A}\boldsymbol{A}^{T} AAT的特征向量,我们还必须验证各个 u i \mathbf u_i ui互相正交
    (原因:重特征值有一个特征子空间,其中任意一组基都是特征向量,不一定正交)
    验证各个 u i \mathbf u_i ui互相正交:
    u 1 T u 2 = ( A v 1 σ 1 ) T ( A v 2 σ 2 ) = v 1 T A T A v 2 σ 1 σ 2 = v 1 T σ 2 2 v 2 σ 1 σ 2 = σ 2 σ 1 v 1 T v 2 = 0 \mathbf{u}_{1}^{T} \mathbf{u}_{2}=\left(\frac{A \mathbf{v}_{1}}{\sigma_{1}}\right)^{T}\left(\frac{A \mathbf{v}_{2}}{\sigma_{2}}\right)=\frac{\mathbf{v}_{1}^{T} A^{T} A \mathbf{v}_{2}}{\sigma_{1} \sigma_{2}}=\frac{\mathbf{v}_{1}^{T} \sigma_{2}^2 \mathbf{v}_{2}}{\sigma_{1} \sigma_{2}}=\frac{\sigma_{2}}{\sigma_{1}} \mathbf{v}_{1}^{T} \mathbf{v}_{2}=0 u1Tu2=(σ1Av1)T(σ2Av2)=σ1σ2v1TATAv2=σ1σ2v1Tσ22v2=σ1σ2v1Tv2=0

    但是,当矩阵规模较大时,上述的 A T A \boldsymbol{A}^{T} \boldsymbol{A} ATA方法计算量太大
    所以实际中并不使用上述方法求SVD,我们通过这个过程进一步理解SVD即可

    SVD与极分解

    A = U Σ V T = ( U Σ U T ) U V T \boldsymbol{A} =\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T}=(\boldsymbol{U}\boldsymbol{\Sigma}\boldsymbol{U}^T) \boldsymbol{U} \boldsymbol{V}^{T} A=UΣVT=(UΣUT)UVT
    由此得到了一种新的分解,即“极分解”(Polar decomposition)
    A = S Q \boldsymbol{A} =\boldsymbol S \boldsymbol Q A=SQ其中,

    • S = U Σ U T \boldsymbol S=\boldsymbol{U}\boldsymbol{\Sigma}\boldsymbol{U}^T S=UΣUT为对称矩阵,对应了简单的拉伸(对称阵相似于对角阵 Σ \boldsymbol{\Sigma} Σ,对应的变换仅伸缩了坐标轴)
    • Q = U V T \boldsymbol Q=\boldsymbol{U} \boldsymbol{V}^{T} Q=UVT为正交矩阵,对应了旋转的线性变换

    几何上的意义:任意矩阵,对应的线性变换可拆分为伸缩、旋转(还有投影)

    • 类比:复数可以表示为 r e j θ re^{j\theta} rejθ,其中两项分别对应“拉伸”和“旋转”
      这里的分解类似, S \boldsymbol S S Q \boldsymbol Q Q分别对应了“拉伸”和“旋转”

    矩阵 A \boldsymbol{A} A是否可逆,决定SVD是否有0奇异值

    SVD分解结果(奇异值) A = U Σ V T \boldsymbol{A} =\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T} A=UΣVT展示了矩阵 A \boldsymbol{A} A的各方面特征

    • 例如 Σ = [ 3 0 0 2 ] \boldsymbol{\Sigma}=\left[
      3002" role="presentation">3002
      \right]
      Σ=[3002]
      ,则 A \boldsymbol{A} A可逆
      ps. 可逆矩阵 r = n r=n r=n,则 A T A \boldsymbol{A}^{T} \boldsymbol{A} ATA A A T \boldsymbol{A}\boldsymbol{A}^{T} AAT为正定矩阵(特征值全为正,对应 A \boldsymbol{A} A奇异值全为正
    • Σ = [ 3 0 0 − 2 ] \boldsymbol{\Sigma}=\left[
      3002" role="presentation">3002
      \right]
      Σ=[3002]
      ,这不是SVD,因为我们奇异值不可能为负值
    • Σ = [ 3 0 0 0 ] \boldsymbol{\Sigma}=\left[
      3000" role="presentation">3000
      \right]
      Σ=[3000]
      Σ \boldsymbol{\Sigma} Σ秩为1,而 U \boldsymbol{U} U V \boldsymbol{V} V为正交的,因此 A \boldsymbol{A} A秩为1,不可逆
      理解[ A \boldsymbol{A} A不满秩则不可逆]:对矩阵做SVD A = U Σ V T \boldsymbol{A}=\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T} A=UΣVT A \boldsymbol{A} A行/列不满秩,则矩阵零空间有非零向量,那么就有 A x = 0 \mathbf A\mathbf x=\mathbf 0 Ax=0,进而SVD中的 Σ \boldsymbol{\Sigma} Σ右下角相应出现0元素,这从根本上决定了 A \boldsymbol{A} A与其他矩阵相乘,不可能得到单位阵(即不可逆)

    另外, A \boldsymbol{A} A的零空间由 V \boldsymbol{V} V中那些特征值为0的特征向量(即 v 2 \mathbf v_2 v2)给出,因为此时 A V = U Σ = 0 \boldsymbol{A}\boldsymbol{V} =\boldsymbol{U} \boldsymbol{\Sigma}=0 AV=UΣ=0
    更多的,求 A \boldsymbol{A} A的左零空间、列空间等…也能从SVD中找到答案,详见笔记10-3

    推论:矩阵行列式 d e t ( A ) det(\boldsymbol{A}) det(A)=特征值乘积 λ 1 λ 2 . . . λ n \lambda_1\lambda_2...\lambda_n λ1λ2...λn=奇异值乘积 σ 1 σ 2 . . . σ n \sigma_1\sigma_2...\sigma_n σ1σ2...σn
    原因: d e t ( A ) = d e t ( U Σ V T ) = d e t ( Σ ) det(\boldsymbol{A}) =det(\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{T})=det(\boldsymbol{\Sigma}) det(A)=det(UΣVT)=det(Σ)(正交矩阵行列式为0)

    SVD的应用

    • 大型矩阵 A \boldsymbol{A} A,希望提取重要信息(不只是简单的找出较大的元素值),可以做SVD并从“秩1矩阵分解”的角度来看:秩1矩阵 σ 1 u 1 v 1 T \sigma_1\mathbf{u}_1\mathbf{v}_1^T σ1u1v1T对应了矩阵最重要的部分
    • 奇异值分解在最小二乘法问题中有重要应用
      因为在实际问题中常碰到矩阵 A \boldsymbol{A} A不是列满秩( r < n rr<n)的状态,因此 A T A \boldsymbol{A}^T\boldsymbol{A} ATA不可逆(之前学过,当半正定矩阵满足 x T A x = 0 ( x ≠ 0 ) \mathbf{x}^{T} \boldsymbol{A} \mathbf{x}=0(\mathbf{x}\neq 0) xTAx=0(x=0),则至少有一个特征值为0),无法用之前的方法求最优解,此时需要SVD
      即使是列满秩的情况,当矩阵是超大型矩阵时, A T A \boldsymbol{A}^T\boldsymbol{A} ATA的计算量太大,用奇异值分解SVD会帮助降低计算量
  • 相关阅读:
    图论应用——拓扑排序
    【Unity ShaderGraph】| 给模型添加一个 边缘光效果 实战
    基于Kresling折纸结构双稳态空间的无人机着陆系统新结构
    苹果发布会刚开,B站就“人手一只”新机
    题目0121-机器人走迷宫
    KMP算法
    力扣每日一题-美化数组的最少删除数-2023.11.21
    UE5实现PS图层样式投影效果
    Django框架学习大纲
    FME大规模转换OSM PBF数据
  • 原文地址:https://blog.csdn.net/Insomnia_X/article/details/126651665