矩阵低秩近似与伪逆:从 SVD 到正则化

从最小二乘视角讲解 Moore-Penrose 伪逆的定义、Penrose 四条件、SVD 计算、截断奇异值与正则化,以及在机器学习中的落地应用。

真实数据里的矩阵几乎从不"方+满秩":特征相关、样本不足、噪声放大病态——求逆这件事要么不存在,要么不稳定。伪逆(Moore-Penrose inverse)把"逆"的直觉延续下去:它不要求方程组有精确解,而是把"解"重新定义为最小二乘解(多解时再选最小范数那一个)。本文从最小二乘视角给出伪逆的定义与四条 Penrose 条件,再用 SVD 把它的计算与低秩近似绑在一起,最后看截断奇异值如何让解更稳、什么时候必须正则化、以及这些结论在 PCA、推荐系统、LoRA 中如何落地。

你将学到

  • 优化视角:为什么"伪逆 = 最小二乘解"是一个统一定义
  • SVD 算法:如何用$A = U\Sigma V^{\!\top}$构造$A^{+}$
  • Eckart-Young 定理:为什么截断 SVD 是唯一的最优低秩近似
  • 数值稳定性:小奇异值如何放大误差,Tikhonov 正则化为什么能救场
  • 现代应用:从 PCA、推荐系统的矩阵分解,一直到 LoRA 微调

前置知识

  • 线性代数(矩阵乘法、内积、正交矩阵)
  • 最小二乘回归的概念
  • Python + NumPy

为什么需要伪逆?

经典的逆矩阵$A^{-1}$只对方阵且满秩有效。一旦遇到下面任意一种情况,$A^{-1}$就不存在:

  • 超定系统(行多于列):$Ax = b$ 通常无解 -> 退而求其次找最小二乘
  • 欠定系统(列多于行):解不唯一 -> 需要从无穷多解中选一个
  • 病态系统:数值上接近奇异,$A^{-1}$ 算得出来但算不准

伪逆$A^{+}$ 把这三种情况统一处理:它总是存在、总是唯一,并且当$A^{-1}$ 存在时退化为$A^{-1}$。

优化视角:伪逆即最小二乘

定义

对矩阵$A \in \mathbb{R}^{m \times n}$,伪逆$A^{+}$ 通过下述优化问题定义:

$$A^{+} \;=\; \arg\min_{X \in \mathbb{R}^{n \times m}} \; \|AX - I_m\|_F^2$$

当解不唯一时(即$A$ 列空间不满秩),再叠加一层最小范数选择:在所有最小化目标的$X$ 中选 Frobenius 范数最小的那个。

直觉:方阵满秩时,$AX = I$ 有精确解$A^{-1}$;不满秩或非方阵时,没有$X$ 能让$AX = I$,伪逆退而求其次——让$AX$ 尽可能接近$I$。

Frobenius 范数

$$\|M\|_F^2 \;=\; \sum_{i,j} M_{ij}^2 \;=\; \mathrm{tr}(M^{\!\top} M)$$

它把矩阵当成一个长向量来度量"长度",是把矩阵优化转化为标量优化的标准工具。$\mathrm{tr}(M^{\!\top}M)$ 写法的妙处:对$M = M^{\!\top}$ 等几何对象求导只需用迹的循环性质,比逐元素展开干净得多。

求解(满列秩情形)

当$A$ 列满秩时,$A^{\!\top}A$ 可逆,对目标函数求导并令导数为零:

$$\frac{\partial}{\partial X}\|AX - I\|_F^2 = 2 A^{\!\top}(AX - I) = 0 \;\Longrightarrow\; X = (A^{\!\top}A)^{-1} A^{\!\top}.$$

这就是左伪逆$A^{+} = (A^{\!\top}A)^{-1}A^{\!\top}$,满足$A^{+}A = I_n$。 行满秩时类似可得右伪逆$A^{+} = A^{\!\top}(AA^{\!\top})^{-1}$。

Penrose 四条件(统一定义)

任何矩阵$A$ 的伪逆$A^{+}$ 是唯一满足下面四个等式的矩阵:

$$\begin{aligned} &\text{(i)}\;\; A A^{+} A = A &&\text{(ii)}\;\; A^{+} A A^{+} = A^{+} \\ &\text{(iii)}\;\; (A A^{+})^{\!\top} = A A^{+} &&\text{(iv)}\;\; (A^{+} A)^{\!\top} = A^{+} A \end{aligned}$$

第 (i)(ii) 条说$A$ 与$A^{+}$ 互为"伪逆";第 (iii)(iv) 条要求$AA^{+}$ 与$A^{+}A$ 都是对称投影矩阵(这正是后面"伪逆 = 投影"几何图景的根源)。

通过 SVD 计算伪逆

最小二乘公式$(A^{\!\top}A)^{-1}A^{\!\top}$ 在$A$ 列空间不满秩时会爆炸,而且数值上对小奇异值非常敏感。SVD 给出一个统一、稳定的算法

步骤

对任意$A \in \mathbb{R}^{m \times n}$,SVD 给出

$$A \;=\; U \Sigma V^{\!\top}, \qquad \Sigma = \mathrm{diag}(\sigma_1, \sigma_2, \ldots, \sigma_r, 0, \ldots, 0),$$

其中$U \in \mathbb{R}^{m \times m}$、$V \in \mathbb{R}^{n \times n}$ 都是正交矩阵,$r = \mathrm{rank}(A)$,$\sigma_1 \ge \sigma_2 \ge \cdots \ge \sigma_r > 0$。 伪逆是

$$\boxed{\;A^{+} \;=\; V \Sigma^{+} U^{\!\top}, \qquad \Sigma^{+}_{ii} = \begin{cases} 1/\sigma_i & \sigma_i > 0 \\ 0 & \sigma_i = 0\end{cases}\;}$$

逐条验证 Penrose 四条件都自动成立——这是为什么 SVD 是最稳健、教科书级的伪逆算法。

几何图景:投影到列空间

伪逆通过 SVD:最小二乘 = 正交投影

左图:超定回归$y \approx ax + b$,伪逆解$\hat\beta = A^{+}b$ 给出的最小二乘直线。 右图:几何上$AA^{+}b$ 是$b$ 正交投影到列空间$\mathrm{col}(A)$ 的结果,残差$b - A\hat\beta$ 与列空间垂直——这是最小二乘的正规方程$A^{\!\top}(A\hat\beta - b) = 0$ 的几何含义。

代码

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

A = np.array([[1.0, 2.0],
              [3.0, 4.0],
              [5.0, 6.0]])

# 方法 1:教科书的 SVD 方法
U, s, Vt = np.linalg.svd(A, full_matrices=False)
S_pinv = np.diag(np.where(s > 1e-12, 1.0 / s, 0.0))
A_pinv = Vt.T @ S_pinv @ U.T

# 方法 2:直接调用(推荐,内部就是 SVD + 阈值截断)
A_pinv_np = np.linalg.pinv(A)

print(np.allclose(A_pinv, A_pinv_np))   # True
print(A @ A_pinv @ A)                   # 应当复原 A(Penrose 条件 i)

np.linalg.pinv 内部已经做了奇异值阈值截断(默认$\mathrm{rcond} \approx \mathrm{eps} \cdot \max(m,n)$),把数值上等价于零的奇异值的倒数置零——下面会解释为什么这件事至关重要。

低秩近似:Eckart-Young 定理

伪逆只是 SVD 的一个用例。SVD 真正的杀手锏是低秩近似:用一个秩为$k$ 的矩阵尽可能逼近原矩阵$A$,最优解恰好是截断 SVD

定理(Eckart-Young, 1936)

设$A = U\Sigma V^{\!\top}$,记截断 SVD

$$A_k \;=\; \sum_{i=1}^{k} \sigma_i\, u_i v_i^{\!\top} \;=\; U_{:,1:k} \,\Sigma_{1:k,1:k}\, V_{:,1:k}^{\!\top}.$$

则对任意$\mathrm{rank}(B) \le k$ 的矩阵$B$ 都有

$$\|A - A_k\|_F \;\le\; \|A - B\|_F, \qquad \|A - A_k\|_F \;=\; \sqrt{\sum_{i=k+1}^{r} \sigma_i^2}.$$

谱范数下也成立:$\|A - A_k\|_2 = \sigma_{k+1}$。 也就是说,截断 SVD 是唯一的(同构意义下)最优低秩近似——这是机器学习里几乎所有降维、压缩、矩阵分解方法的理论基石。

Eckart-Young 定理:截断 SVD 是最优的低秩近似

左图:奇异值快速衰减,黄色阴影部分($\sigma_{k+1}, \sigma_{k+2}, \ldots$)就是被截掉的"尾巴",它的$\ell_2$ 范数即近似误差。 右图:把截断 SVD 与 8 次"随机秩-$k$ 投影"对比——任何随机的低秩压缩都被截断 SVD 碾压,而且差距不止一个数量级。

为什么"截断尾巴"有效?图像压缩演示

低秩近似作为图像压缩

把一张$96 \times 96$ 的图(共 9 216 个数)做 SVD,再分别保留$k = 2, 8, 32$ 个奇异值重建:

秩$k$存储参数占比相对 Frobenius 误差
23864%16.3%
81 54417%4.0%
326 17667%1.7%

下半部分是奇异值衰减谱累计能量曲线:少量奇异值就承载了绝大部分"信号"——这就是为什么 SVD 既能压缩图片,又能去噪、又能做特征提取。奇异值衰减越快,矩阵就越"低秩友好"

应用:PCA = 中心化数据的 SVD

PCA 对中心化数据矩阵$X_c$ 做 SVD:$X_c = U\Sigma V^{\!\top}$,列向量$v_i$ 就是主成分方向,$\sigma_i^2 / (n-1)$ 是该方向的方差。 把数据投影到前$k$ 个主成分上,等价于用秩-$k$ 截断 SVD 近似$X_c$——所以 PCA 不是另一个算法,它就是 Eckart-Young 在中心化数据上的一个特例

应用:推荐系统的矩阵分解

推荐系统:稀疏评分矩阵的低秩分解

Netflix Prize 的核心思想:用户-物品评分矩阵$R$ 稀疏但低秩——少量"潜在因子"(题材偏好、风格、价位等)解释绝大部分评分。 记$R \approx UV^{\!\top}$,$U \in \mathbb{R}^{n_u \times r}$ 是用户因子,$V \in \mathbb{R}^{n_i \times r}$ 是物品因子,$r$ 一般取 10-200。 上图演示在仅 34% 评分可见的条件下,秩-3 的交替最小二乘 (ALS) 能把留出集 RMSE 压到 0.24(满分 5 分量纲),其本质就是在带掩码的低秩近似问题上做迭代最小二乘。

SVD 不能直接处理缺失值,所以工业界用的不是直接 SVD,而是带掩码的非凸版本min_{U,V} sum_{(i,j) observed} (R_{ij} - u_i^T v_j)^2。 用 ALS 或 SGD 求解,并加上$\ell_2$ 正则避免过拟合(参见下一节的 Tikhonov)。

数值稳定性与正则化

小奇异值如何放大误差

伪逆$A^{+} = V \Sigma^{+} U^{\!\top}$ 里的$\Sigma^{+}_{ii} = 1/\sigma_i$。 如果某个$\sigma_i$ 接近 0,$1/\sigma_i$ 就接近无穷大,任何在$u_i$ 方向上的微小噪声都会被放大成天文数字。 衡量这一现象的标准量是条件数

$$\kappa(A) \;=\; \frac{\sigma_{\max}}{\sigma_{\min}}.$$

当$\kappa(A)$ 很大(比如$10^{10}$),求解$Ax = b$ 的相对误差大约会被放大$\kappa(A)$ 倍——也就是说有效精度直接掉 10 位。

解法 1:截断 SVD(硬阈值)

最简单的策略:把数值上太小的奇异值直接丢掉

$$\Sigma^{+}_{ii} = \begin{cases} 1/\sigma_i, & \sigma_i > \tau \\ 0, & \sigma_i \le \tau \end{cases}$$

阈值$\tau$ 一般取$\tau = \mathrm{rcond} \cdot \sigma_1$,np.linalg.pinvrcond 参数就是这个。 截断 SVD 等价于把"在小奇异值方向上的信号"当成噪声——只在你确实相信小方向上没有真实信号时才能用。

解法 2��Tikhonov 正则化(软阈值,岭回归)

把目标函数改成

$$\min_{x} \;\|Ax - b\|_2^2 \;+\; \lambda \|x\|_2^2,$$

正规方程变成

$$x_\lambda \;=\; (A^{\!\top}A + \lambda I)^{-1} A^{\!\top} b \;=\; V \,\mathrm{diag}\!\left(\tfrac{\sigma_i}{\sigma_i^2 + \lambda}\right)\, U^{\!\top}\, b.$$

对比硬截断$1/\sigma_i$,Tikhonov 用的是软滤波器$\sigma_i / (\sigma_i^2 + \lambda)$:

  • 大奇异值($\sigma_i^2 \gg \lambda$):$\sigma_i/(\sigma_i^2+\lambda) \approx 1/\sigma_i$,几乎不变;
  • 小奇异值($\sigma_i^2 \ll \lambda$):$\sigma_i/(\sigma_i^2+\lambda) \approx \sigma_i/\lambda \to 0$,被压缩。

这就是机器学习里的岭回归(Ridge)——它的本质就是给伪逆加了一个频域低通滤波器

1
2
3
4
5
def ridge_pinv(A, lam):
    """Tikhonov 正则化伪逆,等价 (A^T A + lam I)^{-1} A^T。"""
    U, s, Vt = np.linalg.svd(A, full_matrices=False)
    s_reg = s / (s * s + lam)
    return Vt.T @ np.diag(s_reg) @ U.T

选谁?

场景
小奇异值是纯数值噪声截断 SVD(更激进)
小奇异值携带部分真实信号,不想完全丢Tikhonov(更平滑)
高维稀疏特征,要做特征选择$\ell_1$ 正则(Lasso,不是这里)
不确定,需要选超参Tikhonov + 交叉验证

现代应用:从 Eckart-Young 到 LoRA

低秩近似最让人意外的现代成功,是大模型的参数高效微调

LoRA:低秩近似让微调便宜 100 倍

LoRA 的核心假设

预训练大模型的某个权重$W \in \mathbb{R}^{d \times k}$(典型$d = k = 4096$,$1.7 \times 10^7$ 参数)。 全量微调要更新整个$W$;LoRA 假设任务相关的权重变化$\Delta W$ 本身就是低秩的

$$W' \;=\; W + \Delta W, \qquad \Delta W \;=\; B A, \qquad B \in \mathbb{R}^{d \times r},\; A \in \mathbb{R}^{r \times k},\; r \ll \min(d,k).$$

参数量从$dk$ 直降到$r(d + k)$。 上图中间面板:$r=8$ 时仅训练 0.07 M 参数,比全量微调省 256 倍

为什么这么省还能 work?

右侧面板给出经验解释:在大量任务上测出来的$\Delta W$ 奇异值急剧衰减,有效秩往往只有几到几十——这是 Eckart-Young 在告诉你:“低秩近似"对$\Delta W$ 已经足够。

这一观察并非 LoRA 独创:Aghajanyan 等人 (2020) 用"内蕴维度 (intrinsic dimensionality)“实验发现,只更新几百维就能达到全量微调 90% 的效果。LoRA 把这个直觉做成了一个简单、可叠加、可合并的工程方案,也是这条线的标志性工作。

联系

概念形式公共骨架
截断 SVD$A_k = \sum_{i=1}^k \sigma_i u_i v_i^{\!\top}$用低秩矩阵逼近高秩矩阵
PCA$X_c \approx U_k \Sigma_k V_k^{\!\top}$同上,作用在中心化数据上
推荐系统 MF$R \approx U V^{\!\top}$带掩码的低秩近似
LoRA$\Delta W = B A$参数更新做低秩近似

它们的母题都是Eckart-Young——“在重要方向上保留信号,在剩下的方向上让步”。

实战清单

  • 求$Ax = b$ 时,先看 condition numbernp.linalg.cond(A))。$\kappa > 10^{12}$ 就别再相信原始解了。
  • 想要稳健的最小二乘,永远走 SVD 路线(np.linalg.lstsqnp.linalg.pinv),别手写$(A^{\!\top}A)^{-1}A^{\!\top}$。
  • 做 PCA 时,对数据做中心化,再做 SVD;切忌直接对协方差矩阵做特征分解(数值精度差且贵)。
  • 做矩阵分解(推荐系统),秩$r$ 用留出集 RMSE 选,加$\ell_2$ 正则。
  • 做 LoRA,从$r=8$ 试起,alpha 一般取$2r$。再低就要看任务复杂度。

结论

伪逆把"逆矩阵"的概念扩展到任意矩阵,背后是一个统一的优化定义——最小二乘解 + 最小范数选择SVD 同时给出伪逆的稳健算法和最优低秩近似的解析解(Eckart-Young)。 真实数据的"病态"几乎总是来自小奇异值,而对策只有两条路:截断(硬阈值)或 Tikhonov 正则化(软滤波)。 这条线串起来:经典最小二乘 -> 岭回归 -> PCA -> 推荐系统 MF -> 现代 LoRA——它们看起来在做不同的事,本质上都是在用低秩结构对抗高维噪声。理解 SVD,就理解了这一整条线。

参考文献

  • Moore-Penrose 伪逆 (Wikipedia)
  • Singular Value Decomposition (Wikipedia)
  • Tikhonov 正则化 (Wikipedia)
  • Eckart, C., & Young, G. (1936). The approximation of one matrix by another of lower rank. Psychometrika, 1(3), 211-218.
  • Koren, Y., Bell, R., & Volinsky, C. (2009). Matrix Factorization Techniques for Recommender Systems. IEEE Computer.
  • Hu, E. J., et al. (2021). LoRA: Low-Rank Adaptation of Large Language Models. arXiv:2106.09685.
  • Aghajanyan, A., Zettlemoyer, L., & Gupta, S. (2020). Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning. arXiv:2012.13255.

Liked this piece?

Follow on GitHub for the next one — usually one a week.

GitHub