SVD 的理论基础

  本文从理论基础的角度梳理对SVD的理解,不涉及SVD的实现算法。若有不准确的地方,请指正。转载请注明出处。

  下面是两篇介绍SVD基础的非常不错的文章,本文的一些思路参考了它们:

http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html

http://www.ams.org/samplings/feature-column/fcarc-svd

一、方矩阵的特征值分解

  对于一个 n 阶非奇异方矩阵 A,存在 n 个特征值 (λ1,λ2,,λn)。如果这些特征值互不相等,则存在 n 个线性无关的特征向量 (p1,p2,,pn),其对应关系为:

Api=λipi.

  把所有这些特征向量组成一个 n 阶矩阵 P,所有这些特征值组成 n 阶对角矩阵 Λ,即:

PΛ=(p1,p2,,pn),=diag(λ1,λ2,,λn).

则这 n 个特征方程 (???) 可以表示为:

AP=PΛ.

  因为 n 个特征向量 pi 是线性无关的,则矩阵 P 可逆。由上面的方程即可得到:

A=PΛP1.

这就是非奇异矩阵的特征值分解。也许写成分量的形式,更能体现出“分解”的含义,我们把 P 的逆矩阵写成行向量的形式 P1=(q1,q2,,qn)T ,行向量 qi 是矩阵 P1 的低 i 行。这样,上面的方程可以写为:

A=i=1nλipiqTi.

  这样,矩阵 A 被分解成了向量 pi qTi 的乘积的和,对应的特征值 λi 是每一项的系数。对于矩阵 A 是对称矩阵的情况,其特征向量是正交的,所以 P 是正交矩阵,有 P1=PT ,这样上式中的 qi=pi 。所以对称矩阵可以由它的特征向量来分解。

二、奇异值分解

  非方阵没有特征值和特征向量,不存在上面那样的特征值分解,但是可以做类似的奇异值分解。

  一个 m×n 阶矩阵 A 可以看做对空间的一种线性变换,Aa=b,把一个 n 维空间中的向量 A 变换成M维空间的向量 b 。从变换前后的两个空间的正交基矢可以方便看出变换的效果。变换A在某些方向上的变换最强,在另一些方向上的变换最弱,我们选择这样的方向作为基矢。后面可以看到,这些基矢正是 ATA 的特征向量。

1. 奇异值与奇异向量

  矩阵 ATA n 阶的,记其 n 个特征值(假设不相同)为 (σ21,σ22,,σ2n) 。因为 ATA 是对称矩阵,假设这些特征值各不相同,则存在 n 个互相正交的特征向量 (v1,v2,,vn)

(ATA)vi=σ2ivi.

我们将这些特征向量取为单位长度,则它们可以当做原 n 维空间中的一组正交基,满足下面的正交归一关系:

vivj=δij.

   将它们经过矩阵 A 变换后在 m 维像空间中对应的向量记为 (u1,u2,,un) ,即

Avi=λiui.

其中已经把 n 个向量 ui 都取为单位长度。这样, λi 表示向量 vi 变换后的长度, ui 表示变换后的方向。下面证明向量 ui 的正交特性和 λi=σi

uiuj=1λiλj(Avi)T(Avj)=1λiλjvTi(ATAvj)=1λiλjvTiσ2jvj=σ2jλiλjvivj=σ2jλiλjδij.

ij 时,上式等于0。当 i=j 时,因为 ui 是单位向量,所以上式等于1。这样我们同时得到:

uiujλi=δij,=σi.

可以看出,向量 ui vi 具有相同的正交特性。

  在方程 (???) 的两端同左乘 AT ,利用方程 (???) 容易得到下面的关系:

ATui=σivi.

  再在这个方程两端左乘 A ,结合方程 (???) 得到:

(AAT)ui=σ2iui.

  可以看出,矩阵 A AT 是两个互逆的变换。在这两种变换的作用下,向量 vi ui 互为像向量。我们把这几个方程写到一起:

\begin{eqnarray} \left\{ \begin{array} \,\,\, (A^{\!\boldsymbol T}{A}) \boldsymbol v_i \, = \sigma_i^2 \boldsymbol v_i, \\ (\boldsymbol{AA}^{\!\boldsymbol T}) \boldsymbol u_i  = \sigma_i^2 \boldsymbol u_i, \\ \boldsymbol {A v}_i \,\,\, = \sigma_i \boldsymbol{u}_i, \\ A^{\mathrm T} \boldsymbol u_i = \sigma_i \boldsymbol v_i, \\ \boldsymbol v_i \cdot \boldsymbol v_j = \delta_{ij}, \\ \boldsymbol u_i \cdot \boldsymbol u_j = \delta_{ij}. \end{array} \right. \label{group} \end{eqnarray}

  按照定义, vi 是矩阵 A 的奇异向量,σi 是对应的奇异值,表征这个奇异向量经过矩阵 A 变换后的长度。对应的,ui 是矩阵 AT 的奇异向量,是对应的奇异值也是 σi

2. 奇异值分解

  根据前面的讨论, m×n 矩阵 A 的作用空间是 n 维的,向量组 (v1,v2,,vn) 可以作为这个空间的正交归一基底。这个空间中的任意向量 f 可以用这组基底展开:

f=i=1n(vif)vi.

  结合上面的结果 (???) ,矩阵 A 对向量 f 的作用可以写为:

Af=i(vif)Avi=i(σiui)(vTif)=(iσiuivTi)f.

  因为向量 f 是任意的,从上面的结果可以得到

A=i=1nσiuivTi.

  这就是矩阵的奇异值分解,把 A 分解成 n uivTi 的和,每一项的系数是对应的奇异值 σi 。这个结果可以代入方程 (6) 验证。

  从这个分解可以看出,那些奇异值较小的项,对矩阵 A 的贡献较小,在一定精度上可以省略掉。我们把 n 个奇异值 σi 按降序排列,在上面的分解方程中只保留前 r 个:

A=i=1ruiσivTi.

  我们定义 m×r 阶矩阵 U n×r 阶矩阵 V r 阶对角矩阵 Σ

UVΣ=(u1,u2,,ur),=(v1,v2,,vr),=diag(σ1,σ2,,σr).

  这样矩阵 A 就可以写为三个矩阵相乘:

A=UΣVT.

  SVD算法的任务,就是计算出奇异值和两个矩阵 U VT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值