数学——EVD与SVD

这个博客介绍特征值分解(Eigen Value Decomposition,EVD)和奇异值分解(Singular Value Decomposition), 可以当作机器学习的补充材料。 SVD在线性代数中是一个非常重要的东西。Strang曾经说过:它远远没有得到它应该有的名气。在考研的线性代数中也从来没有见过SVD的身影,不过在原来在做一些图像处理相关的程序时候,经常用到OpenCV中的SVD。

Theory

SVD和对角化一个矩阵紧密连接在一起,回想一下,如果有一个实对称矩阵An×nA_ {n \times n},则有一个正交矩阵VV和一个对角矩阵DD,使得A=VDVTA = VDV^T。这里VV的每一列对应AA的特征值,形成一个n\mathbb{R}^n空间的正交基,而DD的对角元素是DD的特征值。这个就是EVD,eigenvalue decomposition。

对于SVD来说,我们有一个任意的实矩阵Am×nA_ {m \times n},有两个正交矩阵:UUVV以及一个对角矩阵Σ\Sigma,使得A=UΣVTA = U \Sigma V^T。这种情况下,UUm×mm\times m矩阵,而VVn×nn \times n矩阵,因此Σ\SigmaAA的形状一样,是m×nm\times n,不过它只有对角元素非零。Σ\Sigma的对角元素,Σii=σi\Sigma_ {ii} = \sigma_i,可以被安排成非负以及递减的顺序,其中如果σi>0\sigma_i>0,它是AA的奇异值,而U,VU,V的列向量分别是AA的左右奇异向量。

我们可以把矩阵看作一个线性转换,通过这个想法来进一步发现EVD和SVD之间的相似之处。 ### EVD ### 对于一个实对称矩阵AA,这个转换把一个n\mathbb{R}^n向量依然转换成n\mathbb{R}^n为向量,也就是domain和codomain都是n\mathbb{R}^n。另外提一下,假如转换后对应的元素为T(x)T(x),则成T(x)T(x)为一个image,而所有image的集合称为rangerangeVV题提供了一个非常好的正交基,如果一个n\mathbb{R}^n向量被这个正交基来表示,我们也可以看到,这个转换扩大了一些这个单位正交基中的成分,对应的就是较大的特征值σi\sigma_i。 我希望可以举个例子来帮助理解,假如向量xnx \in \mathbb{R}^n: Ax=VΣVTx=[v1vn][σ100σn][v1TvnT]x=[σ1v1σnvn][v1TxvnTx]=σ1v1v1Tx+...+σnvnvnTx \begin{aligned} Ax &= V \Sigma V^Tx\\ &= \begin{bmatrix} v_1 & \cdots & v^n\\ \end{bmatrix}\begin{bmatrix} \sigma_1 &\cdots& 0\\ \vdots & \ddots & \vdots\\ 0 & \cdots & \sigma_n \end{bmatrix}\begin{bmatrix} v_1^T\\ \vdots\\ v_n^T \end{bmatrix}x \\ &= \begin{bmatrix} \sigma_1v_1&\cdots&\sigma_nv_n \end{bmatrix} \begin{bmatrix} v_1^Tx\\ \vdots\\ v_n^Tx \end{bmatrix}\\ &=\sigma_1v_1v_1^Tx + ...+ \sigma_nv_nv_n^Tx \end{aligned}

观察上面的展开,实际上我们可以发现的是,VTXV^TX得到的,实际上是在VV这个正交基下,xx的“坐标值”,而VΣV\Sigma实际上是经过转换后的坐标轴,放大了对应特征值的倍数。从这里,我们就可以很清楚得看到A这个转换在做什么。 ### SVD ### 现在我们来看看,SVD的解释。同样我们把任意一个实矩阵AA看作转换,它把n\mathbb{R}^n向量,转化为m\mathbb{R}^m,这意味着这个转换domaindomainn\mathbb{R}^n,而codomaincodomainm\mathbb{R}^m,而image ∈ range ∈ m\mathbb{R}^m。因此对于domain和range都搞一个单位正交基才是比较合理的,而U,VU,V恰好提供了这样的基,分别用来表示domain的向量和range的向量。那么这个转换就和上面一样,变得比较容易理解了,它同样放大了一些成分,对应的是singular value的大小,同时抛弃了一些成分,对应的是singular value为0的方向。SVD告诉我们怎样选择正交基,使得转换被表示成最简单的方式————对角的形式。

那么我们如何选择得到这些基?想要使中间矩阵的形式是对角的,很容易,只要让Avi=σiuiAv_i = \sigma_iu_i即可。

为了理解这个,我们假设mnm \geq n,那么如果Avi=σiuiA v_i = \sigma_i u_i,则: AV=A[v1vn]=[Av1Avn]=[σ1u1σnun]=Um×nΣn×n \begin{aligned} AV &= A\begin{bmatrix} v_1&\cdots v_n \end{bmatrix}\\ &= \begin{bmatrix} Av_1 & \cdots &Av_n \end{bmatrix}\\ &= \begin{bmatrix} \sigma_1 u_1 & \cdots & \sigma_n u_n \end{bmatrix}\\ &= U_ {m\times n}\Sigma_ {n\times_n} \end{aligned}

这保证了Σ\Sigma的对角化,不过我们很容易发现的是上面的系数不对,μ\mu并不满足基的定义,它没有到达mm个,而Σ\Sigma也随之不是m×nm\times n形状的矩阵。

如果我们先保证VV是单位正交基了,那么Um×mU_ {m\times m}中很多维度是没有什么意义的,因此将UU扩充为基,并且将Σ\Sigma矩阵也对上,对应的元素置0即可。

如果m<nm< n,则是一样的道理,只不过这个维度被mm限制住了。而且实际上这个Σ\Sigma还被AA的秩限制住,毕竟(AB)min((A),(B))\mathbb{R}(AB)\ge \min (\mathbb{R}(A),\mathbb{R}(B)),而(U)=m,(V)=n\mathbb{R}(U)=m,\mathbb{R}(V)=n,这意味着,r如果要求各个σi\sigma_i不同且UU为一组基,那么σi>0;i=1,...,k;k(A)\sigma_i > 0;i = 1,...,k;k \ge \mathbb{R}(A).

通过上面的想法,我们很容易将A表示为对角形式。不过实际上,即使保证VV是正交基,我们也很难保证UU是正交的。因此使得V的正交性能在A下依然保存是非常关键的。而实际上,ATAA^TA的特征矩阵正好满足这个条件。

ATA=VDVTA^TA = VDV^T,也就是对ATAA^TA进行EVD。可以得到: AviAvj=(Avi)T(Avj)=viTATAvj=viTATλjvj=λjvivj=0 Av_i \cdot Av_j = (Av_i)^T (Av_j) = v_i^TA^TA v_j = v_i^TA^T \lambda_j v_j = \lambda_j v_i v_j = 0

可以看到,在这种情况下,{Av1,Av2,...,Avn}={σ1u1,...,σnun}\{Av_1,Av_2,...,Av_n\} = \{\sigma_1u_1,...,\sigma_nu_n\}是互相是正交的,这正是我们想要的。而这个集合中的非零向量,形成了一个AA的range的正交基。因此,ATAA^TA的特征向量和它们与A得到的image,使得AA可以被表示成对角形式。

我们继续把上面的分解补全。注意,如果i=ji = j,那么AviAvjAvi2=λiAv_i \cdot Av_j \Vert Av_i \Vert^2= \lambda_i. 为了让uiu_i是单位向量,我们对其进行标准化: $$ u_i = \frac{Av_i}{\Vert Av_i\Vert} = \frac{1}{ \sqrt{\lambda_i} } Av_i\\ \sigma_i = \sqrt{\lambda_i} $$

我们也很容易推导,λi0\lambda_i \ge 0的个数是kk个,可以由秩得到。而DD中特征值的顺序如果是按照从大到小的顺序排列,那么Σ\Sigma中也是一样的递减顺序。

如果k<mk< m,那么将UU扩展到正交基即可。这样我们就得到了想要的SVD。总结一下,V是ATAA^TA的特征向量组成,被称为右侧的奇异向量,Σ\Sigma由特征值组成,其中σi=λi\sigma_i = \sqrt{\lambda_i},而UU是正交化AviAv_i的结果,有必要的话再进行拓展,使其成为一个正交基。

需要注意的一点是,我们在这里计算SVD是通过计算ATAA^TA的特征值和特征矩阵,但是实际上还有其他的办法,在很多应用中SVD的实际用途是计算出ATAA^TA的特征值和特征矩阵。

在我们的构造方法中,我们从ATAA^TA的EVD来得到SVD,而实际上从SVD的角度出发,我们也很容易得到EVD,如果A=UΣVTA = U\Sigma V^TATA=VΣTUTUΣVT=VΣTΣVT A^TA = V\Sigma^T U^T U \Sigma V^T = V \Sigma^T\Sigma V^T

可以很容易看到上面正是ATAA^TA的EVD,同理也很容易得到: AAT=UΣVTVΣTUT=UΣΣTUT AA^T = U\Sigma V^TV \Sigma^T U^T = U \Sigma \Sigma^T U^T

这意味着实际上UU正是由AATAA^T的特征向量组成的。值得一提的是,如果AA是是对成矩阵,那么A2=ATA=AATA^2=A^TA=AA^T,它们的EVD也是相同的,特征值为λ2\lambda^2,其中λ\lambda为A的特征值,而且此时的SVD与EVD是等价的。

SVD的几何意义

我们可以通过对单位圆上的点利用A矩阵进行转换,来明白AA是如何扭曲n\mathbb{R}^n空间的。假如点x在单位圆(球)上,意味着x=v1x1+v2x2+...+vnxnx = v_1x_1 + v_2x_2+...+v_nx_n,其中i=1nxi2=1\sum_ {i=1}^nx_i^2 = 1,则: Ax=UΣVx=x1σ1u1+...+xkσkuk. Ax = U\Sigma Vx = x_1\sigma_1u_1 + ...+ x_k\sigma_ku_k.

假设yi=σixiy_i = \sigma_ix_i,则单位球体的image也等于i=1kyiui\sum_ {i=1}^k y_iu_i,其中: i=1kyi2σi2=i=1kxi21. \sum_ {i=1}^k \frac{y_i^2}{\sigma_i^2} = \sum_ {i=1}^k x_i^2 \ge 1.

如果(A)=k=n\mathbb{R}(A)= k = n,那么上述不等式是相等的。其他情况下,意味着一些纬度被抛弃了。 所以AA的转换实际上是先抛弃nkn-k个维度,将其压缩到kk维,再通过Σ\Sigma来对不同维度的权值进行放缩,最后拓展的mm维空间。下图展示了这个过程(n=m=3,k=2):

我们可以很容易得到,A2\Vert A \Vert_2,算子范数,定义为Axx\frac{\Vert Ax \Vert}{\Vert x \Vert}的最大值,也就是σ1\sigma_1AA最大的奇异值。也就是:Axσx,xn\Vert Ax \Vert \leq \sigma\Vert x \Vert,x \in \mathbb{R}^n,当xxv1v_1的整数倍时等号成立。

SVD的分块矩阵以及外积形式

实际上,SVD可以写成下面分块矩阵的形式: A=[u1ukuk+1un][σ1000σk0000][v1TvkTvk+1Tvn] A = \left [\begin{array}{ccc|ccc} u_1&\cdots&u_k&u_ {k+1}&\cdots&u_n \end{array}\right ] \left [\begin{array}{ccc|c} \sigma_1&\cdots&0&0\\ \vdots&\ddots&\vdots&\vdots\\ 0&\cdots&\sigma_k&0\\ \hline 0&\cdots&0&0\\ \vdots&\vdots&\vdots&\vdots \end{array}\right] \begin{bmatrix} v_1^T\\ \vdots\\ v_k^T\\ \hline v_ {k+1}^T\\ \vdots\\ v_ {n} \end{bmatrix}

这个结果可以写成: A=[u1uk][σ100σk][v1TvkT]+[uk+1un][0000][vk+1TvnT]=[u1uk][σ100σk][v1TvkT] \begin{aligned} A &= \begin{bmatrix} u_1&\cdots&u_k \end{bmatrix} \begin{bmatrix} \sigma_1&\cdots&0\\ \vdots&\ddots&\vdots\\ 0&\cdots&\sigma_k \end{bmatrix} \begin{bmatrix} v_1^T\\ \vdots\\ v_k^T \end{bmatrix} + \begin{bmatrix} u_ {k+1}&\cdots&u_n \end{bmatrix} \begin{bmatrix} 0&\cdots&0\\ \vdots&\ddots&\vdots\\ 0&\cdots&0 \end{bmatrix} \begin{bmatrix} v_ {k+1}^T\\ \vdots\\ v_n^T \end{bmatrix}\\ &=\begin{bmatrix} u_1&\cdots&u_k \end{bmatrix} \begin{bmatrix} \sigma_1&\cdots&0\\ \vdots&\ddots&\vdots\\ 0&\cdots&\sigma_k \end{bmatrix} \begin{bmatrix} v_1^T\\ \vdots\\ v_k^T \end{bmatrix} \end{aligned}

上述形式是SVD的另一种表示:A=UΣVTA = U\Sigma V^T,其中UUm×k,UTU=Im\times k,U^TU=IΣ\Sigmak×kk \times k对角矩阵,对角元素大于0,VVn×k,VTV=In \times k,V^TV = I.

我们在这里的分块矩阵的公式和一般的矩阵乘积有点不一样,一般来说,两个矩阵相乘XYXY,我们关注的是XX的行和YY的列。在这里,我们将用相反的方法表示。如果两个矩阵Xm×k,Yk×nX_ {m \times k},Y_ {k \times n},我们用xix_i表示X中的第i列,用yiTy_i^T表示Y中的第i行,那么: XY=i=1kxiyiT XY = \sum_ {i=1}^k x_iy_i^T

xiyiTx_i y_i^T我们称为是这两个向量的外积(Outer Product),也就是矩阵中列乘上行的情况。

现在回到SVD中,令: X=[u1uk][σ100σk]=[σ1u1σkuk] X = \begin{bmatrix} u_1&\cdots&u_k \end{bmatrix} \begin{bmatrix} \sigma_1&\cdots&0\\ \vdots&\ddots&\vdots\\ 0&\cdots&\sigma_k \end{bmatrix} = \begin{bmatrix} \sigma_1u_1&\cdots&\sigma_ku_k \end{bmatrix} 以及: Y=[v1TvkT] Y = \begin{bmatrix} v_1^T\\ \vdots\\ v_k^T \end{bmatrix}

可以得到:A=XY=i=1kσiuiviT.A = XY = \sum_ {i=1}^k\sigma_iu_iv_i^T.

这是SVD的另一种形式,它提供了A如何转换任何一个向量xx的另一种解释。 Ax=i=1kσiuiviTx=i=1kviTxσiui Ax = \sum_ {i=1}^k\sigma_iu_iv_i^Tx = \sum_ {i=1}^kv_i^Tx \sigma_iu_i 因为viTxv_i^Tx是一个标量。

这个时候AxAx被表达为uiu_i的线性组合。所以通过outer product expansion可以看到,通过A转换将x中每个viv_i成分转换成uiu_i成分,并且以σi\sigma_i的系数放缩。

这篇博客基本上是下面文献的部分翻译,更多内容请看: SVD