zoukankan      html  css  js  c++  java
  • 奇异值分解(SVD)原理

    转:https://blog.csdn.net/u013108511/article/details/79016939

      奇异值分解是一个有着很明显的物理意义的一种方法,它可以将一个比较复杂的矩阵用更小更简单的几个子矩阵的相乘来表示,这些小矩阵描述的是矩阵的重要的特性。就像是描述一个人一样,给别人描述说这个人长得浓眉大眼,方脸,络腮胡,而且带个黑框的眼镜,这样寥寥的几个特征,就让别人脑海里面就有一个较为清楚的认识,实际上,人脸上的特征是有着无数种的,之所以能这么描述,是因为人天生就有着非常好的抽取重要特征的能力,让机器学会抽取重要的特征,SVD是一个重要的方法。 
      所以SVD不仅是一个数学问题,在工程应用方面很多地方都有其身影,如PCA,推荐系统、任意矩阵的满秩分解。 
      博主整理这篇博客就是为后面深度神经网络的模型压缩做准备。

    参考论文:A Singularly Valuable Decomposition The SVD of a Matrix

    1、特征值

    如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式: 
              这里写图片描述 
    这时候λ被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成以下形式: 
              这里是图片描述 
      其中Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每个对角线上的元素就是一个特征值。和矩阵相乘其实就是一次线性变换。如一下两个例子:

              这里是图片描述 
    其对应的线形变换是一下形式: 
              这里是图片描述 
    我们可以根据数学的计算看到更加直观的结果:

              这里是图片描述 
    注意两点: 
    1、对角阵对角线上的特征值的绝对值大于1时,特征值越大拉伸的幅度越大,特征值绝对值小于1,特征值越小压缩的幅度越大; 
    2、这只是矩阵为对角阵的情况下,拉伸和收缩都是沿着坐标轴(也就是特征向量)的方向,而对于非对称的非对角阵,会有非坐标轴方向的拉伸和收缩
     
      我们想要描述好一个变换,那我们就描述好这个变换主要的变化方向就好了,而对角阵Σ里面的特征值是由大到小排列的,特征值对应的特征向量就是描述矩阵的变化方向。 
      当矩阵是高纬度的时候,矩阵就是高纬度空间下的线形变换,通过特征值分解得到的前N个向量就是矩阵最主要的N个变化的方向。利用这N个方向的变化来近似这个矩阵。也就是:提取这个矩阵最重要的一部分特征。(而特征值分解的局限就是变换的矩阵必须为方阵)

    2、正交矩阵

      正交矩阵是在欧几里得空间里的叫法,在酉空间里叫酉矩阵,一个正交矩阵对应的变换叫正交变换,这个变换的特点是不改变向量的尺寸和向量间的夹角。下图是一个直观的认识: 
    这里写图片描述 
      假设二维空间中的向量OA,它在标准坐标系(也就是e1和e2表示的坐标系)中的表示为(a,b)’(‘表示转置);现在用另一组坐标e1’、e2’表示为(a’,b’)’;那么存在矩阵U使得(a’,b’)’=U(a,b)’,而矩阵U就是正交矩阵。 
      通过上图可知,正交变换只是将变换向量用另一组正交基来表示,在这个过程中并没有罪向量作拉伸,也不改变向量的空间位置,对两个向量同时做正交变换,变换的前后两个向量的夹角显然也不会改变。上图是一个旋转的正交变换,可以把e1’、e2’坐标系看做是e1、e2坐标系经过旋转某个θ角度得到,具体的旋转规则如下: 
                这里写图片描述 
            这里写图片描述 
            这里写图片描述 
    a’和b’实际上是x在e1’和e2’轴上投影的大小,所以直接做内积可得: 
            这里写图片描述 
    从图中可以看到: 
            这里写图片描述这里写图片描述 
    所以: 
            这里写图片描述

      正交矩阵U的行(列)之间都是单位正交向量,它对向量做旋转变换。这里解释一下:旋转是相对的,就那上面的图来说,我们可以说向量的空间位置没有变,标准参考系向左旋转了θ角度,而如果我选择了e1’、e2’作为新的标准坐标系,那么在新坐标系中OA(原标准坐标系的表示)就变成了OA’,这样看来就好像坐标系不动,把OA往顺时针方向旋转了θ角度,这个操作实现起来很简单:将变换后的向量坐标仍然表示在当前坐标系中。 
      正交变换的另一个方面是反射变换,也即e1’的方向与图中方向相反。 
      总结:正交矩阵的行(列)向量都是两两正交的单位向量,正交矩阵对应的变换为正交变换,它有两种表现:旋转和反射。正交矩阵将标准正交基映射为标准正交基(即图中从e1、e2到e1’、e2’)。

    3、特征值的分解 - EVD

      在讨论SVD之前,先了解矩阵的特征值分解(EVD),这里选择特殊的矩阵——对角阵,对称矩阵又一个性质就是总能相似对角化,对称矩阵不同特征值对应的特征向量两两正交。一个矩阵能能相似对角化即说明其特征子空间即为其列空间,若不能对角化则其特征子空间为列空间的子空间。现在假设存在m * m的满秩对称矩阵A,它有m个不同的特征值,设特征值为: 
               
    对应的单位特征向量: 
               
    则有: 
             
    进而: 
             
             
             
    所以可得到A的特征值分解(由于对称阵特征向量两两正交,所以U为正交阵,正交阵的逆矩阵等于其转置): 
             
    这里假设A有m个不同的特征值,实际上,只要A是对称阵其均有如上分解。 
    矩阵A分解了,相应的,其对应的映射也分解为三个映射。现在假设有x向量,用A将其变换到A的列空间中,那么首先由UT先对x做变换: 
             
    U是正交阵UT也是正交阵,所以UT对x的变换是正交变换,它将x用新的坐标系来表示,这个坐标系就是A的所有正交的特征向量构成的坐标系。比如将x用A的所有特征向量表示为: 
             
    则通过第一个变换就可以把x表示为[a1 a2 … am]T: 
     
    紧接着,在新的坐标系表示下,由中间那个对角矩阵对新的向量坐标换,其结果就是将向量往各个轴方向拉伸或压缩: 
     
    从上图可以看到,如果A不是满秩的话,那么就是说对角阵的对角线上元素存在0,这时候就会导致维度退化,这样就会使映射后的向量落入m维空间的子空间中。 
    最后一个变换就是U对拉伸或压缩后的向量做变换,由于U和UT是互为逆矩阵,所以U变换是UT变换的逆变换。 
    因此,从对称阵的分解对应的映射分解来分析一个矩阵的变换特点是非常直观的。假设对称阵特征值全为1那么显然它就是单位阵,如果对称阵的特征值有个别是0其他全是1,那么它就是一个正交投影矩阵,它将m维向量投影到它的列空间中。 
    根据对称阵A的特征向量,如果A是2 * 2的,那么就可以在二维平面中找到这样一个矩形,是的这个矩形经过A变换后还是矩形: 
    这里写图片描述 
    这个矩形的选择就是让其边都落在A的特征向量方向上,如果选择其他矩形的话变换后的图形就不是矩形了!

    4、奇异值

      上面说过了特征值分解是提取矩阵特征很不错的方法,但这只是针对方阵而言的,在现实世界中大部分的矩阵并不是方针,这时描述这些普通矩阵的重要特征就会用到:奇异值分解。他是可以适应任意矩阵分解的方法: 
                   
      假设A是一个M * N的矩阵,那么得到的U是一个M * M的方阵(里面的向量是正交的,U里面的向量称为左奇异向量),Σ是一个M * N的矩阵(除了对角线的元素都是0,对角线上的元素称为奇异值),V’(V的转置)是一个N * N的矩阵,里面的向量也是正交的,V里面的向量称为右奇异向量),从图片来反映几个相乘的矩阵的大小可得下面的图片: 

    那么矩阵A的奇异值和方阵的特征值是如何对应的? 
    我们将一个矩阵AT * A,将会得到一个方阵,我们用这个方阵求特征值可以得到: 
               
    这里得到的Vi就是上面的右奇异向量,此外,我们可以得到: 
               
    这里的σi就是上面说的奇异值。ui就是上面的左奇异向量。奇异值σ跟特征值相似,在矩阵Σ中也是按从大到小的方式排列,而且σ的值减小的特别的快,在很多的情况下前10%甚至1%的奇异值之和就占了全部奇异值之和的99%以上。也就是说可以用前r个大的奇异值来近似的描述矩阵,这里定义奇异值的分解: 
               
    r是一个远远小于m和n的值,矩阵的乘法看起来是这个样子: 
     
      右边的三个矩阵相乘的结果将会是一个接近于A的矩阵,在这儿,r越接近于n,则相乘的结果越接近于A。而这三个矩阵的面积之和(在存储观点来说,矩阵面积越小,存储量就越小)要远远小于原始的矩阵A,我们如果想要压缩空间来表示原矩阵A,我们存下这里的三个矩阵:U、Σ、V就好了。

    5、奇异值分解 - SVD

      上面的特征值分解的A矩阵是对称阵,根据EVD可以找到一个(超)矩形使得变换后还是(超)矩形,也即A可以将一组正交基映射到另一组正交基!那么现在来分析:对任意M*N的矩阵,能否找到一组正交基使得经过它变换后还是正交基?答案是肯定的,它就是SVD分解的精髓所在。 
      现在假设存在M*N矩阵A,事实上,A矩阵将n维空间中的向量映射到k(k<=m)维空间中,k=Rank(A)。现在的目标就是:在n维空间中找一组正交基,使得经过A变换后还是正交的。假设已经找到这样一组正交基: 
                  {v1,v2,v3,…,vn} 
    则A矩阵将这组基映射为: 
                  {Av1,Av2,Av3,…,Avn} 
    如果要使他们两两正交,即: 
                  Avi · Avj = (Avi)TAvj = viTATAvj = 0 
    根据假设,存在: 
                  viTvj = vivj = 0 
    所以如果正交基v选择为ATA的特征向量的话,由于ATA是对称阵,v之间两两正交,那么: 
                   
    这样就找到了正交基使其映射后还是正交基了,现在,将映射后的正交基单位化,因为: 
                   
    所以有: 
                   
    所以取单位向量: 
                   
    当k < i <= m时,对u1,u2,…,uk进行扩展u(k+1),…,um,使得u1,u2,…,um为m维空间中的一组正交基,即将{u1,u2,…,uk}正交基扩展成{u1,u2,…,um}Rm空间的单位正交基,同样的,对v1,v2,…,vk进行扩展v(k+1),…,vn(这n-k个向量存在于A的零空间中,即Ax=0的解空间的基),使得v1,v2,…,vn为n维空间中的一组正交基,即: 
    在A的零空间中选择{vk+1,vk+2,…,vn}使得AvI = 0,i > k并取σ = 0则可得到: 

    继而得到A矩阵的奇异值分解: 
                   
    V是n*n的正交矩阵,U是m*m的正交矩阵,Σ是m*n的对角阵 
    现在可以来对A矩阵的映射过程进行分析了:如果在n维空间中找到一个(超)矩形,其边都落在ATA的特征向量的方向上,那么经过A变换后的形状仍然为(超)矩形! 
    vi为ATA的特征向量,称为A的右奇异向量,ui=Avi实际上为AAT的特征向量,称为A的左奇异向量。下面利用SVD证明文章一开始的满秩分解: 

    利用矩阵分块乘法展开得: 

    可以看到第二项为0,有: 
     
    令: 
     
     
    则A=XY即是A的满秩分解。

  • 相关阅读:
    nullnullConnecting with WiFi Direct 与WiFi直接连接
    nullnullUsing WiFi Direct for Service Discovery 直接使用WiFi服务发现
    nullnullSetting Up the Loader 设置装载机
    nullnullDefining and Launching the Query 定义和启动查询
    nullnullHandling the Results 处理结果
    装置输出喷泉装置(贪心问题)
    数据状态什么是事务?
    停止方法iOS CGD 任务开始与结束
    盘文件云存储——金山快盘
    函数标识符解决jQuery与其他库冲突的方法
  • 原文地址:https://www.cnblogs.com/Glucklichste/p/11184485.html
Copyright © 2011-2022 走看看