SVD分解的应用

定义: A ∈ C r m × n , r > 0 A\in C_{r}^{m\times n},\quad r>0 ACrm×n,r>0, A H A A^{H}A AHA的特征值为
λ 1 ≥ λ 2 ⋯ ≥ λ r   λ r + 1 = ⋯ = λ n = 0 \lambda_{1}\geq \lambda_{2}\cdots \geq \lambda_{r}\> \lambda_{r+1}=\cdots=\lambda_{n}=0 λ1λ2λrλr+1==λn=0
则称 σ = λ i ( i = 1 , 2 , ⋯ n ) \sigma =\sqrt{\lambda_{i}}(i=1,2,\cdots n) σ=λi (i=1,2,n) A A A的奇异值;当 A A A为零矩阵时,它的奇异值都是0.

定义: A ∈ C r m × n , r > 0 A\in C_{r}^{m\times n},\quad r>0 ACrm×n,r>0,则存在 m m m阶酉矩阵和 n n n阶酉矩阵 V V V,使得
U H A V = [ Σ O O O ] U^{H}AV=\begin{bmatrix} \Sigma&O \\ O& O \end{bmatrix} UHAV=[ΣOOO]
其中 Σ = d i a g ( σ 1 , σ 2 , ⋯   , σ r ) \Sigma=diag(\sigma_{1},\sigma_{2},\cdots,\sigma_{r}) Σ=diag(σ1,σ2,,σr),而 σ i ( i = 1 , 2 , ⋯   , r ) \sigma_{i}(i=1,2,\cdots,r) σi(i=1,2,,r)为矩阵 A A A的全部非零奇异值。

对 以 上 的 说 明 解 释 : \color{red}{对以上的说明解释:}

1. H H H表示的意思和转置 T T T类似,只是 H H H当矩阵 A A A为虚数矩阵时应用,由于我们大多时候用的都是实数矩阵,所以在这里可把 H H H当作 T T T;酉矩阵其实也是相对于复数矩阵来定义的,在这里可以看作就是正交矩阵。以下都用 T T T代替 H H H

2. A T A A^{T}A ATA是实对称矩阵,那么它是半正定的,则它的特征值 λ i ≥ 0 \lambda_{i}\geq 0 λi0,即特征值为非负数。

要判定一个矩阵是半正定,用 x T A T A x = ( A x ) T A x = ∥ A x ∥ 2 ≥ 0 x^{T}A^{T}Ax=(Ax)^{T}Ax=\begin{Vmatrix} Ax \end{Vmatrix}^{2}\geq 0 xTATAx=(Ax)TAx=Ax20,那么 A T A A^{T}A ATA半正定。

3.为何特征值 λ r + 1 \lambda_{r+1} λr+1之后都是0呢?

因为 R ( A T A ) = R ( A ) = r R(A^{T}A)=R(A)=r R(ATA)=R(A)=r,且有 A T A = P − 1 Λ P = P − 1 ( λ 1 λ 2 ⋱ λ n ) P A^{T}A=P^{-1}\Lambda P=P^{-1}\begin{pmatrix} \lambda_{1}& & &\\ & \lambda_{2}& &\\ & & \ddots&\\ & & &\lambda_{n} \end{pmatrix}P ATA=P1ΛP=P1λ1λ2λnP
因为 P P P是可逆矩阵,即满秩矩阵,所以 R ( A T A ) = R ( Λ ) = r R(A^{T}A)=R(\Lambda)=r R(ATA)=R(Λ)=r(为什么呢?因为矩阵的初等变换不改变矩阵的秩, P − 1 和 P P^{-1}和P P1P相当于初等行变换和初等列变换),所以 λ r + 1 \lambda_{r+1} λr+1之后特征值为0

图像压缩算法

U T A V = [ Σ O O O ] U^{T}AV=\begin{bmatrix} \Sigma &O\\ O&O \end{bmatrix} UTAV=[ΣOOO]
U U T A V V T = U [ Σ O O O ] V T UU^{T}AVV^{T}=U\begin{bmatrix} \Sigma &O\\ O&O \end{bmatrix}V^{T} UUTAVVT=U[ΣOOO]VT
因为 U U T = V V T = E UU^{T}=VV^{T}=E UUT=VVT=E,则
A m × n = ( u 1 u 2 ⋯ u m ) ( σ 1 0 ⋯ 0 0 ⋱ ⋱ 0 ⋮ ⋮ σ r ⋮ 0 0 ⋯ 0 ) m × n ( v 1 T v 2 T ⋮ v n T ) = σ 1 u 1 v 1 T + σ 2 u 2 v 2 T + ⋯ + σ r u r v r T A_{m\times n}=\begin{pmatrix} u_{1}&u_{2} &\cdots &u_{m} \end{pmatrix}\begin{pmatrix} \sigma_{1}&0 & \cdots&0\\ 0& \ddots&\ddots &0\\ \vdots&\vdots &\sigma_{r} &\vdots\\ 0&0 &\cdots &0 \end{pmatrix}_{m\times n}\begin{pmatrix} v_{1}^{T}\\v_{2}^{T}\\\vdots\\v_{n}^{T} \end{pmatrix}=\sigma_{1}u_{1}v_{1}^{T}+\sigma_{2}u_{2}v_{2}^{T}+\cdots+\sigma_{r}u_{r}v_{r}^{T} Am×n=(u1u2um)σ10000σr000m×nv1Tv2TvnT=σ1u1v1T+σ2u2v2T++σrurvrT

取前 k k k项,
e r r o r = 1 − ∑ i = 1 k σ i ∑ i = 1 r σ i error=1-\frac{\sum_{i=1}^{k}\sigma_{i}}{\sum_{i=1}^{r}\sigma_{i}} error=1i=1rσii=1kσi

那么保存这幅图像需要多少个参数呢?根据 u u u v v v向量的维度,可以确定需要 r + r m + + r n = r ( m + n + 1 ) r+rm++rn=r(m+n+1) r+rm++rn=r(m+n+1),在进行 S V D SVD SVD之前,需要 m × n m\times n m×n个参数.

若我们只取前 k k k项,则只需要 k ( m + n + 1 ) k(m+n+1) k(m+n+1)个参数,那么可得压缩率为
r a t e = k ( m + n + 1 ) m × n rate = \frac{k(m+n+1)}{m\times n} rate=m×nk(m+n+1)

举例:

SVD算法的应用

由图可知,保留的参数越多,图片越清晰,精度越高。

深度学习加速

在深度学习中,用得最多的就是矩阵的乘法,如何加快矩阵乘法的运算速度,可通过 S V D SVD SVD分解来加速训练。
A m × n = σ 1 u 1 v 1 T + σ 2 u 2 v 2 T + ⋯ + σ r u r v r T A_{m\times n}=\sigma_{1}u_{1}v_{1}^{T}+\sigma_{2}u_{2}v_{2}^{T}+\cdots+\sigma_{r}u_{r}v_{r}^{T} Am×n=σ1u1v1T+σ2u2v2T++σrurvrT
假设有矩阵 A 200 × 100 A_{200\times 100} A200×100,取前 10 10 10
A 200 × 100 = σ 1 u 1 v 1 T + σ 2 u 2 v 2 T + ⋯ ≈ ( u 1 , u 2 , ⋯   , u 10 ) 200 × 10 ( σ 1 ⋱ σ 10 ) ( v 1 T v 2 T ⋮ v 10 T ) 10 × 100 = M 200 × 10 N 10 × 100 A_{200\times 100}=\sigma_{1}u_{1}v_{1}^{T}+\sigma_{2}u_{2}v_{2}^{T}+\cdots\approx\begin{pmatrix} u_{1},u_{2},\cdots,u_{10} \end{pmatrix}_{200\times 10}\begin{pmatrix} \sigma_{1}& &\\ & \ddots&\\ & &\sigma_{10} \end{pmatrix}\begin{pmatrix} v_{1}^{T}\\v_{2}^{T}\\\vdots\\v_{10}^{T} \end{pmatrix}_{10\times 100} \\=M_{200\times 10}N_{10\times 100} A200×100=σ1u1v1T+σ2u2v2T+(u1,u2,,u10)200×10σ1σ10v1Tv2Tv10T10×100=M200×10N10×100

那么现在计算矩阵乘法 A 200 × 100 X 100 × 1 A_{200\times 100}X_{100\times 1} A200×100X100×1,需要算 200 × 100 200\times 100 200×100次乘法

若使用 S V D SVD SVD取前 10 10 10项, M 200 × 10 N 10 × 100 X 100 × 1 M_{200\times 10}N_{10\times 100}X_{100\times 1} M200×10N10×100X100×1 10 × 100 + 10 × 200 = 3000 10\times 100+10\times 200=3000 10×100+10×200=3000次乘法。

S V D SVD SVD加速可用于移动端深度学习训练.

相关文章:

  • 2021-06-25
  • 2022-12-23
  • 2021-10-11
  • 2022-12-23
  • 2021-11-27
  • 2021-09-20
  • 2021-09-30
猜你喜欢
  • 2021-09-25
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-15
相关资源
相似解决方案