简单介绍SVD

Posted handomind

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单介绍SVD相关的知识,希望对你有一定的参考价值。

Research 我唯唯诺诺

划水摸鱼 Tutorial 我重拳出击。

20200519凌晨睡不着的时候,我的脑子里告诉我世界上还有很多大学生不懂但渴望了解SVD(确信),于是20200520凌晨,有了这篇文章。

结构如下:首先是大致叙述下SVD,然后是给出一个大概的推导思路,最后是一些发散内容。本文仅对实数矩阵讨论,复数的情况均可以简单推广得到。数学推导相关的内容均参考于 Gilbert Strang 的 Linear Algebra and Its Application

简单介绍

SVD 即奇异值分解(Singular Value Decomposition),在本文不考虑复数矩阵的前提下即对于任意 (m imes n) 实矩阵 (A_{m imes n}),我们都可以将其表示为 (A_{m imes n} = U_{m imes m} Sigma_{m imes n} V_{n imes n}^{mathrm{T}}),其中,(U_{m imes m})(V_{n imes n})都是正交矩阵。对于矩阵(Sigma_{m imes n}),我们将其对角线上第 (i) 个元素记作(sigma_i) ,即矩阵中第 (i) 行第 (i) 列的元素,这个矩阵仅在这些位置可能不等于0。更具体的说,假设 (r = rank(A_{m imes n})),那么 (Sigma_{m imes n}) 有且仅有 (r) 个非零元。一般我们将这些元素在对角线上按从大到小的顺序排列,也即 (sigma_1 ge sigma_2 ge sigma_3 ge sigma_r > 0)

那么,这样的分解有什么好处呢?明明(V_{n imes n}^{mathrm{T}})(V_{n imes n}) 都是正交矩阵,为什么偏偏要写成转置的样子呢?

为了让大家对SVD 有confidence,我们先来对这两个问题做一个简单的分析。

分析之前,我们先来引入一点记号。

关于实矩阵 (A_{m imes n}),最朴素的观点就是将它看成(m imes n) 个实数的堆积。那么如果我们认为每一列元素看作一个 特殊的命运共同体 向量以后,我们就可以将这个矩阵看成 (n)(m) 维的列向量横向排列的结果,假如我们把这些列向量按顺序记作 (a_1,a_2,dots,a_n),那么矩阵 (A_{m imes n}) 就可以写成 (A_{m imes n} = [a_1,a_2,dots,a_n])

注:后文为了方便,在不引起歧义的情况下,我们便不对矩阵加下标了。

假设 (D)(r imes r) 的对角矩阵,且 (d_{ii} = sigma_i) ,则我们的奇异值分解就可以看做

[egin{aligned} A = & [u_1, u_2, dots, u_m] egin{pmatrix} D & O_{r imes (n-r)} O_{(m-r) imes r} & O_{(m-r) imes (n-r)} end{pmatrix} [v_1,v_2,dots, v_n]^{mathrm{T}} = & [sigma_1 u_1, sigma_2 u_2, dots, sigma_r u_r, 0_{m imes 1},dots, 0_{m imes 1}]_{m imes n} egin{pmatrix} v_1^{mathrm{T}} v_2^{mathrm{T}} vdots v_n^{mathrm{T}} end{pmatrix}_{n imes n} = & sigma_1 u_1 v_1^{mathrm{T}} + sigma_2 u_2 v_2^{mathrm{T}} + dots + sigma_r u_r v_r^{mathrm{T}}\end{aligned} ]

对于实在纠结但是又不会的人提供此hint,第二个等式来自于名人名言“左乘矩阵就是行变换,右乘矩阵就是列变换”中的第二句,第三个等式严格说明需要把左边的矩阵拆成 n 个只有单列不一定为0的矩阵的和,右边的矩阵拆成m个只有单行不一定为0的矩阵的和,于是这个矩阵乘法变成了(m imes n) 个矩阵乘法的和,但是通过简单检查可以发现只有 (u_iv_i^{mathrm{T}}) 的组合才可能产生非零矩阵,这个小结论对于一般的矩阵乘法也是成立的。

注意,此时 (u_i v_i^{mathrm{T}}) 均为 (m imes n) 的矩阵,即我们将 (A) 写成了 (r) 个矩阵的线性组合。很明显凭直觉可以想到 (sigma_i) 越大,(sigma_i u_i v_i^{mathrm{T}}) 包含的关于 (A) 的信息就越多,于是这就提供了一个很好的即给 (A) 降维又尽可能保持 (A) 的信息的工具。简单来讲我们可以利用上述表达对 (A) 做如下近似

[A approx widetilde{A} = sigma_1 u_1 v_1^{mathrm{T}} + sigma_2 u_2 v_2^{mathrm{T}} + dots + sigma_k u_k v_k^{mathrm{T}}, quad k<r ]

基于这样的想法,各类降维的应用便可以基于SVD 展开了。

数学推导

我们按如下顺序来 mathematically 地推导一下 SVD。

  • 实对称矩阵可以做谱分解,即对于实对称矩阵 (A),存在正交矩阵 (Q),使得(A = QLambda Q^{mathrm{T}})

    • 实对称矩阵的特征值都是实数
    • 实对称矩阵显然是正规矩阵((A^{mathrm{T}}A = AA^{mathrm{T}})
    • 任意实数矩阵都能被正交矩阵上三角化,即存在正交矩阵(Q),使得(A = Q Delta Q^{mathrm{T}}) (思想类似于Gram-Schmidt正交化,过程上类似于LU分解)
    • 对于(A = Q Delta Q^{mathrm{T}}),如果(A)是正规矩阵,那么(Delta) 也是正规矩阵
    • 如果一个矩阵既是正规矩阵,又是上三角阵,那么它一定是对角阵
  • 实对称正定矩阵的特征值大于0,实对称半正定矩阵的特征值大于等于0

  • 对于任意矩阵(A)(A^{mathrm{T}}A) 均为实对称半正定矩阵

  • 因此,利用谱分解得到 (A^{mathrm{T}}A = VLambda V^{mathrm{T}}),并取 (sigma_i = sqrt{lambda_i}) ,我们便得到了SVD中的 (Sigma) 矩阵和 (V) 矩阵,最后利用 (AV = USigma) 即可推出 (U)

    回顾SVD的含义,注意到过程中 (V)(U) 实际上都是存在冗余信息的,这种冗余信息的产生可以在SVD 的实践中清晰的看到原因,在此不予赘述。

发散内容

实际上,SVD 对矩阵信息进行了非常深刻的提纯,两个正交矩阵分别可以解读为(U = [ ext{列空间} | ext{左零空间}])(V = [ ext{行空间} | ext{零空间}])

同时,SVD一个非常显著的优点是它的普适性,这种普适而有效的分解手段给许多分析都带来了很多便利。

最后,再给个 SVD 的应用:求最小二乘

有的时候最小二乘解不唯一,这个时候我们希望找到其中模最小的解,一种简单有效的方法就是利用SVD求出伪逆,再利用伪逆去计算最优最小二乘,方法如下

假设问题 (min |y - Ax|) 的最优解不唯一,找出(x^{*}=argmin |x|)

  • (A = USigma V^{mathrm{T}})
  • 按照((Sigma^+)_{ji} = (Sigma)_{ij}, i e j,(Sigma^+)_{ii} = 1/(Sigma)_{ii})定义(Sigma^+)
  • 计算(A^+ = V Sigma^+ U^{mathrm{T}})
  • (x^* = A^+y)

这个做法有个重要的点在于正交变换具有不改变模长的性质,正交变换nb!

以上是关于简单介绍SVD的主要内容,如果未能解决你的问题,请参考以下文章

K-SVD的介绍

矩阵的SVD分解

K-SVD的基本介绍

奇异分解(SVD)理论介绍

代数之美奇异值分解(SVD)及其在线性最小二乘解Ax=b上的应用

代数之美奇异值分解(SVD)及其在线性最小二乘解Ax=b上的应用