奇异值分解 SVD 是什么?任意矩阵都能拆成旋转、伸缩、再旋转
奇异值分解(Singular Value Decomposition,SVD)是线性代数中一种非常重要的矩阵分解方法。它可以把任意一个矩阵,不管是不是方阵,都分解为三个特殊矩阵的乘积:一个正交矩阵 U、一个对角矩阵 Σ 和另一个正交矩阵 V 的转置。对角矩阵 Σ 对角线上的元素叫作奇异值,它们都是非负的,通常按从大到小的顺序排列。
它的几何意义
一个矩阵可以看作是对空间的一种线性变换。奇异值分解告诉我们:任何一个线性变换,都可以拆成三个简单的步骤:先做一次旋转或反射(对应 V 的转置),然后沿着各个坐标轴进行不同程度的拉伸或压缩(对应 Σ,拉伸的倍数就是奇异值),最后再做一次旋转或反射(对应 U)。比如把一个圆形变换成一个倾斜的椭圆,奇异值就是这个椭圆的长半轴和短半轴的长度。
与特征值分解相比,奇异值分解的适用范围更广:特征值分解只适用于方阵,而且并非所有方阵都可以分解;而奇异值分解适用于任何形状的矩阵,总是存在的。
低秩近似:抓住最重要的部分
奇异值分解最有用的性质之一是低秩近似。奇异值的大小反映了对应方向的重要程度:大的奇异值对应数据中主要的结构,小的奇异值往往对应细节或噪声。如果只保留最大的 k 个奇异值及其对应的向量,就能得到原矩阵的一个近似,而且根据埃卡特-杨定理,这是所有秩为 k 的矩阵中与原矩阵最接近的一个。在很多实际的数据中,少数几个奇异值就占据了绝大部分的“能量”,所以可以用很少的数据量较好地还原原始矩阵。
应用
图像压缩:一张灰度图片可以看作一个矩阵,对它进行奇异值分解,只保留前几十个奇异值,就能用少得多的数据重建出与原图相当接近的图片。主成分分析:对中心化后的数据矩阵做奇异值分解,就能得到数据的主成分,这比计算协方差矩阵再做特征值分解在数值上更加稳定。推荐系统:把用户对物品的评分组成一个矩阵,通过低秩分解找到用户和物品的潜在特征,从而预测用户对未评分物品的喜好。在 Netflix 推荐大赛中,基于矩阵分解的方法发挥了重要的作用。潜在语义分析:对词语和文档组成的矩阵做奇异值分解,发现词语和文档背后的潜在主题。此外还用于求解最小二乘问题、计算矩阵的伪逆、信号去噪等。
与大模型的联系
低秩的思想在大模型中也很重要。LoRA 微调方法基于这样的观察:微调时模型权重的变化量往往是低秩的,因此只需要训练两个小矩阵的乘积来表示这个变化,大大减少了需要训练的参数。一些模型压缩方法也利用奇异值分解把大的权重矩阵分解成更小的矩阵,减少模型的参数量和计算量。