zoukankan      html  css  js  c++  java
  • Deep Learning基础--SVD奇异值分解

    矩阵奇异值的物理意义是什么?如何更好地理解奇异值分解?下面我们用图片的例子来扼要分析。

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

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

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

    现在我们对矩阵A进行奇异值分解。直观上,奇异值分解将矩阵分解成若干个秩一矩阵之和,用公式表示就是:
    (1) quadquad qquad A = sigma_1 u_1v_1^{
m T}+sigma_2 u_2v_2^{
m T}+...+sigma_r u_rv_r^{
m T}
    其中等式右边每一项前的系数sigma就是奇异值,uv分别表示列向量,秩一矩阵的意思是矩阵秩为1。注意到每一项uv^{
m T}都是秩为1的矩阵。我们假定奇异值满足sigma_1geqsigma_2geq...geqsigma_r>0(奇异值大于0是个重要的性质,但这里先别在意),如果不满足的话重新排列顺序即可,这无非是编号顺序的问题。

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

    A_1=sigma_1 u_1v_1^{
m T},这只保留(1)中等式右边第一项,然后作图:
    结果就是完全看不清是啥……我们试着多增加几项进来:A_5=sigma_1 u_1v_1^{
m T}+sigma_2 u_2v_2^{
m T}+sigma_3 u_3v_3^{
m T}+sigma_4 u_4v_4^{
m T}+sigma_5 u_5v_5^{
m T},再作图
    隐约可以辨别这是短发伽椰子的脸……但还是很模糊,毕竟我们只取了5个奇异值而已。下面我们取20个奇异值试试,也就是(1)式等式右边取前20项构成A_{20}
    虽然还有些马赛克般的模糊,但我们总算能辨别出这是Juri酱的脸。当我们取到(1)式等式右边前50项时:

    我们得到和原图差别不大的图像。也就是说当k从1不断增大时,A_k不断的逼近A。让我们回到公式
    (1) quadquad qquad A = sigma_1 u_1v_1^{
m T}+sigma_2 u_2v_2^{
m T}+...+sigma_r u_rv_r^{
m T}
    矩阵A表示一个450*333的矩阵,需要保存450	imes 333=149850个元素的值。等式右边uv分别是450*1和333*1的向量,每一项有1+450+333=784个元素。如果我们要存储很多高清的图片,而又受限于存储空间的限制,在尽可能保证图像可被识别的精度的前提下,我们可以保留奇异值较大的若干项,舍去奇异值较小的项即可。例如在上面的例子中,如果我们只保留奇异值分解的前50项,则需要存储的元素为784	imes50=39200,和存储原始矩阵A相比,存储量仅为后者的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*n矩阵看作从m维空间到n维空间的一个线性映射,是否:各奇异向量就是坐标轴,奇异值就是对应坐标的系数?”我猜测,题主更想知道的是奇异值在数学上的几何含义,而非应用中的物理意义。下面简单介绍一下奇异值的几何含义,主要参考文献是美国数学协会网站上的文章[1]。

    下面的讨论需要一点点线性代数的知识。线性代数中最让人印象深刻的一点是,要将矩阵和空间中的线性变换视为同样的事物。比如对角矩阵M作用在任何一个向量上
    egin{bmatrix}
3 & 0 \
0 & 1
end{bmatrix}
egin{bmatrix}
x \
y
end{bmatrix}
=
egin{bmatrix}
3x \
y
end{bmatrix}
    其几何意义为在水平x方向上拉伸3倍,y方向保持不变的线性变换。换言之对角矩阵起到作用是将水平垂直网格作水平拉伸(或者反射后水平拉伸)的线性变换。
    如果M不是对角矩阵,而是一个对称矩阵
    M=
egin{bmatrix}
2 & 1 \
1 & 2
end{bmatrix}
    那么,我们也总可以找到一组网格线,使得矩阵作用在该网格上仅仅表现为(反射)拉伸变换,而没有旋转变换
    考虑更一般的非对称矩阵
    M=
egin{bmatrix}
1 & 1 \
0 & 1
end{bmatrix}
    很遗憾,此时我们再也找不到一组网格,使得矩阵作用在该网格上之后只有拉伸变换(找不到背后的数学原因是对一般非对称矩阵无法保证在实数域上可对角化,不明白也不要在意)。我们退求其次,找一组网格,使得矩阵作用在该网格上之后允许有拉伸变换旋转变换,但要保证变换后的网格依旧互相垂直。这是可以做到的
    下面我们就可以自然过渡到奇异值分解的引入。奇异值分解的几何含义为:对于任何的一个矩阵,我们要找到一组两两正交单位向量序列,使得矩阵作用在此向量序列上后得到新的向量序列保持两两正交。下面我们要说明的是,奇异值的几何含义为:这组变换后的新的向量序列的长度。

    当矩阵M作用在正交单位向量v_1v_2上之后,得到Mv_1Mv_2也是正交的。令u_1u_2分别是Mv_1Mv_2方向上的单位向量,即Mv_1=sigma_1 u_1Mv_2=sigma_2 u_2,写在一起就是Mleft[ v_1quad  v_2 
ight]=left[ sigma_1u_1quad  sigma_2u_2 
ight],整理得:

    M=Mleft[ v_1quad  v_2 
ight]
egin{bmatrix}
v_1^{
m T} \
v_2^{
m T}
end{bmatrix}
=left[ sigma_1u_1quad  sigma_2u_2 
ight]
egin{bmatrix}
v_1^{
m T} \
v_2^{
m T}
end{bmatrix}
=left[ u_1quad  u_2 
ight]
egin{bmatrix}
sigma_1 & 0 \
0 & sigma_2
end{bmatrix}
egin{bmatrix}
v_1^{
m T} \
v_2^{
m T}
end{bmatrix}

    这样就得到矩阵M的奇异值分解。奇异值sigma_1sigma_2分别是Mv_1Mv_2的长度。很容易可以把结论推广到一般n维情形。

    下面给出一个更简洁更直观的奇异值的几何意义(参见[2])。先来一段线性代数的推导,不想看也可以略过,直接看黑体字几何意义部分:

    假设矩阵A的奇异值分解为
    A=left[ u_1quad u_2 
ight]
egin{bmatrix}
3 & 0 \
0 & 1
end{bmatrix}
egin{bmatrix}
v_1^{
m T} \
v_2^{
m T}
end{bmatrix}
    其中u_1,~u_2,~v_1,~v_2是二维平面的向量。根据奇异值分解的性质,u_1,~u_2线性无关,v_1,~v_2线性无关。那么对二维平面上任意的向量x,都可以表示为:x=xi_1 v_1+xi_2 v_2

    A作用在x上时,
    y=Ax=A[v_1quad v_2]
egin{bmatrix}
xi_1 \
xi_2
end{bmatrix}=
left[ u_1quad u_2 
ight]
egin{bmatrix}
3 & 0 \
0 & 1
end{bmatrix}
egin{bmatrix}
v_1^{
m T} \
v_2^{
m T}
end{bmatrix}
[v_1quad v_2]
egin{bmatrix}
xi_1 \
xi_2
end{bmatrix}=3xi_1u_1+xi_2u_2

    eta_1=3xi_1,~eta_2=xi_2,我们可以得出结论:如果x是在单位圆xi_1^2+xi_2^2=1上,那么y正好在椭圆eta_1^2/3^2+eta_2^2/1^2=1上。这表明:矩阵A将二维平面中单位圆变换成椭圆,而两个奇异值正好是椭圆的两个半轴长,长轴所在的直线是{
m span}{u_1},短轴所在的直线是{
m span}{u_2}.

    推广到一般情形:一般矩阵A将单位球|x|_2=1变换为超椭球面E_m={yin {f C}^m:~y=Ax,~xin{f C}^n,~|x|_2=1},那么矩阵A的每个奇异值恰好就是超椭球的每条半轴长度

     
    作者:郑宁
    链接:https://www.zhihu.com/question/22237507/answer/53804902
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


    参考文献:
    [1] We Recommend a Singular Value Decomposition(Feature Column from the AMS
    [2] 徐树方,《矩阵计算的理论与方法》,北京大学出版社。
  • 相关阅读:
    解决IDEA springBoot读取*.properties文件中文内容乱码的问题
    springboot读取自定义properties配置文件方法
    解决Vue调用springboot接口403跨域问题
    eclipse springboot工程打war包方法及在Tomcat中运行的方法
    Android native进程间通信实例-socket本地通信篇之——服务端进程异常退出解决办法
    Android native进程间通信实例-socket本地通信篇之——基本通信功能
    Android native进程间通信实例-binder篇之——解决实际问题inputreader内建类清楚缓存
    Android native进程间通信实例-binder篇之——用parcel传输数组
    Android native进程间通信实例-binder篇之——简单的单工通信
    解决多类开机弹框问题
  • 原文地址:https://www.cnblogs.com/shixiangwan/p/7570755.html
Copyright © 2011-2022 走看看