线性代数之——SVD 分解
SVD 分解是线性代数的一大亮点。
1. SVD 分解
\(A\) 是任意的 \(m×n\) 矩阵,它的秩为 \(r\),我们要对其进行对角化,但不是通过 \(S^{-1}A S\)。\(S\) 中的特征向量有三个大问题:它们通常不是正交的;并不总是有足够的特征向量;\(Ax=\lambda x\) 需要 \(A\) 是一个方阵。\(A\) 的奇异向量很好地解决了上述所有问题。
代价是我们需要两组奇异向量,一组是 \(\boldsymbol{u}\), 一组是 \(\boldsymbol{v}\)。\(\boldsymbol{u}\) 是 \(AA^T\) 的特征向量,\(\boldsymbol{v}\) 是 \(A^TA\) 的特征向量,因为这两个矩阵都是对称矩阵,我们可以选出一组标准正交的特征向量。即:
\[AA^T=U\Sigma^2U^T \quad A^TA =V\Sigma^2V^T\]
证明:
让我们从 \(A^TAv_i=\sigma_i^2v_i\) 开始,两边同乘以 \(v_i^T\),有:
\[v_i^TA^TAv_i=\sigma_i^2v_i^Tv_i=\sigma_i^2 \to ||Av_i||=\sigma_i\]
这说明向量 \(Av_i\) 的长度为 \(\sigma_i\)。然后两边同乘以 \(A\),有:
\[AA^T(Av_i)=\sigma_i^2(Av_i) \to u_i = Av_i / \sigma_i\]
这说明 \(Av_i\) 是 \(AA^T\) 的特征向量,除以其长度 \(\sigma_i\) 我们便可以得到单位向量 \(u_i\)。这些 \(\boldsymbol{u}\) 还是正交的,因为:
\[(Av_i)^TAv_j = v_i^T(A^TAv_j) = v_i^T(\sigma_j^2v_j) =\sigma_j^2v_i^Tv_j=0\]

奇异向量 \(\boldsymbol{v}\) 位于 \(A\) 的行空间,而结果 \(\boldsymbol{u}\) 位于 \(A\) 的列空间,奇异值都是正数。然后 \(Av_i=\sigma_iu_i\) 一列一列告诉我们 \(AV=U\Sigma\),
\[A \begin{bmatrix} &&&\\ v_1&v_2&\cdots&v_r\\&&& \end{bmatrix} = \begin{bmatrix} &&&\\ u_1&u_2&\cdots&u_r\\&&& \end{bmatrix} \begin{bmatrix} \sigma_1&&&\\ &\sigma_2&&\\&&\cdots&\sigma_r \end{bmatrix}\]
\[(m×n)(n×r)=(m×r)(r×r)\]
这是 SVD 的核心,但不仅仅到此为止,这些 \(\boldsymbol{v}\) 和 \(\boldsymbol{u}\) 只负责矩阵 \(A\) 的行空间和列空间,我们需要 \(n-r\) 个额外的 \(\boldsymbol{v}\) 和 \(m-r\) 个额外的 \(\boldsymbol{u}\),分别来自零空间 \(N(A)\) 和左零空间 \(N(A^T)\)。它们可以是这两个空间的标准正交基,当然它们也自动正交于前 \(r\) 个 \(\boldsymbol{v}\) 和 \(\boldsymbol{u}\)。将这些新的向量包含进 \(V\) 和 \(U\),我们依然有 $AV=U\Sigma $:

新的 \(\Sigma\) 是 \(m×n\) 的,由之前的 \(r×r\) 矩阵 \(\Sigma_r\) 和 \(m-r\) 行零和 \(n-r\) 列零组成。此时,\(V\) 和 \(U\) 分别是大小为 \(n,m\) 的方阵,有 \(V^{-1}=V^T\),则 \(AV=U\Sigma\) 就变成了
\[A=U\Sigma V^T\]

这也就是 SVD 分解。当我们将奇异值降序排列时,上述的方程按照重要性给出了矩阵 \(A\) 的 \(r\)个秩为 1 的小片。

2. 图像压缩
这是一个数据的时代,并且数据经常存储在一个矩阵中。数字图像就是一个存储像素值的矩阵,比如一个大小为 256×512 的图像总共有 \(2^8*2^9=2^{17}\) 个元素。单独存储这一个图像对计算机来说是没问题的,但在 CT 和 MR 扫描过程中会产生大量的数据,又或者它们是电影中的帧图片,那么需要存储的数据量将会非常大。高清晰度的数字电视特别需要压缩,否则设备无法实时跟踪。
什么是压缩呢?我们想要用更少的数字代替这 \(2^{17}\) 个元素,但同时不损失图像质量。一个简单的办法就是用一组中四个元素的均值来替换它们,这就是 4:1 压缩。但是如果我们想进一步压缩,比如 16:1,那么我们的图像就会有一些块效应,我们想要用一个人的视觉系统注意不到的方式进行压缩。
很多方法被提出来解决这个问题,比如用在 jpeg 中的傅里叶变换以及用在 JPEG2000 中的小波变换。这里我们尝试一个 SVD 的方法:用一个秩为 1 的矩阵,一列乘以一行,来替换原始的 256×512 矩阵。这样奏效的话,压缩比将会是 (256*512)/(256+512) 超过 170:1。实际上,我们会用 5 个秩为 1 的矩阵,这时候压缩比仍然有 34:1,而更重要的问题是图像质量。
为什么会牵涉到 SVD 呢?矩阵 \(A\) 最好的秩 1 近似为 \(\sigma_1u_1v_1^T\),使用了最大的奇异值 \(\sigma_1\)。最好的秩 5 近似为 \(\sigma_1u_1v_1^T+\sigma_2u_2v_2^T+\cdots+\sigma_5u_5v_5^T\),SVD 按照降序放置矩阵 A 的小片。
3. 基和 SVD
让我们以一个 2×2 的矩阵开始,

它的秩为 2,是可逆的。我们想要 \(v_1,v_2\) 是正交的单位向量,同时使得 \(Av_1,Av_2\) 正交。没有一个正交矩阵 \(Q\) 可以让 \(Q^{-1}AQ\) 对角化,我们需要 \(U^{-1}AV\)。

有一个简单的办法可以移除 \(U\) 而只留下 \(V\),
\[A^TA=(U\Sigma V^T)^T(U\Sigma V^T)=V\Sigma ^T\Sigma V^T\]

这就和 \(A=Q\Lambda Q^T\) 一样,只不过这里的对称矩阵不是 \(A\) 本身,而是 \(A^TA\) ,\(V\) 的列是 \(A^TA\) 的特征向量。然后我们可以利用 \(u=Av/\sigma\) 来得到 \(U\),也可以直接得到,
\[AA^T=(U\Sigma V^T)(U\Sigma V^T)^T=U\Sigma \Sigma ^TU^T\]
矩阵 \(U\) 和 \(V\) 包含了四个子空间的标准正交基:

以下的例子很好地展示了矩阵的四个字空间和 SVD 的关系。

4. 特殊矩阵的特征值和特征向量

获取更多精彩,请关注「seniusen」!

线性代数之——SVD 分解的更多相关文章
- 【线性代数】6-7:SVD分解(Singular Value Decomposition-SVD)
title: [线性代数]6-7:SVD分解(Singular Value Decomposition-SVD) categories: Mathematic Linear Algebra keywo ...
- SVD分解技术数学解释
SVD分解 SVD分解是LSA的数学基础,本文是我的LSA学习笔记的一部分,之所以单独拿出来,是因为SVD可以说是LSA的基础,要理解LSA必须了解SVD,因此将LSA笔记的SVD一节单独作为一篇文章 ...
- SVD分解技术详解
版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...
- SVD分解的理解[转载]
http://www.bfcat.com/index.php/2012/03/svd-tutorial/ SVD分解(奇异值分解),本应是本科生就掌握的方法,然而却经常被忽视.实际上,SVD分解不但很 ...
- 机器学习中的矩阵方法04:SVD 分解
前面我们讲了 QR 分解有一些优良的特性,但是 QR 分解仅仅是对矩阵的行进行操作(左乘一个酉矩阵),可以得到列空间.这一小节的 SVD 分解则是将行与列同等看待,既左乘酉矩阵,又右乘酉矩阵,可以得出 ...
- SVD分解 解齐次线性方程组
SVD分解 只有非方阵才能进行奇异值分解 SVD分解:把矩阵分解为 特征向量矩阵+缩放矩阵+旋转矩阵 定义 设\(A∈R^{m×n}\),且$ rank(A) = r (r > 0) $,则矩阵 ...
- 机器学习之SVD分解
一.SVD奇异值分解的定义 假设是一个的矩阵,如果存在一个分解: 其中为的酉矩阵,为的半正定对角矩阵,为的共轭转置矩阵,且为的酉矩阵.这样的分解称为的奇异值分解,对角线上的元素称为奇异值,称为左奇异矩 ...
- 矩阵的SVD分解
转自 http://blog.csdn.net/zhongkejingwang/article/details/43053513(实在受不了CSDN的广告) 在网上看到有很多文章介绍SVD的,讲的也都 ...
- SVD分解求解旋转矩阵
1.设是两组Rd空间的点集,可根据这两个点集计算它们之间的旋转平移信息. 2.设R为不变量,对T求导得: 令 则 将(4)带入(1)得: 令 则 (相当于对原来点集做减中心点预处理,再求旋转量) 3. ...
随机推荐
- Centos7防火墙开启3306端口
CentOS7的默认防火墙为firewall,且默认是不打开的. systemctl start firewalld # 启动friewall systemctl status firewalld # ...
- shopnc如何配置微信支付和支付宝支付
步骤一,支付宝账号申请 申请支付宝商家账号 ,填写好公司名称,资质,审核过了,然后填写下面这些参数 步骤二 微信支付申请 登陆微信公众平台-企业微信支付,得到商户号,再申请密钥 注意:支付宝加密方式 ...
- C语言中整形数组、字符数组、字符串的区别
一. 第一 整型数组的存放,数组最后是不加'\0'的,字符串会自动加上,因此存放字符的时候数组的大小要比实际字符的多一个 第二 整型数组 每一个单元是4个字节的,字符串是一个一个字符存放的,每个字符占 ...
- pip和pip3的区别
安装了python3之后,会有pip3 1. 使用pip install XXX 新安装的库会放在这个目录下面 python2.7/site-packages 2. 使用pip3 install XX ...
- php-redis的配置与使用
从此处下载 https://codeload.github.com/phpredis/phpredis/zip/develop 也就php-redis的安装包,在zip格式,在windows下解压,将 ...
- ajax使用jsonp跨域调用webservice error错误信息"readyState":4,"status":200,"statusText":"success"
主要还是接口写有问题 至于ajax保持简洁写法即可 $.ajax({ dataType: 'jsonp', type: ‘get’, data: {}, url: '' })
- 基于双XCKU060+双C6678 的双FMC接口40G光纤传输加速计算卡381
一.板卡概述 板卡采用基于双FPGA+双DSP的信号采集综合处理硬件平台,板卡大小360mmx217mm.板卡两片FPGA提供两个FMC接口,4路QSFP+接口:每片FPGA挂接2簇32-bit DD ...
- 用Python编写一个ftb
程序文件结构 具体代码实现 服务端: 执行文件bin/ftb_server import os,sys PATH = os.path.dirname(os.path.dirname(os.path.a ...
- 北京师范大学第十五届ACM决赛-重现赛E Euclidean Geometry (几何)
链接:https://ac.nowcoder.com/acm/contest/3/E 来源:牛客网 Euclidean Geometry 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ ...
- django搭建一个小型的服务器运维网站-查看和修改服务器配置与数据库的路由
目录 项目介绍和源码: 拿来即用的bootstrap模板: 服务器SSH服务配置与python中paramiko的使用: 用户登陆与session; 最简单的实践之修改服务器时间: 查看和修改服务器配 ...