奇异值分解(SVD)的一个有力应用在于数据压缩,尤其适用于可以自然表示为矩阵的数据,例如图像。其主要思路是SVD按重要性顺序组织矩阵中的信息,这使我们能够丢弃不那么重要的信息,同时保留原始数据的良好近似。
回顾m×n矩阵A的SVD:
A=UΣVT
此处,Σ是一个m×n的对角矩阵,包含从大到小排列的奇异值σ1,σ2,σ3,… (σ1≥σ2≥⋯≥0)。这些奇异值量化了U和V的列所表示的相应方向的重要性。较大的奇异值对应于在矩阵中捕获更多数据方差或“能量”的维度。
通过SVD进行数据压缩,其方式是为原始矩阵A创建一个低秩近似。我们不使用所有的奇异值和向量,而是只保留前k个成分,其中k小于原始矩阵的秩。这个过程通常被称为截断SVD。
我们构造近似矩阵Ak如下:
Ak=UkΣkVkT
其中:
- Uk由U的前k列组成(一个m×k矩阵)。
- Σk是一个k×k的对角矩阵,包含前k个奇异值(σ1,…,σk)。
- VkT由VT的前k行组成(即V的前k列的转置,形成一个k×n矩阵)。
Eckart-Young-Mirsky定理指出,在Frobenius范数(以及谱范数)意义下,矩阵Ak是A的最佳秩k近似。从根本上说,通过保留与最大奇异值相关的成分,我们保留了原始矩阵A最重要的部分。
为什么这是压缩?
存储原始矩阵A需要存储m×n个数字。存储截断SVD成分Uk, Σk, 和VkT需要存储:
- Uk的m×k个值
- Σk对角元素的k个值
- VkT的k×n个值
总存储量为mk+k+kn=k(m+n+1)个值。如果k远小于m和n,那么k(m+n+1)可以远小于m×n,从而实现压缩。
图像压缩示例
灰度数字图像可以表示为一个矩阵,其中每个元素对应特定位置的像素强度。假设我们有一个512×512的灰度图像。这个矩阵A有512×512=262,144个元素。
- 应用SVD: 计算A=UΣVT。U和V将是512×512的,Σ也将是512×512的。
- 截断: 选择k的值。例如,设k=50。构造A50=U50Σ50V50T。
- 存储: 我们不存储原始的262,144个像素值,而是存储U50 (512×50)、Σ50 (50个值)和V50T (50×512)。总存储量为50×512+50+50×512=25600+50+25600=51,250个值。这大约是原始存储大小的20%。
- 重构: 要查看压缩图像,需要将存储的成分相乘:A50=U50Σ50V50T。结果矩阵A50是原始图像A的近似。
k的选择决定了压缩比和图像质量之间的权衡。较小的k会带来更高的压缩率,但图像重构质量可能较低。较大的k会使重构图像与原始图像更接近,但压缩率较低。通常,相对较小的k可以捕获大部分视觉信息,因为典型图像的奇异值往往会迅速衰减。
图像矩阵的奇异值通常显示出陡峭的初始下降,随后是一长串较小的值。这表明,仅保留前几十个或几百个奇异值(对应于秩k近似)可以保留图像的大部分结构,同时丢弃与较小奇异值相关的成分,这些成分可能对应于更精细的细节或噪声。
对于通常具有独立通道(例如,红色、绿色、蓝色)的彩色图像,SVD压缩可以独立应用于表示每个颜色通道的矩阵。
有损压缩
值得注意的是,基于SVD的压缩是有损的。重构矩阵Ak与原始矩阵A不完全相同(除非k等于A的秩)。在截断步骤中,部分信息被永久丢弃。然而,由于SVD优先处理最重要的成分,A和Ak之间的感知差异可以很小,特别是在k值适中的情况下,这使得它在图像压缩等应用中非常有用,因为在这些应用中并不总是需要完美重构。
图像压缩是一个经典的例子,但该原理适用于任何可以表示为矩阵的数据,只要低秩近似是可以接受的,并且对存储或计算效率有益。这可能包括机器学习中的大型特征矩阵、推荐系统中的用户-物品交互矩阵,或数值模拟数据。