【Math for ML】矩阵分解(Matrix Decompositions) (下)

【Math for ML】矩阵分解(Matrix Decompositions) (上)html

I. 奇异值分解(Singular Value Decomposition)

1. 定义

Singular Value Decomposition (SVD)是线性代数中十分重要的矩阵分解方法,被称为“线性代数的基本理论”,由于它不只能够运用于全部矩阵(不像特征值分解只能用于方阵),并且奇异值老是存在的。app

  • SVD定理dom

    设一个矩阵\(A^{m×n}\)的秩为\(r∈[0,min(m,n)]\),矩阵\(A\)的奇异值分解形式以下:
    \[A=U\Sigma V^T \tag{1.1.1}\]spa


    其中\(U∈R^{m×m}\)是一个正交矩阵(即列向量\(u_i,i=1,...,m\)互相正交),\(V∈R^{n×n}\)也是一个正交矩阵(即列向量\(v_i,i=1,...,n\)互相正交),\(\Sigma\)是一个\(m×n\)的矩阵,且知足\[\Sigma_{ii}=\sigma_i≥0 \\ \Sigma_{ij}=0,i≠j\]3d

上面的\(\sigma_i\)称为奇异值(singular values),\(u_i\)称为左奇异值(left-singular values),\(v_i\)称为右奇异值(right-singular values)。另外一般默认有\(\sigma_1≥...≥\sigma_r≥0\)htm

注意:矩阵\(A\)是一个长方形矩阵,不必定是方阵,另外\(\Sigma\)和矩阵\(A\)的维度相同,而且其包含一个对角子矩阵(diagonal submatrix)。blog

2. 图解SVD

对于奇异值分解能够从两个角度进行理解:一是将SVD视为对基向量组(bases),即坐标系的一顺序变换,二是将SVD视为对于数据点的变换。排序

通常来讲要让矩阵\(A\)做用于另外一个矩阵,都是左乘\(A\),因此由公式(1)可知道首先是\(V^T\),而后是\(\Sigma\),最后是矩阵\(U\)变换。因此矩阵\(A\)的变换其实是通过了三个步骤,以下图所示(为方便理解使用了二维和三维图像进行说明):get

假设左上角的单位圆是在\(R^n\)空间,其标准基用\(B=[v_1,v_2]\)表示。左下角的圆也在\(R^n\)空间里,其标准基用\(\tilde{B}=[e_1,e_2]\)表示,右下角的圆在\(R^m\)空间里,其标准基用\(\tilde{C}\)表示。右上角的圆在\(R^m\)空间里。it

  • 由左上角到左下角:能够很清楚的看到\(V^T∈R^{n×n}\)的做用是对最开始的坐标轴(或标准基)(\(B\))还原成canonical basis(\(\tilde{B}\))。因此\(V^T\)的做用是将坐标轴由\(B\)转变成\(\tilde{B}\)
  • 由左下角到右下角:通过\(\Sigma\)矩阵变换后从\(R^n\)空间转换到了\(R^m\)空间。上图是从二维空间变成了三维空间,即增长了z轴。固然维度也能够减小。此外单位圆仍是处在\([e_1,e_2]\)空间内(即\(x,y\)轴组成的空间内),并且还会根据奇异值的大小作相应比例的伸缩。
  • 右下角到右上角: 矩阵\(U\)继续对\([e_1,e_2]\)基作变换,增长的那个维度(z轴)方向不作变化。

下图更加形象地展现了奇异值分解的做用,变换过程和上面同样,故再也不赘述:

3. SVD计算

本小节内容不证实SVD的存在性。

在介绍SVD如何计算以前,首先回顾一下【Math for ML】矩阵分解(Matrix Decompositions) (下)中介绍过任何对称矩阵都能对角化,其公式以下:
\[S=S^T=PDP^T\]
因此一个对称矩阵的奇异值分解是十分类似的,即
\[S=U\Sigma V^T\]
对比以后可知有\(U=P,V=P,\Sigma=D\)

另外咱们还须要知道的是对于任意矩阵\(A∈R^{m×n}\),其转置矩阵和其自己相乘以后获得的矩阵都是对称矩阵,即\(A^TA∈R^{n×n}\)\(AA^T∈R^{m×m}\)均为对称矩阵。(证实略)

接下来结合SVD公式给出对任意矩阵\(A∈R^{m×n}\)SVD计算的推导过程:

  • 计算\(V\)

已知\(A^TA\)可做以下对角化运算,且其特征值\(λ_i≥0\)
\[ \begin{align} A^TA=PDP^T=P \left[ \begin{matrix} λ_1 & \cdots & 0 \\ \vdots & \ddots & \vdots \\ 0 & \cdots & λ_n \end{matrix} \right] P^T \tag{1.3.1} \\ \end{align} \]

由于任何矩阵均可作奇异值分解,故有
\[ A^TA=(U\Sigma V^T)^T(U\Sigma V^T)=V\Sigma^TU^TU\Sigma V^T \tag{1.3.2} \]

由于\(U\)为正交矩阵,因此\(U^TU=I\),因此(1.3.2)式进一步简化可得
\[ \begin{align} A^TA=V\Sigma^T\Sigma V^T=V \left[ \begin{matrix} \sigma_1^2 & \cdots & 0 \\ \vdots & \ddots & \vdots \\ 0 & \cdots & \sigma_n^2 \end{matrix} \right] V^T \tag{1.3.3} \\ \end{align} \]

由(1.3.1)和(1.3.3)可得
\[ V=P \\ \sigma_i^2=\lambda_i \tag{1.3.4} \]

因此任意矩阵\(A\)的右奇异矩阵\(V\)\(A^TA\)的特征矩阵\(P\)

  • 计算\(U\)

和求\(V\)相似,这里再也不赘述。\(U\)即为\(AA^T\)的特征矩阵。

  • 计算\(\Sigma\)

注意上面两步中已经求出了\(\sigma_i^2\),接下来要作的就是把上面所求出的\(\sigma_i^2\)从大到小排序并开根号,且\(\Sigma\)要与\(A\)的维度保持一致

具体的SVD计算示例可参见奇异值分解(SVD)计算过程示例

4. 特征值分解(EVD) vs. 奇异值分解(SVD)

下面对特征值分解\(A=PDP^{-1}\)和奇异值分解\(A=U\Sigma V^T\)做以下总结和对比:

  • SVD对于任意矩阵都存在;而EVD只能在n阶方阵的基础上才能被定义,并且只有当方阵满秩,即有n个独立的特征向量条件下才能够作特征值分解
  • 特征值分解后获得的矩阵\(P\)没必要须是正交矩阵,也就是说\(P\)能够起到伸缩和旋转的做用;而SVD中的\(U,V\)矩阵都必须是正交矩阵,因此这两个矩阵只能起到旋转变换的做用,起伸缩变换做用的是矩阵\(\Sigma\)
  • 特征值分解和奇异值分解都由如下三个线性映射步骤组成:
    1.Change of basis in the domain
    2.Independent scaling of each new basis vector and mapping from domain to co-domain
    3.Change of basis in the co-domain



MARSGGBO原创




2018-12-21

相关文章
相关标签/搜索