SVD降维分解

106 阅读2分钟

核心思想:矩阵乘法的维度匹配

原始分解:A = U Σ Vᵀ

  • A: m × n 矩阵
  • U: m × m 矩阵
  • Σ: m × n 对角矩阵
  • Vᵀ: n × n 矩阵

压缩过程的具体步骤

第1步:截断矩阵

我们只保留前 k 个最大的奇异值:

  • Uₖ: 取 U 的前 k 列 → 维度变为 m × k
  • Σₖ: 取 Σ 的前 k 行和前 k 列 → 维度变为 k × k
  • Vₖᵀ: 取 Vᵀ 的前 k 行 → 维度变为 k × n

第2步:验证维度匹配

让我们检查矩阵乘法的维度:

text

Uₖ (m×k) × Σₖ (k×k) × Vₖᵀ (k×n) = Aₖ (m×n)

关键点:压缩后的三个矩阵相乘,得到的 Aₖ 与原矩阵 A 具有完全相同的维度 (m × n)!

具体例子说明

假设原图是 1000 × 1000 像素的图片:

  • 原矩阵 A: 1000 × 1000 = 1,000,000 个元素
  • 选择 k = 50

压缩后的存储:

  • Uₖ: 1000 × 50 = 50,000 个元素
  • Σₖ: 50 × 50 = 2,500 个元素
  • Vₖᵀ: 50 × 1000 = 50,000 个元素
  • 总计: 102,500 个元素

压缩率: 1,000,000 ÷ 102,500 ≈ 9.76 倍

重构过程可视化

text

原始矩阵 A (1000×1000)
    ↓ SVD分解
U (1000×1000) × Σ (1000×1000) × Vᵀ (1000×1000)
    ↓ 截取前k个成分
Uₖ (1000×50) × Σₖ (50×50) × Vₖᵀ (50×1000)
    ↓ 矩阵乘法
近似矩阵 Aₖ (1000×1000)

为什么这样能对应原矩阵?

  1. 位置对应:Aₖ[i,j] 仍然表示原矩阵中第 i 行第 j 列位置的近似值
  2. 结构保持:Aₖ 保持了 A 的行列结构
  3. 信息保留:最重要的模式(对应大奇异值)被保留,次要细节被舍弃

更直观的理解

想象一个拼图:

  • 原图:用 1000 块小拼图块完成
  • 压缩后:只用最重要的 50 块大拼图块来近似
  • 结果:还能看出原图的样子,只是细节少了

在图片压缩中,Aₖ 的每个元素仍然对应图片中特定像素的位置,只是像素值是通过重要特征的线性组合计算出来的近似值。

总结

通过保持矩阵乘法的维度一致性,压缩后的 Uₖ Σₖ Vₖᵀ 乘积自动生成与原矩阵 A 同维度的 Aₖ,从而保证了"对应关系"。Aₖ 中的每个元素 (i,j) 仍然对应原矩阵中相同位置的值,只是精度有所损失。