排版较好的一版:http://shartoo.github.io/SVD-decomponent/

上面的补充:奇异值的物理意义是什么?   https://www.zhihu.com/question/22237507/answer/225371236

英文原文:英文原文 中文转自:中文原文

一 简介

SVD实际上是数学专业内容,但它现在已经渗入到不同的领域中。SVD的过程不是很好理解,因为它不够直观,但它对矩阵分解的效果却非常好。比如,Netflix(一个提供在线电影租赁的公司)曾经就悬赏100万美金,如果谁能提高它的电影推荐系统评分预测准确率提高10%的话。令人惊讶的是,这个目标充满了挑战,来自世界各地的团队运用了各种不同的技术。最终的获胜队伍”BellKor’s Pragmatic Chaos”采用的核心算法就是基于SVD。 SVD提供了一种非常便捷的矩阵分解方式,能够发现数据中十分有意思的潜在模式。在这篇文章中,我们将会提供对SVD几何上的理解和一些简单的应用实例。

1.1 线性变换的几何意义

奇异值分解应该就是把一个线性变换分解成两个线性变换,一个线性变换代表旋转,另一个代表拉伸。

让我们来看一些简单的线性变换例子,以 2 X 2 的线性变换矩阵为例,首先来看一个较为特殊的,对角矩阵:

M=[3001]M=[3001]

从几何上讲,M 是将二维平面上的点(x,y)经过线性变换到另外一个点的变换矩阵,如下图所示

[3001][xy]=[3xy][3001][xy]=[3xy]

变换的效果如下图所示,变换后的平面仅仅是沿 X 水平方面进行了拉伸3倍,垂直方向是并没有发生变化。

现在看下矩阵:

M=[2112]M=[2112]

这个矩阵产生的变换效果如下图所示:

这种变换效果看起来非常的奇怪,在实际环境下很难描述出来变换的规律 ( 这里应该是指无法清晰辨识出旋转的角度,拉伸的倍数之类的信息)。还是基于上面的对称矩阵,假设我们把左边的平面旋转45度角,然后再进行矩阵M 的线性变换,效果如下图所示:

看起来是不是有点熟悉? 对的,经过 M 线性变换后,跟前面的对角矩阵的功能是相同的,都是将网格沿着一个方向拉伸了3倍。 这里的 M 是一个特例,因为它是对称的。非特殊的就是我们在实际应用中经常遇见一些 非对称的,非方阵的矩阵。如上图所示,如果我们有一个 2 X 2 的对称矩阵M 的话,我们先将网格平面旋转一定的角度,M 的变换效果就是在两个维度上进行拉伸变换了。

用更加数学的方式进行表示的话,给定一个对称矩阵 M ,我们可以找到一些相互正交 ViVi ,满足 MViMVi 就是沿着 ViVi 方向的拉伸变换,公式如下:

Mvi=λiviMvi=λivi

这里的 λiλi是拉伸尺度(scalar)。从几何上看,M 对向量 ViVi 进行了拉伸,映射变换。ViVi 称作矩阵 M 的特征向量(eigenvector),λiλi 称作为矩阵M 特征值(eigenvalue)。这里有一个非常重要的定理,对称矩阵M 的特征向量是相互正交的。

如果我们用这些特征向量对网格平面进行线性变换的话,再通过 M 矩阵对网格平面进行线性换的效果跟对M 矩阵的特征向量进行线性变换的效果是一样的。 对于更为普通的矩阵而言,我们该怎么做才能让一个原来就是相互垂直的网格平面(orthogonal grid), 线性变换成另外一个网格平面同样垂直呢?PS:这里的垂直如图所示,就是两根交错的线条是垂直的。

M=[1101]M=[1101]

经过上述矩阵变换以后的效果如图:

从图中可以看出,并没有达到我们想要的效果。我们把网格平面旋转 30 度角的话,然后再进行同样的线性变换以后的效果,如下图所示

让我们来看下网格平面旋转60度角的时候的效果。

嗯嗯,这个看起来挺不错的样子。如果在精确一点的话,应该把网格平面旋转 58.28 度才能达到理想的效果。

二 几何意义

该部分是从几何层面上去理解二维的SVD:对于任意的 2 x 2 矩阵,通过SVD可以将一个相互垂直的网格(orthogonal grid)变换到另外一个相互垂直的网格。 我们可以通过向量的方式来描述这个事实: 首先,选择两个相互正交的单位向量 v1v1和 v2v2, 向量 Mv1Mv1 和 Mv2Mv2 正交。

u1u1 和 u2u2 分别表示 Mv1Mv1 和 Mv2Mv2 的单位向量,σ1∗u1=Mv1σ1∗u1=Mv1 和 σ2∗u2=Mv2σ2∗u2=Mv2 。σ1σ1 和 σ2σ2分别表示这不同方向向量上的模,也称作为矩阵M 的奇异值。

这样我们就有了如下关系式:

Mv1=σ1u1Mv2=σ2u2Mv1=σ1u1Mv2=σ2u2

我们现在可以简单描述下经过 M 线性变换后的向量 x 的表达形式。由于向量 v1v1 和 v2v2 是正交的单位向量,我们可以得到如下式子

x=(v1x)v1+(v2x)v2x=(v1x)v1+(v2x)v2

这就意味着:

Mx=(v1x)Mv1+(v2x)Mv2Mx=(v1x)σ1u1+(v2x)σ2u2Mx=(v1x)Mv1+(v2x)Mv2Mx=(v1x)σ1u1+(v2x)σ2u2

向量内积可以用向量的转置来表示,如下所示:

V.x=VTxV.x=VTx

最终的式子为:

Mx=u1σ1vT1x+u2σ2vT2xM=u1σ1vT1+u2σ2vT2Mx=u1σ1v1Tx+u2σ2v2TxM=u1σ1v1T+u2σ2v2T

上述的式子经常表示成

M=U∑VTM=U∑VT

u 矩阵的列向量分别是 u1,u2,∑u1,u2,∑是一个对角矩阵,对角元素分别是对应的 σ1σ1 和 σ2σ2 ,V矩阵的列向量分别是 v1,v2v1,v2 。上角标T 表示矩阵 V 的转置。

这就表明任意的矩阵 M 是可以分解成三个矩阵。V表示了原始域的标准正交基,u 表示经过M 变换后的co-domain的标准正交基,Σ表示了V 中的向量与u中相对应向量之间的关系。(V describes an orthonormal basis in the domain, and U describes an orthonormal basis in the co-domain, and Σ describes how much the vectors in V are stretched to give the vectors in U.)

三 奇异值分解的物理意义

此部分转载自知乎 奇异值分解物理意义,郑宁的回答

矩阵的奇异值是一个数学意义上的概念,一般是由奇异值分解(Singular Value Decomposition,简称SVD分解)得到。如果要问奇异值表示什么物理意义,那么就必须考虑在不同的实际工程应用中奇异值所对应的含义。下面先尽量避开严格的数学符号推导,直观的从一张图片出发,让我们来看看奇异值代表什么意义。

这是女神上野树里(Ueno Juri)的一张照片,像素为高度450*宽度333

我们都知道,图片实际上对应着一个矩阵,矩阵的大小就是像素大小,比如这张图对应的矩阵阶数就是450*333,矩阵上每个元素的数值对应着像素值。我们记这个像素矩阵为 AA 。

现在我们对矩阵 AA 进行奇异值分解。直观上,奇异值分解将矩阵分解成若干个秩一矩阵之和,用公式表示就是:

A=σ1μ1vT1+σ2μ2vT2+...+σrμrvTrA=σ1μ1v1T+σ2μ2v2T+...+σrμrvrT

其中等式右边每一项前的系数 σσ就是奇异值,u和v分别表示列向量,秩一矩阵的意思是矩阵秩为1。注意到每一项 μvμv 都是秩为1的矩阵。我们假定奇异值满足:

σ1≥σ2≥....σr≥0σ1≥σ2≥....σr≥0

(奇异值大于0是个重要的性质,但这里先别在意),如果不满足的话重新排列顺序即可,这无非是编号顺序的问题。

既然奇异值有从大到小排列的顺序,我们自然要问,如果只保留大的奇异值,舍去较小的奇异值,这样(1)式里的等式自然不再成立,那会得到怎样的矩阵——也就是图像?

令 A1=σ1u1vT1A1=σ1u1v1T ,这只保留(1)中等式右边第一项,然后作图

结果就是完全看不清是啥……我们试着多增加几项进来:

A5=σ1μ1vT1+σ2μ2vT2+...+σ5μ5vT5A5=σ1μ1v1T+σ2μ2v2T+...+σ5μ5v5T

再作图

隐约可以辨别这是短发伽椰子的脸……但还是很模糊,毕竟我们只取了5个奇异值而已。下面我们取20个奇异值试试,也就是(1)式等式右边取前20项构成 A20A20

虽然还有些马赛克般的模糊,但我们总算能辨别出这是Juri酱的脸。当我们取到(1)式等式右边前50项时:

我们得到和原图差别不大的图像。也就是说当k从1不断增大时,A_k不断的逼近A。让我们回到公式

A=σ1μ1vT1+σ2μ2vT2+...+σrμrvTrA=σ1μ1v1T+σ2μ2v2T+...+σrμrvrT

矩阵表示一个450333的矩阵,需要保存个元素的值。等式右边和分别是4501和333*1的向量,每一项有个元素。如果我们要存储很多高清的图片,而又受限于存储空间的限制,在尽可能保证图像可被识别的精度的前提下,我们可以保留奇异值较大的若干项,舍去奇异值较小的项即可。例如在上面的例子中,如果我们只保留奇异值分解的前50项,则需要存储的元素为,和存储原始矩阵相比,存储量仅为后者的26%。

奇异值往往对应着矩阵中隐含的重要信息,且重要性和奇异值大小正相关。每个矩阵A都可以表示为一系列秩为1的“小矩阵”之和,而奇异值则衡量了这些“小矩阵”对于A的权重。

在图像处理领域,奇异值不仅可以应用在数据压缩上,还可以对图像去噪。如果一副图像包含噪声,我们有理由相信那些较小的奇异值就是由于噪声引起的。当我们强行令这些较小的奇异值为0时,就可以去除图片中的噪声。如下是一张25*15的图像(本例来源于[1])

但往往我们只能得到如下带有噪声的图像(和无噪声图像相比,下图的部分白格子中带有灰色):

通过奇异值分解,我们发现矩阵的奇异值从大到小分别为:14.15,4.67,3.00,0.21,……,0.05。除了前3个奇异值较大以外,其余奇异值相比之下都很小。强行令这些小奇异值为0,然后只用前3个奇异值构造新的矩阵,得到

可以明显看出噪声减少了(白格子上灰白相间的图案减少了)。

奇异值分解还广泛的用于主成分分析(Principle Component Analysis,简称PCA)和推荐系统(如Netflex的电影推荐系统)等。在这些应用领域,奇异值也有相应的意义

四 如何获得奇异值分解

事实上我们可以找到任何矩阵的奇异值分解,那么我们是如何做到的呢?假设在原始域中有一个单位圆,如下图所示。经过 M 矩阵变换以后在co-domain中单位圆会变成一个椭圆,它的长轴(Mv1)和短轴(Mv2)分别对应转换后的两个标准正交向量,也是在椭圆范围内最长和最短的两个向量。

换句话说,定义在单位圆上的函数|Mx|分别在 v1v1 和 v2v2 方向上取得最大和最小值。这样我们就把寻找矩阵的奇异值分解过程缩小到了优化函数|Mx|上了。结果发现(具体的推到过程这里就不详细介绍了)这个函数取得最优值的向量分别是矩阵 MT M 的特征向量。由于MTM是对称矩阵,因此不同特征值对应的特征向量都是互相正交的,我们用 vivi 表示MTM的所有特征向量。奇异值 σi=|Mvi|σi=|Mvi|, 向量 uiui 为 MviMvi 方向上的单位向量。但为什么 uiui 也是正交的呢?

推倒如下:

σiσi 和 σjσj 分别是不同两个奇异值

Mvi=σiuiMvj=σjuj.Mvi=σiuiMvj=σjuj.

我们先看下MviMvj,并假设它们分别对应的奇异值都不为零。一方面这个表达的值为0,推到如下

MviMvj=vTiMTMvj=viMTMvj=λjvivj=0MviMvj=viTMTMvj=viMTMvj=λjvivj=0

另一方面,我们有

MviMvj=σiσjuiuj=0MviMvj=σiσjuiuj=0

因此,uiui 和 ujuj 是正交的。但实际上,这并非是求解奇异值的方法,效率会非常低。这里也主要不是讨论如何求解奇异值,为了演示方便,采用的都是二阶矩阵。

五 应用实例

5.1 应用实例一

M=[1122]M=[1122]

经过这个矩阵变换后的效果如下图所示

在这个例子中,第二个奇异值为 0,因此经过变换后只有一个方向上有表达

M=u1σ1vT1M=u1σ1v1T

换句话说,如果某些奇异值非常小的话,其相对应的几项就可以不同出现在矩阵 M 的分解式中。因此,我们可以看到矩阵 M 的秩的大小等于非零奇异值的个数。

5.2 应用实例二

我们来看一个奇异值分解在数据表达上的应用。假设我们有如下的一张 15 x 25 的图像数据。

如图所示,该图像主要由下面三部分构成。

我们将图像表示成 15 x 25 的矩阵,矩阵的元素对应着图像的不同像素,如果像素是白色的话,就取 1,黑色的就取 0. 我们得到了一个具有375个元素的矩阵,如下图所示

如果我们对矩阵M进行奇异值分解以后,得到奇异值分别是

σ1=14.72σ2=5.22σ3=3.31σ1=14.72σ2=5.22σ3=3.31

矩阵M就可以表示成

M=u1σ1vT1+u2σ2vT2+u3σ3vT3M=u1σ1v1T+u2σ2v2T+u3σ3v3T

vivi 具有15个元素,uiui 具有25个元素,σiσi 对应不同的奇异值。如上图所示,我们就可以用123个元素来表示具有375个元素的图像数据了。

5.3 应用实例三:减噪(noise reduction)

前面的例子的奇异值都不为零,或者都还算比较大,下面我们来探索一下拥有零或者非常小的奇异值的情况。通常来讲,大的奇异值对应的部分会包含更多的信息。比如,我们有一张扫描的,带有噪声的图像,如下图所示

我们采用跟实例二相同的处理方式处理该扫描图像。得到图像矩阵的奇异值:

σ1=14.15σ2=4.67σ3=3.00σ4=0.21σ5=0.19...σ15=0.05σ1=14.15σ2=4.67σ3=3.00σ4=0.21σ5=0.19...σ15=0.05

很明显,前面三个奇异值远远比后面的奇异值要大,这样矩阵 M 的分解方式就可以如下:

M≈u1σ1vT1+u2σ2vT2+u3σ3vT3M≈u1σ1v1T+u2σ2v2T+u3σ3v3T

经过奇异值分解后,我们得到了一张降噪后的图像。

5.4 应用实例四:数据分析(data analysis)

我们搜集的数据中总是存在噪声:无论采用的设备多精密,方法有多好,总是会存在一些误差的。如果你们还记得上文提到的,大的奇异值对应了矩阵中的主要信息的话,运用SVD进行数据分析,提取其中的主要部分的话,还是相当合理的。 作为例子,假如我们搜集的数据如下所示:

我们将数据用矩阵的形式表示:

经过奇异值分解后,得到

σ1=6.04σ2=0.22σ1=6.04σ2=0.22

由于第一个奇异值远比第二个要大,数据中有包含一些噪声,第二个奇异值在原始矩阵分解相对应的部分可以忽略。经过SVD分解后,保留了主要样本点如图所示

就保留主要样本数据来看,该过程跟PCA( principal component analysis)技术有一些联系,PCA也使用了SVD去检测数据间依赖和冗余信息.

深度学习基础:SVD奇异值分解及其意义【转】相关推荐

  1. 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 个性化推荐

    人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 个性化推荐 本教程源代码目录在book/recommender_system,初次使用请您参考Book文档使用说明. 说明: 硬件 ...

  2. Deep learning with python notebooks 笔记 第一章 深度学习基础

    第一章 深度学习基础 好的图表比文字传达的信息量多 图1-1帮助理清了人工智能.机器学习和深度学习之间的关系. 图1-2 清晰的阐述了经典程序设计范式和机器学习一种新的编程范式的不同.两种范式引出了两 ...

  3. 第三章_深度学习基础

    文章目录 第三章 深度学习基础 3.1 基本概念 3.1.1 神经网络组成? 3.1.2神经网络有哪些常用模型结构? 3.1.3如何选择深度学习开发平台? 3.1.4为什么使用深层表示? 3.1.5为 ...

  4. 【零基础深度学习教程第一课:深度学习基础】

    深度学习基础 目录 *深度学习基础* <第一节 深度学习简介> 一.深度学习与机器学习区别 二.神经网络简介 2.1 单神经元网络 2.2 多神经元网络 <第二节 神经网络基础> ...

  5. 五万字总结,深度学习基础。

    文章目录 1 基本概念 1.1 神经网络组成? 1.2 神经网络有哪些常用模型结构? 1.3 如何选择深度学习开发平台? 1.4 为什么深层神经网络难以训练? 1.5 深度学习和机器学习的异同? 2 ...

  6. 第3章(3.11~3.16节)模型细节/Kaggle实战【深度学习基础】--动手学深度学习【Tensorflow2.0版本】

    项目地址:https://github.com/TrickyGo/Dive-into-DL-TensorFlow2.0 UC 伯克利李沐的<动手学深度学习>开源书一经推出便广受好评.很多开 ...

  7. 深度学习基础笔记——前向传播与反向传播

    相关申明及相关参考: 体系学习地址 主要学习笔记地址 由于是文章阅读整合,依据个人情况标注排版, 不确定算不算转载,主要学习围绕AI浩的五万字总结,深度学习基础 如有侵权,请联系删除. 1前向传播与反 ...

  8. Python深度学习(一)深度学习基础

    翻译自Deep Learning With Python(2018) 第一章 深度学习基础:https://www.jianshu.com/p/6c08f4ceab4c 第二章 深度学习的数学构建模块 ...

  9. 《机器学习系列教程》第三章 深度学习基础

    @[第三章 深度学习基础] 第三章 深度学习基础 3.1 基本概念 3.1.1 神经网络组成? 为了描述神经网络,我们先从最简单的神经网络说起. 感知机 简单的感知机如下图所示: [外链图片转存失败( ...

  10. 深度学习基础笔记——激活函数

    相关申明及相关参考: 体系学习地址 主要学习笔记地址 激活函数,你真的懂了吗? - 知乎 (zhihu.com) 聊一聊深度学习的activation function - 知乎 (zhihu.com ...

最新文章

  1. popwindow下拉筛选 二级联动_职场人必备!一分钟搞定Excel二级联动下拉菜单
  2. 海康、大华IpCamera RTSP地址和格式
  3. Windows窗体透明效果
  4. linux安装oem环境,【OEM】 oem12c_install_for_linux
  5. const深度总结(effective C++)
  6. elasticsearch 二、elasticsearch-head安装
  7. java类sample是公共的_应在名samle.java的文件_Andoid NDK编程 1 - 注册native函数
  8. 【做题记录】[NOI2008] 假面舞会—有向图上的环与最长链
  9. Linux 命令之 rsync -- 远程数据同步工具
  10. SSH框架下的在线人数统计的一种解决途径
  11. Java应用怎么打包发布_myeclipse中java应用程序打包发布步骤
  12. Expected value at 1:0 异常解决方法
  13. 杜比服务器系统安装,小编教你给Win10系统安装杜比音效驱动的方法
  14. 虹科教您固定工业树莓派Modbus RTU设备编号
  15. 对swift开发中的unwinding segue的一些理解
  16. 魔兽世界mysql启动不了_WOW 魔兽世界单机版 3.3 不能启动服务器的解决方案 | 学步园...
  17. PC设置切换Fn功能键
  18. win2003 服务器设置 完全版 作者:冰盾防火墙
  19. em表示什么长度单位_css中pt、px、em、ex、in等这类长度单位详细说明
  20. linux yum 安装node,CentOS7 下 yum安装新版nodejs

热门文章

  1. 虚拟机Linux CentOS 7安装配置Tomcat10(适用于安装任何tomcat版本!!)
  2. 输入股票代码判断深市还是沪市,python
  3. 2020计算机科学与技术考研大纲,2020东华大学计算机考研大纲
  4. 闲来无事——手势图案解屏个数
  5. JAVA简单的控制台模拟斗地主
  6. can和could的用法_can和could情态动词的用法
  7. EPICS数据通过MQTT物联网协议上云
  8. observable.map 介绍
  9. Webstorm2018激活和汉化详细步骤
  10. angular2+ 常用链接