3.4 Singular Value Decomposition 阅读笔记

奇异值分解

reference的内容为唯一教程, 接下来的内容仅为本人的课后感悟, 对他人或无法起到任何指导作用.

Reference

  1. Course website: Singular Value Decomposition | Linear Algebra | Mathematics | MIT OpenCourseWare
  2. Course video: 【完整版-麻省理工-线性代数】全34讲 配套教材_哔哩哔哩_bilibili
  3. Course summary: Lecture 29: Singular value decomposition (mit.edu)
  4. Extra reading: 奇异值分解 SVD 原理与在降维中的应用 - 刘建平Pinard - 博客园 (cnblogs.com) and MIT—线性代数笔记 29 奇异值分解 - 知乎 (zhihu.com)

本讲内容为奇异值分解 (Singular Value Decomposition), 它适用于任何矩阵. 我没有深入学习, 在这一讲留下了两三个遗留问题.

奇异值分解是最好的一种矩阵分解. 任意一个矩阵 (任意 size, 不限方阵, 不限其他条件) 都可以写为:

A=UΣVT

其中 Am×n 矩阵, U, Vm×mn×n 的正交矩阵. Σm×n 的对角阵 (主对角线元素有值). 这一讲姑且假设 A 为方阵.

有几个跟 SVD 长得很像的形式:

  • A实对称矩阵时, A=QΛQT. 这是 SVD 的一种特殊情况.

  • A 可对角化时, A=SΛST. 但是 S 并不是正交矩阵, 因此属于 SVD.

假设我们已知任何矩阵都可以经如上形式的 SVD 分解.

How It Works

介绍具体求解方式之前, 先描述其意义.

很容易在 A 的行空间找到一组 orthonormal 的向量 (使用 Gram-Schmidt). 接下来经过线性变换 A 来到列空间, 设 σiui=Avi. 那么经过线性变换后的向量是否正交呢? 不一定, 需要特殊选择行空间的标准正交基.

用矩阵语言表述:

A[v1vr]=[σ1u1σrur]

v 相互标准正交, u 相互标准正交. 我们的任务便是找到这样一组 u, v, 和 σ, 满足上面的式子.

此外零空间也可以找出一组标准正交的向量 [vr+1vn], 如果想映射过去, 则 σi 为 0, 此时 u 取什么都好, 但是我们需要找到一个正交矩阵 U, 已经在列空间取了 r 个, 于是剩下的在左零空间取 m-r 个, 凑成 m 个标准正交向量.

随便从知乎上扒下来一张图解释, 稍稍改了下

最终用矩阵语言描述为:

AV=A[v1 v2  vr vr+1  vm]=[σ1u1 σ2u2  σrur 0ur+1  0um]=[u1 u2  ur ur+1  un][σ1σr[0]]=UΣ

此时 Um×m 正交矩阵, Σm×n 对角矩阵, VTn×n 正交矩阵.

最终可以写为 AV=UΣ, 进一步可以写作 A=UΣV1, 因为 V 是标准正交矩阵所以可以写为 A=UΣVT.

我们的任务便是找到这样一组 u, v, 和 σ, 满足上面的式子. 此时仍然假设我们已知任何矩阵都可以经如上形式的 SVD 分解.

How to Find U, V, and Σ?

如果已知任何矩阵都可以经如上形式的 SVD 分解: A=UΣVT.

ATA=VΣTUTUΣVT=VΣTΣVT=VΣ2VT.

这里 Σ 不是方阵, 但是转置乘自身, 最终仍然会得到一个对角阵. (有的元素可能是零).

同理有 AAT=UΣΣTUT=UΣTUT.

假设 A 行满秩, 列也满秩 (满秩方阵), 那么 AATATA 全都是实对称正定矩阵.

  • ATA 的特征值满足 σi=λi, 特征向量组成正交矩阵 V.
  • AAT 的特征值满足 σi=λi, 特征向量组成正交矩阵 U.

Example

Invertible

计算一个例子, A=[4433], 我们需要找到:

我们来计算 ATA=[4343][4433]=[257725].

可以直接观察得到特征向量 ATA[11]=32[11], ATA[11]=18[11], 化为单位向量有 σ1=32, v1=[1212], σ2=18, v2=[1212].

到目前为止, 我们得到 [4433]=[u?u?u?u?][320018][12121212], 接下来继续求解 U.

AAT=UΣVTVΣTUT=UΣ2UT, 求出 AAT 的特征向量即可得到 U, [4433][4343]=[320018], 观察得 AAT[10]=32[10], AAT[01]=18[01]. 但是我们不能直接使用这一组特征向量, 因为式子 AV=UΣ 明确告诉我们, 一旦V确定下来, U也必须取能够满足该式的向量, 所以此处 Av2=[018]=u2σ2=[01]18, 则 u1=[10], u2=[01]. (这个问题在本讲的官方笔记中有详细说明. )

如果取 v2=[1212], 则可以取 u1=[10],u2=[01].

UV 是相关的, 标准正交基到底该怎么取呢? 这又是一个问题.

Singular

再做一个例子, A=[4386], 这是个秩一矩阵, 有零空间.

我们按照最初的原理去看行列空间. A 的行空间为 [43] 的倍数, A 的列空间为 [48] 的倍数.

标准化向量得 v1=[0.80.6], u1=15[12].

ATA=[4836][4386]=[80606045], 由于 A 是秩一矩阵, 则 ATA 也不满秩, 所以必有特征值 0, 则另特征值一个由迹可知为 125.

继续求零空间的特征向量, 有 v2=[0.60,8], u2=15[21].

最终得到[4386]=15[1221][125000][0.80.60.60.8], 其中加粗部分都是与零空间相关的部分.

最终得出 SVD 的结论:

  • v1, , vr 是行空间的标准正交基
  • u1, , ur 是列空间的标准正交基
  • vr+1, , vn 是零空间的标准正交基
  • ur+1, , um 是左零空间的标准正交基

通过将矩阵写为Avi=σiui形式, 将矩阵对角化, 便可以得到 SVD 分解.

Question Unsolved

目前仍有很多问题:

  • 为什么矩阵 A 一定能分解为 UΣVT?
  • 既然 UV 是有联系的, 怎么选特征向量的方向, 怎么求?
  • 第二个例子能否采用求 ATAAAT 的特征值特征向量算出 SVD?
  • 非满秩的矩阵的 SVD, 算出 σi=0 对应的零空间/左零空间的向量有意义吗?
  • SVD 本身是用来做什么的?

Properties and Applications

这一部分直接截图别人写的了:

Properties

上面几节我们对SVD的定义和计算做了详细的描述,似乎看不出我们费这么大的力气做SVD有什么好处。那么SVD有什么重要的性质值得我们注意呢?

对于奇异值,它跟我们特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列,而且奇异值的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上的比例。也就是说,我们也可以用最大的k个的奇异值和对应的左右奇异向量来近似描述矩阵。也就是说:

Am×n=Um×mΣm×nVn×nTUm×kΣk×kVk×nTAm×n=Um×mΣm×nVn×nTUm×kΣk×kVk×nT

其中 k 要比 n 小很多,也就是一个大的矩阵 A 可以用三个小的矩阵 Um×k, Σk×k, Vk×nT 来表示。如下图所示,现在我们的矩阵 A 只需要灰色的部分的三个小矩阵就可以近似描述了。

img

由于这个重要的性质,SVD 可以用于 PCA 降维,来做数据压缩和去噪。也可以用于推荐算法,将用户和喜好对应的矩阵做特征分解,进而得到隐含的用户需求来做推荐。同时也可以用于 NLP 中的算法,比如潜在语义索引(LSI)。下面我们就对 SVD 用于 PCA 降维做一个介绍。

Application: PCA

主成分分析(PCA)原理总结中,我们讲到要用PCA降维,需要找到样本协方差矩阵 XTX 的最大的d个特征向量,然后用这最大的d个特征向量张成的矩阵来做低维投影降维。可以看出,在这个过程中需要先求出协方差矩阵 XTX,当样本数多样本特征数也多的时候,这个计算量是很大的。

注意到我们的SVD也可以得到协方差矩阵 XTX 最大的d个特征向量张成的矩阵,但是SVD有个好处,有一些SVD的实现算法可以不求先求出协方差矩阵 XTX,也能求出我们的右奇异矩阵V。也就是说,我们的PCA算法可以不用做特征分解,而是做SVD来完成。这个方法在样本量很大的时候很有效。实际上,scikit-learn的PCA算法的背后真正的实现就是用的SVD,而不是我们我们认为的暴力特征分解。

另一方面,注意到PCA仅仅使用了我们SVD的右奇异矩阵,没有使用左奇异矩阵,那么左奇异矩阵有什么用呢?

图 3
posted @   WIND_LIKE  阅读(65)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
Live2D
欢迎阅读『3.4 Singular Value Decomposition 阅读笔记』
点击右上角即可分享
微信分享提示