7.1 SVD 的几何:旋转-拉伸-旋转
本节位置:模块 7 · SVD | 前置:6.4 对称矩阵与谱定理 | 预计:35 分钟
一句话:任何矩阵的作用都能拆成三步——先转、再沿坐标轴拉伸、再转;拉伸的倍数就是奇异值。
0. 场景引入
县档案馆要把 12 万张 1024×1024 的 8 位灰度老照片做成在线检索库。原始数据是 ,可对象存储预算只批了 25 GB,必须压到原来的五分之一左右。
最省事的办法是降分辨率,但馆里明确要求「放大后还能看清印章边缘」。另一条路是把每张图当成矩阵 ,只存前 个奇异值和左右奇异向量: 时存 个数,是原来 个像素的 ,看上去正好。
真正的决定不是「压不压」,而是每张图取多大的 :取小了,印章边缘糊;取大了,预算爆。而且「丢掉的那部分到底损失了什么」必须能提前算出来,不能压完再肉眼比对。代价也很实在:原图不留底,压过头就不可逆。
先转、再沿两根正交轴拉伸、再转回去——这个几何图像不只属于压缩,它也是后面低秩近似、伪逆与 PCA 共用的骨架。
读完你能回答三个问题:
- 为什么「先转、再拉伸、再转」三步能概括任意矩阵?
- 奇异值凭什么可以当作「每层图案的音量」?按它排序漏掉了什么?
- 一张 1024×1024 的图,前 50 个奇异值能保留多少能量,怎么估?
1. 直觉
先看最干净的情形 。它把单位圆上的 变成 。页首的图正是这个画面:圆被拉成椭圆,半轴长 3 和 2 就是两个奇异值;这里没有旋转,因为 已经沿坐标轴。
若 ,椭圆就歪了。但关键事实不变:结果仍是椭圆,只是两根轴不沿 、。
这个「单位球的像是超椭圆」的表述,Trefethen 与 Bau 第 4 讲给出了完整证明。
于是有三问:椭圆两根轴指向哪(两个正交的输出方向 )?它们多长(非负数 )?圆上哪两个正交方向被拉成了它们()?合起来就是
💡 一句话直觉:SVD 说「任何线性变换 = 找到一组输入正交方向,它们被拉伸成一组输出正交方向」。
1.1 它在现实世界里对应什么
把 1024×1024 的图想成一摞半透明胶片:
| 数学对象 | 图像里的对应物 |
|---|---|
| 的第 列 | 第 张胶片在「竖直方向」的条纹图案 |
| 的第 列 | 第 张胶片在「水平方向」的条纹图案 |
| 这张胶片的曝光强度(音量) | |
| 一张秩 1 的「条纹图」 | |
| 截断到 | 只洗前 张胶片来叠 |
这个对应的内核是叠加:把每张条纹图按 曝光、再逐像素相加,就得到原图。图像压缩、推荐系统的潜在因子、CT 重建,用的是同一摞胶片,只是「行」和「列」换了含义。
1.2 这个类比在哪里失效
- 胶片叠加是线性、可交换的;人眼不是。第 10 张胶片可能只占 0.1% 能量,却正好是印章的边缘。
- JPEG 用的是固定的 DCT 基,SVD 的基是每张图自己算的:你必须把 一并存下来,否则解不出图。
- 「旋转」包含反射(把纸翻面),所以准确说法是「正交变换—拉伸—正交变换」;二维反射的行列式为 ,肉眼看不出转了多少,但它仍是合法的正交变换。
1.3 量级直觉
一张 1024×1024 的图最多有 1024 个奇异值。 只留下 4.9% 的奇异值个数,却可能留下绝大部分能量。具体多少取决于谱:若按 衰减,则
这个式子说的是:按 衰减时,前 50 个方向就占了约 99% 的 Frobenius 能量。真实照片的谱衰减由内容决定,可能更快(大面积平滑)也可能更慢(纹理、噪声),必须对每张图实测,不能套这个数。
2. 定义
2.1 正交矩阵
方阵 若满足 ,就称为正交矩阵(orthogonal matrix),等价于「列向量两两正交且长度为 1」。几何上它保持内积与长度:,把球面映成球面,只改朝向、不拉伸。
2.2 奇异值分解
设 ,。则存在正交矩阵 、 及对角矩阵 ,使 。
只有 非零,其后全为 0。 称奇异值(singular value), 的列称左奇异向量(left singular vectors), 的列称右奇异向量(right singular vectors)。形状先记牢,这是最容易错的地方:
| 对象 | 形状 | 含义 |
|---|---|---|
| 任意实矩阵 | ||
| 输出空间的正交基 | ||
| 与 同形,对角线上是 | ||
| 输入空间的正交基 |
2.3 瘦 SVD 与三步读法
实际计算和存储常去掉零部分,只留前 项:
这叫瘦 SVD(thin SVD),每项是一个秩 1 矩阵,权重为 ;NumPy 的 full_matrices=False 给的就是它。把 按 拆开:先把输入换到奇异向量坐标系,再沿每根轴乘 ,最后转回原坐标系。只有中间一步改变长度。
3. 为什么这样定义
为什么必须正交? 若允许任意可逆矩阵,任何矩阵都能写成 ,这个式子毫无信息量。正交约束要求:输入的探测方向互不干扰、输出的结果方向互不干扰、中间耦合全部消失,只剩「各自乘一个数」。此外正交变换不放大误差,于是「拉伸」被干净地隔离在 里,分析稳定性时只看 。
为什么不叫特征分解? 特征分解(eigendecomposition) 要求 是方阵且可对角化, 可以是复数或负数。SVD 对任意 矩阵存在, 一定是非负实数。代价是 SVD 用两组基( 和 ),特征分解只用一组:SVD 描述的是「输入、输出各自换基后的对角形」,不是同一个空间里的换基。
它从哪里来? 预告(第 7.2 节展开): 是 对称半正定矩阵,谱定理保证它有正交特征基,特征值 ;取 、 的列为特征向量,再由 定义左奇异向量,就得到 SVD。
更早的历史线索是:Beltrami(1873)与 Jordan(1874)分别对实、复方阵给出了这种分解,之后才推广到长方形矩阵;Stewart 的综述 把这段谱系考据得很清楚。
3.1 反事实:按特征值大小排序会坏在哪
一个很自然的手滑,是把 SVD 当成「特征值分解的推广」,于是按 从大到小排序、保留前 个。取
它的特征多项式是 ,两个特征值都是 。按特征值排序,你会认为「它什么都不做」,截断成 ,误差 。
但 明明把 搬成 :。它的奇异值是 ,所以 ,误差 。特征值看的是「同一个方向进、同一个方向出」,SVD 看的是「一个方向进、另一个方向出」;非正规矩阵里这两件事可以完全脱节。
再看一个不那么极端的例子。 的特征值是 和 (上三角),而奇异值是 和 ——排序都不一样。按特征值保留 对应的方向 ,得到 ,误差
按奇异值排序的 误差只有 ,小 倍。坏的不是「算了半天」,而是选错了方向: 真正拉得最狠的输入方向是 ,不是 。
4. 性质与推导
4.1 核心性质
| 性质 | 式子 | 读法 |
|---|---|---|
| 最大拉伸 | 单位向量最多被拉 倍,取等当 | |
| 最小拉伸 | 仅当 可逆;最坏方向被压到 | |
| 体积 | 各方向拉伸倍数相乘(方阵) | |
| 秩 | 零奇异值个数 = 被压没的维数 | |
| 转置 | 与 共享奇异值, 互换 | |
| 正交不变 | 左边乘正交矩阵不改变拉伸 |
4.2 推导: 是最大放大倍数
在约束 下最大化 ,拉格朗日条件是 。这句话的意思是:取极值的方向必须是 的特征向量。此时 ,故最大放大倍数为 ,最小值为 。 半正定给出 ,开方总是合法——这就是奇异值非负的来源。
4.3 推导:为什么 自动正交
设 是 属于不同特征值的单位特征向量,则 ,于是
即 把正交的输入方向映成仍然正交的输出方向。拉伸不产生「串扰」,正是 SVD 能成立的关键;把单位球代入三步也立刻看出:球 → 球 → 椭球(半轴 )→ 转向的椭球。
5. 例子
5.1 手算: 的完整 SVD
特征值:,得 、。
右奇异向量: 时 ,取 ; 时 ,取 。两者正交,符合谱定理。
奇异值:,。
左奇异向量:由 得
核对: ✓; ✓;重建时 ,,相加正是 ✓
几何图像:单位圆 → 椭圆,半轴 (沿 ,约 )与 ;输入侧被拉得最狠的方向是 ( 对角线)。面积由 变 。NumPy 会给出 整体取负,这是符号自由度,重建结果相同,别当成算错。
5.2 场景:非方阵把球压成椭圆盘
把 映到 。,特征值 ,故 、。右奇异向量 、,第三个 对应 。
所以三维单位球 → 平面上的椭圆(半轴 和 1),沿 的分量被完全压没。这就是零空间的几何含义:3 维输入只有 2 个自由度活下来。
5.3 场景闭环:12 万张图、25 GB 预算
输入:12 万张 1024×1024 的 8 位灰度图,共 B ≈126 GB。SVD 逐张做,单张按 fp32 占 B=4 MB,峰值内存可控。
计算:完整 SVD 约 FLOP/张,12 万张合计 FLOP。单核按 10 GFLOP/s 估约 s,即 3.6 小时;32 核按线性加速估约 7 分钟。
输出:每张图一个 (按 或人工抽检定),存 。决策是「这张 ,那张 」,不是给全库一个统一 。
成本: 时数字个数是 102,450,只有原来的 9.8%;但字节账要重算:
| 存储格式 | 每张字节 | 相对原图 | 12 万张总量 |
|---|---|---|---|
| fp32 因子 | 409,800 B | 39% | 约 49 GB |
| fp16 因子 | 204,900 B | 19.5% | 约 24.6 GB |
| int8 因子 | 102,450 B | 9.8% | 约 12.3 GB |
(int8 一行按 1 B/数估,不含每列一个缩放因子。)
「9.8% 压缩」说的是数的个数,不是字节。只按个数报预算,会低估 2–4 倍,取决于因子用 fp16 还是 fp32。
失败条件:
- 谱衰减慢的图:纹理、噪声多的照片,前 50 个奇异值可能只占 70% 能量,印章边缘糊。兜底:逐图跑 曲线,不达标的图提高 或保留原图。
- 只报平均压缩比:预算按平均 算,尾部几张高 的图会把总量顶爆。兜底:按最坏图(最大 )估算总量。
- 符号与基不唯一:NumPy 给出的 可能整体变号,重建不变;但把 分开量化、再分别反量化,误差不再抵消。兜底:存完立刻重建一遍,按像素比对。
6. 常见误区
- 误区: 的列就是 的特征向量。 纠正:只有 对称半正定时才可能。 特征值全为 0,奇异值却是 ,且 、。
- 误区:奇异值 = 特征值的绝对值。 纠正:只对正规矩阵()成立。 特征值为 ,奇异值为 。
- 误区:旋转矩阵特征值是虚数,所以「没法分解」;或 SVD 唯一。 纠正: 的奇异值是 ,它本身就是正交矩阵,SVD 是 ,从不要求特征值存在。另外 SVD 不唯一: 同时变号不改变 ,重奇异值对应子空间内可任选正交基。
7. 概念网络
- 前置:6.4 对称矩阵与谱定理 —— 对称,保证有正交特征基,这是 SVD 的存在性来源。
- 前置:2.6 秩 —— 秩 = 非零奇异值个数;1.6 正交与投影 —— 正交变换不改变长度。
- 后续:7.2 计算与性质、7.3 低秩近似、7.4 伪逆与数值秩。
- 关联:5.1 行列式的几何 —— 。
8. 通往大模型:权重矩阵的「骨架」
出现位置:每层线性投影 ()、注意力里的 、LoRA 的增量 。
形状: 中 均为 (瘦版只存 列)。完整 SVD 是 ,实际只求前几十个奇异值(截断 SVD,如 scipy.sparse.linalg.svds)。
为什么需要:谱范数(spectral norm) 就是这一层的 Lipschitz 常数。对任意输入,
这个式子说的是: 是「输入扰动被放大的最坏倍数」。它连乘多层后大于 1,激活会指数增长;小于 1 则逐层衰减。 接近 0 时这一层几乎不可逆,微调梯度会沿那些方向爆炸;第 7.4 节的条件数(condition number) 会量化这个放大。
LoRA 的形状:,、,参数量 。 时为 ,占全参数 的 。 至多有 个非零奇异值,这就是「低秩更新」的几何解释(第 7.3 节)。
可检验结论:随机初始化的 (元素方差 )其奇异值落在 区间、(Marchenko–Pastur 律), 随 增长而不是 1;若某层谱快速衰减(如 ),说明它高度冗余,可用秩 50 近似而几乎不损失能量。
s = np.linalg.svd(W, compute_uv=False) # W: [4096, 4096]
print(s[0], s[-1], s[0] / s[-1])
算错时下游看到什么:若把特征值当奇异值排序,选出的「主方向」可能完全错—— 会被当成零矩阵,重建图出现本不该有的重影,或者把真实边缘当噪声抹掉。用户看到的是印章上的字糊成一团、OCR 拒识,而压缩率报表上一切正常。兜底是保留原图,并用 与人工抽检两道门槛。
9. 练习
- 概念:为什么 SVD 要求 正交,而不是任意可逆矩阵?从「信息量」角度说一句。
- 计算:求 与 的 SVD(奇异值、左右奇异向量),并分别解释 的负号与 的几何含义。
- 场景:某层奇异值为 ,输入扰动 ,输出扰动最大多少?哪个方向最危险?
- 开放:只保留 会丢失哪类信息?对「分类」与「生成」两种任务,损失一样吗?
参考答案
- 任意可逆矩阵有 个自由度,任何矩阵都能被「解释」成对角形;正交约束把自由度压到最少,使 成为唯一携带拉伸信息的对象,且数值上不放大误差。
- ,按降序 :、;、。故 、、,负号来自 把 翻到 (反射)。对 :,特征值 ,;、、、。 表示沿 的输入全被压成 0,秩为 1。
- 最大 ,沿 ; 的方向几乎不传扰动,但那里的信息也不可恢复。
- 丢掉除最大拉伸方向外的全部方向。分类常只需少数判别方向,损失可能很小;生成需要细节与多样性,单方向近似通常不可接受。
10. 一页速记
- :正交—拉伸—正交,对任意 矩阵成立。
- 物理意义 / 现实对应:SVD 是一台「先转正、再沿轴拉伸、再转回去」的机器;在图像里就是「把画面拆成一摞按音量排序的条纹胶片」, 是每张胶片的曝光强度。
- 是椭球半轴长;;(方阵)。
- ,等号在 ; 就是谱范数。
- 与 共享奇异值, 自动正交;符号与重奇异值带来不唯一性,NumPy 差个负号是正常的。
11. 参考文献与致谢
这一页的知识不是凭空来的。下面列出本页直接借用的原始工作与权威整理;正文中的人名、定理名已链接到对应条目。链接优先指向 DOI、arXiv 或可长期访问的原文存档。
- 斯图尔特(G. W. Stewart, 1993):On the Early History of the Singular Value Decomposition。考据了 SVD 的早期谱系——Beltrami(1873)与 Jordan(1874)先对实、复方阵给出分解,此后才推广到长方形矩阵,正是本页第 3 节「它从哪里来」的时间线依据。SIAM Review 35(4)
- Trefethen 与 Bau(Lloyd N. Trefethen & David Bau III, 1997):Numerical Linear Algebra。第 4 讲把 SVD 讲成「单位球的像是超椭圆,半轴长就是奇异值」,并用 Theorem 4.1 证明任意 矩阵都有 SVD,是本页第 1–2 节几何图像与存在性的直接来源。SIAM, 1997
下一篇 → 7.2 SVD 的计算与性质
随堂测 · 4 题
源文件:07-SVD/01-SVD的几何.md