SVD分解

Catalogue
  1. 1. 1. Introduction:SVD分解(奇异值分解)
  2. 2. 2. 特征值分解
    1. 2.1. 2.1. 矩阵特征值与特征向量
    2. 2.2. 2.2. 特征分解
  3. 3. 3. 奇异值分解(SVD)
    1. 3.1. 3.1. 求解\(U\)
    2. 3.2. 3.2. 求解\(V\)
    3. 3.3. 3.3. 求解\(\Sigma\)
    4. 3.4. 3.4. 实际例子
      1. 3.4.1. 3.4.1. 例1
      2. 3.4.2. 3.4.2. 例2
    5. 3.5. 3.5. SVD分解的结论
    6. 3.6. 3.6. SVD分解的应用
    7. 3.7. 3.7. 参考资料

1. Introduction:SVD分解(奇异值分解)

奇异值分解(Singular Value Decompositionm,简称SVD)是在机器学习领域应用较为广泛的算法之一,也是学习机器学习算法绕不开的基石之一。SVD算法主要用在降维算法中的特征分解、推荐系统、自然语言处理计算机视觉等领域。(也是PCA降维的核心之一

奇异值分解(SVD)通俗一点讲就是将一个线性变换分解为两个线性变换,一个线性变换代表旋转,一个线性变换代表拉伸。

SVD是将一个矩阵分解成两个正交矩阵和一个对角矩阵,我们知道正交矩阵对应的变换是旋转变换,对角矩阵对应的变换是伸缩变换

2. 特征值分解

在学习SVD奇异值分解之前,先来看一下特征值分解

2.1. 矩阵特征值与特征向量

若有 \[ \begin{aligned} Ax=\lambda x \end{aligned} \]

其中,\(A \in R^{n \times n}\)是一个矩阵,如果上式成立,则称\(\lambda\)是矩阵\(A\)的特征值,向量\(x\)\(\lambda\)对应的特征向量

2.2. 特征分解

如果已经求出了矩阵\(A\)\(n\)个特征值\(\lambda_1 \leq \lambda_2 \cdots \leq \lambda_n\),以及这\(n\)个特征值所对应的特征向量\(w_1,w_2,\cdots , w_n\),如果这n个特征向量线性无关,则矩阵A可以用以下特征分解表示:

\[ A=W\Sigma W^{-1} \]

其中, \[W=(w_1,w_2,\cdots,w_n)\]

\[ \begin{aligned} \Sigma= \begin{pmatrix} \lambda_1 & & & \\ & \lambda_2 & & \\ & & \cdots & \\ & & & \lambda_n \end{pmatrix} \end{aligned} \]

一般情况下,会把\(W\)的n个特征向量进行归一化,即\(||w_i||_2=1\)或者是\(w_i^{T}w_i=1\),归一化之后,这n个特征向量则是标准正交基,满足\(W^TW=I\)

实际上,这个操作就是线性代数里面的对角化操作。

特征值分解有一个前提:

  • 分解的矩阵必须是方阵

对于不是方阵的矩阵,该如何进行分解? 这就是SVD的用处了

3. 奇异值分解(SVD)

对于一个非方阵的矩阵\(A_{m \times n}\)来说,其SVD分解可写成如下: \[ A=U\Sigma V^T \]

其中:

  • \(U\)\(V\)都是单位正交阵,则有\(UU^T=I\)\(VV^T=I\),其中\(U\)\(m \times m\)矩阵,\(V\)\(n\times n\)矩阵
  • \(\Sigma\)是一个\(m \times n\)矩阵,只有主对角线上的元素有值,其他元素均为0.
  • 分解可如下表示

SVD分解的主要步骤就是求解\(U,\Sigma,V^T\),接下来继续讨论如何求解

3.1. 求解\(U\)

因为==>

\[ \begin{aligned} AA^T &=(U\Sigma V^T)(U\Sigma V^T)^T \\ &=U\Sigma V^TV\Sigma^TU^T \\ &=U\Sigma \Sigma^TU^T \end{aligned} \]

\[ \begin{aligned} A^TA &=(U\Sigma V^T)^T(U\Sigma V^T) \\ &=V\Sigma^TU^TU\Sigma V^T \\ &=V\Sigma^T\Sigma V^T \end{aligned} \]

其中,这里的\(\Sigma \Sigma^T\)\(\Sigma^T \Sigma\)在矩阵维度上面不相等,但是对角线上的元素是相等的。 \[ \begin{aligned} \Sigma\Sigma^T = \left[ \begin{matrix} \sigma_1^2 & 0 & 0 & 0\\ 0 & \sigma_2^2 & 0 & 0\\ 0 & 0 & \ddots & 0 \\ 0 & 0 & 0 & \ddots \\ \end{matrix} \right]_{m\times m}\quad \Sigma^T\Sigma = \left[ \begin{matrix} \sigma_1^2 & 0 & 0 & 0\\ 0 & \sigma_2^2 & 0 & 0\\ 0 & 0 & \ddots & 0\\ 0 & 0 & 0 & \ddots\\ \end{matrix} \right]_{n\times n} \end{aligned} \]

所以==>

可以注意到,\(AA^T\)是方阵,于是对\(AA^T\)进行特征值分解,有

\[ \begin{aligned} M=(AA^T)&=W\Sigma W^{-1} \\ &=U\Sigma_u \Sigma_u^TU^T \end{aligned} \]

可得:

  • \(AA^T\)进行特征值分解之后的特征向量矩阵\(W\)就是矩阵\(A\)的右奇异向量矩阵\(U\)

即: \[ W=V \]

3.2. 求解\(V\)

于是==>

同理可得:

  • \(A^TA\)进行特征值分解之后的特征向量矩阵\(W_r\)就是矩阵\(A\)的左奇异向量矩阵\(V\)

即: \[ W_r=V \]

3.3. 求解\(\Sigma\)

因为==>

\[AA^T=U\Sigma \Sigma^TU^T\]

其中,

\[ \begin{aligned} \Sigma\Sigma^T = \left[ \begin{matrix} \sigma_1^2 & 0 & 0 & 0\\ 0 & \sigma_2^2 & 0 & 0\\ 0 & 0 & \ddots & 0 \\ 0 & 0 & 0 & \ddots \\ \end{matrix} \right]_{m\times m}= \left[ \begin{matrix} \lambda_1 & 0 & 0 & 0\\ 0 & \lambda_2 & 0 & 0\\ 0 & 0 & \ddots & 0\\ 0 & 0 & 0 & \ddots\\ \end{matrix} \right]_{m\times m} \end{aligned} \]

所以==>

  • \(\Sigma\)的元素就是\(\Sigma\Sigma^T\)的主对角线元素的开方
  • (也就是说,\(A\)的奇异值\(\sigma\)等于\(AA^T\)特征值的开方)

\[ \begin{aligned} \sigma_i=\sqrt{\lambda_i} \end{aligned} \]

3.4. 实际例子

3.4.1. 例1

3.4.2. 例2

3.5. SVD分解的结论

  • 任意的矩阵A可以分解成3个矩阵
  • 其中可得到\(U\)\(V\)两个标准正交基
  • \(\Sigma\)中的主对角线上的奇异值\(\sigma_i\)按大到小向右下角排列,值越大,表示该维度的信息重要性越大

3.6. SVD分解的应用

  • 数据降维(取奇异值大的几个维度)
  • 数据压缩(图片压缩),例子见:奇异值分解应用
  • 求解非齐次线性方程组
  • 求解齐次线性方程组最小二乘解

3.7. 参考资料