【线性代数/机器学习】矩阵的奇异值与奇异值分解(SVD)

一、引言

我们知道,对于一个 n × n n\times n n×n的矩阵 A A A,如果 A A A n n n个线性无关的特征向量,则 A A A可以相似对角化,即存在可逆矩阵 P P P使得 A = P Λ P − 1 A=P\Lambda P^{-1} A=PΛP1,其中 Λ \Lambda Λ A A A的特征值组成的对角阵。 P P P的列实际上就是 A A A的特征向量。把 A A A分解为 P Λ P − 1 P\Lambda P^{-1} PΛP1的过程称为矩阵的特征值分解(eigendecomposition)。但是,对于 m × n m\times n m×n的矩阵,其中 m ≠ n m\ne n m=n,我们就无能为力了。此时我们应该怎么分解这个矩阵呢?这里我们就引入了奇异值分解(singular value decomposition, SVD)的概念。

二、奇异值

A A A是一个 m × n m\times n m×n矩阵。我们对特征值已经比较熟悉了,所以我们对奇异值的定义也是从特征值出发获得的。什么样的矩阵具有特征值呢?答案是方阵。但 A A A不一定是方阵,不过我们有办法把它变成方阵—— A T A A^TA ATA是一个 n × n n\times n n×n的方阵。我们接下来考察 A T A A^T A ATA的特征值。

引理1 A T A A^T A ATA的每个特征值 λ \lambda λ都大于等于 0 0 0

证明:设 A T A x = λ x A^T A\boldsymbol{x}=\lambda\boldsymbol{x} ATAx=λx,其中 x \boldsymbol{x} x A T A A^T A ATA的一个特征向量。则 x T A T A x = λ x T x ∥ A x ∥ 2 = λ ∥ x ∥ 2 \boldsymbol{x}^T A^TA\boldsymbol{x}=\lambda \boldsymbol{x}^T\boldsymbol{x}\\ \|A\boldsymbol{x}\|^2=\lambda\|\boldsymbol{x}\|^2 xTATAx=λxTxAx2=λx2注意 ∥ A x ∥ 2 \|A\boldsymbol{x}\|^2 Ax2 ∥ x ∥ 2 \|\boldsymbol{x}\|^2 x2都是非负数,故 λ ≥ 0 \lambda\ge 0 λ0。∎

现在我们来定义奇异值(singular value)。

定义2 λ 1 , λ 2 , ⋯   , λ n \lambda_1,\lambda_2,\cdots,\lambda_n λ1,λ2,,λn A T A A^T A ATA的奇异值,满足 λ 1 ≥ λ 2 ≥ ⋯ ≥ λ n ≥ 0 \lambda_1\ge\lambda_2\ge\cdots\ge\lambda_n\ge 0 λ1λ2λn0。定义 σ i = λ i \sigma_i=\sqrt{\lambda_i} σi=λi ,则 σ 1 ≥ σ 2 ≥ ⋯ ≥ σ n ≥ 0 \sigma_1\ge\sigma_2\ge\cdots\ge\sigma_n\ge 0 σ1σ2σn0。这些 σ i \sigma_i σi称为 A A A的奇异值。

命题3 A A A的非零奇异值个数等于 A A A的秩。

证明:即证 r ( A T A ) = r ( A ) r(A^T A)=r(A) r(ATA)=r(A)。考虑齐次线性方程组 A T A x = 0 A^TA\boldsymbol{x}=\boldsymbol{0} ATAx=0,设 ξ \boldsymbol{\xi} ξ为它的一个解,即 A T A ξ = 0 A^T A\boldsymbol{\xi}=\boldsymbol{0} ATAξ=0,则 ξ T A T A ξ = 0 \boldsymbol{\xi}^T A^T A\boldsymbol{\xi}=\boldsymbol{0} ξTATAξ=0,即 ∥ A ξ ∥ 2 = 0 \|A\boldsymbol{\xi}\|^2=0 Aξ2=0,故 A ξ = 0 A\boldsymbol{\xi}=0 Aξ=0。这说明 A T A x = 0 A^T A\boldsymbol{x}=0 ATAx=0的解也是 A x = 0 A\boldsymbol{x}=0 Ax=0的解。同时 A x = 0 A\boldsymbol{x}=0 Ax=0的解显然也是 A T A x = 0 A^T A\boldsymbol{x}=0 ATAx=0的解,因此两个线性方程组同解,这说明 r ( A T A ) = r ( A ) r(A^T A)=r(A) r(ATA)=r(A)。∎

很多时候我们会遇到这样一个问题: ∥ x ∥ \|\boldsymbol{x}\| x ∥ A x ∥ \|A\boldsymbol{x}\| Ax的大小有怎样的关系呢?把矩阵 A A A看作一个线性变换,它作用于 x \boldsymbol{x} x上可以改变其长度,那么长度最多变化多少倍呢?有了奇异值,我们就可以很方便地解决这个问题。

命题4 A A A是一个 m × n m\times n m×n矩阵, x \boldsymbol{x} x是一个 n × 1 n\times 1 n×1向量。则 ∥ A x ∥ ≤ σ 1 ∥ x ∥ \|A\boldsymbol{x}\|\le\sigma_1\|\boldsymbol{x}\| Axσ1x,其中 σ 1 \sigma_1 σ1 A A A最大的奇异值,且取等条件为 x \boldsymbol{x} x A T A A^T A ATA对应于特征值 σ 1 2 \sigma_1^2 σ12的特征向量。

证明:注意 A T A A^T A ATA是实对称矩阵,所以它存在单位正交特征向量组 v 1 , v 2 , ⋯   , v n \boldsymbol{v}_1,\boldsymbol{v}_2,\cdots,\boldsymbol{v}_n v1,v2,,vn。若 x ∈ R n \boldsymbol{x}\in\mathbb{R}^n xRn,则可以把 x \boldsymbol{x} x表示为 x = c 1 v 1 + c 2 v 2 + ⋯ + c n v n \boldsymbol{x}=c_1\boldsymbol{v}_1+c_2\boldsymbol{v}_2+\cdots+c_n\boldsymbol{v}_n x=c1v1+c2v2++cnvn其中 c 1 , c 2 , ⋯   , c n c_1,c_2,\cdots,c_n c1,c2,,cn是标量,满足 c 1 2 + c 2 2 + ⋯ + c n 2 = ∥ x ∥ 2 c_1^2+c_2^2+\cdots+c_n^2=\|\boldsymbol{x}\|^2 c12+c22++cn2=x2。再考察 ∥ A x ∥ 2 \|A\boldsymbol{x}\|^2 Ax2 ∥ A x ∥ 2 = x T A T A x = ⟨ x , A T A x ⟩ = ⟨ ∑ i = 1 n c i v i , ∑ i = 1 n c i A T A v i ⟩ \|A\boldsymbol{x}\|^2=\boldsymbol{x}^T A^T A\boldsymbol{x}=\langle\boldsymbol{x},A^T A \boldsymbol{x}\rangle=\left\langle\sum\limits_{i=1}^n c_i\boldsymbol{v}_i,\sum\limits_{i=1}^n c_i A^T A \boldsymbol{v}_i\right\rangle Ax2=xTATAx=x,ATAx=i=1ncivi,i=1nciATAvi注意 v i \boldsymbol{v}_i vi A T A A^T A ATA对应于特征值 σ i 2 \sigma_i^2 σi2的特征向量,故 A T A v i = σ i 2 v i A^T A\boldsymbol{v}_i=\sigma_i^2\boldsymbol{v}_i ATAvi=σi2vi。因此 ∥ A x ∥ 2 = ⟨ ∑ i = 1 n c i v i , ∑ i = 1 n c i σ i 2 v i ⟩ = ∑ i = 1 n c i 2 σ i 2 ≤ ∑ i = 1 n c i 2 σ 1 2 = σ 1 2 ∥ x ∥ 2 \|A\boldsymbol{x}\|^2=\left\langle\sum\limits_{i=1}^n c_i\boldsymbol{v}_i,\sum\limits_{i=1}^n c_i \sigma_i^2 \boldsymbol{v}_i\right\rangle= \sum\limits_{i=1}^n c_i^2\sigma_i^2\le\sum\limits_{i=1}^n c_i^2\sigma_1^2=\sigma_1^2\|\boldsymbol{x}\|^2 Ax2=i=1ncivi,i=1nciσi2vi=i=1nci2σi2i=1nci2σ12=σ12x2取等条件为 c 1 2 = ∥ x ∥ 2 c_1^2=\|\boldsymbol{x}\|^2 c12=x2 c 2 = c 3 = ⋯ = c n = 0 c_2=c_3=\cdots=c_n=0 c2=c3==cn=0,此时 x = c 1 v \boldsymbol{x}=c_1\boldsymbol{v} x=c1v,故 x \boldsymbol{x} x A T A A^T A ATA对应于特征值 σ 1 2 \sigma_1^2 σ12的特征向量。证毕。∎

如果 x ⊥ v 1 \boldsymbol{x}\perp\boldsymbol{v}_1 xv1,即 c 1 = 0 c_1=0 c1=0,那么同理可证 ∥ A x ∥ ≤ σ 2 ∥ x ∥ 2 \|A\boldsymbol{x}\|\le\sigma_2\|\boldsymbol{x}\|^2 Axσ2x2;如果 x ⊥ v 1 \boldsymbol{x}\perp\boldsymbol{v}_1 xv1 x ⊥ v 2 \boldsymbol{x}\perp\boldsymbol{v}_2 xv2,即 c 1 = c 2 = 0 c_1=c_2=0 c1=c2=0,则 ∥ A x ∥ ≤ σ 3 ∥ x ∥ 2 \|A\boldsymbol{x}\|\le\sigma_3\|\boldsymbol{x}\|^2 Axσ3x2;依此类推。

三、奇异值分解的定义

上面介绍了奇异值,下面介绍如何利用奇异值对矩阵进行分解。

A A A是一个 m × n m\times n m×n矩阵, σ 1 ≥ σ 2 ≥ ⋯ ≥ σ n ≥ 0 \sigma_1\ge\sigma_2\ge\cdots\ge\sigma_n\ge 0 σ1σ2σn0是它的奇异值。令 r r r A A A的秩,也就是 A A A非零奇异值的个数。

定义5 A A A的一个奇异值分解是具有如下形式的分解: A = U Σ V T A=U\Sigma V^T A=UΣVT其中

  • U U U是一个 m × m m\times m m×m正交矩阵;
  • V V V是一个 n × n n\times n n×n正交矩阵;
  • Σ \Sigma Σ是一个 m × n m\times n m×n矩阵,它非常类似于一个对角矩阵:其第 i i i个对角元是 σ i \sigma_i σi,对于 i = 1 , 2 , ⋯   , r i=1,2,\cdots,r i=1,2,,r Σ \Sigma Σ的其他元素都是 0 0 0

例如,当 A A A是对称方阵时,它的奇异值实际上就是特征值的绝对值。

四、如何进行奇异值分解

引理6
(1) ∥ A v i ∥ = σ i \|A\boldsymbol{v}_i\|=\sigma_i Avi=σi
(2) 若 i ≠ j i\ne j i=j,则 A v i A\boldsymbol{v}_i Avi A v j A\boldsymbol{v}_j Avj正交。

证明 ⟨ A v i , A v j ⟩ = v i T A T A v j = v i T σ j 2 v j = σ j 2 ⟨ v i , v j ⟩ \langle A\boldsymbol{v}_i,A\boldsymbol{v}_j\rangle=\boldsymbol{v}_i^T A^T A\boldsymbol{v}_j=\boldsymbol{v}_i^T\sigma_j^2\boldsymbol{v}_j=\sigma_j^2\langle\boldsymbol{v}_i,\boldsymbol{v}_j\rangle Avi,Avj=viTATAvj=viTσj2vj=σj2vi,vj

  • i = j i=j i=j,由 ∥ v i ∥ = 1 \|\boldsymbol{v}_i\|=1 vi=1 ∥ A v i ∥ 2 = σ i 2 \|A\boldsymbol{v}_i\|^2=\sigma_i^2 Avi2=σi2
  • i ≠ j i\ne j i=j,由 v i ⊥ v j \boldsymbol{v}_i\perp \boldsymbol{v}_j vivj A v i ⊥ A v j A\boldsymbol{v}_i\perp A\boldsymbol{v}_j AviAvj

定理7 A A A是一个 m × n m\times n m×n矩阵。则我们可以这样构造一个 A A A的奇异值分解 A = U Σ V T A=U\Sigma V^T A=UΣVT,其中:

  • V V V A T A A^T A ATA的单位正交特征向量组 v 1 , v 2 , ⋯   , v n \boldsymbol{v}_1,\boldsymbol{v}_2,\cdots,\boldsymbol{v}_n v1,v2,,vn,满足 A T A v i = σ i 2 v i A^T A\boldsymbol{v}_i=\sigma_i^2 \boldsymbol{v}_i ATAvi=σi2vi
  • i ≤ r i\le r ir(此时 σ i ≠ 0 \sigma_i\ne 0 σi=0),则 U U U的第 i i i列是 1 σ 1 A v i \frac{1}{\sigma_1}A\boldsymbol{v}_i σ11Avi。根据引理6,这些列是单位正交的,其他列可以通过任意地扩充 R m \mathbb{R}^m Rm的单位正交基得到。

证明:我们只需证明,如果 U U U V V V按照上面的方式定义,则 A = U Σ V T A=U\Sigma V^T A=UΣVT。我们无法直接证明 A = U Σ V T A=U\Sigma V^T A=UΣVT,但是我们可以证明 ∀ x ∈ R n \forall\boldsymbol{x}\in\mathbb{R}^n xRn U Σ V T x = A x U\Sigma V^T\boldsymbol{x}=A\boldsymbol{x} UΣVTx=Ax。这就可以说明 A = U Σ V T A=U\Sigma V^T A=UΣVT(因为若 ∀ x ∈ R n \forall\boldsymbol{x}\in\mathbb{R}^n xRn都有 A x = B x A\boldsymbol{x}=B\boldsymbol{x} Ax=Bx,则 ∀ x ∈ R n \forall\boldsymbol{x}\in\mathbb{R}^n xRn都有 ( A − B ) x = 0 (A-B)\boldsymbol{x}=0 (AB)x=0,即该线性方程组的基础解系的秩为 n n n r ( A − B ) = 0 r(A-B)=0 r(AB)=0 A − B = O A-B=O AB=O A = B A=B A=B)。考虑 V T x = [ v 1 T v 2 T ⋮ v n T ] x = [ v 1 T x v 2 T x ⋮ v n T x ] V^T\boldsymbol{x}=\begin{bmatrix}\boldsymbol{v}_1^T\\\boldsymbol{v}_2^T\\\vdots\\\boldsymbol{v}_n^T\end{bmatrix}\boldsymbol{x}=\begin{bmatrix}\boldsymbol{v}_1^T\boldsymbol{x}\\\boldsymbol{v}_2^T\boldsymbol{x}\\\vdots\\\boldsymbol{v}_n^T\boldsymbol{x}\end{bmatrix} VTx= v1Tv2TvnT x= v1Txv2TxvnTx Σ V T x = [ σ 1 v 1 T x σ 2 v 2 T x ⋮ σ r v r T x 0 ⋮ 0 ] \Sigma V^T\boldsymbol{x}=\begin{bmatrix}\sigma_1\boldsymbol{v}_1^T\boldsymbol{x}\\\sigma_2\boldsymbol{v}_2^T\boldsymbol{x}\\\vdots\\\sigma_r\boldsymbol{v}_r^T\boldsymbol{x}\\0\\\vdots\\0\end{bmatrix} ΣVTx= σ1v1Txσ2v2TxσrvrTx00 左乘 U U U U Σ V T x = ( σ 1 v 1 T x ) 1 σ 1 A v 1 + ( σ 2 v 2 T x ) 1 σ 2 A v 2 + ⋯ + ( σ r v r T x ) 1 σ r A v r = A v 1 v 1 T x + A v 2 v 2 T x + ⋯ + A v r v r T x = A v 1 v 1 T x + A v 2 v 2 T x + ⋯ + A v r v r T x + ⋯ + A v n v n T x = A ( v 1 v 1 T + v 2 v 2 T + ⋯ + v n v n T ) x = A V T V x = A x \begin{aligned} U\Sigma V^T\boldsymbol{x}&=(\sigma_1\boldsymbol{v}_1^T\boldsymbol{x})\frac{1}{\sigma_1}A\boldsymbol{v}_1+(\sigma_2\boldsymbol{v}_2^T\boldsymbol{x})\frac{1}{\sigma_2}A\boldsymbol{v}_2+\cdots+(\sigma_r\boldsymbol{v}_r^T\boldsymbol{x})\frac{1}{\sigma_r}A\boldsymbol{v}_r\\ &=A\boldsymbol{v}_1\boldsymbol{v}_1^T\boldsymbol{x}+A\boldsymbol{v}_2\boldsymbol{v}_2^T\boldsymbol{x}+\cdots+A\boldsymbol{v}_r\boldsymbol{v}_r^T\boldsymbol{x}\\ &=A\boldsymbol{v}_1\boldsymbol{v}_1^T\boldsymbol{x}+A\boldsymbol{v}_2\boldsymbol{v}_2^T\boldsymbol{x}+\cdots+A\boldsymbol{v}_r\boldsymbol{v}_r^T\boldsymbol{x}+\cdots+A\boldsymbol{v}_n\boldsymbol{v}_n^T\boldsymbol{x}\\ &=A(\boldsymbol{v}_1\boldsymbol{v}_1^T+\boldsymbol{v}_2\boldsymbol{v}_2^T+\cdots+\boldsymbol{v}_n\boldsymbol{v}_n^T)\boldsymbol{x}\\ &=AV^T V\boldsymbol{x}\\ &=A\boldsymbol{x} \end{aligned} UΣVTx=(σ1v1Tx)σ11Av1+(σ2v2Tx)σ21Av2++(σrvrTx)σr1Avr=Av1v1Tx+Av2v2Tx++AvrvrTx=Av1v1Tx+Av2v2Tx++AvrvrTx++AvnvnTx=A(v1v1T+v2v2T++vnvnT)x=AVTVx=Ax注意这里用到了当 i > r i>r i>r A v i = σ i = 0 A\boldsymbol{v}_i=\sigma_i=0 Avi=σi=0。这样就证明了 A = U Σ V T A=U\Sigma V^T A=UΣVT。∎

矩阵的奇异值分解在机器学习中有广泛应用,比如在主成分分析(Principal Component Analysis, PCA)中发挥着重要作用。

参考资料

  1. https://en.wikipedia.org/wiki/Eigendecomposition_of_a_matrix
  2. https://math.berkeley.edu/~hutching/teach/54-2017/svd-notes.pdf
### 3.1 矩阵奇异值的计算方法 矩阵奇异值分解(Singular Value Decomposition, SVD)是一种重要的矩阵分解方法,广泛应用于数据处理、信号处理、图像处理等领域。给定一个 $ m \times n $ 的矩阵 $ A $,其 SVD 分解形式为: $$ A = U \Sigma V^T $$ 其中: - $ U $ 是一个 $ m \times m $ 的正交矩阵,其列向量称为 $ A $ 的左奇异向量; - $ \Sigma $ 是一个 $ m \times n $ 的对角矩阵,对角线上的元素称为 $ A $ 的奇异值,通常按从大到小排列; - $ V $ 是一个 $ n \times n $ 的正交矩阵,其列向量称为 $ A $ 的右奇异向量。 奇异值的计算可以通过以下步骤完成: 1. 计算矩阵 $ A^T A $ 或 $ A A^T $,这两个矩阵都是对称矩阵; 2. 求出 $ A^T A $(或 $ A A^T $)的特征值和特征向量; 3. 奇异值为 $ \sigma_i = \sqrt{\lambda_i} $,其中 $ \lambda_i $ 是 $ A^T A $ 的特征值; 4. 左奇异向量由 $ A A^T $ 的特征向量构成,右奇异向量由 $ A^T A $ 的特征向量构成。 在实际计算中,可以使用数值计算软件如 MATLAB 或 Python 的 NumPy 库来完成 SVD 分解。例如,在 MATLAB 中可以使用 `svd(A)` 函数来计算矩阵 $ A $ 的奇异值分解;在 Python 中可以使用 `numpy.linalg.svd()` 函数来实现相同的功能[^4]。 ```python import numpy as np # 构造一个3x3的矩阵A A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 使用np.linalg.svd()函数计算A的SVD分解 U, S, VT = np.linalg.svd(A) # 输出奇异值对角矩阵Σ Sigma = np.zeros((A.shape[0], A.shape[1])) np.fill_diagonal(Sigma, S) print("左奇异向量矩阵U:") print(U) print("\n奇异值对角矩阵Σ:") print(Sigma) print("\n右奇异向量矩阵VT:") print(VT) ``` ### 3.2 矩阵奇异值的应用场景 奇异值分解在多个领域中都有广泛的应用,主要包括以下几个方面: #### 3.2.1 数据降维 SVD 可以用于数据的降维处理。通过保留较大的奇异值并忽略较小的奇异值,可以构造一个低秩矩阵来近似原始矩阵。这种低秩近似可以有效地减少数据维度,同时保留数据的主要特征。例如,在推荐系统中,奇异值对角矩阵可以表示用户和物品之间的潜在关系,从而帮助系统进行更精准的推荐[^1]。 #### 3.2.2 图像压缩 SVD 可以用于图像压缩。通过将图像表示为矩阵形式,并对其进行 SVD 分解,保留较大的奇异值,忽略较小的奇异值,从而实现图像的压缩。这种方法可以在保留图像主要特征的同时显著减少存储空间。例如,使用 SVD 进行图像压缩的示例代码可以参考相关资料[^3]。 #### 3.2.3 降噪处理 SVD 还可以用于信号或图像的降噪。通过去除较小的奇异值,可以有效过滤掉数据中的噪声成分,从而提高数据的质量和可读性。 #### 3.2.4 特征提取 在机器学习中,SVD 可以用于特征提取。通过提取数据的主要特征,可以提高后续机器学习算法的性能和效率。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值