核心思想:矩阵乘法的维度匹配
原始分解: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)
为什么这样能对应原矩阵?
- 位置对应:Aₖ[i,j] 仍然表示原矩阵中第 i 行第 j 列位置的近似值
- 结构保持:Aₖ 保持了 A 的行列结构
- 信息保留:最重要的模式(对应大奇异值)被保留,次要细节被舍弃
更直观的理解
想象一个拼图:
- 原图:用 1000 块小拼图块完成
- 压缩后:只用最重要的 50 块大拼图块来近似
- 结果:还能看出原图的样子,只是细节少了
在图片压缩中,Aₖ 的每个元素仍然对应图片中特定像素的位置,只是像素值是通过重要特征的线性组合计算出来的近似值。
总结
通过保持矩阵乘法的维度一致性,压缩后的 Uₖ Σₖ Vₖᵀ 乘积自动生成与原矩阵 A 同维度的 Aₖ,从而保证了"对应关系"。Aₖ 中的每个元素 (i,j) 仍然对应原矩阵中相同位置的值,只是精度有所损失。