想象你开了一家“圆圆年糕坊”,揉出来的面团永远是完美的圆。有一天大客户说:我们要斜着的椭圆年糕。你研究了一下流水线,发现只要三台机器就能把任何圆形面饼变成任意倾斜的椭圆:第一台是旋转台,负责把面饼转到合适的角度;第二台是压机,沿横、竖两个方向分别压 σ₁ 倍和 σ₂ 倍;第三台又是旋转台,把压好的形状转到最终方向。这套“旋转—拉伸—再旋转”的流水线,就是传说中的“奇异值分解”(SVD)。矩阵里的每一个变换,本质上都是这样三步:三个因子相乘,A = UΣVᵀ,其中 σ 就是你压机的档位。这篇文章带你在“年糕坊”里看懂 SVD 的几何意义,从直觉到推导一次打通。

岗位关联

SVD 是机器学习降维、推荐系统、数据压缩的地基。懂了几何意义,你就能看懂 PCA、矩阵补全甚至图像去噪的核心操作,面试时讲出“先旋转、再拉伸、再旋转”的图形直觉,直接拉开差距。

目录
  1. 可视化演示
  2. 1. 矩阵即变换
  3. 2. 三步拆解
  4. 3. 奇异值含义
  5. 4. 分解推导
  6. 5. 几何案例
  7. 6. 降维应用
  8. 7. 特征分解对比
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示高斯消元法求解3x3线性方程组的完整过程:前向消元化为上三角矩阵,回代求解变量,逐步展示矩阵变换。

本节配有交互动效(进入视口后自动加载,约 3KB)。

高斯消元法 前向消元:行变换消去下三角元素 归一化:主对角线元素化为1 回代:从下到上求解变量

1. 矩阵即变换

年糕坊每天进货,每个面团进来时都贴着一张标签——它的“坐标”(比如“朝东 1 格、朝北 2 格”)。你不需要挨个处理面团,只需要写一张“变换说明书”:这张纸告诉工人,东方向的面团挪到哪、北方向的面团挪到哪,其余面团按同样的规则跟着走。这张说明书,就是矩阵。

数学上,矩阵 A 定义了一个从 n 维空间到 m 维空间的映射:输入向量 x,输出向量 y = Ax。它有两个“线性保持”的规矩:把两个面团叠加后再加工,等于分别加工后再叠加;把一个面团放大 c 倍再加工,等于加工后的输出也放大 c 倍。几何视角下,矩阵的每一列恰好是“东方向”或“北方向”基向量经过变换后的落点,知道列向量,就知道了整个变换。

所以矩阵不过是一张“批量变换说明书”,列向量就是基向量的最终去向。有了这张图景,我们就能回答:任意一张说明书,能不能拆成几台固定机器的串联?答案是能——这就是下一节的流水线秘密。

yi=∑j=1naijxj,i=1,2,…,my_i = \sum_{j=1}^{n} a_{ij} x_j, \quad i = 1, 2, \dots, m
输出向量的每个分量,都是输入向量各分量按矩阵行权重的加权求和。
  1. 输出分量 y_i这是变换后向量的第 i 个分量,表示“加工后的面团在新坐标轴第 i 格的位置”。
    yiy_i
  2. 矩阵元素 a_{ij}这是 A 的第 i 行第 j 列元素,相当于说明书里“第 j 个输入方向对第 i 个输出方向的贡献权重”。
    aija_{ij}
  3. 输入分量 x_j输入的每个分量是面团在每个方向上的原始位置。
    xjx_j
  4. 对 j 求和把所有输入方向的贡献累加,才得到输出的一个分量,就像多个传送带汇到同一条出口。
    ∑j=1naijxj\sum_{j=1}^{n} a_{ij} x_j

2. 三步拆解

老王发现了年糕坊的终极秘密:不管客户要什么斜度的椭圆年糕,流水线都只需要三台机器串联。第一台旋转台把圆形面饼摆正,第二台压机沿着横竖方向拉出长宽比,第三台旋转台再把成品转到客户要的角度。任何矩阵变换,都等价于这样的“旋转—拉伸—再旋转”。

这个分解写成公式就是 A = UΣVᵀ。其中 Vᵀ 是 n 维空间里的旋转(或镜像),它先把输入转到一个“标准方向”;Σ 是对角拉伸矩阵,对角线上放着奇异值 σ₁, σ₂, ……,代表沿标准方向拉伸的倍数;U 是 m 维空间里的旋转,把拉伸后的形状转到最终输出空间的方向。三个因子中,U 和 V 都是正交矩阵(列向量互相垂直且长度为 1),而 Σ 除了对角线外全是 0。

现在你知道了流水线的三段结构:Vᵀ 摆正、Σ 拉伸、U 回正。下一节我们看看压机上的“档位刻度”——奇异值到底在描述什么。

Am×n=Um×m Σm×n Vn×n⊤A_{m \times n} = U_{m \times m} \ \Sigma_{m \times n} \ V^\top_{n \times n}
A 被拆成三个因子:先右乘 Vᵀ 旋转,再乘 Σ 拉伸,最后左乘 U 旋转。
  1. A 是原始矩阵这张“变换说明书”负责把输入空间映到输出空间,形状是 m 行 n 列。
    Am×nA_{m \times n}
  2. U 是左乘旋转矩阵列向量左奇异向量 u_i,是 m 维输出空间的一组正交基,负责最后一步旋转。
    Um×mU_{m \times m}
  3. Σ 是拉伸矩阵除了对角线 σ₁, σ₂, …… 外全为 0,对角元表示沿各标准方向拉伸的倍数;由于 A 是 m×n,Σ 也是 m×n 的“非方对角阵”。
    Σm×n\Sigma_{m \times n}
  4. Vᵀ 是右乘旋转矩阵V 的列是右奇异向量 v_i,Vᵀ 把输入向量先旋转,对齐到拉伸的方向。
    Vn×n⊤V^\top_{n \times n}

3. 奇异值含义

压机上有一排档位刻度:σ₁, σ₂, ……,每个档位对应一个方向的拉伸倍数。“3 倍方向”和“0.5 倍方向”是两回事——不仅倍数不同,方向也不同。右奇异向量 v_i 告诉你:这个档位对应的是拉伸前的哪个方向。左奇异向量 u_i 告诉你:拉伸后的结果落在输出空间的哪个方向。

数学表达很简洁:Av_i = σ_i u_i。也就是说,输入方向 v_i 上的单位向量,经过 A 变换后,变成了方向 u_i、长度 σ_i 的向量。奇异值按从大到小排列:σ₁ ≥ σ₂ ≥ …… ≥ σ_r > 0,其中 r 是矩阵的秩。排在最后的奇异值为 0 时,说明对应方向被彻底压扁——面饼在那个维度上完全没有厚度了。

档位和方向都清楚了。但怎么知道具体某台压机该调成几倍、旋转台该转多少度?这就要用“倒查法”来反推流水线的参数了。

Avi=σiui,σ1≥σ2≥⋯≥σr>0,σr+1=⋯=0A v_i = \sigma_i u_i, \quad \sigma_1 \ge \sigma_2 \ge \dots \ge \sigma_r > 0, \quad \sigma_{r+1} = \dots = 0
奇异值 = 沿特定方向的拉伸倍数;奇异向量 = 拉伸前后的方向标记。
  1. A v_i右奇异向量 v_i 作为输入,先被 Vᵀ 旋转到坐标轴,再被 Σ 拉伸,最后被 U 转出——结果等于 σ_i u_i。
    AviA v_i
  2. σ_i 是拉伸倍数它一定是非负实数,表示第 i 个方向被放大(σ>1)还是被压缩(σ<1)。
    σi\sigma_i
  3. u_i 是左奇异向量拉伸后单位方向向量的“名字”,在输出空间里构成正交基。
    uiu_i
  4. 降序排列与零值Σ 的对角元按从大到小排,非零奇异值个数正好等于矩阵的秩 r;零奇异值对应被压扁的方向。
    σ1≥σ2≥⋯≥σr>0\sigma_1 \ge \sigma_2 \ge \dots \ge \sigma_r > 0

4. 分解推导

怎么反推流水线参数?老王用了一个聪明的办法:把成品送回入口,和原料再比一次。数学上,就是用 A 的转置乘 A 本身——AᵀA 像一台“复测仪”,它把产品的每一步变形记录都“平方”地放大:某方向拉伸了 σ 倍,在 AᵀA 里就会显示成 σ² 倍。而且 AᵀA 是对称矩阵,一定有标准正交的特征向量,特征值全部非负。

具体流程分三步:先计算 AᵀA,对它做特征分解,特征向量组成 V,特征值开平方就是奇异值 σ;再用 u_i = Av_i / σ_i 求出左奇异向量(或对 AAᵀ 做特征分解直接得 U)。因为 AᵀA 是实对称半正定矩阵,所以 V 是正交矩阵,且特征值 λ_i = σ_i² ≥ 0,整个推导水到渠成。

倒查法成功了:只需要对 AᵀA 做一次特征分解,旋转参数 V 和档位 σ 全部到手。那么这些参数在几何上到底画出了什么形状?我们放进一块圆形面团试试。

A⊤A=(UΣV⊤)⊤(UΣV⊤)=VΣ⊤U⊤UΣV⊤=VΣ⊤ΣV⊤=V(σ12σ22⋱)V⊤A^\top A = (U \Sigma V^\top)^\top (U \Sigma V^\top) = V \Sigma^\top U^\top U \Sigma V^\top = V \Sigma^\top \Sigma V^\top = V \begin{pmatrix} \sigma_1^2 & & \\ & \sigma_2^2 & \\ & & \ddots \end{pmatrix} V^\top
AᵀA 的特征值是奇异值的平方,特征向量就是右奇异向量 V 的列。
  1. 写开 AᵀA把 A = UΣVᵀ 代入,转置反序得 Aᵀ = VΣᵀUᵀ。
    A⊤A=(UΣV⊤)⊤(UΣV⊤)A^\top A = (U \Sigma V^\top)^\top (U \Sigma V^\top)
  2. 利用 U 的正交性UᵀU = I,中间的 U 对消,只剩 VΣᵀΣVᵀ。
    VΣ⊤U⊤UΣV⊤=VΣ⊤ΣV⊤V \Sigma^\top U^\top U \Sigma V^\top = V \Sigma^\top \Sigma V^\top
  3. ΣᵀΣ 是对角方阵对角元是奇异值的平方 σᵢ²,形状 n×n。
    Σ⊤Σ=diag(σ12,σ22,… )\Sigma^\top \Sigma = \mathrm{diag}(\sigma_1^2, \sigma_2^2, \dots)
  4. 读作 VΛVᵀ这正是对称矩阵的特征分解形式,所以 V 的列是 AᵀA 的特征向量,Λ 对角元是 σᵢ²。
    A⊤A=VΛV⊤,Λ=diag(σ12,σ22,… )A^\top A = V \Lambda V^\top, \quad \Lambda = \mathrm{diag}(\sigma_1^2, \sigma_2^2, \dots)

5. 几何案例

现在把一块完美的圆形面饼放进流水线。经过 Vᵀ 旋转:圆还是圆,只是转了角度。经过 Σ 拉伸:变成正椭圆,长半轴长 σ₁,短半轴长 σ₂。经过 U 旋转:椭圆整体转了个角度,但形状不变。所以——单位圆在任意矩阵 A 下的像,一定是一个椭圆,而奇异值恰好就是它的半轴长度。

写成参数式:单位圆上的点 v = (cos t, sin t),经过变换后 y = Av = U(σ₁ cos t, σ₂ sin t)ᵀ。当某个奇异值为 0 时,对应半轴消失,椭圆退化成一条线段甚至一个点——这就是“秩亏损”的几何模样。最大奇异值方向对应椭圆长轴,是最“分散”的方向;最小奇异值方向对应短轴,是最“拥挤”的方向。

看到圆变椭圆,你就抓住了 SVD 几何意义的全部画面。反过来想:既然某些方向被压得几乎为零,是不是可以把那些方向直接砍掉,节省成本?这正是下一节降维应用的核心思想。

(y1y2)=U(σ1cos⁡tσ2sin⁡t),0≤t<2π\begin{pmatrix} y_1 \\ y_2 \end{pmatrix} = U \begin{pmatrix} \sigma_1 \cos t \\ \sigma_2 \sin t \end{pmatrix}, \quad 0 \le t < 2\pi
单位圆的像是一个以 σ₁、σ₂ 为半轴、沿 U 列方向定向的椭圆。
  1. 参数 t 扫过单位圆t 从 0 到 2π,点 (cos t, sin t) 走完整个圆周。
    cos⁡t, sin⁡t\cos t, \ \sin t
  2. Σ 拉伸成椭圆圆上的点被压成半轴 σ₁、σ₂ 的正椭圆。
    (σ1cos⁡tσ2sin⁡t)\begin{pmatrix} \sigma_1 \cos t \\ \sigma_2 \sin t \end{pmatrix}
  3. U 旋转定向左乘 U 把正椭圆旋转到输出空间,长轴方向即左奇异向量 u₁。
    U(σ1cos⁡tσ2sin⁡t)U \begin{pmatrix} \sigma_1 \cos t \\ \sigma_2 \sin t \end{pmatrix}
  4. 零奇异值退化若 σ₂ = 0,椭圆退化成沿 u₁ 的线段,矩阵不可逆——面饼被压成“面条”了。
    σ2=0⇒y=σ1cos⁡t⋅u1\sigma_2 = 0 \Rightarrow y = \sigma_1 \cos t \cdot u_1

6. 降维应用

质检员发现,第 3 档压机几乎不工作——σ₃ 小到 0.01,等于这个方向上的面团厚度彻底被忽略。老王决定:干脆关掉这台压机,把三维加工简化为二维加工,产品看起来几乎一样,电费却省了一大截。这就是截断 SVD(低秩近似)。

数学操作很简单:只保留前 k 个最大的奇异值及其对应的奇异向量,丢掉其余的,得到近似矩阵 UₖΣₖVₖᵀ。著名的 Eckart–Young 定理保证:在所有秩不超过 k 的矩阵里,这个截断近似与 A 的误差最小。实际工作中,数据压缩用它保留主要能量;推荐系统把用户—物品评分矩阵拆成低秩因子,预测未出现的评分;PCA 的本质也是它——把数据旋转到最分散的方向后丢掉小 σ 方向。

关掉小压机,省电又省空间——这就是降维的本质。最后还有一个问题:SVD 和你在课本上见过的“特征分解”长得那么像,它们到底是什么关系?

A~=UkΣkVk⊤=∑i=1kσiuivi⊤\tilde{A} = U_k \Sigma_k V_k^\top = \sum_{i=1}^{k} \sigma_i u_i v_i^\top
用前 k 个“旋转—拉伸”成分之和逼近原矩阵,误差在所有 k 秩矩阵中最小。
  1. 截断因子矩阵只取 U 的前 k 列、Σ 的左上 k×k 块、Vᵀ 的前 k 行。
    UkΣkVk⊤U_k \Sigma_k V_k^\top
  2. 外积展开矩阵被改写成 k 个子矩阵之和,每个子矩阵是 u_i v_iᵀ 按 σ_i 加权。
    ∑i=1kσiuivi⊤\sum_{i=1}^{k} \sigma_i u_i v_i^\top
  3. σ_i 是权重σ 越大,该项对原矩阵的贡献越大;丢掉的是 σ 接近 0 的“压扁方向”。
    σiuivi⊤\sigma_i u_i v_i^\top
  4. 能量占比常用 (σ₁²+……+σₖ²)/(σ₁²+……+σ_r²) 衡量保留了原矩阵多少“能量”。
    ∑i=1kσi2∑i=1rσi2\frac{\sum_{i=1}^{k} \sigma_i^2}{\sum_{i=1}^{r} \sigma_i^2}

7. 特征分解对比

如果老王的工厂布局是“左右对称”的——第一道旋转台和第二道旋转台恰好转同样的角度、只是方向相反,那么三步流水线看起来就像只有两步。这种特殊情况对应数学里的对称矩阵。特征分解 A = QΛQᵀ 对实对称矩阵成立,Q 是正交矩阵,Λ 是实特征值对角阵。

但特征分解有个苛刻条件:只适用于“可对角化的方阵”,而且特征向量基不保证正交。SVD 就宽容得多:任何实矩阵(哪怕是长方形)都有 SVD,且 U、V 永远正交。当 A 是实对称矩阵时,特征分解就是它的 SVD 特例——若特征值非负,直接取 U = V = Q、Σ = Λ;若出现负特征值,只需把符号吸收进 U 的对应列(理解为“先拉伸再镜像”)。更深一层,任意矩阵 A 的 SVD 其实就是 AᵀA 的特征分解(给出 V 和 σ²)加上 AAᵀ 的特征分解(给出 U)。

现在回头看老王的三台机器:对称工厂里,第一台旋转台转 θ,第二台旋转台转 −θ,整体净效果只是一个“旋转 + 拉伸”。理解了这个联系,你就同时掌握了两把利器——特征分解是特殊工坊的专用机器,SVD 是万能流水线,任何矩阵进了它都能被拆成清清楚楚的三步。

---

A=QΛQ⊤=UΣV⊤,实对称时 U=V=Q, Σ=∣Λ∣A = Q \Lambda Q^\top = U \Sigma V^\top, \quad \text{实对称时 } U = V = Q, \ \Sigma = |\Lambda|
对称矩阵是“工厂布局对称”的特例:两道旋转重合,特征分解与 SVD 合一。
  1. QΛQᵀ 是特征分解Q 的列是特征向量,Λ 对角元是特征值 λ_i,要求 A 必须是对称方阵。
    A=QΛQ⊤A = Q \Lambda Q^\top
  2. SVD 同时成立每个实矩阵都有 SVD,对称矩阵自然不例外。
    A=UΣV⊤A = U \Sigma V^\top
  3. 对称时 U=V=Q右奇异向量和左奇异向量相同,都等于对称矩阵的特征向量。
    U=V=QU = V = Q
  4. Σ=|Λ| 符号处理负特征值的符号被 U 的列吸收,奇异值本身永远非负。
    Σ=∣Λ∣\Sigma = |\Lambda|

AI 应用场景

场景一:PCA 主成分分析

阶段:特征工程与数据预处理

解决的问题:高维数据(比如 1000 维的基因表达谱)训练慢、过拟合严重。传统做法是逐维筛选特征,费时且丢失相关性信息。PCA 利用 SVD 把数据旋转到最分散的方向上,丢掉小奇异值方向,保留前 k 个大奇异值方向,实现几十倍的降维。

具体案例:人脸识别中的“特征脸”方法,把每张人脸图片拉成向量拼成矩阵 A,对它做 SVD 取得前 k 个左奇异向量作为“特征脸”基,每张脸只需 k 个系数就能重建和比对,识别速度提升数十倍。

场景二:推荐系统矩阵补全

阶段:模型训练与推理

解决的问题:用户-物品评分矩阵通常 99% 是缺失值,直接做矩阵乘法会得到一堆空洞。SVD 的低秩近似认为“用户的偏好只由少数几个隐藏因子决定”,用 UₖΣₖVₖᵀ 重建矩阵,就能预测缺失评分。

具体案例:Netflix 推荐系统把“用户 × 电影”评分矩阵做截断 SVD,k 取 20~50,得到的隐藏因子恰好对应“动作片偏好”“爱情片偏好”等人可解释的维度,系统据此给用户推荐高预测分的电影。

场景三:图像压缩与去噪

阶段:后处理与数据存储

解决的问题:一张 1000×1000 的灰度图存成矩阵要 100 万个数字,传输慢。SVD 把图像拆成“几层主要纹理”,前 k 个奇异值往往贡献了 99% 的能量,丢弃后面的小奇异值即完成压缩,还能顺带滤掉高频噪声。

具体案例:医学影像系统将 MRI 切片矩阵做截断 SVD,k 取原秩的 20% 时图像几乎不失真,存储量下降 80%;人眼看到的是平滑的器官轮廓,那些被丢掉的正是传感器噪点。

Python 演示

python37 行
import numpy as npimport matplotlib.pyplot as plt def svd_geometry(A):    U, s, Vt = np.linalg.svd(A)    print("奇异值:", np.round(s, 4))    print("左奇异向量 U:")    print(np.round(U, 4))    print("右奇异向量 V^T:")    print(np.round(Vt, 4))     theta = np.linspace(0, 2 * np.pi, 200)    circle = np.stack([np.cos(theta), np.sin(theta)], axis=0)     trans = A @ circle    recon = (U @ np.diag(s) @ Vt) @ circle     fig, axes = plt.subplots(1, 3, figsize=(12, 4))    axes[0].plot(circle[0], circle[1], color="#818CF8")    axes[0].set_title("unit circle")    axes[0].axis("equal")    axes[1].plot(trans[0], trans[1], color="#F43F5E")    axes[1].set_title("A @ circle")    axes[1].axis("equal")    axes[2].plot(recon[0], recon[1], color="#10B981")    axes[2].set_title("U S Vt @ circle")    axes[2].axis("equal")    plt.show()    return U, s, Vt if __name__ == "__main__":    A = np.array([[2.0, 1.0], [0.5, 1.5]])    U, s, Vt = svd_geometry(A)    err = np.max(np.abs(A - U @ np.diag(s) @ Vt))    print("重建误差:", err)    energy = s**2 / np.sum(s**2)    print("能量占比:", np.round(energy, 4))
目的:用 NumPy 对 2×2 矩阵做 SVD 分解,把单位圆变换成椭圆,验证 A = UΣVᵀ 的重建精度并输出奇异值能量占比。
  1. U, s, Vt = np.linalg.svd(A)一行拿到 SVD 三件套:左奇异向量、奇异值数组、右奇异向量转置。
  2. circle = np.stack([np.cos(theta), np.sin(theta)], axis=0)生成单位圆上的 200 个采样点,每列是一个二维向量。
  3. trans = A @ circle用原矩阵直接变换圆,得到目标椭圆。
  4. recon = (U @ np.diag(s) @ Vt) @ circle把 SVD 三因子乘回去再变换同一个圆,验证分解无误。
  5. np.max(np.abs(A - U @ np.diag(s) @ Vt))计算重建矩阵与原矩阵的最大误差,应接近 0。
  6. energy = s**2 / np.sum(s**2)各奇异值平方占总量比例,用来决定降维时保留前几个方向。

常见误区

误区总觉得“SVD 就是求特征值、特征向量,和特征分解是一回事”,看到 A = UΣVᵀ 就直接叫它特征分解。

正解特征分解 A = QΛQ⁻¹ 只对可对角化的方阵有意义,且 Q 不保证正交;SVD 对任意实矩阵(包括长方形)都存在,且 U、V 永远是正交矩阵。可以这样记:特征分解是“对称工坊”的专用机器,SVD 是“万能流水线”,两者只有在对称矩阵时才重合。

为何常见:两者公式结构相似,都是“矩阵 = 基变换 × 对角阵 × 逆基变换”,初学者很容易只看到形式没看到适用范围。

误区“A v = σ u,所以 u 不就是 A 的特征向量吗?把等式两边同时除以 σ 就得到了 A 特征向量。”

正解A 的特征向量要求 A x = λ x,输入输出在同一空间。而 Av_i = σ_i u_i 里,v_i 在输入空间,u_i 在输出空间,两者维数都可能不同。U 的列是 AAᵀ 的特征向量,V 的列才是 AᵀA 的特征向量——方向不能张冠李戴。

为何常见:符号上“像特征方程”很容易误导,尤其是方阵时 u 和 v 都是同维向量,更容易混淆。

误区“奇异值小于 0.1 的项直接丢掉,反正数据也看不出来差别,完全无损。”

正解截断 SVD 一定是有损压缩,只是误差可控。Eckart–Young 定理只能保证它是最优的有损近似,不能保证无损。丢掉的 σ 方向虽然“扁”,但累积起来可能包含可分辨的细节甚至关键信息。工程上要用能量占比(前 k 个 σ² 之和占总 σ² 的比例)来评估损失。

为何常见:视觉上图像压缩“看着没区别”给人零损失的错觉;在推荐系统里,被压扁的方向可能正是长尾物品的信息。

误区“特征值可以为负,那奇异值也应该可以为负,分解的时候符号想怎么放就怎么放。”

正解奇异值定义为 AᵀA 特征值的算术平方根,而非负值是 SVD 的约定(Σ 的对角元 σ ≥ 0)。负号不会出现在 Σ 里,而是被吸收进 U 的对应列——几何上等价于“先拉伸再镜像”。

为何常见:特征值的负号习惯根深蒂固,看到 λ = σ² 时容易直接开方取正负两个解。

误区“对矩阵做 SVD 后,矩阵的最后几行对应的就是最不重要的数据,直接删掉这几行就行。”

正解截断 SVD 不能“删行”,而是要把 A 改写成 Σσᵢ uᵢvᵢᵀ 的和,只保留前 k 个“外积项”。每个外积项都涉及 U 的一列、V 的一行,丢掉的是“方向组合”而非某个原始坐标轴。这也是为什么 SVD 能发现隐藏因子,而简单删列只能删除表面特征。

为何常见:受“PCA 去掉后几个主成分”的影响,以为低秩近似就是删行删列,低估了基变换的作用。

面试题

Q1. 在 SVD 分解 A = UΣVᵀ 中,Σ 的对角元素被称为什么?

单选题 · easy

  • A.特征值
  • B.奇异值← 正确答案
  • C.对角值
  • D.分散值

答案:B。Σ 的对角元素称为奇异值,来源于 AᵀA 特征值的平方根。特征值属于特征分解语境,对角值是描述性叫法而非标准术语,分散值是干扰项。记住“奇异值 = 拉伸倍数”就选不错。

Q2. SVD 中右奇异向量矩阵 V 的列向量是什么矩阵的特征向量?

单选题 · mid

  • A.A 本身
  • B.Aᵀ
  • C.AᵀA← 正确答案
  • D.AAᵀ

答案:C。推导 AᵀA = VΣᵀΣVᵀ 可知 V 的列是 AᵀA 的特征向量,特征值等于奇异值的平方。U 的列才是 AAᵀ 的特征向量。这一步推导是 SVD 面试的必考基本功。

Q3. 一个 4×3 矩阵有 2 个非零奇异值,它的秩是多少?

单选题 · mid

  • A.1
  • B.2← 正确答案
  • C.3
  • D.4

答案:B。矩阵的秩等于非零奇异值的个数。4×3 矩阵列数是 3,秩最大为 3,但非零奇异值只有 2 个,说明有一列与其他列线性相关,几何上对应单位球被压扁成一个二维椭圆面。

Q4. 实对称矩阵的特征分解与它的 SVD 是什么关系?

单选题 · mid

  • A.完全无关
  • B.特征值即奇异值
  • C.特征分解是特例← 正确答案
  • D.SVD 是特例

答案:C。实对称矩阵满足 A = QΛQᵀ,Q 正交,此时 A 的 SVD 可以由特征分解得到:U = V = Q(特征值非负时),Σ = |Λ|,负号吸收进 U 的列。因此特征分解是 SVD 在对称矩阵上的特例,而不是反过来。

Q5. 单位圆经矩阵 A∈R²ˣ² 变换后的像是什么形状?

单选题 · hard

  • A.圆
  • B.双曲线
  • C.椭圆← 正确答案
  • D.抛物线

答案:C。单位圆先被 Vᵀ 旋转仍是圆,被 Σ 拉伸成正椭圆,再被 U 旋转仍是椭圆,半轴长为 σ₁、σ₂。仅当 σ₁ = σ₂ 时才退化为圆,双曲线和抛物线需要非线性映射,线性变换做不到。这是 SVD 几何意义最经典的结论。

Q6. SVD 中奇异值的排序约定是什么?

单选题 · easy

  • A.从小到大
  • B.从大到小← 正确答案
  • C.随机排列
  • D.按矩阵行列排

答案:B。SVD 约定奇异值按从大到小排列,σ₁ ≥ σ₂ ≥ … ≥ σ_r > 0。这个约定让截断 SVD 的“保留前 k 大”有了统一语义,能量占比、PCA 主成分顺序都依赖它。选“从小到大”就把主次颠倒了。

Q7. 关于截断 SVD 保留前 k 个成分,下列说法正确的有?

多选题 · mid

  • A.结果是最优 k 秩近似← 正确答案
  • B.一定可以无损还原
  • C.可用于图像压缩去噪← 正确答案
  • D.丢弃的是小奇异值项← 正确答案

答案:ACD。Eckart–Young 定理保证截断 SVD 是 Frobenius 范数意义下的最优 k 秩近似(A 对);但截断必然有损,能量集中在的细节可能丢失(B 错);图像压缩去噪正是丢掉噪声对应的微小奇异值(C 对);截断就是丢弃小奇异值对应的外积项(D 对)。

Q8. 关于奇异值与奇异向量,以下说法正确的有?

多选题 · hard

  • A.奇异值必须是非负实数← 正确答案
  • B.零奇异值个数等于矩阵秩
  • C.U 的列是 AAᵀ 的特征向量← 正确答案
  • D.奇异值可以为负数

答案:AC。奇异值定义为 AᵀA 特征值的算术平方根,非负(A 对);非零奇异值个数等于秩,零奇异值个数不是(B 错);由 AAᵀ = UΣΣᵀUᵀ 知 U 的列是 AAᵀ 的特征向量(C 对);负号被吸收进 U 的列,σ 本身不为负(D 错)。

Q9. Eckart–Young 定理声称截断 SVD 的最优性是在什么意义下?

单选题 · extreme

  • A.稀疏性最大
  • B.特征值最大
  • C.范数误差最小← 正确答案
  • D.奇异值个数最少

答案:C。该定理保证在所有秩不超过 k 的矩阵里,截断 SVD 得到的矩阵与原矩阵的 Frobenius 范数(及谱范数)误差最小。它说明“丢小奇异值”不是拍脑袋,而是数学上的最优有损压缩策略。

Q10. 以下哪些是 SVD 的典型应用场景?

多选题 · easy

  • A.PCA 数据降维← 正确答案
  • B.推荐系统补全评分← 正确答案
  • C.图像压缩与去噪← 正确答案
  • D.字符串匹配

答案:ABC。PCA 本质是 SVD(A 对);推荐系统用低秩近似预测缺失评分(B 对);图像压缩丢小奇异值(C 对);字符串匹配通常用编辑距离或哈希,不涉及矩阵分解(D 错)。记住“旋转-拉伸-旋转”三件套能解决的都跟矩阵结构有关。