当前位置: 首页 > news >正文

从入门到入土之——奇异值分解(SVD)

SVD将一个复杂的矩阵变换分解为旋转-拉伸-旋转三个基本操作,提供了关于矩阵秩、四大子空间和最佳低秩近似的完整信息。其推导基于对称矩阵的特征分解,具有坚实的数学基础,可以说是线性代数中最重要、最优雅的分解之一,它提供了理解矩阵基本结构的一个强大框架。

1. 直观理解

先抛开数学公式,从几何角度来感受SVD,想象一个矩阵 A 作为一个线性变换,将一个空间中的向量(例如单位圆)映射到另一个空间(例如一个椭圆)。

SVD的核心思想是:任何矩阵的线性变换效果,都可以被分解为三个简单的基本变换:

  • 一个旋转 (V*):在原始空间(输入空间)中,找出一组标准的正交基(v₁, v₂, …, vₙ)旋转一下向量

  • 一个缩放 (Σ):在新的旋转后的坐标系下,对向量在各个坐标轴上进行纯粹的拉伸或压缩(缩放因子就是奇异值 σ₁, σ₂, …, σₙ),这是最关键的一步。

  • 另一个旋转 (U): 在缩放后的结果上,再进行一次旋转,将其放入目标空间(输出空间)中。

各变换解释:
假设一个 2x2 矩阵 A,对单位圆上所有的点进行变换,使得单位圆最终变成一个椭圆,SVD揭示了一个矩阵的“本质”的拉伸方向和强度,而撇开了旋转的影响。

  • V* 的作用是:找到单位圆上的“主轴方向”(即椭圆的长轴和短轴方向在变换前对应的方向)。

  • Σ 的作用是:将这两个主轴方向分别拉伸 σ₁ 和 σ₂ 倍,这就形成了椭圆的长轴和短轴长度。

  • U 的作用是:将这个拉伸后的椭圆(其轴可能与坐标轴对齐)旋转到它在目标空间中的最终朝向。

2. 数学推导

数学定义
对于任意一个 m × n 的实数矩阵 A,其奇异值分解为:
A=UΣVTA=U\Sigma V^TA=UΣVT

其中:

  • U 是一个 m × m 的正交矩阵(UᵀU = I),列向量 u1,u2,...,umu₁, u₂, ..., u_mu1,u2,...,um 称为 左奇异向量,张成矩阵 A 的列空间。

  • Σ (西格玛) 是一个 m × n 的对角矩阵(非对角元素均为0),其对角线上的元素 σ₁ ≥ σ₂ ≥ … ≥ σₚ ≥ 0(p = min(m, n))称为奇异值,表示缩放因子。

  • V 是一个 n × n 的正交矩阵(VᵀV = I),列向量 v1,v2,...,vnv₁, v₂, ..., v_nv1,v2,...,vn 称为 右奇异向量,张成矩阵 A 的行空间。

数学推导
SVD可以被看作是特征分解在任意矩阵上的推广,特征分解只适用于方阵,而SVD适用于任何矩阵。

2.1 构造对称方阵:

对于一个 m × n 的实数矩阵 A,其转置Aᵀ为一个n × m的实数矩阵,考虑 AᵀA 和 AAᵀ两个实对称方阵(并且是半正定的),其中

  • AᵀA 是 n × n 的。
  • AAᵀ 是 m × m 的。

2.2 特征分解:

根据实对称矩阵的性质,AᵀA 和 AAᵀ 都可以被正交对角化:

  • ATA=VΛvVTAᵀA = V Λᵥ VᵀATA=VΛvVT
    V 的列是 AᵀA 的特征向量,也就是SVD中的 V(右奇异向量)。
    Λᵥ 是对角矩阵,其元素是 AᵀA 的特征值 λ。
    ATA=(UΣVT)T(UΣVT)=(VΣTUT)(UΣVT)=VΣ2VTA^TA=(U\Sigma V^T)^T(U\Sigma V^T) \\=(V\Sigma^T U^T)(U\Sigma V^T)=V\Sigma^2V^TATA=(UΣVT)T(UΣVT)=(VΣTUT)(UΣVT)=VΣ2VT

  • AAT=UΛuUTAAᵀ = U Λᵤ UᵀAAT=UΛuUT
    U 的列是 AAᵀ 的特征向量,也就是SVD中的 U(左奇异向量)。
    Λᵤ 是对角矩阵,其元素是 AAᵀ 的特征值 λ。
    AAT=(UΣVT)(UΣVT)T=(UΣVT)(VΣTUT)=UΣ2UTAA^T=(U\Sigma V^T)(U\Sigma V^T)^T \\=(U\Sigma V^T)(V\Sigma^T U^T)=U\Sigma^2U^TAAT=(UΣVT)(UΣVT)T=(UΣVT)(VΣTUT)=UΣ2UT

2.3 连接特征值与奇异值:

从下面的推导可以得出结论是:AᵀA 和 AAᵀ 拥有相同的非零特征值。
假设 λ 是 AᵀA 的一个特征值,v 是其对应的特征向量,那么:
(AAT)(Av)=A(ATAv)=A(λv)=λ(Av)(AAᵀ)(A v) = A (AᵀA v) = A (λ v) = λ (A v)(AAT)(Av)=A(ATAv)=A(λv)=λ(Av)
这说明 λ 也是 AAᵀ 的特征值,而其对应的特征向量是 A v(需要归一化)。

因此,Λu=Σ2Λᵤ =\Sigma^2Λu=Σ2,奇异值 σ_i 就是这些特征值的平方根: σi=λiσ_i = \sqrt{λ_i}σi=λi

2.4 组装SVD:

从 AᵀA 的特征分解中得到 V 和奇异值 (Σ 的对角元素)。

左奇异向量 U 可以通过 ui=(1/σi)∗Aviu_i = (1 / σ_i) * A v_iui=(1/σi)Avi 来计算(对于所有 σ_i > 0 的项),对于 σ_i = 0 的项,U 的剩余列可以任意扩充为一组标准正交基。

3. 原理分析与性质

降维与矩阵的真正秩
SVD特性之一是它可以可靠地确定矩阵的秩,数值计算中,由于浮点数精度问题,判断一个矩阵的秩是很困难的(某个特征值到底是0还是1e-15?)。

在SVD中,矩阵 A 的秩 r 就等于非零奇异值的个数。
A=UΣVT=σ1u1v1T+σ2u2v2T+...+σrurvrTA = U Σ Vᵀ = σ₁ u₁ v₁ᵀ + σ₂ u₂ v₂ᵀ + ... + σ_r u_r v_rᵀA=UΣVT=σ1u1v1T+σ2u2v2T+...+σrurvrT

这意味着矩阵 A 可以由 r 个“秩一矩阵” (uiviT)(u_i v_iᵀ)(uiviT) 加权求和而来,权重就是奇异值,奇异值的大小代表了该分量在矩阵 A 中的“重要性”,SVD揭示了矩阵的四个基本子空间:

  • 行空间:由 V 的前 r 列 (v1,...,vr)(v₁, ..., v_r)(v1,...,vr) 张成。
  • 零空间:由 V 的后 n - r 列 (vr+1,...,vn)(v_{r+1}, ..., v_n)(vr+1,...,vn) 张成。
  • 列空间:由 U 的前 r 列 (u1,...,ur)(u₁, ..., u_r)(u1,...,ur) 张成。
  • 左零空间:由 U 的后 m - r 列 (ur+1,...,um)(u_{r+1}, ..., u_m)(ur+1,...,um) 张成。

最佳低秩逼近
这是SVD的一个极其重要的应用。如果我们想用一个秩为 k(k < r)的矩阵 A_k 来近似原始矩阵 A,那么在弗罗贝尼乌斯范数(Frobenius norm)和谱范数(spectral norm)意义下的最佳近似是:
Ak=σ1u1v1T+σ2u2v2T+...+σkukvkTA_k = σ₁ u₁ v₁ᵀ + σ₂ u₂ v₂ᵀ + ... + σ_k u_k v_kᵀAk=σ1u1v1T+σ2u2v2T+...+σkukvkT

也就是说,我们只需保留前 k 个最大的奇异值及其对应的奇异向量,丢弃那些不重要的(小的)奇异值分量。这构成了数据压缩、降维和去噪的数学基础。

4. 示例

A=[[2,0][0,3]]A = \begin{bmatrix} [2,0]\\ [0,3]\end{bmatrix}A=[[2,0][0,3]],这是一个对角矩阵。

1. 计算 AᵀA 和 AAᵀ:

ATA=[[4,0][0,9]]AᵀA =\begin{bmatrix} [4,0]\\ [0,9]\end{bmatrix}ATA=[[4,0][0,9]]

AAT=[[4,0][0,9]]AAᵀ = \begin{bmatrix} [4,0]\\ [0,9]\end{bmatrix}AAT=[[4,0][0,9]]

2. 特征分解:

AᵀA 的特征值和特征向量:
λ₁ = 9, v₁ = [0, 1]ᵀ
λ₂ = 4, v₂ = [1, 0]ᵀ

按奇异值从大到小排序,所以 σ₁ = √9 = 3, σ₂ = √4 = 2。
对应 σ₁=3 的 v₁ 是 [0, 1]ᵀ
对应 σ₂=2 的 v₂ 是 [1, 0]ᵀ

因此 V=[[0,1][1,0]]V = \begin{bmatrix} [0, 1]\\ [1, 0]\end{bmatrix}V=[[0,1][1,0]] (列是特征向量)。

3. 奇异值:
σ₁ = √9 = 3
σ₂ = √4 = 2
Σ=[[3,0][0,2]]Σ = \begin{bmatrix} [3,0]\\ [0,2]\end{bmatrix}Σ=[[3,0][0,2]]

4. 左奇异向量 U:

我们可以用公式 ui=(1/σi)Aviu_i = (1 / σ_i) A v_iui=(1/σi)Avi 计算。

u1=(1/3)∗[[2,0][0,3]]∗[0,1]T=(1/3)∗[0,3]T=[0,1]Tu₁ = (1/3) *\begin{bmatrix} [2,0]\\ [0,3]\end{bmatrix} * [0, 1]ᵀ = (1/3) * [0, 3]ᵀ = [0, 1]ᵀu1=(1/3)[[2,0][0,3]][0,1]T=(1/3)[0,3]T=[0,1]T
u2=(1/2)∗[[2,0][0,3]]∗[1,0]T=(1/2)∗[2,0]T=[1,0]Tu₂ = (1/2) *\begin{bmatrix} [2,0]\\ [0,3]\end{bmatrix} * [1, 0]ᵀ = (1/2) * [2, 0]ᵀ = [1, 0]ᵀu2=(1/2)[[2,0][0,3]][1,0]T=(1/2)[2,0]T=[1,0]T

因此 U=[[0,1][1,0]]U = \begin{bmatrix} [0, 1]\\ [1, 0]\end{bmatrix}U=[[0,1][1,0]]

5. 最终SVD:
A=UΣVT=[[0,1][1,0]]∗[[3,0][0,2]]∗[[0,1][1,0]]A = U Σ Vᵀ =\begin{bmatrix} [0, 1]\\ [1, 0]\end{bmatrix} *\begin{bmatrix} [3,0]\\ [0,2]\end{bmatrix} * \begin{bmatrix} [0, 1]\\ [1, 0]\end{bmatrix}A=UΣVT=[[0,1][1,0]][[3,0][0,2]][[0,1][1,0]]

6. 验证:
UΣ=[[0∗3,1∗2][1∗3,0∗2]]=[[0,2][3,0]](UΣ)VT=[[0,2][3,0]]∗[[0,1][1,0]]=[[2,0][0,3]]=AU Σ = \begin{bmatrix} [0*3, 1*2]\\ [1*3, 0*2]\end{bmatrix}= \begin{bmatrix} [0, 2]\\ [3, 0]\end{bmatrix}\\ (U Σ) Vᵀ = \begin{bmatrix} [0, 2]\\ [3, 0]\end{bmatrix}* \begin{bmatrix} [0, 1]\\ [1, 0]\end{bmatrix} = \begin{bmatrix} [2, 0]\\ [0,3]\end{bmatrix}= AUΣ=[[03,12][13,02]]=[[0,2][3,0]](UΣ)VT=[[0,2][3,0]][[0,1][1,0]]=[[2,0][0,3]]=A
验证成功!

这个例子很简单,但展示了SVD的组成部分, 对于非对角矩阵,计算过程更复杂,但原理相同。

5. 应用场景

  • 点云配准/ICP:求解两组点云之间的最佳刚体变换(旋转 R 和平移 t)。通过SVD可以优雅地求出使得对应点距离和最小的最优 R。

  • SLAM中的矩阵分解:在解决优化问题时,例如求解线性系统 Ax=b,SVD可以提供数值稳定的解。

  • 位姿估计:从本质矩阵或单应矩阵中恢复相机旋转 R 和平移 t 需要用到SVD。

  • 矩阵伪逆 :对于非方阵或奇异矩阵 A,其伪逆 A⁺ 可以通过SVD计算:A⁺ = V Σ⁺ Uᵀ,其中 Σ⁺ 是 Σ 的转置后非零元素取倒数。

  • 降维与主成分分析 (PCA):PCA本质上就是对数据的协方差矩阵进行特征分解(等同于对中心化后的数据矩阵进行SVD)。最大的奇异值对应的奇异向量就是最主要的主成分方向。

http://www.dtcms.com/a/354642.html

相关文章:

  • 重塑可观测性成本:解析Coralogix的智能成本优化之道
  • 深入浅出:贴片式eMMC存储与国产芯(君正/瑞芯微)的协同设计指南
  • GitHub 宕机自救指南:确保开发工作不间断
  • 学习做动画6.瞄准偏移
  • 5.2 I/O软件
  • STL库——list(类函数学习)
  • 搭建私有云3步法:cpolar简化Puter本地云端配置
  • leetcode238:除自身以外的数组的乘积(前缀和思想)
  • Fair Federated Learning with Biased Vision-Language Models
  • 一文读懂:自然语言处理中的语义理解技术
  • C# Deconstruct | 简化元组与对象的数据提取
  • 秋招笔记-8.28
  • 如何获取文件的MD5码
  • 读大语言模型09超级智能
  • 完整代码注释:实现 Qt 的 TCP 客户端,实现和服务器通信
  • 从集线器到路由器:计算机网络演进之路
  • 实现微信小程序的UniApp相机组件:拍照、录像与双指缩放
  • 在Xcode中查看设备日志的完整指南
  • 深度学习篇---VGGNet
  • 【SQL】计算一年内每个月份的周数据
  • 基于大型语言模型的自然语言到 SQL 转换研究综述:我们身处何处,又将前往何方?
  • MyBatis 动态 SQL 精讲:告别硬编码的智能拼接艺术
  • 【Depth与RGB对齐算法(D2C)】
  • PPT处理控件Aspose.Slides教程:在 C# 中将 PPTX 转换为 Markdown
  • 项目一系列-第7章 父子组件通信
  • vue3使用axios向spring boot 发送请求,请求响应时间快慢交替问题分析
  • 探索 Vertex AI 与 Elasticsearch
  • Ubuntu 从零到一搭建 Appium+Python 自动化环境(含下厨房真机实战)—2025 版
  • 导出wireshark的FLV RAW数据并进行分析
  • 第13集 当您的USB设备不在已实测支持列表,如何让TOS-WLink支持您的USB设备--答案Wireshark USB抓包