SVD(奇异值分解)数值计算方法解析(一):SVD的概念与人工手算SVD的方法


前言

奇异值分解(Singular Value Decomposition,简称SVD)是在现代科学计算中应用广泛的数学算法。
本系列文章《SVD(奇异值分解)数值计算方法解析》将基于笔者的开发经验,从SVD的概念入手,讲解如何人工手算SVD以及如何在计算机上实现SVD,并会在后篇给出详尽的代码与解析。笔者希望读者可以通过阅读这个系列的文章,熟悉SVD数值计算方法完整流程。同时这也是对笔者知识的一种巩固,和知识分享能力的一种锻炼。如果读者发现文章内容有错漏,或是认为部分描述不够清晰,欢迎在评论区提出指导意见。

本篇文章《SVD的概念与人工手算SVD的方法》重在引入SVD的概念,并介绍人工手算SVD的一种方法,笔者希望能通过这种方式让读者对SVD有个简单的了解,方便为后续文章做知识铺垫。如果读者已经熟悉SVD的概念,希望直接了解数值计算SVD的方法,可以关注笔者的后续文章。


一、SVD是什么?

1.特征值的定义与特征值分解

在了解SVD之前,我们先从特征值的概念入手。

  • 定义:设矩阵A ∈ R m × n \bm{A} \in \R^{m \times n}ARm×n(本文章仅考虑实数矩阵,不涉及复数矩阵的内容),如果存在常数λ \lambdaλn nn维非零列向量x \bm{x}x,使得关系式
    A x = λ x \bm{Ax = } \lambda \bm{x}Ax=λx
    成立,则称这样的常数λ \lambdaλ为矩阵A \bm{A}A特征值,称这样的n nn维非零列向量x \bm{x}x为矩阵A \bm{A}A特征值向量
  • 特征值分解:设矩阵A ∈ R n × n \bm{A} \in \R^{n \times n}ARn×n,则必存在正交矩阵
    Q = [ u 1 , . . . , u n ] ∈ R n × n \bm{Q=}[\bm{u_1, ...,u_n}] \in \R^{n \times n}Q=[u1,...,un]Rn×n
    使得:
    A = Q Σ Q − 1   . . .   ( 1 ) \bm{A}=\bm{Q}\bm{\varSigma}\bm{Q}^{-1} \space ... \space(1)A=QΣQ1 ... (1)
    我们称式(1)为矩阵A \bm{A}A的特征值分解。其中Σ = d i a g ( λ 1 , . . . , λ n ) ,   ( λ 1 ≥ 0 , . . . , λ n ≥ 0 ) \bm{\varSigma}=diag(\lambda_1,...,\lambda_n),\space (\lambda_1 \ge 0, ... ,\lambda_n \ge 0)Σ=diag(λ1,...,λn), (λ10...λn0)是对角线为矩阵A \bm{A}A特征值的n nn阶方阵。u i \bm{u_i}ui是对应矩阵A \bm{A}A特征值λ i \lambda_iλi的特征列向量,满足A u i = λ i u i \bm{Au_i = } \lambda_i \bm{u_i}Aui=λiui。矩阵Q \bm{Q}Q称为矩阵A \bm{A}A特征矩阵。
    由于Q \bm{Q}Q是正交矩阵,满足Q − 1 = Q T \bm{Q}^{-1} = \bm{Q}^TQ1=QT,因此矩阵A \bm{A}A的特征值分解也可表示为A = Q Σ Q T . \bm{A}=\bm{Q}\bm{\varSigma}\bm{Q}^T.A=QΣQT.

关于特征值的含义与作用,本文不做介绍,读者可以自行查阅资料了解。

2.奇异值的定义与奇异值分解

在特征值的定义中,我们注意到假设的矩阵是n nn阶方阵。而当舍去这个限定条件时,我们便可引申出奇异值的概念。

  • 定义:设矩阵A ∈ R m × n \bm{A} \in \R^{m \times n}ARm×n,则称矩阵A T A \bm{A}^T\bm{A}ATA的特征值的非负平方根为矩阵A \bm{A}A的奇异值。A \bm{A}A的奇异值的全体记作σ ( A ) \sigma(\bm{A})σ(A)

有了奇异值的定义后,我们便可介绍奇异值分解定理。

  • 奇异值分解(SVD):设矩阵A ∈ R m × n \bm{A} \in \R^{m \times n}ARm×n,则必存在正交矩阵
    U = [ u 1 , . . . , u m ] ∈ R m × m 和 V = [ u 1 , . . . , u n ] ∈ R n × n \bm{U=}[\bm{u_1, ...,u_m}] \in \R^{m \times m}和\bm{V=}[\bm{u_1, ...,u_n}] \in \R^{n \times n}U=[u1,...,um]Rm×mV=[u1,...,un]Rn×n
    使得:
    U T A V = [ Σ r 0 0 0 ] ( 或 A = U [ Σ r 0 0 0 ] V T )   . . .   ( 2 ) \bm{U}^T\bm{AV}=\begin{bmatrix} \varSigma_r & 0 \\ 0 & 0 \end{bmatrix}(或\bm{A}=\bm{U}\begin{bmatrix} \bm{\varSigma_r} & 0 \\ 0 & 0 \end{bmatrix}\bm{V}^T)\space ...\space (2)UTAV=[Σr000](A=U[Σr000]VT) ... (2)
    我们称式(2)为矩阵A \bm{A}A的奇异值分解。其中Σ r = d i a g ( σ 1 , . . . , σ r ) ,   σ 1 ≥ . . . ≥ σ r > 0. ( 0 ≤ r ≤ m i n ( m , n ) ) \bm{\varSigma_r}=diag(\sigma_1,...,\sigma_r),\space \sigma_1 \ge ... \ge \sigma_r \gt 0.(0 \le r \le min(m,n))Σr=diag(σ1,...,σr), σ1...σr>0.(0rmin(m,n))σ i \sigma_iσi是矩阵A \bm{A}A的从大到小排序的第i ii个奇异值。列向量u i \bm{u_i}uiv i \bm{v_i}vi分别称为矩阵A \bm{A}A对应奇异值σ i \sigma_iσi的左奇异向量和右奇异向量,满足A v i = σ i u i \bm{Av_i = } \sigma_i \bm{u_i}Avi=σiui。正交矩阵U \bm{U}UV \bm{V}V分别称为矩阵A \bm{A}A的左奇异矩阵和右奇异矩阵。

关于SVD的应用,本文不做介绍,读者可以自行查阅资料了解。

3.SVD展示

我们可以直接参考pytorch的svd算子官方文档内容。下图为pytorch的svd算子的接口:
pytorch的svd算子接口
下方代码为pytorch的svd算子官方文档内示例:

>>> a = torch.randn(5, 3)
>>> a
tensor([[ 0.2364, -0.7752,  0.6372],
        [ 1.7201,  0.7394, -0.0504],
        [-0.3371, -1.0584,  0.5296],
        [ 0.3550, -0.4022,  1.5569],
        [ 0.2445, -0.0158,  1.1414]])
>>> u, s, v = torch.svd(a)
>>> u
tensor([[ 0.4027,  0.0287,  0.5434],
        [-0.1946,  0.8833,  0.3679],
        [ 0.4296, -0.2890,  0.5261],
        [ 0.6604,  0.2717, -0.2618],
        [ 0.4234,  0.2481, -0.4733]])
>>> s
tensor([2.3289, 2.0315, 0.7806])
>>> v
tensor([[-0.0199,  0.8766,  0.4809],
        [-0.5080,  0.4054, -0.7600],
        [ 0.8611,  0.2594, -0.4373]])
>>> torch.dist(a, torch.mm(torch.mm(u, torch.diag(s)), v.t()))
tensor(8.6531e-07)
>>> a_big = torch.randn(7, 5, 3)
>>> u, s, v = torch.svd(a_big)
>>> torch.dist(a_big, torch.matmul(torch.matmul(u, torch.diag_embed(s)), v.transpose(-2, -1)))
tensor(2.6503e-06)

pytorch的svd算子详情可查看官方文档:
https://pytorch.org/docs/stable/generated/torch.svd.html?highlight=svd#torch.svd


二、人工计算SVD方法

在第一节中,我们给出了SVD的定义,但定理只说明了存在性,并没有给出求解的算法。如果我们希望计算矩阵的奇异值分解,应该如何操作呢?本节将以一个简单的矩阵作为例子,通过手算演示人工计算SVD的一个方法。

  • 注意:如果你想直接了解SVD的数值计算方法,可以跳过本节内容。

1.奇异值分解的性质分析

我们首先回顾奇异值分解定理:

  • 奇异值分解定理(SVD):设矩阵A ∈ R m × n \bm{A} \in \R^{m \times n}ARm×n,则必存在正交矩阵
    U = [ u 1 , . . . , u m ] ∈ R m × m 和 V = [ u 1 , . . . , u n ] ∈ R n × n \bm{U=}[\bm{u_1, ...,u_m}] \in \R^{m \times m}和\bm{V=}[\bm{u_1, ...,u_n}] \in \R^{n \times n}U=[u1,...,um]Rm×mV=[u1,...,un]Rn×n
    使得:
    U T A V = [ Σ r 0 0 0 ] ( 或 A = U [ Σ r 0 0 0 ] V T )   . . .   ( 1 ) \bm{U}^T\bm{AV}=\begin{bmatrix} \varSigma_r & 0 \\ 0 & 0 \end{bmatrix}(或\bm{A}=\bm{U}\begin{bmatrix} \bm{\varSigma_r} & 0 \\ 0 & 0 \end{bmatrix}\bm{V}^T)\space ...\space (1)UTAV=[Σr000](A=U[Σr000]VT) ... (1)
    其中Σ r = d i a g ( σ 1 , . . . , σ r ) ,   σ 1 ≥ . . . ≥ σ r > 0. ( 0 ≤ r ≤ m i n ( m , n ) ) \bm{\varSigma_r}=diag(\sigma_1,...,\sigma_r),\space \sigma_1 \ge ... \ge \sigma_r \gt 0.(0 \le r \le min(m,n))Σr=diag(σ1,...,σr), σ1...σr>0.(0rmin(m,n))

我们可以注意到,如果将矩阵A \bm{A}A和其自身的转置A T \bm{A}^TAT做矩阵乘,便可得到:
A A T = ( U Σ V T ) ( V Σ T U T ) = U Σ ( V T V ) Σ T U T = U ( Σ Σ T ) U T = U Σ 2 U T ∈ R m × m A T A = ( V Σ T U T ) ( U Σ V T ) = V Σ T ( U T U ) Σ V T = V ( Σ Σ T ) V T = V Σ 2 V T ∈ R n × n \bm{AA}^T = (\bm{U \varSigma V}^T)(\bm{V \varSigma}^T\bm{U}^T)=\bm{U \varSigma}(\bm{V}^T\bm{V} )\bm{ \varSigma}^T\bm{U}^T=\bm{U}(\bm{ \varSigma}\bm{ \varSigma}^T)\bm{U}^T= \bm{U}\bm{\varSigma}^2\bm{U}^T\in \R^{m \times m} \\ \bm{A^TA} = (\bm{V \varSigma}^T\bm{U}^T)(\bm{U \varSigma V}^T)=\bm{V \varSigma}^T(\bm{U}^T\bm{U}) \bm{\varSigma V}^T= \bm{V}(\bm{ \varSigma}\bm{ \varSigma}^T)\bm{V}^T= \bm{V}\bm{\varSigma}^2\bm{V}^T \in \R^{n \times n}AAT=(UΣVT)(VΣTUT)=UΣ(VTV)ΣTUT=U(ΣΣT)UT=UΣ2UTRm×mATA=(VΣTUT)(UΣVT)=VΣT(UTU)ΣVT=V(ΣΣT)VT=VΣ2VTRn×n

也就是说,矩阵A \bm{A}A左右奇异矩阵,分别等于对称方阵A A T \bm{AA^T}AATA T A \bm{A^TA}ATA的特征矩阵。并且A A T \bm{AA^T}AATA T A \bm{A^TA}ATA的特征值矩阵Σ 2 \bm{ \varSigma}^2Σ2即为矩阵A \bm{A}A的奇异值矩阵Σ \bm{ \varSigma}Σ的平方。这说明,我们可以通过计算对称方阵A A T \bm{AA^T}AATA T A \bm{A^TA}ATA特征值分解来间接计算矩阵A \bm{A}A的奇异值分解。下文便介绍了一种人工计算特征值分解的方法。

2.特征值分解的人工计算方法

我们回顾一下特征值的定义:

  • 定义:设矩阵A ∈ R m × n \bm{A} \in \R^{m \times n}ARm×n(本文章仅考虑实数矩阵,不涉及复数矩阵的内容),如果存在常数λ \lambdaλn nn维非零列向量x \bm{x}x,使得关系式
    A x = λ x \bm{Ax = } \lambda \bm{x}Ax=λx
    成立,则称这样的常数λ \lambdaλ为矩阵A \bm{A}A特征值,称这样的n nn维非零列向量x \bm{x}x为矩阵A \bm{A}A特征值向量

我们可以注意到,式A x = λ x \bm{Ax = } \lambda \bm{x}Ax=λx也可以写成( A − λ E ) x = 0 (\bm{A} - \lambda\bm{E} )\bm{x}= 0(AλE)x=0(E \bm{E}E为和A \bm{A}A同阶的单位矩阵)。其中x \bm{x}x有非零解的充分必要条件是其系数行列式∣ A − λ E ∣ = 0 |\bm{A} - \lambda\bm{E} |=0AλE=0。注意此时∣ A − λ E ∣ |\bm{A} - \lambda\bm{E} |AλE是一个一元n次的多项式。因此,通过求解多项式∣ A − λ E ∣ |\bm{A} - \lambda\bm{E} |AλE的零解,我们便可得到矩阵A \bm{A}A的特征值集合,进一步根据式A x = λ x \bm{Ax = } \lambda \bm{x}Ax=λx计算就可以得到特征矩阵。

  • 示例1:设矩阵A = [ 3 5 5 3 ] \bm{A}= \begin{bmatrix} 3 & 5 \\ 5 & 3 \end{bmatrix}A=[3553],求其特征值分解。
    解:
    (1)设特征值为λ \lambdaλ,求解多项式方程∣ A − λ E ∣ = 0 |\bm{A} - \lambda\bm{E} |=0AλE=0
    ∣ A − λ E ∣ = 0 ⇒ ∣ 3 − λ 5 5 3 − λ ∣ = 0 ⇒ ( 3 − λ ) 2 − 25 = 0 ⇒ ( λ − 8 ) ( λ + 2 ) = 0 ⇒ λ 1 = 8 ,   λ 2 = − 2. |\bm{A} - \lambda\bm{E} |=0 \Rarr \begin{vmatrix} 3-\lambda & 5 \\ 5 & 3-\lambda \end{vmatrix} = 0 \Rarr (3 - \lambda)^2 - 25 = 0 \Rarr (\lambda - 8)(\lambda + 2) = 0 \Rarr \lambda_1 = 8, \space \lambda_2 = -2.AλE=03λ553λ=0(3λ)225=0(λ8)(λ+2)=0λ1=8, λ2=2.于是我们得到了矩阵A \bm{A}A的特征值矩阵Σ = [ 8 0 0 − 2 ] \bm{\varSigma} = \begin{bmatrix} 8 & 0 \\ 0 & -2 \end{bmatrix}Σ=[8002]
    (2)通过式( A − λ E ) x = 0 (\bm{A} - \lambda\bm{E} )\bm{x}= 0(AλE)x=0求解特征向量:
    ( A − λ 1 E ) x 1 = 0 ⇒ [ 3 − 8 5 5 3 − 8 ] x 1 = 0 ⇒ [ − 5 5 5 − 5 ] x 1 = 0 ⇒ x 1 = [ 1 / 2 1 / 2 ] (\bm{A} - \lambda_1\bm{E} )\bm{x_1}= 0 \Rarr \begin{bmatrix} 3-8 & 5 \\ 5 & 3-8 \end{bmatrix} \bm{x_1} = 0 \Rarr \begin{bmatrix} -5 & 5 \\ 5 & -5 \end{bmatrix} \bm{x_1} = 0 \Rarr \bm{x_1} = \begin{bmatrix} 1/\sqrt{2} \\ 1/\sqrt{2} \end{bmatrix}(Aλ1E)x1=0[385538]x1=0[5555]x1=0x1=[1/21/2]( A − λ 2 E ) x 2 = 0 ⇒ [ 3 + 2 5 5 3 + 2 ] x 2 = 0 ⇒ [ 5 5 5 5 ] x 2 = 0 ⇒ x 2 = [ 1 / 2 − 1 / 2 ] (\bm{A} - \lambda_2\bm{E} )\bm{x_2}= 0 \Rarr \begin{bmatrix} 3+2 & 5 \\ 5 & 3+2 \end{bmatrix} \bm{x_2} = 0 \Rarr \begin{bmatrix} 5 & 5 \\ 5 & 5 \end{bmatrix} \bm{x_2} = 0 \Rarr \bm{x_2} = \begin{bmatrix} 1/\sqrt{2} \\ -1/\sqrt{2} \end{bmatrix}(Aλ2E)x2=0[3+2553+2]x2=0[5555]x2=0x2=[1/21/2]由此我们便求出了矩阵A \bm{A}A的两个特征向量x 1 \bm{x_1}x1x 2 \bm{x_2}x2(注意计算时要将特征向量单位化)。
    那么矩阵A \bm{A}A的特征矩阵为Q = [ x 1 , x 2 ] = [ 1 / 2 1 / 2 1 / 2 − 1 / 2 ] \bm{Q}=[\bm{x_1,x_2}]=\begin{bmatrix} 1/\sqrt{2} & 1/\sqrt{2} \\ 1/\sqrt{2} & -1/\sqrt{2} \end{bmatrix}Q=[x1,x2]=[1/21/21/21/2]
    (3)验证:
    Q Σ Q T = [ 1 / 2 1 / 2 1 / 2 − 1 / 2 ] [ 8 0 0 − 2 ] [ 1 / 2 1 / 2 1 / 2 − 1 / 2 ] = [ 3 5 5 3 ] = A \bm{Q \varSigma Q^T} = \begin{bmatrix} 1/\sqrt{2} & 1/\sqrt{2} \\ 1/\sqrt{2} & -1/\sqrt{2} \end{bmatrix} \begin{bmatrix} 8 & 0 \\ 0 & -2 \end{bmatrix} \begin{bmatrix} 1/\sqrt{2} & 1/\sqrt{2} \\ 1/\sqrt{2} & -1/\sqrt{2} \end{bmatrix}= \begin{bmatrix} 3 & 5 \\ 5 & 3 \end{bmatrix} = \bm{A}QΣQT=[1/21/21/21/2][8002][1/21/21/21/2]=[3553]=A

3.奇异值分解的人工计算方法

基于上文的铺垫,我们这里直接通过一个简单的例子来展示SVD的求解过程:

  • 示例2:设矩阵A = [ 1 0 2 1 0 1 ] \bm{A}= \begin{bmatrix} 1 & 0 \\ 2 & 1 \\ 0 & 1 \end{bmatrix}A=120011,求其奇异值分解。
    解:
    (1)计算矩阵A A T \bm{AA^T}AATA T A \bm{A^TA}ATA
    A A T = [ 1 0 2 1 0 1 ] [ 1 2 0 0 1 1 ] = [ 1 2 0 2 5 1 0 1 1 ] A T A = [ 1 2 0 0 1 1 ] [ 1 0 2 1 0 1 ] = [ 5 2 2 2 ] \bm{AA^T}= \begin{bmatrix} 1 & 0 \\ 2 & 1 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 2 & 0 \\ 0 & 1 & 1 \end{bmatrix} = \begin{bmatrix} 1 & 2 & 0 \\ 2 & 5 & 1 \\ 0 & 1 & 1\end{bmatrix} \\ \bm{A^TA}=\begin{bmatrix} 1 & 2 & 0 \\ 0 & 1 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 \\ 2 & 1 \\ 0 & 1 \end{bmatrix} = \begin{bmatrix} 5 & 2 \\ 2 & 2 \end{bmatrix}AAT=120011[102101]=120251011ATA=[102101]120011=[5222](2)计算矩阵A A T \bm{AA^T}AAT的特征值分解:
    ∣ A A T − λ E ∣ = 0 ⇒ ∣ 1 − λ 2 0 2 5 − λ 1 0 1 1 − λ ∣ = 0 ⇒ λ ( λ − 1 ) ( λ − 6 ) = 0 ⇒ λ 1 = 6 , λ 2 = 1 , λ 3 = 0. |\bm{AA^T} - \lambda\bm{E} |=0 \Rarr \begin{vmatrix} 1-\lambda & 2 & 0 \\ 2 & 5-\lambda & 1 \\ 0 & 1 & 1-\lambda \end{vmatrix} = 0 \Rarr \lambda(\lambda - 1)(\lambda-6) = 0 \Rarr \lambda_1 = 6,\lambda_2 = 1,\lambda_3 = 0.AATλE=01λ2025λ1011λ=0λ(λ1)(λ6)=0λ1=6,λ2=1,λ3=0.求解( A A T − λ 1 E ) u 1 = 0 ⇒ [ − 5 2 0 2 − 1 1 0 1 − 5 ] u 1 = 0 (\bm{AA^T} - \lambda_1\bm{E})\bm{u_1}=0 \Rarr \begin{bmatrix} -5 & 2 & 0 \\ 2 & -1 & 1 \\ 0 & 1 & -5 \end{bmatrix} \bm{u_1}= 0(AATλ1E)u1=0520211015u1=0得到对应特征值λ 1 = 6 \lambda_1=6λ1=6的特征向量u 1 = [ 2 / 30 5 / 30 1 / 30 ] \bm{u_1} =\begin{bmatrix} 2/\sqrt{30} \\ 5/\sqrt{30} \\ 1/\sqrt{30} \end{bmatrix}u1=2/305/301/30。同理可得对应特征值λ 2 = 1 \lambda_2=1λ2=1的特征向量u 2 = [ 1 / 5 0 − 2 / 5 ] \bm{u_2} =\begin{bmatrix} 1/\sqrt{5} \\ 0 \\ -2/\sqrt{5} \end{bmatrix}u2=1/502/5,对应特征值λ 3 = 0 \lambda_3=0λ3=0的特征向量u 3 = [ 2 / 6 1 / 6 − 1 / 6 ] \bm{u_3} =\begin{bmatrix} 2/\sqrt{6} \\ 1/\sqrt{6} \\ -1/\sqrt{6} \end{bmatrix}u3=2/61/61/6
    于是我们得到了矩阵A A T \bm{AA^T}AAT的特征矩阵U = [ u 1 , u 2 , u 3 ] = [ 2 / 30 1 / 5 2 / 6 5 / 30 0 1 / 6 5 / 30 − 2 / 5 − 1 / 6 ] \bm{U}=[\bm{u_1,u_2,u_3}]=\begin{bmatrix} 2/\sqrt{30} & 1/\sqrt{5} & 2/\sqrt{6} \\ 5/\sqrt{30} & 0 & 1/\sqrt{6} \\ 5/\sqrt{30} & -2/\sqrt{5} & -1/\sqrt{6} \end{bmatrix}U=[u1,u2,u3]=2/305/305/301/502/52/61/61/6
    (3)计算矩阵A T A \bm{A^TA}ATA的特征值分解:
    ∣ A T A − λ E ∣ = 0 ⇒ ∣ 5 − λ 2 2 2 − λ ∣ = 0 ⇒ ( λ − 1 ) ( λ − 6 ) = 0 ⇒ λ 1 = 6 , λ 2 = 1. |\bm{A^TA} - \lambda\bm{E} |=0 \Rarr \begin{vmatrix} 5-\lambda & 2 \\ 2 & 2-\lambda \end{vmatrix} = 0 \Rarr (\lambda - 1)(\lambda-6) = 0 \Rarr \lambda_1 = 6,\lambda_2 = 1.ATAλE=05λ222λ=0(λ1)(λ6)=0λ1=6,λ2=1.求解( A T A − λ 1 E ) v 1 = 0 ⇒ [ − 1 2 2 − 4 ] v 1 = 0 (\bm{A^TA} - \lambda_1\bm{E})\bm{v_1}=0 \Rarr \begin{bmatrix} -1 & 2 \\ 2 & -4 \end{bmatrix} \bm{v_1}= 0(ATAλ1E)v1=0[1224]v1=0得到对应特征值λ 1 = 6 \lambda_1=6λ1=6的特征向量v 1 = [ 2 / 5 1 / 5 ] \bm{v_1} =\begin{bmatrix} 2/\sqrt{5} \\ 1/\sqrt{5} \end{bmatrix}v1=[2/51/5]。同理可得对应特征值λ 2 = 1 \lambda_2=1λ2=1的特征向量v 2 = [ − 1 / 5 2 / 5 ] \bm{v_2} =\begin{bmatrix} -1/\sqrt{5} \\ 2/\sqrt{5} \end{bmatrix}v2=[1/52/5]
    于是我们得到了矩阵A T A \bm{A^TA}ATA的特征矩阵V = [ v 1 , v 2 ] = [ 2 / 5 − 1 / 5 1 / 5 2 / 5 ] \bm{V}=[\bm{v_1,v_2}]=\begin{bmatrix} 2/\sqrt{5} & -1/\sqrt{5} \\ 1/\sqrt{5} & 2/\sqrt{5} \end{bmatrix}V=[v1,v2]=[2/51/51/52/5]
    (4)根据矩阵A A T \bm{AA^T}AATA T A \bm{A^TA}ATA的特征值分解结果得到矩阵A \bm{A}A的奇异值分解:
    A = U Σ V T = U [ λ 1 0 0 λ 2 0 0 0 0 ] V T = [ 2 / 30 1 / 5 2 / 6 5 / 30 0 1 / 6 5 / 30 − 2 / 5 − 1 / 6 ] [ 6 0 0 0 1 0 0 0 0 ] [ 2 / 5 1 / 5 − 1 / 5 2 / 5 ] . \bm{A=U \varSigma V^T}=\bm{U} \begin{bmatrix} \sqrt{\lambda_1} & 0 \\ 0 & \sqrt{\lambda_2} & 0 \\ 0 & 0 & 0 \end{bmatrix} \bm{V}^T \\ = \begin{bmatrix} 2/\sqrt{30} & 1/\sqrt{5} & 2/\sqrt{6} \\ 5/\sqrt{30} & 0 & 1/\sqrt{6} \\ 5/\sqrt{30} & -2/\sqrt{5} & -1/\sqrt{6} \end{bmatrix} \begin{bmatrix} \sqrt{6} & 0 & 0\\ 0 & 1 & 0 \\ 0 & 0 & 0 \end{bmatrix} \begin{bmatrix} 2/\sqrt{5} & 1/\sqrt{5} \\ -1/\sqrt{5} & 2/\sqrt{5} \end{bmatrix}.A=UΣVT=Uλ1000λ2000VT=2/305/305/301/502/52/61/61/6600010000[2/51/51/52/5].

4.总结

通过示例2的展示,我们可以看到手算SVD的步骤主要为:
(1)计算矩阵A A T \bm{AA^T}AATA T A \bm{A^TA}ATA
(2)计算矩阵A A T \bm{AA^T}AAT的特征值分解。
(3)计算矩阵A T A \bm{A^TA}ATA的特征值分解。
(4)根据矩阵A A T \bm{AA^T}AATA T A \bm{A^TA}ATA的特征值分解结果得到矩阵A \bm{A}A的奇异值分解。

但是如果按照上面的算法,使用计算机去计算SVD,就会不可避免地遇到一个问题:计算矩阵的特征值分解时,需要求一元n次多项式方程∣ A − λ E ∣ = 0 |\bm{A} - \lambda\bm{E} |=0AλE=0的解。而计算机通常是直接处理数值数据的,不能像人工计算时那样假设未知数,也就是说计算机是难以通过输入矩阵A \bm{A}A和数λ \lambdaλ推导出多项式方程∣ A − λ E ∣ = 0 |\bm{A} - \lambda\bm{E} |=0AλE=0的表达式,更不必论之后的求解了。
那么应该使用什么样的数学方法,才能满足计算机计算的特性,使得矩阵可以在计算机上做SVD求解呢?这一问题,我们将在本系列的下一篇文章进行解答。感谢您阅读本篇文章!


版权声明:本文为weixin_45644649原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。