奇异值分解(Singular Value Decomposition,SVD)是线性代数中一种极其重要且强大的矩阵分解方法。它的普适性在于,任何实数矩阵都可以进行 SVD 分解。SVD 将一个矩阵分解为三个特殊矩阵的乘积,揭示了矩阵内在的几何和代数特性。由于其强大的功能,SVD 在信号处理、统计学、机器学习和数据科学等领域有着广泛而深入的应用。
一、SVD 的定义和性质¶
1. 定义¶
对于任意一个 \(m \times n\) 的实数矩阵 \(A\),其奇异值分解可以表示为:
其中:
- \(U\):一个 \(m \times m\) 的正交矩阵 (orthogonal matrix)。其列向量 \(u_i\) 称为左奇异向量 (left-singular vectors)。\(UU^T = I_m\)。
- \(\Sigma\):一个 \(m \times n\) 的对角矩阵 (diagonal matrix)。其对角线上的元素 \(\sigma_i\) 称为奇异值 (singular values)。所有奇异值都是非负的 (\(\sigma_i \ge 0\)),并且通常按照从大到小的顺序排列:\(\sigma_1 \ge \sigma_2 \ge \dots \ge \sigma_p \ge 0\),其中 \(p=\min(m, n)\)。
- \(V\):一个 \(n \times n\) 的正交矩阵。其列向量 \(v_i\) 称为右奇异向量 (right-singular vectors)。\(V\) 的转置 \(V^T\) 是一个行正交矩阵。\(VV^T = I_n\)。
2. 核心性质¶
- 奇异值 (\(\sigma_i\)) 是矩阵 \(A^TA\) 或 \(AA^T\) 特征值的非负平方根。它们衡量了矩阵在对应奇异向量方向上“拉伸”或“变换”的强度。
- 矩阵 \(A\) 的秩 (Rank) 等于其非零奇异值的个数。这是一个非常重要的代数性质。
- 低秩近似 (Low-Rank Approximation):SVD 提供了矩阵 \(A\) 的最佳低秩近似。通过仅保留最大的 \(k\) 个奇异值及其对应的奇异向量,可以得到一个秩为 \(k\) 的矩阵 \(A_k = U_k \Sigma_k V_k^T\),这个矩阵是在所有秩为 \(k\) 的矩阵中最接近原始矩阵 \(A\) 的(在弗罗贝尼乌斯范数或 2-范数意义下)。
二、SVD 的几何意义¶
SVD 的精髓在于它将任意一个复杂的线性变换(由矩阵 \(A\) 表示)分解为三个基本且直观的几何变换:
- 一次旋转或反射 (\(V^T\)):首先,由 \(V^T\) 对原始向量空间进行一次坐标系的旋转或反射,但不改变向量的长度。它将原始坐标基转换为一组新的正交基(即 \(V\) 的列向量)。
- 一次坐标轴缩放 (\(\Sigma\)):接着,由对角矩阵 \(\Sigma\) 沿着新的坐标轴对向量进行缩放。每个轴的缩放比例就是对应的奇异值 \(\sigma_i\)。如果奇异值为 0,则该维度被压缩掉。
- 另一次旋转或反射 (\(U\)):最后,由 \(U\) 对缩放后的向量所在的空间进行另一次坐标系的旋转或反射,得到最终的变换结果。
因此,任何复杂的矩阵变换都可以看作是 旋转 -> 缩放 -> 再旋转 的组合。
三、SVD 的计算步骤¶
给定一个 \(m \times n\) 矩阵 \(A\),计算其 SVD 的一般步骤如下:
- 计算 \(A^TA\) 和 \(AA^T\)。这两个都是对称矩阵。
- 计算 \(A^TA\) 的特征值和特征向量:
- 求解 \(A^TA\) 的特征值 \(\lambda_i\) (它们都是非负的)。
- 将特征值按降序排列:\(\lambda_1 \ge \lambda_2 \ge \dots \ge \lambda_n \ge 0\)。
- 计算对应的标准正交特征向量 \(v_1, v_2, \dots, v_n\)。
- 构造 \(V\) 和 \(\Sigma\):
- 构造 \(V\):将计算出的特征向量 \(v_i\) 作为列向量,构成矩阵 \(V = [v_1, v_2, \dots, v_n]\)。
- 构造 \(\Sigma\):奇异值 \(\sigma_i = \sqrt{\lambda_i}\)。将它们作为对角元素放入一个 \(m \times n\) 的零矩阵中,得到 \(\Sigma\)。
- 构造 \(U\):
- 对于所有 \(\sigma_i > 0\) 的奇异值,可以通过关系式 \(u_i = \frac{1}{\sigma_i} A v_i\) 来计算对应的左奇异向量 \(u_i\)。
- 如果存在零奇异值(即矩阵 \(A\) 不满秩),则剩余的 \(u_i\) 可以通过求解 \(A^T u_i = 0\) 的标准正交基或者对已有的 \(u_i\) 向量组进行施密特正交化来补全,以构成完整的正交矩阵 \(U\)。
- 或者,也可以直接求解 \(AA^T\) 的标准正交特征向量来构成 \(U\)。
四、SVD 的应用实例¶
- 主成分分析 (PCA) 与数据降维:SVD 是实现 PCA 的一种常用且稳健的方法。右奇异向量 \(V\) 构成了数据协方差矩阵的主要方向,通过保留前 \(k\) 个最大的奇异值对应的奇异向量,可以将数据投影到一个低维空间,实现特征提取和降维。
- 图像压缩:一张灰度图可以看作一个矩阵。对该矩阵进行 SVD 分解后,会发现通常只有少数几个较大的奇异值,而大量较小的奇异值接近于零。通过舍弃这些小奇异值(即低秩近似),仅用少数几个奇异值和对应的奇异向量就能重构出与原图非常相似的图像,从而大大减少存储空间。
- 推荐系统 (Recommender Systems):在“用户-物品”评分矩阵中,很多评分是缺失的。SVD 可以通过分解原始的稀疏矩阵,并用低秩近似矩阵来填充缺失值,从而预测用户可能对未评分物品的喜好,实现个性化推荐。
- 噪声抑制 (Noise Reduction):在信号处理中,通常认为信号对应着数据矩阵中较大的奇异值,而噪声对应着较小的奇异值。通过对数据矩阵进行 SVD,将较小的奇异值置零,然后再重构矩阵,可以达到去除噪声、保留主要信号的目的。
- 自然语言处理 (NLP):在潜在语义索引(LSI)技术中,SVD 被用于分析“词语-文档”矩阵,以发现词语和文档之间的潜在关联,解决同义词和多义词问题。
五、SVD 的例题分析¶
考虑一个具体的例题,给定矩阵 \(A\):
要对矩阵 \(A\) 进行 SVD 分解。通过计算(例如使用 Python/NumPy 或 MATLAB),我们可以得到其 SVD 分解结果 \(A = U \Sigma V^T\) 的近似值:
- \(U\) 矩阵 (左奇异向量): $$ U \approx \begin{bmatrix} -0.215 & \phantom{-}0.887 & \phantom{-}0.408 \ -0.521 & \phantom{-}0.250 & -0.816 \ -0.828 & -0.388 & \phantom{-}0.408 \end{bmatrix} $$
- \(\Sigma\) 矩阵 (奇异值): $$ \Sigma \approx \begin{bmatrix} 16.848 & 0 & 0 \ 0 & 1.068 & 0 \ 0 & 0 & 0 \end{bmatrix} $$
- \(V^T\) 矩阵 (右奇异向量的转置): $$ V^T \approx \begin{bmatrix} -0.479 & -0.572 & -0.665 \ \phantom{-}0.776 & \phantom{-}0.076 & -0.625 \ \phantom{-}0.408 & -0.816 & \phantom{-}0.408 \end{bmatrix} $$
分析: 从对角矩阵 \(\Sigma\) 中我们可以清晰地看到,矩阵 \(A\) 有两个非零奇异值 (\(\sigma_1 \approx 16.848, \sigma_2 \approx 1.068\)) 和一个零奇异值。这说明矩阵 \(A\) 的秩为 2。最大的奇异值 \(16.848\) 携带了矩阵绝大部分的“能量”或信息。如果进行图像压缩或降维,保留第一个奇异值和对应的向量将是最高效的选择。
六、总结¶
奇异值分解 (SVD) 是一个基础而强大的数学工具。在学习和应用时,理解其背后的数学原理和几何直觉至关重要。SVD 的核心价值体现在:
- 通用性:它可以应用于任何形状、任何秩的矩阵。
- 揭示结构:它能清晰地揭示出矩阵的秩、列空间、零空间等重要代数特性。
- 数据近似:它为数据降维、压缩和去噪提供了理论上最优的低秩近似方法。
掌握 SVD 不仅有助于解决实际问题,更能加深对线性代数中线性变换和矩阵本质的理解。
重要公式¶
这个推导的核心在于高斯分布的概率密度函数以及取对数后如何简化。
第一步:写出高斯分布的完整形式¶
我们从第二行的假设开始,即观测和先验都服从多元高斯分布。一个通用的多元高斯分布 \(\mathcal{N}(\mathbf{x}; \mu, \Sigma)\) 的概率密度函数 (PDF) 是:
其中: * \(k\) 是向量 \(\mathbf{x}\) 的维度。 * \(|\Sigma|\) 是协方差矩阵 \(\Sigma\) 的行列式。 * \(\Sigma^{-1}\) 是协方差矩阵的逆。 * \((\mathbf{x} - \mu)^T \Sigma^{-1} (\mathbf{x} - \mu)\) 就是图片右下角注释中提到的马氏距离的平方,记作 \(||\mathbf{x} - \mu||^2_{\Sigma}\)。
第二步:取对数并代入 MAP 公式¶
我们最初的 MAP 优化目标是:
现在,我们对高斯分布的 PDF 取自然对数 (log):
这里的 \(C = -\frac{1}{2}\log((2\pi)^k |\Sigma|)\) 是一个与变量 \(\mathbf{x}\) 无关的常数。
现在我们把这个对数形式分别代入到 MAP 公式中的似然项 \(p(\mathbf{r}_i | \xi) = \mathcal{N}(\mu_i, \Sigma_i)\) 和先验项 \(p(\xi) = \mathcal{N}(\mu_{\xi}, \Sigma_{\xi})\):
- \(\log p(\mathbf{r}_i | \xi) = C_i - \frac{1}{2} ||\mathbf{r}_i - \mu_i||^2_{\Sigma_i}\)
- \(\log p(\xi) = C_{\xi} - \frac{1}{2} ||\xi - \mu_{\xi}||^2_{\Sigma_{\xi}}\)
将它们代回 MAP 公式:
第三步:化简¶
展开括号里的内容:
这里的 \(\arg \min_{\xi}\) 表示我们要寻找能使整个表达式最小化的 \(\xi\)。在这个优化问题中:
- 常数项可以忽略:项 \(- \sum_{i} C_i\) 和 \(- C_{\xi}\) 都不依赖于我们要优化的变量 \(\xi\),所以它们不影响最小值的“位置”,可以直接从优化目标中移除。
- 常数因子可以忽略:去掉常数项后,整个表达式可以乘以 2(一个正数),这同样不会改变最小值的“位置”。
去掉常数项和因子 \(\frac{1}{2}\) 后,我们就得到了最终的结果:
总结¶
所以,最后一步是这样来的: 1. 将高斯分布的概率密度函数写出来。 2. 取其自然对数,得到一个常数项和一个二次项(即马氏距离的平方)。 3. 将其代入 MAP 优化的目标函数。 4. 在求解最小值问题 (\(\arg \min\)) 时,忽略掉所有不影响最小化结果的常数项和正的常数因子,从而得到这个简洁的、只剩下马氏距离平方和的最小二乘形式。
这个结果非常重要,因为它把一个复杂的概率问题(最大化后验概率)转化成了一个更容易求解的优化问题(最小化二次误差和),这是很多算法(例如卡尔曼滤波、SLAM中的图优化)的理论基础。