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 分解的更多相关文章

  1. 【线性代数】6-7:SVD分解(Singular Value Decomposition-SVD)

    title: [线性代数]6-7:SVD分解(Singular Value Decomposition-SVD) categories: Mathematic Linear Algebra keywo ...

  2. SVD分解技术数学解释

    SVD分解 SVD分解是LSA的数学基础,本文是我的LSA学习笔记的一部分,之所以单独拿出来,是因为SVD可以说是LSA的基础,要理解LSA必须了解SVD,因此将LSA笔记的SVD一节单独作为一篇文章 ...

  3. SVD分解技术详解

    版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...

  4. SVD分解的理解[转载]

    http://www.bfcat.com/index.php/2012/03/svd-tutorial/ SVD分解(奇异值分解),本应是本科生就掌握的方法,然而却经常被忽视.实际上,SVD分解不但很 ...

  5. 机器学习中的矩阵方法04:SVD 分解

    前面我们讲了 QR 分解有一些优良的特性,但是 QR 分解仅仅是对矩阵的行进行操作(左乘一个酉矩阵),可以得到列空间.这一小节的 SVD 分解则是将行与列同等看待,既左乘酉矩阵,又右乘酉矩阵,可以得出 ...

  6. SVD分解 解齐次线性方程组

    SVD分解 只有非方阵才能进行奇异值分解 SVD分解:把矩阵分解为 特征向量矩阵+缩放矩阵+旋转矩阵 定义 设\(A∈R^{m×n}\),且$ rank(A) = r (r > 0) $,则矩阵 ...

  7. 机器学习之SVD分解

    一.SVD奇异值分解的定义 假设是一个的矩阵,如果存在一个分解: 其中为的酉矩阵,为的半正定对角矩阵,为的共轭转置矩阵,且为的酉矩阵.这样的分解称为的奇异值分解,对角线上的元素称为奇异值,称为左奇异矩 ...

  8. 矩阵的SVD分解

    转自 http://blog.csdn.net/zhongkejingwang/article/details/43053513(实在受不了CSDN的广告) 在网上看到有很多文章介绍SVD的,讲的也都 ...

  9. SVD分解求解旋转矩阵

    1.设是两组Rd空间的点集,可根据这两个点集计算它们之间的旋转平移信息. 2.设R为不变量,对T求导得: 令 则 将(4)带入(1)得: 令 则 (相当于对原来点集做减中心点预处理,再求旋转量) 3. ...

随机推荐

  1. linux下occi操作oracle数据库,中文乱码的问题

    转载:http://www.linuxidc.com/Linux/2008-02/11238.htm 前几日调通了OCI连接数据库的问题后,用Oracle自带的例子测试了一下,能正常读取数据(都是英文 ...

  2. django商城项目之用sentry管理日志

    之前写商城项目的时候,采用的日志处理方式为在终端输出或者写入文件,这样的话,项目部署上线之后,若服务器出现错误,需要到服务器查看相关的错误日志,很不方便.后期在学习别人开源项目的时候,学习到一个开源的 ...

  3. HNUSTOJ-1258 Time

    1258: Time 时间限制: 1 Sec  内存限制: 128 MB提交: 16  解决: 11[提交][状态][讨论版] 题目描述 Digital clock use 4 digits to e ...

  4. 搜索 问题 D: 神奇密码锁

    这道题个人认为隐含着状态转换,所以想到的还是BFS,将其中一位数加一或减一或交换临近两位,进入下一状态,使用一个大小为10000的bool数组判重,由于BFS的特性,得到的一定是最小步数: 普通BFS ...

  5. 剑指offer-二叉搜索树的后序遍历序列-python

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 递归法: 先判断左子树是否存在 再判断右子树是否存 ...

  6. Trait讲解

    <?php /** * Trait解决PHP单继承的一种方法,使开发人员在不同层次结构的类中复用属性和方法 * Trait无法实例化 * Trait不是类,不能被继承,所以不能再Trait中不能 ...

  7. redis基础及redis特殊场景使用描述

    数据类型 String set list hash zset redis原理 单线程:redis是单线程+io多路复用:检查文件描述的就绪状态 对比memchached:多线程+锁 redis优势 解 ...

  8. 免费申请 QQ 免费靓号

    打开网址:https://ssl.zc.qq.com/v3/index-chs.html?type=3 说明:靓号一般分为 9位靓号 or 带有寓意的号码 激活规则:获取的"靓号" ...

  9. Linux内核简介、子系统及分类

    一.内核简介 内核:在计算机科学中是一个用来管理软件发出的数据I/O(输入与输出)要求的计算机程序,将这些要求转译为数据处理的指令并交由中央处理器(CPU)及计算机中其他电子组件进行处理,是现代操作系 ...

  10. FAT12

    FAT12 is one of FAT file system families,mostly used on 1.44MB floppy disk. FAT 's full name is File ...