奇异值分解本质上是 特征值分解的一个扩展 ,就是将一个 \(m \times n\) 的矩阵分解成三个矩阵相乘。
其中 A 是一个 n 维的方阵,v 是 n 维特征向量,\(\lambda\) 是个数字(特征值)。每一个特征值都对应一个特征向量。
上面式子也可以理解为:A 为对 v 向量的变换矩阵,由于 \(\lambda\) 仅仅是一个数值,所以这个变换 只有拉伸没有旋转 。
如果方阵 A 的秩为 m,那么就有 m 个特征值,也对应 m 个特征向量(正交)。每一个都满足表达式 \(Av=\lambda v\)。 那么,就可以写成如下形式
V 是特征向量组成的矩阵,\(\zeta\) 是对角线上元素为特征值的的对角阵。方程两边同时乘以 V 矩阵的逆得到:
\[A=V\zeta V^{-1}\]如果矩阵 A 不是方阵,那么就用到了奇异值分解。
A 是将要分解的大小为 \(m \times n\) 的矩阵。U 是 m 维的方阵。V 是 n 维的方阵。 \(\Sigma\) 是除主对角线元素以外全为 0 的矩阵,大小为 \(m \times n\)。示意图如下:
还是按照特征值求解的思路,现在的矩阵 A 不是方阵,如果将其乘以自己的转置矩阵就变成了方阵, 是方阵就可以求其特征值和特征向量。
\(\Sigma\) 主对角线上的元素就是矩阵对应的奇异值,按从大到小的顺序排列, 奇异值越大代表其对应的特征向量包含的特征越多。利用这一点,可以对数据进行降维,压缩等应用。
一个矩阵可以理解为一个线性变换,如果矩阵是对角阵,那么对应的变换是 拉伸 。 如果矩阵是由正交向量组成的,那么对应的变换是 旋转 。 所以,奇异值分解就是将一个线性变换分解成先旋转,后拉伸,最后再旋转的一个过程。
为什么一般的线性变换不能只用“拉伸”(对角矩阵)来表示,而一定要引入“旋转”?
从几何自由度和线性代数结构两条线解释。
“只拉伸、不旋转”对应的矩阵形式是:
\[A = D\]其中 \(D\) 是一个对角矩阵:
\[D = \begin{pmatrix} \lambda_1 & 0 & \cdots \\ 0 & \lambda_2 & \cdots \\ \vdots & & \ddots \end{pmatrix}\]几何意义是:
👉 关键限制: 拉伸方向必须是当前坐标轴方向,而且彼此正交
现实中的线性变换 \(A\) 往往:
举个 2D 的例子:
\[A = \begin{pmatrix} 1 & 1 \\ 0 & 1 \end{pmatrix}\]这是一个剪切(shear)变换:
👉 你找不到一个坐标系,能让它在原坐标下表现为“只拉伸”
👉 “那我先换一套正交坐标系不就行了?”
这正是 SVD 的本质。
\[A = U \Sigma V^\top\]几何解释:
👉 核心点:
不是不能拉伸,而是要在“对的方向”上拉伸
这是一个自由度匹配的问题。
在 n 维空间中:
👉 刚好补齐所有自由度
所以:
一般线性变换不是“沿坐标轴拉伸”,而是“沿某些斜着的正交方向拉伸”。
SVD 的旋转只是帮你把坐标轴转到这些“真正的拉伸方向”上。
奇异值分解中的旋转并不是多余的,它们用于将线性变换对角化到合适的正交基下;只有在这些特征方向上,线性变换才能表现为纯拉伸。