Math-03.线性代数-05.SVD与低秩分解

本页讲解奇异值分解(singular value decomposition,SVD)——任意矩阵最稳定的分解工具,也是 LoRA(Low-Rank Adaptation,低秩适配)的数学基础。侧重点:几何直觉易错点纠正工业应用钩子

段末注释SVD 将 $A \in \mathbb{R}^{m \times n}$ 写成 $A = U \Sigma V^\top$:$U,V$ 正交,$\Sigma$ 对角且非负(奇异值 $\sigma_1 \ge \sigma_2 \ge \cdots$)。它把复杂线性变换拆成「旋转 → 缩放 → 再旋转」。

系列入口00.系列规划 | 前置:04 特征值


1. 为什么要发明 SVD?(D1)

对比项 特征值分解(EVD) 奇异值分解(SVD)
适用矩阵 必须方阵 $n \times n$ 任意 $m \times n$
物理意义 方阵固有伸缩方向 任意线性变换的主轴与伸缩强度

一句话:EVD 只能处理「自己映射到自己」的方阵;现实数据矩阵往往是矩形的,SVD 是通用工具。


2. 几何直觉:三步变形(D2)

图 1 SVD 几何:旋转→缩放→再旋转

想象输入空间有一个单位球体,$A\mathbf{x}$ 整体等价于:

  1. $V^\top$(纯旋转):把球体旋转,使坐标轴对齐即将拉伸的方向——形状不变
  2. $\Sigma$(纯缩放):沿坐标轴拉伸/压缩 → 正放的椭球;若 $m \neq n$,还会被「拍扁」(降维)——方向不变
  3. $U$(纯旋转):把正放椭球旋到输出空间最终姿态——形状不变

原矩阵 $A$ 是「暴力混合」;SVD 是「标准化流水线」。


3. 核心公式与维度地图(D2–D3)

图 2 维度地图与奇异值谱

$$
A_{m \times n} = U_{m \times m},\Sigma_{m \times n},V^\top_{n \times n}
$$

矩阵 维度 性质 几何角色 归属空间
$U$ $m \times m$ 正交:$U^\top U = I$ 最终旋转 输出(列空间)
$\Sigma$ $m \times n$ 对角、非对角为 0 沿轴缩放 跨空间桥梁
$V$ $n \times n$ 正交:$V^\top V = I$ 初始旋转 输入(行空间)

紧凑形式($r = \mathrm{rank}(A)$):

$$
A = U_r \Sigma_r V_r^\top = \sum_{i=1}^{r} \sigma_i \mathbf{u}_i \mathbf{v}_i^\top
$$

每项 $\sigma_i \mathbf{u}_i \mathbf{v}_i^\top$ 是秩-1 矩阵;SVD 把 $A$ 拆成秩-1 片的加权和。

⚠️ 纠错 1:$\Sigma$ 绝对不是正交矩阵

  • 旧认知:以为 $U,\Sigma,V$ 三个都正交。
  • 正确:只有 $U$ 与 $V$ 正交;$\Sigma$ 是对角阵,且常为长方形。
  • 检验:正交要求 $\Sigma^\top \Sigma = I$。但 $\Sigma^\top \Sigma$ 的对角元是 $\sigma_i^2$,除非全体 $\sigma_i=1$,否则 $\neq I$。

4. 计算执行顺序:从右往左(D3)

⚠️ 纠错 2:别从左往右「读公式」当计算序

数据 $\mathbf{x}$ 是列向量,写在最右($A\mathbf{x}$)。结合律给出:

$$
A\mathbf{x} = U \cdot \Sigma \cdot (V^\top \mathbf{x})
$$

  • 先 $V^\top\mathbf{x}$:旋转输入(离数据最近)
  • 再 $\Sigma$:拉伸
  • 最后 $U$:旋转输出

穿衣模型:$\mathbf{x}$ 是身体;$V^\top$ 是内衣(先穿),$\Sigma$ 是外套,$U$ 是雨衣(最外层)。列式从左往右写,执行从右往左穿。


5. 奇异值数量、$A^\top A$ 与术语铁律(D3)

⚠️ 纠错 3:到底有几个奇异值?

  • 理论坑位:$\min(m,n)$ 个对角位置。
  • 有效个数:等于 $\mathrm{rank}(A)$(非零奇异值个数);$r < \min(m,n)$ 时多余位置严格为 0

例($3\times 2$):

$$
\Sigma = \begin{bmatrix} \sigma_1 & 0 \ 0 & \sigma_2 \ 0 & 0 \end{bmatrix}
$$

满秩时 $\sigma_1,\sigma_2>0$;秩为 1 则 $\sigma_2=0$。

⚠️ 纠错 4:奇异值 ≠ 特征值

特征值 $\lambda$ 奇异值 $\sigma$
对象 方阵 任意矩阵
定义 $A\mathbf{v}=\lambda\mathbf{v}$ $\sigma_i=\sqrt{\lambda_i(A^\top A)}$(亦对 $AA^\top$)
口诀 方阵有特征 矩形有奇异;开后门 $A^\top A$ 再开根号

关系(完整):

  • $A^\top A$ 的特征值 $=\sigma_i^2$,特征向量 $=V$ 的列(右奇异向量)
  • $AA^\top$ 的特征值 $=\sigma_i^2$,特征向量 $=U$ 的列(左奇异向量)

对称正半定方阵的谱分解可看成 SVD 特例($U=V$)。

微型数值例

$A=\begin{bmatrix}3&0\0&1\end{bmatrix}$:

  1. $A^\top A=\mathrm{diag}(9,1)$ → $\sigma_1=3,\ \sigma_2=1$
  2. $V=I$(已对齐坐标轴,无初始旋转)
  3. $U=I$($A\mathbf{v}_1/\sigma_1=(1,0)$)
  4. $A=I\cdot\mathrm{diag}(3,1)\cdot I$:仅沿 $x$ 拉 3 倍、$y$ 不变。

6. Eckart–Young:最优低秩近似(D3–D6)

保留前 $k$ 个奇异值:

$$
A_k = \sum_{i=1}^{k}\sigma_i\mathbf{u}_i\mathbf{v}_i^\top = U_k\Sigma_k V_k^\top
$$

$$
|A-A_k|F = \min{\mathrm{rank}(B)=k}|A-B|F = \sqrt{\sum{i=k+1}^{r}\sigma_i^2}
$$

含义:截断 SVD 是 Frobenius 范数下最佳秩-$k$ 近似——压缩、降噪、推荐系统的理论锚点。奇异值谱衰减越快,小 $k$ 越划算(见图 2 右半)。


7. 与 PCA:何时等价?(D6–D7)

图 3 PCA 等价条件与 LoRA

⚠️ 纠错 5:SVD 的 $V$ 首列 = PCA 第一主成分?

仅当数据已中心化(去均值)时完全等价。

条件 $v_1$ 实际最大化什么 含义
未中心化 $|A\mathbf{v}|^2$ 指向相对原点模长最大的方向(常指向数据云中心)
已中心化 $\mathbf{v}^\top(A^\top A)\mathbf{v}$(方差) 指向散布最大方向(PCA)

例:点云密集在 $(100,100)$ 附近——未中心化 $v_1$ 往往朝向 $(1,1)$;中心化后才抓住云内部的微小主散布。

算法提示:大矩阵少用显式 $A^\top A$(内存炸);幂迭代反复 $\mathbf{v}\leftarrow A^\top(A\mathbf{v})$ 并归一化,收敛到最大奇异方向。细节见 10 PCA


8. LoRA 与 SVD 的三个挂钩(D7)

大模型微调冻结 $W_0$,只学低秩增量:

$$
W = W_0 + \Delta W,\quad \Delta W = BA
$$

  • $B\in\mathbb{R}^{d_{\mathrm{out}}\times r}$,$A\in\mathbb{R}^{r\times d_{\mathrm{in}}}$
  • 要求 $r\ll\min(d_{\mathrm{out}},d_{\mathrm{in}})$,只吃前 $r$ 个最大奇异方向的「能量」
环节 SVD 作用 代表方法
智能初始化 分解 $W$,用前 $r$ 列初始化 $A,B$ PiSSA、LoftQ
秩分配 按层奇异值谱给重要层更大 $r$ AdaLoRA
剪枝/合并 对 $\Delta W$ 做 SVD,丢掉小 $\sigma$ 噪声方向 Spectral Surgery 等

前向:$\mathbf{y}=W_0\mathbf{x}+BA\mathbf{x}$。衔接 20 Attention+LoRA

其他 ML 用途

用途 SVD 角色
PCA 中心化后 $X=U\Sigma V^\top$,主成分在 $V$
伪逆 $A^+=V\Sigma^+U^\top$
词嵌入 / LSA 隐语义低秩因子
权重压缩 截断分解网络层
条件数 $\sigma_1/\sigma_r$ 刻画病态

9. 局限与数值(D8)

图 4 易错点与工程局限

问题 对策
全 SVD 贵 随机 SVD、torch.svd_lowrank
截断 $k$ / LoRA $r$ 过小 重建/表达力不足,看 $\sigma_i$ 衰减
$k$、$r$ 过大 过拟合 + 参数膨胀
数据非流形线性 SVD 仅线性子空间最优

10. NumPy / PyTorch 示例(D12)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import numpy as np
import torch

A = np.random.randn(100, 50)
U, s, Vt = np.linalg.svd(A, full_matrices=False)

k = 5
A_k = (U[:, :k] * s[:k]) @ Vt[:k]
print("重建误差 Fro:", np.linalg.norm(A - A_k))

# LoRA 形状示意
d_out, d_in, r = 768, 768, 8
B = torch.randn(d_out, r) * 0.01
A_lora = torch.randn(r, d_in) * 0.01
x = torch.randn(32, d_in)
delta = (x @ A_lora.T) @ B.T
print("delta shape:", delta.shape)

11. 速查卡片与小结

  • $A=U\Sigma V^\top$:$V$ 找输入方向,$\Sigma$ 给倍率,$U$ 摆输出位置。
  • 执行:从右往左($V^\top$ 最先碰数据)。
  • $\Sigma$ 对角元叫奇异值不叫特征值;坑位 $\le\min(m,n)$,有效 $=$ 秩。
  • 正交:只有 $U,V$;$\Sigma$ 不是。
  • PCA:去均值后的 SVD $\Leftrightarrow$ PCA;否则找最大模长而非最大方差。
  • LoRA:$r$ 吃前 $r$ 个大 $\sigma$;初始化 / 自适应秩 / 谱剪枝都绑在截断 SVD 上。

下一篇:06 范数与距离10 PCA

系列导航04 特征值 | 20 LoRA

-------------本文结束感谢您的阅读-------------