SVD分解

    翻看了许多的博客和资料,我认为讲述的透彻的就是reference当中的第一博客。接下来可能和博客上讲的以及截图都一样,其中也会加入我自己添加的一些细节,显示在括号,以及用蓝字表示中。

    奇异值分解(SVD),在许多的地方都被用到,比如求解最小二乘解,还有数据压缩等等方面。当我们看到了奇异值分解的时候,我们往往就和联想到特征值和特征向量这两个概念。那我们就先来看一下特征值分解,渐渐推导到奇异值分解。

1)特征值分解(EVD)

    首先,我们先看一个对角矩阵(即只有对角线上有元素)。


    从几何的角度,矩阵可以描述为一个变换。即用矩阵乘法将平面上的点(x, y)变换成另外一个点(3x, y)。


    这种变换的效果如下:平面在水平方向被拉伸了3倍,在竖直方向无变化。


    再看下这个矩阵


    它会产生如下的效果

                                                              

      如果我们把网格旋转45度,再观察一下。

    (这里对原博客进行一点补充,自己想的,将格网旋转45°就是相当于在原来的基础上,原始坐标X先和一个旋转矩阵相乘,这里因为是45°,所以应该是[(1/2)^(1/2),-(1/2)^(1/2);(1/2)^(1/2),(1/2)^(1/2)])


    这时候我们发现了,这个新的网格被转换的方式与原始的网格被对角矩阵转换的方式是完全一致的,也就是都在原始网格在某一方向上被拉伸了3倍。

    (这里对原博客进行一点补充,也是自己想的,就是我们先旋转了45°,也就是原始的坐标X先和旋转矩阵相乘得到旋转后的坐标,也就是上左图,接着我们再乘以了M矩阵,得到上右图,但是此时上右图旋转-45°,那么我们就可以在公式直观看出x和y的拉伸关系。于是我们再乘以一个之前45°的旋转矩阵的转置矩阵,因为旋转矩阵是一个正交矩阵,正交矩阵的逆就是正交矩阵的转置,而且旋转-45°就是乘以一个45°的旋转矩阵的逆。接着,乘了之后我们发现,最后把所有的矩阵乘完之后得到的结果就是[3x,y])

 

 

    说的更数学化一些,给定一个对称矩阵M,我们可以找到一组正交向量vi使得M vi等于vi和标量的乘积。那就是下面这个式子(上面也有一定的说明和推导):

Mvi = λivi

    这里λi是标量。从几何意义上讲,这意味着当vi乘上矩阵M时被简单地拉伸或者反射了,也可以理解为M矩阵在vi上的投影向量。因为这个性质,我们称viM的特征向量;标量λi被称为特征值。一个可以被证明的重要的事实是:对称矩阵不同的特征值对应的特征向量是正交的。如果我们把对称矩阵的特征向量和网格对齐,那么矩阵对网格的拉伸或反射的方式,与矩阵对特征向量的拉伸或反射的方式,两者是完全一致的。

2)奇异值分解(SVD)

      上面的特征值分解的A矩阵是对称阵,根据EVD可以找到一个(超)矩形使得变换后还是(超)矩形,也即A可以将一组正交基映射到另一组正交基!那么现在来分析:对任意M*N的矩阵,能否找到一组正交基使得经过它变换后还是正交基?答案是肯定的,它就是SVD分解的精髓所在。

    用向量解释这个现象:选择适当的正交的单位向量v1v2,向量Mv1Mv2也是正交的。


    (补充,我们就是为了找到对应v和u向量,且满足条件—v之间正交和u之间正交,所以Mv1和Mv2一定正交,因为与u共线)

    用u1u2来表示Mv1Mv2方向上的单位向量Mv1Mv2的长度用σ1σ2来表示量化了网格在特定方向上被拉伸的效果。σ1σ2被称为M的奇异值。


    由此,我们有

M v1 = σu1
M v2 = σu2

    现在给出矩阵M作用于向量x(点坐标)的简单描述。因为向量v1v2是正交的单位向量,我们有

x = (v1 · x) v1 + (v2 · x) v2

    这意味着(v1点乘x是一个标量)

M x = (v1 · x) M v1 + (v2 · x) M v2
M x = (v1 · x) σu1 + (v2 · x) σu2

    注意点积可以用向量的转置来计算

v · x = vx

    我们有

M x = uσ1 v1T x + uσv2T x
M = uσ1 v1T + uσ2 v2T

    通常表述成

M = U Σ VT

    其中关于奇异值。(根据另外一篇博客,推导出了奇异值的算法)

    现在假设存在M*N矩阵A,事实上,A矩阵将n维空间中的向量映射到k(k<=m)维空间中,k=Rank(A)。现在的目标就是:在n维空间中找一组正交基,使得经过A变换后还是

                                                                                 

    则A矩阵将这组基映射为:  

                                                                                                                

    如果要使他们两两正交

    根据假设,存在

    所以如果正交基v选择为A'A的特征向量的话,由于A'A是对称阵,v之间两两正交,那么

    这样就找到了正交基使其映射后还是正交基了,现在,将映射后的正交基单位化,因为

    所以有

    所以取单位向量

    由此可得

    这里U是列向量u1u2组成的矩阵,Σ是非零项为σ1 和 σ2的对角矩阵,V是列向量v1v2组成的矩阵。带有上标T的矩阵V是矩阵V的转置。

    上面描述了怎样将矩阵M分解成三个矩阵的乘积:V描述了原始空间中的正交基,U描述了相关空间的正交基,Σ描述了V中的向量变成U中的向量时被拉伸的倍数。

3)SVD求解最小二乘的方法:

    奇异值分解,是在A不为方阵时的对特征值分解的一种拓展。奇异值和特征值的重要意义相似,都是为了提取出矩阵的主要特征。
    对于齐次线性方程 A*X =0;当A的秩大于列数时,就需要求解最小二乘解,在||X||=1的约束下,其最小二乘解为矩阵A'A最小特征值所对应的特征向量。
    那么为什么是最小的特征值对应的x能够是目标函数最小证明齐次线性方程组的最小二乘问题呢?

    求解方法有两种(matlab):
    1.[V D] =eig(A'*A);D为A'*A的特征值对角矩阵,V为对应的特征向量。找到最小特征值对应的V中的特征向量即为最小二乘解。
    2.使用SVD分解矩阵A,[U S V] = svd(A); U 由 A*A'的特征向量组成,V 由 A'*A的特征向量组成,因此,奇异值矩阵S中最小的奇异值对应的V中的奇异向量即为最小二乘解。


Reference:

https://blog.csdn.net/yuxiangyunei/article/details/50114759

https://blog.csdn.net/zhongkejingwang/article/details/43053513

https://blog.csdn.net/ningyaliuhebei/article/details/45058065

https://blog.csdn.net/dsbatigol/article/details/9625211

https://blog.csdn.net/qingcaichongchong/article/details/54972406

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SVD分解(奇异值分解)是一种重要的矩阵分解方法,可以将一个矩阵分解为多个部分。在电子设计中,Verilog是一种硬件描述语言,用于描述和设计数字电路。 SVD分解可以用于优化数字电路设计中的计算问题。通过将复杂的运算转化为简单的矩阵运算,可以加快电路的速度和效率。在Verilog中,我们可以使用SVD分解来实现这种优化。 在Verilog中,我们可以使用模块化设计的思想将SVD分解的各个部分进行描述和实现。通过创建多个模块,每个模块负责一个特定的SVD分解操作,我们可以将整个过程拆分为多个小部分,提高代码的可读性和可维护性。 首先,我们需要定义输入和输出端口。输入端口包括待分解的矩阵,输出端口包括分解后得到的结果。然后,我们可以通过调用已有的Verilog库函数或自己编写的模块来实现SVD分解的各个步骤,如特征值计算、特征向量计算等。 在Verilog中,我们可以使用多种数据结构和算法来实现SVD分解。例如,我们可以使用数据流图(Data Flow Graph)来描述矩阵运算的流程,将各个运算模块连接起来,形成一个完整的SVD分解电路。 最后,我们可以使用仿真工具对Verilog代码进行测试和验证。通过输入一些测试用例,验证SVD分解的正确性和性能。 综上所述,SVD分解在Verilog中的应用可以帮助我们优化数字电路的设计和实现。通过模块化的方法,我们可以将SVD分解的各个步骤进行拆解和实现,进而提高电路的速度和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值