本篇为《深度学习》系列博客的第三篇,该系列博客主要记录深度学习相关知识的学习过程和自己的理解,方便以后查阅。

之前在看slam的时候就遇到过SVD但是没有做系统的学习,现在接触到深度学习,再次遇到了这个概念,以这篇博客做一下学习过程的记录,加深理解。

SVD奇异值分解

  • 摘要
  • 正交矩阵
    • 正交矩阵的定义
    • 正交矩阵性质
    • 正交变换
  • 特征值分解——EVD
    • 矩阵的分解
    • 矩阵的映射
  • 奇异值分解——SVD
    • SVD(Singular Value Decomposition)的数学涵义
      • 矩阵在方程运算充当的角色
      • SVD的推导
        • 二维平面中的例子
        • 对于 A m × n A_{m×n} Am×n​
          • 数学推导
          • 映射过程分析
          • 证明满秩分解
    • SVD的几何涵义
    • SVD的求解过程
      • 数学表达
      • 算法实现
        • 算法表述
        • python实现
    • SVD的具体应用
      • 纯数学例子
      • 压缩
        • 在图像压缩中的应用
      • 降维

摘要

SVD(Singular Value Decomposition, 奇异值分解)是线性代数中既优雅又强大的工具, 它揭示了矩阵最本质的变换.

用SVD可以很容易得到任意矩阵的满秩分解(SVD的推导部分会讲),用满秩分解可以对数据做压缩。

使用SVD对矩阵进行分解, 能得到代表矩阵最本质变化的矩阵元素(旋转、延伸).

相关例子:

  1. 合数能表示为若干质数之积, 分解合数能得到表示该合数的质因数;
  2. 复杂周期信号可以表示为若干简单的正弦波和余弦波之和, 使用傅里叶变换能得到表示该信号的简单波;
  3. 复杂矩阵所代表的线性变换可由若干个简单矩阵所代表的线性变换组合起来, 使用SVD能找到这些简单矩阵.

文章思路的安排:
先介绍正交矩阵,因为正交矩阵可以表示一个旋转,这是矩阵最本质变换的其中之一。
接着介绍特征值分解,作为奇异值分解的特例,引出奇异值分解,并增强对奇异值分解的理解。
从数学含义、几何含义、求解过程、应用等方面介绍奇异值分解

正交矩阵

以下参考dalao博客《奇异值分解(SVD)原理详解及推导》、《线性代数——正交矩阵》

正交矩阵的定义

如果: A A T = E AA^T=E AAT=E( E E E为单位矩阵, A T A^T AT表示“矩阵A的转置矩阵”。)或 A T A = E A^TA=E ATA=E,则n阶实矩阵 A A A称为正交矩阵。

正交矩阵性质

  1. A T A^T AT是正交矩阵
  2. A A A的各行是单位向量且两两正交
  3. A A A的各列是单位向量且两两正交
  4. ∣ A ∣ = 1 |A|=1 ∣A∣=1或-1

正交变换

正交矩阵是在欧几里得空间里的叫法,在酉空间里叫酉矩阵,一个正交矩阵对应的变换叫正交变换,这个变换的特点是不改变向量的尺寸和向量间的夹角,那么它到底是个什么样的变换呢?看下面这张图:

由向量的空间位置不变性,即在两个坐标系下,对向量的描述相等:
[ e 1 ′ e 2 ′ ] ∗ [ a ′ b ′ ] = [ e 1 e 2 ] ∗ [ a b ] \begin{bmatrix} e_1' & e_2' \end{bmatrix} * \begin{bmatrix} a' \\ b' \end{bmatrix} = \begin{bmatrix} e_1 & e_2 \end{bmatrix} * \begin{bmatrix} a \\ b \end{bmatrix} [e1′​​e2′​​]∗[a′b′​]=[e1​​e2​​]∗[ab​]
等式两边同时左乘 [ e 1 ′ e 2 ′ ] T \begin{bmatrix} e_1' & e_2' \end{bmatrix}^T [e1′​​e2′​​]T得:
[ a ′ b ′ ] = [ e 1 ′ e 2 ′ ] ∗ [ e 1 e 2 ] ∗ [ a b ] \begin{bmatrix} a' \\ b' \end{bmatrix} = \begin{bmatrix} e_1' \\ e_2' \end{bmatrix} * \begin{bmatrix} e_1 & e_2 \end{bmatrix} * \begin{bmatrix} a \\ b \end{bmatrix} [a′b′​]=[e1′​e2′​​]∗[e1​​e2​​]∗[ab​]
即:
[ a ′ b ′ ] = [ e 1 ′ ⋅ e 1 e 1 ′ ⋅ e 2 e 2 ′ ⋅ e 1 e 2 ′ ⋅ e 2 ] [ a b ] \begin{bmatrix} a' \\ b' \end{bmatrix} = \begin{bmatrix} e_1' · e_1 & e_1' · e_2 \\ e_2' · e_1 & e_2' · e_2\end{bmatrix} \begin{bmatrix} a \\ b \end{bmatrix} [a′b′​]=[e1′​⋅e1​e2′​⋅e1​​e1′​⋅e2​e2′​⋅e2​​][ab​]
由向量的内积 a ⋅ b = ∣ a ∣ ∗ ∣ b ∣ ∗ c o s < a , b > a· b = |a |*|b|*cos<a,b> a⋅b=∣a∣∗∣b∣∗cos<a,b>可得:
[ e 1 ′ ⋅ e 1 e 1 ′ ⋅ e 2 e 2 ′ ⋅ e 1 e 2 ′ ⋅ e 2 ] = [ c o s θ s i n θ − s i n θ c o s θ ] \begin{bmatrix} e_1' · e_1 & e_1' · e_2 \\ e_2' · e_1 & e_2' · e_2\end{bmatrix} = \begin{bmatrix} cosθ & sinθ \\ -sinθ & cosθ \end{bmatrix} [e1′​⋅e1​e2′​⋅e1​​e1′​⋅e2​e2′​⋅e2​​]=[cosθ−sinθ​sinθcosθ​]

可以发现上式矩阵满足正交矩阵的定义,则上式矩阵即为正交矩阵,该矩阵表示的上图的变换,即为正交变换。

其实上式矩阵亦称为旋转矩阵,我是从旋转矩阵的思路推过来。

正交阵行(列)向量之间都是单位正交向量。上面求得的是一个旋转矩阵,它对向量做旋转变换!也许你会有疑问:刚才不是说向量空间位置不变吗?怎么现在又说它被旋转了? 对的,这两个并没有冲突,说空间位置不变是绝对的,但是坐标是相对的,加入你站在 e 1 e_1 e1​上看 O A OA OA,随着 e 1 e_1 e1​旋转到 e 1 ′ e_1' e1′​,看 O A OA OA的位置就会改变。如下图:


如图,如果我选择了 e 1 ′ e_1' e1′​、 e 2 ′ e_2' e2′​作为新的标准坐标系,那么在新坐标系中 O A OA OA(原标准坐标系的表示)就变成了 O A ′ OA' OA′,这样看来就好像坐标系不动,把 O A OA OA往顺时针方向旋转了“ θ θ θ”角度,这个操作实现起来很简单:将变换后的向量坐标仍然表示在当前坐标系中。

旋转变换是正交变换的一个方面,这个挺有用的,比如在开发中需要实现某种旋转效果,直接可以用旋转变换实现。正交变换的另一个方面是反射变换,也即 e 1 ′ e_1' e1′​的方向与图中方向相反,这个不再讨论。(用到的时候再说吧!!)

总结:正交矩阵的行(列)向量都是两两正交的单位向量,正交矩阵对应的变换为正交变换,它有两种表现:旋转和反射。正交矩阵将标准正交基映射为标准正交基(即图中从 e 1 e_1 e1​、 e 2 e_2 e2​到 e 1 ′ e_1' e1′​、 e 2 ′ e_2' e2′​)

特征值分解——EVD

以下参考dalao博客《奇异值分解(SVD)原理详解及推导》

矩阵的分解

在讨论SVD之前先讨论矩阵的特征值分解(Eigen Value Decomposition, EVD),在这里,选择一种特殊的矩阵——对称阵(酉空间中叫hermite矩阵即厄米阵)。

特征值分解是奇异值分解的一种特殊情况,特殊在了他的分解矩阵是实对称矩阵,而不是一般的矩形阵。

对称阵有一个很优美的性质:它总能相似对角化,对称阵不同特征值对应的特征向量两两正交

一个矩阵能相似对角化即说明其特征子空间即为其列空间,若不能对角化则其特征子空间为列空间的子空间。

现在假设存在 m × m m×m m×m的满秩对称矩阵 A A A,它有m个不同的特征值,设特征值为:
λ i λ_i λi​
对应的单位特征向量为:
x i x_i xi​
则有:
A x 1 = λ 1 x 1 A x 2 = λ 2 x 2 A x 3 = λ 3 x 3 … … A x m = λ m x m Ax_1 = λ_1x_1 \\ Ax_2 = λ_2x_2 \\ Ax_3 = λ_3x_3 \\ …… \\ Ax_m = λ_mx_m \\ Ax1​=λ1​x1​Ax2​=λ2​x2​Ax3​=λ3​x3​…… Axm​=λm​xm​
进而:
A Q = Q ∧ Q = [ x 1 x 2 … x m ] ∧ = [ λ 1 0 … 0 0 λ 2 … 0 ⋮ ⋮ ⋮ 0 0 … λ m ] AQ = Q∧\\ Q = \begin{bmatrix} x_1 & x_2 & …& x_m \end{bmatrix} \\ ∧ = \begin{bmatrix} λ_1 & 0 & …& 0 \\ 0 & λ_2 & … & 0 \\ \vdots& \vdots & & \vdots \\ 0 & 0 & … & λ_m \end{bmatrix} AQ=Q∧Q=[x1​​x2​​…​xm​​]∧=⎣ ⎡​λ1​0⋮0​0λ2​⋮0​……… ​00⋮λm​​⎦ ⎤​

所以可得到 A A A的特征值分解(由于对称阵特征向量两两正交,所以 Q Q Q为正交阵,正交阵的逆矩阵等于其转置):
A = Q ∧ Q − 1 = Q ∧ Q T A = Q∧Q^{-1} = Q∧Q^T A=Q∧Q−1=Q∧QT
这里假设 A A A有m个不同的特征值,实际上,只要 A A A是对称阵其均有如上分解。

矩阵的映射

矩阵 A A A分解了,相应的,其对应的映射也分解为三个映射(旋转、延伸、旋转)。现在假设有 x x x向量,用 A A A将其变换到 A A A的列空间中,那么首先由 Q T Q^T QT先对 x x x做变换:
A x = Q ∧ Q T x Ax = Q∧Q^Tx Ax=Q∧QTx

Q Q Q是正交阵 Q T Q^T QT也是正交阵,所以 Q T Q^T QT对 x x x的变换是正交变换,它将 x x x用新的坐标系来表示,这个坐标系就是A的所有正交的特征向量构成的坐标系空间中找一组正交基,使得经过A变换后还是正交的。假设已经找到这样一组正交基:。比如将 x x x用 A A A的所有特征向量表示为:
x = a 1 x 1 + a 2 x 2 + a 3 x 3 + … + a m x m x = a_1x_1 + a_2x_2 + a_3x_3 + … + a_mx_m x=a1​x1​+a2​x2​+a3​x3​+…+am​xm​
则通过第一个变换就可以把 x x x表示为 [ a 1 , a 2 , . . . , a m ] T [a_1 ,a_2, ... ,a_m]^T [a1​,a2​,...,am​]T:
Q ∧ Q T x = Q ∧ [ x 1 T x 2 T ⋮ x m T ] T [ a 1 x 1 a 2 x 2 … a m x m ] = Q ∧ [ a 1 a 2 ⋮ a m ] Q∧Q^Tx = Q∧ \begin{bmatrix} x_1^T \\ x_2^T \\ \vdots \\ x_m^T \end{bmatrix}^T \begin{bmatrix} a_1x_1 & a_2x_2 & … & a_mx_m \end{bmatrix} = Q∧\begin{bmatrix} a_1 \\ a_2 \\ \vdots \\ a_m \end{bmatrix} Q∧QTx=Q∧⎣ ⎡​x1T​x2T​⋮xmT​​⎦ ⎤​T[a1​x1​​a2​x2​​…​am​xm​​]=Q∧⎣ ⎡​a1​a2​⋮am​​⎦ ⎤​

旋转矩阵的转置的意义:
如果旋转矩阵是顺时针旋转,它的转置之后就变成了逆时针旋转。

紧接着,在新的坐标系表示下,由中间那个对角矩阵对新的向量坐标换,其结果就是将向量往各个轴方向拉伸或压缩:
Q ∧ [ a 1 a 2 ⋮ a m ] = Q [ λ 1 0 … 0 0 λ 2 … 0 ⋮ ⋮ ⋮ 0 0 … λ m ] [ a 1 a 2 ⋮ a m ] = Q [ λ 1 a 1 λ 2 a 2 ⋮ λ m a m ] Q∧\begin{bmatrix} a_1 \\ a_2 \\ \vdots \\ a_m \end{bmatrix} = Q\begin{bmatrix} λ_1 & 0 & …& 0 \\ 0 & λ_2 & … & 0 \\ \vdots& \vdots & & \vdots \\ 0 & 0 & … & λ_m \end{bmatrix} \begin{bmatrix} a_1 \\ a_2 \\ \vdots \\ a_m \end{bmatrix} = Q\begin{bmatrix} λ_1a_1 \\ λ_2a_2 \\ \vdots \\ λ_ma_m \end{bmatrix} Q∧⎣ ⎡​a1​a2​⋮am​​⎦ ⎤​=Q⎣ ⎡​λ1​0⋮0​0λ2​⋮0​……… ​00⋮λm​​⎦ ⎤​⎣ ⎡​a1​a2​⋮am​​⎦ ⎤​=Q⎣ ⎡​λ1​a1​λ2​a2​⋮λm​am​​⎦ ⎤​

从上图可以看到,如果 A A A不是满秩的话,那么就是说对角阵的对角线上元素存在0,这时候就会导致维度退化,这样就会使映射后的向量落入m维空间的子空间中。

最后一个变换就是 Q Q Q对拉伸或压缩后的向量做变换,由于 Q Q Q和 Q ′ Q' Q′是互为逆矩阵,所以 Q Q Q变换是 Q ′ Q' Q′变换的逆变换。

因此,从对称阵的分解对应的映射分解来分析一个矩阵的变换特点是非常直观的。假设对称阵特征值全为1那么显然它就是单位阵,如果对称阵的特征值有个别是0其他全是1,那么它就是一个正交投影矩阵,它将m维向量投影到它的列空间中。

根据对称阵 A A A的特征向量,如果 A A A是 2 ∗ 2 2*2 2∗2的,那么就可以在二维平面中找到这样一个矩形,是的这个矩形经过 A A A变换后还是矩形:


这个矩形的选择就是让其边都落在 A A A的特征向量方向上,如果选择其他矩形的话变换后的图形就不是矩形了!

奇异值分解——SVD

以下参考dalao文章《SVD奇异值分解的数学涵义及其应用实例》

SVD(Singular Value Decomposition)的数学涵义

矩阵在方程运算充当的角色

矩阵在线性代数系统中是一个核心的概念, 其从不同的角度出发都能拥丰富的内涵. 对于矩阵 A m × n A_{m×n} Am×n​ , 当其参与运算
A x = b (1) Ax = b \tag{1} Ax=b(1)

时, 我们可以从以下三个角度看待其角色:

  1. 矩阵 A A A是线性方程组(1)的系数组成的矩阵, 其每一行是(1)中每一个方程式的系数部分, 通过分析矩阵的秩 r a n k ( A ) rank(A) rank(A)和其极大线性无关组的情况, 我们可以了解(1)的解的情况, 同时, 对于使用高斯消元法等进行求解也比较方便;
  2. 当 m > = n ∧ r a n k ( A ) m>=n∧rank(A) m>=n∧rank(A)时, 矩阵 A A A是 R n R^n Rn空间中的一个基, 在这个基上面, 有向量 x = [ x 1 , x 2 , . . . , x m ] T x=[x_1 ,x_2, ... ,x_m]^T x=[x1​,x2​,...,xm​]T, 而此向量在标准正交基上表示为 b = [ b 1 , b 2 , . . . , b m ] T b=[b_1 ,b_2, ... ,b_m]^T b=[b1​,b2​,...,bm​]T, 此时(1)隐含着一个基变换的关系, 即 A x = I b Ax=Ib Ax=Ib, I I I 为标准正交基;
  3. 矩阵 A A A本身表示一个线性变换, (1)表示其对向量 x x x进行线性变换得到向量 b b b的过程.

SVD的推导

上面的特征值分解的 A A A矩阵是对称阵,根据EVD可以找到一个(超)矩形使得变换后还是(超)矩形,也即 A A A可以将一组正交基映射到另一组正交基(怎么理解呢?EVD分解的结果是“旋转矩阵×延伸矩阵×旋转矩阵的转置”,最终的结果是矩阵A对几何图形做了延伸)那么现在来分析:对任意 m × n m×n m×n的矩阵 A A A,能否找到一组正交基使得经过它变换后还是正交基?答案是肯定的,它就是SVD分解的精髓所在(下面解释这句话)。

以下的推导都是基于这句话的,那我们应该怎么理解这句话呢?
如果我们能够找到一个标准正交基 a a a,那么我们又可以经过矩阵 A A A变换得到另一个标准正交基 b b b,这样我们就得到了矩阵分解后三个映射的其中两个旋转映射,可以达到矩阵分解的目的。

二维平面中的例子

那么上述的关于矩阵的各种角色与我们阐述SVD有什么关系呢?
当我们将矩阵视为一种线性变换时, SVD可以帮我们揭示组成该线性变换的最本质的变换, 具体地, SVD揭示了这样的一个事实: 对于任意的矩阵 A A A , 我们总能找到一组单位正交基, 使得 A A A对其进行变换之后, 得到的向量组仍然是正交的,这样的表述还是相当地晦涩, 我们不妨在二维平面中举一个例子.

设有矩阵 A A A, 其对单位正交基 v 1 , v 2 v_1,v_2 v1​,v2​(我们找到的那组正交基)进行线性变换, 得到的向量仍然是彼此正交的, 即 A v 1 , A v 2 Av_1,Av_2 Av1​,Av2​仍然是正交的. 设 A v 1 , A v 2 Av_1,Av_2 Av1​,Av2​方向上的单位向量是 μ 1 , μ 2 μ_1, μ_2 μ1​,μ2​(变换后得到那组正交基), 长度是 σ 1 , σ 2 σ_1, σ_2 σ1​,σ2​ , 则我们可得:
A v 1 = σ 1 μ 1 A v 2 = σ 2 μ 2 (3) Av_1 = σ_1 μ_1 \\ Av_2 = σ_2 μ_2 \tag{3} Av1​=σ1​μ1​Av2​=σ2​μ2​(3)

现在利用矩阵 A A A对向量 x x x进行线性变换:

  1. 我们先将向量 x x x在单位正交基 v 1 , v 2 v_1,v_2 v1​,v2​上进行表示, 即:
    x = [ v 1 v 2 ] [ v 1 T v 2 T ] x = [ v 1 v 2 ] [ v 1 T x v 2 T x ] (4) x = \begin{bmatrix} v_1 & v_2 \end{bmatrix} \begin{bmatrix} v_1^T \\ v_2^T \end{bmatrix} x \\ = \begin{bmatrix} v_1 & v_2 \end{bmatrix} \begin{bmatrix} v_1^Tx \\ v_2^Tx\end{bmatrix} \tag{4} x=[v1​​v2​​][v1T​v2T​​]x=[v1​​v2​​][v1T​xv2T​x​](4)

  2. 由(2), (3), (4), 我们有:
    A x = A [ v 1 v 2 ] [ v 1 T v 2 T ] x = [ A v 1 A v 2 ] [ v 1 T v 2 T ] x = [ σ 1 μ 1 σ 2 μ 2 ] [ v 1 T v 2 T ] x = [ μ 1 μ 2 ] [ σ 1 0 0 σ 2 ] [ v 1 T v 2 T ] x = U Σ V T ⋅ x (5) Ax = A\begin{bmatrix} v_1 & v_2 \end{bmatrix} \begin{bmatrix} v_1^T \\ v_2^T \end{bmatrix} x \\ = \begin{bmatrix} Av_1 & Av_2 \end{bmatrix} \begin{bmatrix} v_1^T \\ v_2^T \end{bmatrix} x \\ = \begin{bmatrix} σ_1 μ_1 & σ_2 μ_2 \end{bmatrix} \begin{bmatrix} v_1^T \\ v_2^T \end{bmatrix} x \\ = \begin{bmatrix} μ_1 & μ_2 \end{bmatrix} \begin{bmatrix} σ_1 & 0 \\ 0 & σ_2 \end{bmatrix} \begin{bmatrix} v_1^T \\ v_2^T \end{bmatrix} x \\ = UΣV^T·x \tag{5} Ax=A[v1​​v2​​][v1T​v2T​​]x=[Av1​​Av2​​][v1T​v2T​​]x=[σ1​μ1​​σ2​μ2​​][v1T​v2T​​]x=[μ1​​μ2​​][σ1​0​0σ2​​][v1T​v2T​​]x=UΣVT⋅x(5)

所以:
A = U Σ V T (6) A = UΣV^T \tag{6} A=UΣVT(6)

即将 A A A分解为了三个映射(旋转映射1、延伸映射、旋转映射2的转置)。

至此, 我们由对于任意的矩阵 A A A, 我们总能找到一组单位正交基, 使得 A A A对其进行变换之后, 得到的向量组仍然是正交的, 即(2)(3)出发, 得到了矩阵 A A A最终的分解形式(6). (6)表达了这样一个事实, 对于任意的矩阵 A A A , 我们总可以将其分解为一个酉矩阵 U U U, 一个对角矩阵 Σ Σ Σ和另一个酉矩阵的转置 V V V的乘积, 这便是SVD的核心内容.

对于 A m × n A_{m×n} Am×n​

数学推导

现在假设存在 m × n m×n m×n矩阵 A A A,事实上, A A A矩阵将 n n n维空间中的向量映射到 k ( k < = m ) k(k<=m) k(k<=m)维空间中, k = r a n k ( A ) k=rank(A) k=rank(A)。现在的目标就是:在n维空间中找一组正交基,使得经过A变换后还是正交的。假设已经找到这样一组正交基:
x = [ v 1 v 2 … v n ] (7) x = \begin{bmatrix} v_1 & v_2 & … & v_n \end{bmatrix} \tag{7} x=[v1​​v2​​…​vn​​](7)

则 A A A矩阵将这组基映射为:
x = [ A v 1 A v 2 … A v n ] (8) x = \begin{bmatrix} Av_1 & Av_2 & … & Av_n \end{bmatrix} \tag{8} x=[Av1​​Av2​​…​Avn​​](8)

如果要使他们两两正交,即
A v i ⋅ A v j = ( A v i ) T A v j = v i T A T A v j = 0 (9) Av_i·Av_j = (Av_i)^TAv_j = v_i^TA^TAv_j = 0 \tag{9} Avi​⋅Avj​=(Avi​)TAvj​=viT​ATAvj​=0(9)

如果正交基 v v v选择为 A T A A^TA ATA的特征向量(这里很重要,后面求解会用到)的话,由于 A T A A^TA ATA是对称阵, v v v之间两两正交,那么:
v i T A T A v j = v i T λ j v j = λ j v i T v j = λ j v i ⋅ v j = 0 (10) v_i^TA^TAv_j = v_i^Tλ_jv_j \\ = λ_j v_i^Tv_j \\ = λ_j v_i·v_j \\ = 0 \tag{10} viT​ATAvj​=viT​λj​vj​=λj​viT​vj​=λj​vi​⋅vj​=0(10)

这样就找到了正交基使其映射后还是正交基了,现在,将映射后的正交基单位化
因为:
A v i ⋅ A v i = λ i v i ⋅ v i = λ i (11) Av_i·Av_i = λ_i v_i·v_i = λ_i \tag{11} Avi​⋅Avi​=λi​vi​⋅vi​=λi​(11)

所以有:
∣ A v i ∣ 2 = λ i > = 0 (12) |Av_i|^2 = λ_i >= 0 \tag{12} ∣Avi​∣2=λi​>=0(12)

所以取单位向量:
u i = A v i ∣ A v i ∣ = 1 λ i A v i (13) u_i = \frac{Av_i}{|Av_i|} = \frac{1}{\sqrtλ_i}Av_i \tag{13} ui​=∣Avi​∣Avi​​=λ ​i​1​Avi​(13)

由此可得:
A v i = σ i u i , σ i ( 奇异值 ) = λ i , 0 < = i < = k , k = r a n k ( A ) (14) Av_i = σ_iu_i , σ_i(奇异值)=\sqrtλ_i, 0<=i<=k,k=rank(A)\tag{14} Avi​=σi​ui​,σi​(奇异值)=λ ​i​,0<=i<=k,k=rank(A)(14)

式(14)同式(3)形式相同,则我们可以这样理解奇异值:
A T A A^TA ATA的特征矩阵 V V V,经过 A A A的变换得到特征矩阵 U U U,奇异值就是在 U U U方向向量上的长度

将 [ u 1 , u 2 , … , u k ] [u_1, u_2, … , u_k] [u1​,u2​,…,uk​]正交基扩展成 [ u 1 , u 2 , … , u m ] [u_1, u_2, … , u_m] [u1​,u2​,…,um​] R m R^m Rm 空间的单位正交基。
在 A A A的零空间选取 [ v k + 1 , v k + 2 , … , v n ] [v_{k+1}, v_{k+2}, … , v_n] [vk+1​,vk+2​,…,vn​]使得 A v i = 0 Av_i=0 Avi​=0, i > k i>k i>k,并取 σ i =0 σ_i=0 σi​=0

继而可以得到A矩阵的奇异值分解:
A = U Σ V T (16) A = UΣV^T \tag{16} A=UΣVT(16)

V V V是 n × n n×n n×n的正交阵, U U U是 m × m m×m m×m的正交阵, Σ Σ Σ是 m × n m×n m×n的对角阵

映射过程分析

现在可以来对A矩阵的映射过程进行分析了:如果在n维空间中找到一个(超)矩形,其边都落在A’A的特征向量的方向上,那么经过A变换后的形状仍然为(超)矩形!

这里跟EVD的“矩阵的映射”类似,就不在赘述。

证明满秩分解

由下文的(20)(21)可以得到, v i v_i vi​为 A T A A^TA ATA的特征向量,称为 A A A的右奇异向量, u i = A v i u_i=Av_i ui​=Avi​实际上为 A A T AA^T AAT的特征向量,称为 A A A的左奇异向量。下面利用SVD证明文章一开始的满秩分解
利用矩阵分块乘法展开得:

可以看到第二项为0,有

由上图我们可以看出,这是一个满秩分解

SVD的几何涵义

以下参考dalao文章《SVD奇异值分解的数学涵义及其应用实例》

现在我们知道, 对于任意的矩阵 A A A, 我们总可以将其分解为一个酉矩阵 U U U , 一个对角矩阵 Σ Σ Σ和另一个酉矩阵的转置 V T V^T VT的乘积, 即等式(6)所表述的内容. A = U Σ V T A = UΣV^T A=UΣVT表示矩阵 A A A 所代表的线性变换可以由更简单的旋转, 拉伸变换进行合成. 这些更简单的变换是怎么进行生效的呢? 我们还是在二维平面中举例说明.

当使用矩阵 A A A对向量 x x x进行变化时, 我们可以先将向量 x x x在单位正交基 [ v 1 , v 2 ] [v_1,v_2] [v1​,v2​]上进行表示, 即(4)所表述. 我们不妨令 ξ 1 = v 1 T x , ξ 2 = v 2 T x ξ_1=v_1^Tx,ξ_2=v_2^Tx ξ1​=v1T​x,ξ2​=v2T​x, 则 ξ 1 , ξ 2 ξ_1,ξ_2 ξ1​,ξ2​是向量 x x x在单位正交基 [ v 1 , v 2 ] [v_1,v_2] [v1​,v2​]上的坐标, 即
x = [ v 1 v 2 ] [ v 1 T v 2 T ] x = [ v 1 v 2 ] [ v 1 T x v 2 T x ] = [ v 1 v 2 ] [ ξ 1 ξ 2 ] (17) x = \begin{bmatrix} v_1 & v_2 \end{bmatrix} \begin{bmatrix} v_1^T \\ v_2^T \end{bmatrix} x \\ = \begin{bmatrix} v_1 & v_2 \end{bmatrix} \begin{bmatrix} v_1^Tx \\ v_2^Tx\end{bmatrix} \\ =\begin{bmatrix} v_1 & v_2 \end{bmatrix} \begin{bmatrix} ξ_1 \\ ξ_2\end{bmatrix}\tag{17} x=[v1​​v2​​][v1T​v2T​​]x=[v1​​v2​​][v1T​xv2T​x​]=[v1​​v2​​][ξ1​ξ2​​](17)

由(6), (7)我们有
A x = U Σ V T x = [ μ 1 μ 2 ] [ σ 1 0 0 σ 2 ] [ v 1 T v 2 T ] x = [ μ 1 μ 2 ] [ σ 1 0 0 σ 2 ] [ v 1 T v 2 T ] [ v 1 v 2 ] [ ξ 1 ξ 2 ] (18) Ax= UΣV^Tx \\ = \begin{bmatrix} μ_1 & μ_2 \end{bmatrix} \begin{bmatrix} σ_1 & 0 \\ 0 & σ_2 \end{bmatrix} \begin{bmatrix} v_1^T \\ v_2^T \end{bmatrix} x \\ = \begin{bmatrix} μ_1 & μ_2 \end{bmatrix} \begin{bmatrix} σ_1 & 0 \\ 0 & σ_2 \end{bmatrix} \begin{bmatrix} v_1^T \\ v_2^T \end{bmatrix} \begin{bmatrix} v_1 & v_2 \end{bmatrix} \begin{bmatrix} ξ_1 \\ ξ_2\end{bmatrix} \tag{18} Ax=UΣVTx=[μ1​​μ2​​][σ1​0​0σ2​​][v1T​v2T​​]x=[μ1​​μ2​​][σ1​0​0σ2​​][v1T​v2T​​][v1​​v2​​][ξ1​ξ2​​](18)

现在我们仔细地来分析(8)中各矩阵的具体操作效果.


如上式所示, 矩阵 A A A对向量 x x x进行线性变换, 其先将向量 x x x用单位正交基 V V V进行表示. 然后使用酉矩阵 V T V^T VT进行旋转, 由酉矩阵的性质我们可知 V V T = V T V = I VV^T=V^TV=I VVT=VTV=I , 所以旋转之后我们可得到标准正交基 I I I. 然后使用矩阵 Σ Σ Σ对标准正交基 I I I进行拉伸, 使其分别拉伸 σ 1 , σ 1 σ_1, σ_1 σ1​,σ1​倍的长度. 最后再使用酉矩阵 U U U对拉伸之后的正交基进行旋转, 得到最终的基, 从而得到最终的向量为
A x = [ σ 1 μ 1 σ 2 μ 2 ] [ ξ 1 ξ 2 ] = ξ 1 σ 1 μ 1 + ξ 2 σ 2 μ 2 (19) Ax= \begin{bmatrix} σ_1μ_1 & σ_2μ_2 \end{bmatrix} \begin{bmatrix} ξ_1 \\ ξ_2\end{bmatrix} \\ =ξ_1σ_1μ_1+ξ_2σ_2μ_2 \tag{19} Ax=[σ1​μ1​​σ2​μ2​​][ξ1​ξ2​​]=ξ1​σ1​μ1​+ξ2​σ2​μ2​(19)

上述过程可表示为下图

通过SVD, 我们找到了能代表矩阵 A A A作为线性变换时最本质的操作. 而 σ 1 , σ 1 σ_1, σ_1 σ1​,σ1​就是所谓的奇异值, 表示对标准正交基各个轴进行拉伸的程度.

SVD的求解过程

数学表达

以下参考dalao文章《SVD奇异值分解的数学涵义及其应用实例》

由(6)我们知道SVD能使矩阵 A A A进行分解, 现在由 A = U Σ V T A = UΣV^T A=UΣVT出发我们来构造矩阵 U , Σ , V U,Σ,V U,Σ,V, 具体地, 我们有
A A T = ( U Σ V T ) ( U Σ V T ) T = U Σ V T V Σ T U T = U Σ 2 U T (20) AA^T = (UΣV^T)(UΣV^T)^T \\ = UΣV^TVΣ^TU^T \\ = UΣ^2U^T \tag{20} AAT=(UΣVT)(UΣVT)T=UΣVTVΣTUT=UΣ2UT(20)
A T A = ( U Σ V T ) T ( U Σ V T ) = V Σ T U T U Σ V T = V Σ 2 V T (21) A^TA = (UΣV^T)^T(UΣV^T) \\ = VΣ^TU^TUΣV^T \\ = VΣ^2V^T \tag{21} ATA=(UΣVT)T(UΣVT)=VΣTUTUΣVT=VΣ2VT(21)

这里说明一下为什么是 Σ 2 Σ^2 Σ2,这里的 Σ Σ Σ是满秩分解的结果,其主对角线元素为奇异值,不含有分块矩阵 0 0 0,所以这是一个 k × k k×k k×k阶的矩阵。

由实对称矩阵必可正交对角化(EVD), 即
A = Q ∧ Q − 1 = Q ∧ Q T (22) A = Q∧Q^{-1} = Q∧Q^T \tag{22} A=Q∧Q−1=Q∧QT(22)

其中矩阵 Q Q Q为酉矩阵, 即满足 Q T = Q − 1 Q^T=Q^{-1} QT=Q−1 . 矩阵 ∧ = d i a g ( λ 1 , λ 2 , … , λ n ) ∧=diag(λ_1,λ_2,…, λ_n) ∧=diag(λ1​,λ2​,…,λn​)为矩阵 A A A的特征值所组成的对角矩阵. 而矩阵 A A T , A T A AA^T,A^TA AAT,ATA是实对称矩阵, 矩阵 U , V U,V U,V是酉矩阵, 矩阵 Σ 2 Σ^2 Σ2是对角矩阵, 所以由(20), (21), (22), 我们对矩阵 A A T , A T A AA^T,A^TA AAT,ATA进行正交对角化, 即可得到矩阵 U , V U,V U,V. 再由
A v i = σ i u i (23) Av_i = σ_iu_i\tag{23} Avi​=σi​ui​(23)

得到:
σ i = A v i u i (24) σ_i = \frac{Av_i}{u_i}\tag{24} σi​=ui​Avi​​(24)

由(24)我们便可得到矩阵 Σ Σ Σ. 由(20), (21), (22), (24)即可得完整的SVD分解.

算法实现

算法表述

以下参考dalao博客《SVD(奇异值分解)Python实现》

据上一小节,对式(20)和式(21)做特征值分解,即可得到奇异值分解的结果。但是样分开求存在一定的问题,由于做特征值分解的时候,特征向量的正负号并不影响结果,比如,我们利用式(20)和(21)做特征值分解
A A T u i = σ i u i o r A A T ( − u i ) = σ i ( − u i ) A T A v i = σ i v i o r A T A ( − v i ) = σ i ( − v i ) (25) AA^Tu_i = σ_iu_i \quad or \quad AA^T(-u_i) = σ_i(-u_i) \\ A^TAv_i = σ_iv_i \quad or \quad A^TA(-v_i) = σ_i(-v_i) \tag{25} AATui​=σi​ui​ orAAT(−ui​)=σi​(−ui​)ATAvi​=σi​vi​ orATA(−vi​)=σi​(−vi​)(25)

如果在计算过程取,取上面的 u i u_i ui​组成左奇异矩阵

SVD奇异值分解(标题重复率过高)相关推荐

  1. HTML基础标签——一直标题重复率太高,强迫症看着是真难受

    title <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF- ...

  2. 2篇word文档比较重复率_论文深耕 | 论文重复率太高怎么办?7个降重技巧收好了!...

    Hello! 这是你与「大学生科研竞赛」的第 25 次相遇. 不知道从什么时候开始,我们的网络社区被各种关于论文降重.论文查重.论文改重的知识所包围.相信每个上了大学的朋友或多或少都会接触到这方面的内 ...

  3. 0pp0r11如何更改语言_如何写才能避免重复率过高呢?

    对于很多大学生而言毕业论文的写作都是非常艰难的一关,很多同学都不知道该如何去写论文,也不了解论文查重是怎么弄的,所以很多写完论文后依然不能合格的,主要就是论文重复率不符合要求.毕业论文该如何写才能避免 ...

  4. 硕士论文重复率太高了怎么办

    我们都知道大学生必须写一篇论文,无论他们是专家还是大学生.事实上,必须写出硕士论文.硕士论文相对要求较高.这要求学生合理地降低硕士论文的验证率,那么如何处理重复率太高? 不同的高校对本科毕业论文考试费 ...

  5. Codeforces Round #643 (Div. 2)-C. Count Triangles(差分,前缀和)(避免标题重复率的小括号)

    题目链接 题意: 给你a,b,c,d,保证a<=b<=c<=d,问你有多少个x,y,z符合a<=x<=b<=y<=c<=z<=d,并且x,y,z能 ...

  6. seo文章重复率高不利于收录

    内容是一个网站灵魂, 有句话说的很好:一切以您的内容开始和结束.内容为王,不是吹出来的,而是由千千万万的站长朋友所验证过的.一个网站如果没有内容,就没有可读性而言了,想要让更多的人对你网站有好感,就要 ...

  7. 2篇word文档比较重复率_本科论文写作重复率高的原因,毕业论文降重技巧总结!...

    论文重复率的问题,是大学高等院校都比较关心的一点,大学生在论文写完以后,都要经过知网论文检测,在查看重复报告的时候,无法直视,因为论文重复率提高啦.经过几次论文降重修改还是没法降低论文重复率.那么论文 ...

  8. 产生论文高重复率的原因及降重方法

    一.产生论文高重复率的原因 你所写的内容大多都是直接在网上抄袭的,这样的直接复制粘贴造成雷同,没有分析的必要,不在讨论之列.这样的论文在提交到查重检测时,查重系统的数据库其实早已收录过其中的内容了,所 ...

  9. 如何避免撰写出高重复率论文

    ​现在论文抄袭.学术打假已经成为重点关注的话题.例如最近很火的翟天临和刘梦洁的学术不端事件.一篇优质的论文需要多方面的构成,选题.架构.论述.字数.排版等等,还有一个指标你不能忽视,也无法逃避.那就是 ...

最新文章

  1. java 判断是否为邮箱_Java判断邮箱是否存在 有返回值
  2. SpringCloud断路器hystrix
  3. Isometric Game 及译法漫谈
  4. 【C#】【Log】Common.Logging.MultipleLogger及ETWLoggerd研究
  5. 2020年十大机器学习框架
  6. zabbix_agentd.conf配置文件详解
  7. Flutter之Decoration(边框、圆角、阴影、形状、渐变、背景图像等)
  8. mysql删除默认密码_修改mysql默认密码方法
  9. python学习笔记三一 函数学习
  10. 2知识图谱的生命周期
  11. C/C++知识分享番外:如何申请一个腾讯地图用户Key?
  12. matlab排序 第二条件,科学网—【MATLAB技术贴】矩阵多条件排序 - 崔健的博文
  13. 【报告分享】中国城市人工智能发展指数报告.pdf(附下载链接)
  14. “梧桐杯”中国移动大数据应用创新大赛 - 智慧城市赛道baseline
  15. 深入学习js之——词法作用域和动态作用域
  16. etc profile 的使用
  17. jQuery基础知识梳理(含中文文档,自己的理解和代码注释)
  18. bxp中好用的的文章(合适编程的人)(转)
  19. 乒乓球单循环赛_乒乓球单循环比赛规则
  20. 如何用getevent查看TouchPanel上报数据和如何抓取framework层input事件相关的日志

热门文章

  1. WiFi、WLAN的区别以及深入探索理解802.11协议
  2. 区块链大本营的定位宣言——让区块链回归技术和应用的本质
  3. DNS无法解析IP_AliDNS下载-AliDNS阿里DNS一键设置工具3.8.5.2免费版
  4. hyperf之consul
  5. 【附源码】计算机毕业设计java养老机构管理信息系统设计与实现
  6. 推荐系统7—基于标签的推荐系统
  7. 两个页面之间通过url地址栏进行传值
  8. ES6的 for of 循环详解
  9. 【JUnit】作自己的测试工具MyJUnit
  10. m1芯片安装Oracle11g数据库