30-机器学习与大模型开发数学教程-3-4 矩阵的逆与伪逆

一句话版:逆矩阵 是在"方阵且可逆"时,把线性变换完全"撤销"的按钮;**伪逆(Moore--Penrose 伪逆)**是在"不可逆/非方阵"时,给最合理的"近似撤销"的按钮。工程上:别无脑 inv ,优先用 solve / lstsq / pinvSVD/QR


1. 先把"逆"的直觉捋顺

  • 向量类比 :你把衣服翻进去(矩阵 AAA),逆矩阵 A−1A^{-1}A−1 就是把它翻出来。
  • 生活类比 :地铁从 A 站坐到 B 站(AAA),逆就是从 B 站按原路线回 A 站(A−1A^{-1}A−1)。

定义(方阵)

对 A∈Rn×nA\in\mathbb{R}^{n\times n}A∈Rn×n,若存在 A−1A^{-1}A−1 使 A−1A=AA−1=IA^{-1}A=AA^{-1}=IA−1A=AA−1=I,则 AAA 可逆(非奇异)。

等价刻画(记住这串"同义词")

以下条件互相等价:

  • det⁡A≠0\det A\ne 0detA=0;
  • rank(A)=n\mathrm{rank}(A)=nrank(A)=n;
  • 线性方程 Ax=bA x=bAx=b 对任何 bbb 都有唯一解;
  • 0 不是 AAA 的特征值;
  • 最小奇异值 σmin⁡(A)>0\sigma_{\min}(A)>0σmin(A)>0。

2×2 逆的公式(只作直觉,不作工程)

A=abcd,A−1=1ad−bcd−b−ca.A=\begin{bmatrix}a&b\\c&d\end{bmatrix},\quad A^{-1}=\frac{1}{ad-bc}\begin{bmatrix}d&-b\\-c&a\end{bmatrix}.A=acbd,A−1=ad−bc1d−c−ba.

但请注意:数值计算不要用这个手写式,用分解法更稳。


2. 为啥工程上少用 inv

解线性方程 Ax=bAx=bAx=b

  • 错法:x = inv(A) @ b(慢 + 不稳 + 浪费内存)
  • 正法:x = solve(A, b)LU/Cholesky/QR 背后做分解,省时省误差)

条件数(病态性)

κ2(A)=σmax⁡(A)σmin⁡(A) (≥1).\kappa_2(A)=\frac{\sigma_{\max}(A)}{\sigma_{\min}(A)}\ (\ge 1).κ2(A)=σmin(A)σmax(A) (≥1).

κ\kappaκ 大 → 小误差被放大。直接求逆 会把误差放得更大,尤其当 σmin⁡\sigma_{\min}σmin 很小。

建议

  • SPD(对称正定)矩阵:用 Cholesky
  • 一般非奇异方阵:用 LU/QR
  • 病态/秩亏:用 SVD/最小二乘 ,必要时加 正则化

3. 伪逆:不可逆时的"最合理反演"

当 AAA 不是方阵或不可逆时,用 Moore--Penrose 伪逆 A+A^+A+ 替代。它满足四个公理(对称投影等,这里不赘述),带来两条金律:

  • 最小二乘解 :KaTeX parse error: Undefined control sequence: \* at position 17: ...displaystyle x^\̲*̲=\arg\min_x \|A...
  • 最小范数 :若解不唯一(欠定),A+bA^+ bA+b 给出所有解中 ∥x∥2\|x\|_2∥x∥2 最小 的那个。

SVD 公式(最实用)

若 A=UΣV⊤A=U\Sigma V^\topA=UΣV⊤,Σ=diag(σ1≥⋯≥σr>0)\Sigma=\mathrm{diag}(\sigma_1\ge\cdots\ge\sigma_r>0)Σ=diag(σ1≥⋯≥σr>0),

A+=V Σ+ U⊤,Σ+=diag(1σ1,...,1σr).A^+=V\,\Sigma^+\,U^\top,\quad \Sigma^+=\mathrm{diag}\big(\tfrac{1}{\sigma_1},\dots,\tfrac{1}{\sigma_r}\big).A+=VΣ+U⊤,Σ+=diag(σ11,...,σr1).

  • 秩亏 时对 σi=0\sigma_i=0σi=0 的位置保持 0。
  • 数值里常对小奇异值用阈值截断,形成截断伪逆(更稳)。

特殊情形(满秩)

  • 高且瘦(m ⁣≥ ⁣nm\!\ge\! nm≥n 且满列秩):A+=(A⊤A)−1A⊤A^+=(A^\top A)^{-1}A^\topA+=(A⊤A)−1A⊤。
  • 矮且胖(m ⁣≤ ⁣nm\!\le\! nm≤n 且满行秩):A+=A⊤(AA⊤)−1A^+=A^\top(AA^\top)^{-1}A+=A⊤(AA⊤)−1。

投影器

  • PR(A)=AA+P_{\mathcal{R}(A)} = A A^+PR(A)=AA+ 是到列空间的正交投影;
  • PR(A⊤)=A+AP_{\mathcal{R}(A^\top)} = A^+ APR(A⊤)=A+A 是到行空间的正交投影。

4. 与机器学习的高频连接

4.1 线性回归闭式解(最小二乘)

样本矩阵 X∈Rm×dX\in\mathbb{R}^{m\times d}X∈Rm×d,目标 y∈Rmy\in\mathbb{R}^{m}y∈Rm。

KaTeX parse error: Undefined control sequence: \* at position 3: w^\̲*̲=\arg\min_w \|X...

4.2 岭回归(Tikhonov 正则)

wλ=(X⊤X+λI)−1X⊤y.w_\lambda=(X^\top X+\lambda I)^{-1}X^\top y.wλ=(X⊤X+λI)−1X⊤y.

  • 在 SVD 基底中,这是把每个 1/σi1/\sigma_i1/σi 换成 σi/(σi2+λ)\sigma_i/(\sigma_i^2+\lambda)σi/(σi2+λ),抑制小奇异值带来的放大(更稳,也更好泛化)。

4.3 LoRA / 低秩近似

大模型微调中,把权重更新近似为低秩 UV⊤U V^\topUV⊤。求解/拟合常落到最小二乘 + 低秩结构 ,背后仍然是 SVD/伪逆/投影 的数学。

4.4 核方法与 Schur 乘积

核矩阵 KKK 要 PSD,训练中求解 (K+λI)α=y(K+\lambda I)\alpha=y(K+λI)α=y。这类系统适合 Cholesky ;若要"近似逆",用 Nyström / 低秩 SVD 更高效。


5. Woodbury 身法(增量更新神器)

当你要反转 A+UCVA+U C VA+UCV(低秩更新)时,不必重算大逆:

(A+UCV)−1=A−1−A−1U(C−1+VA−1U)−1VA−1.(A+U C V)^{-1} = A^{-1} - A^{-1} U(C^{-1}+V A^{-1} U)^{-1}V A^{-1}.(A+UCV)−1=A−1−A−1U(C−1+VA−1U)−1VA−1.

  • 典型用法:特征维高、增量低秩的在线更新;
  • 岭回归的"核化"版本与卡尔曼滤波也频繁用到它。

6. 如何选择"解线性系统"的姿势

是 否 是 否 是 需要更稳 问题: 解 Ax=b 或 拟合最小二乘 A 是方阵且 SPD? Cholesky: A=LL^T, 解两三角 A 是方阵且可逆? LU/QR 解: solve(A,b) 最小二乘/秩亏/非方阵? SVD/QR 最小二乘: lstsq/pinv 加正则: 岭/Tikhonov

说明:优先分解,谨慎求逆;病态就去 SVD/正则化。


7. 代码小抄(NumPy / PyTorch)

python 复制代码
# 需要: numpy, torch
import numpy as np, torch

# (1) 线性方程:solve >> inv@b
A = np.random.randn(300, 300)
A = A @ A.T + 1e-1*np.eye(300)  # SPD
b = np.random.randn(300)

x1 = np.linalg.solve(A, b)        # 推荐
x2 = np.linalg.inv(A) @ b         # 不推荐

# (2) 最小二乘:lstsq / pinv
m, d = 200, 300     # 欠定 or 过定都可
X = np.random.randn(m, d)
y = np.random.randn(m)

w_lstsq, *_ = np.linalg.lstsq(X, y, rcond=None)  # 最稳的通用方法
w_pinv = np.linalg.pinv(X) @ y                    # 基于SVD的伪逆

# (3) 岭回归闭式
lam = 1e-1
w_ridge = np.linalg.solve(X.T @ X + lam*np.eye(d), X.T @ y)

# (4) PyTorch 版本
Xt = torch.tensor(X, dtype=torch.float64)
yt = torch.tensor(y, dtype=torch.float64)
wt = torch.linalg.lstsq(Xt, yt).solution          # 最小二乘
wp = torch.linalg.pinv(Xt) @ yt                   # 伪逆
wr = torch.linalg.solve(Xt.T@Xt + lam*torch.eye(d), Xt.T@yt)

经验:

  • lstsq 是"万金油"(内部用 QR/SVD);
  • pinv 用于需要显式伪逆或投影器;
  • SPD 用 Cholesky
  • 大问题优先用迭代法(CG)+ 矩阵--向量乘接口。

8. 数值稳定与容错

  • 阈值与截断 :在 pinv 中对小于 tol 的奇异值置零,避免放大噪声。
  • 中心化与缩放:回归前标准化特征能显著降低条件数。
  • 加对角线 :X⊤X+λIX^\top X+\lambda IX⊤X+λI(岭)提升稳定性。
  • 别拿行列式判断可逆det 在数值上不稳定,用分解/条件数更靠谱。
  • 检查残差 :解出来后看 ∥Ax−b∥\|Ax-b\|∥Ax−b∥ 与 ∥x∥\|x\|∥x∥,防止被病态坑。

9. 常见坑(踩过都懂)

  1. 把逆当"求解器"inv 只是数学对象,工程不用它
  2. 明明 SPD 却没用 Cholesky:速度和稳定性都亏。
  3. 无脑 normal equation :直接解 (X⊤X)w=X⊤y(X^\top X)w=X^\top y(X⊤X)w=X⊤y 会把条件数平方 ,不如 QR/SVD
  4. 忘了正则 :高相关/高维/少样本的回归不加 λ\lambdaλ 极易炸。
  5. 伪逆阈值pinv 的容差太小/太大都会出问题;根据数据尺度设定或用默认。
  6. 内存炸裂 :显式构造巨型逆/投影器(如 AA+AA^+AA+)不必要;用线性算子乘法接口

10. 练习(含提示/部分答案)

  1. 可逆等价性 :证明"可逆 ⇔ σmin⁡(A)>0\sigma_{\min}(A)>0σmin(A)>0"
    提示 :SVD 写 A=UΣV⊤A=U\Sigma V^\topA=UΣV⊤。
  2. 最小二乘与伪逆 :证明 arg⁡min⁡x∥Ax−b∥22=A+b\arg\min_x \|Ax-b\|_2^2 = A^+ bargminx∥Ax−b∥22=A+b。
    提示 :用 SVD 把问题化为 min⁡z∥Σz−U⊤b∥\min_z \|\Sigma z - U^\top b\|minz∥Σz−U⊤b∥。
  3. 最小范数解 :当 AAA 欠定(m<nm< nm<n)且可行解不唯一,证明 A+bA^+ bA+b 是 ∥x∥2\|x\|_2∥x∥2 最小的可行解。
    提示:仍在 SVD 坐标下讨论自由变量。
  4. 岭回归的 SVD 视角 :若 X=UΣV⊤X=U\Sigma V^\topX=UΣV⊤,证明
    wλ=V diag(σiσi2+λ) U⊤yw_\lambda = V\,\mathrm{diag}(\tfrac{\sigma_i}{\sigma_i^2+\lambda})\,U^\top ywλ=Vdiag(σi2+λσi)U⊤y。
    答案要点 :把 (X⊤X+λI)−1X⊤(X^\top X+\lambda I)^{-1}X^\top(X⊤X+λI)−1X⊤ 放到 SVD 里化简。
  5. Woodbury 推导 :在矩阵逆引理的假设下,推导公式(可参考分块矩阵逆公式)。
    提示 :从 AUV−C−1\begin{bmatrix}A & U\\ V & -C^{-1}\end{bmatrix}AVU−C−1 的 Schur 补入手。
  6. 数值实验(自做) :构造条件数 κ\kappaκ 很大的 AAA,比较 inv(A)@bsolve(A,b) 的误差与时间。
    提示 :用 SVD 控制 σmin⁡\sigma_{\min}σmin 生成病态矩阵。

11. 小结

  • 只在"方阵且可逆"时存在;工程上用分解求解而非显式求逆。
  • 伪逆 用 SVD 处理非方阵/秩亏问题,给出最小二乘最小范数 解;
    AA+A A^+AA+ / A+AA^+ AA+A 是正交投影器。
  • 稳定性 胜过一切:优先 Cholesky/QR/SVD ,必要时正则化 ;大问题用迭代法 + HVP
  • 记住口诀:"能 solve 不 inv;能 QR/SVD 不 normal;病态就正则。"
相关推荐
民乐团扒谱机9 小时前
【超详解】量子克拉美罗下界QCRB:时延估计精度极限推导+MATLAB多场景绘图实战
开发语言·机器学习·matlab·量子力学·qcrb
watersink9 小时前
机器学习随机森林
人工智能·随机森林·机器学习
高洁0110 小时前
工信部教考中心证书
人工智能·深度学习·算法·机器学习·知识图谱
SomeB1oody10 小时前
【RustyML入门】2.13. 孤立森林
开发语言·后端·机器学习·rust·教程
SomeB1oody11 小时前
【RustyML入门】3.8. 正则化与归一化层
开发语言·后端·机器学习·rust·教程
招财小梗11 小时前
AI矩阵获客,品牌连锁落地有啥方案?
大数据·人工智能·矩阵
心运软件12 小时前
基于深度学习的宝石图像分类系统
人工智能·python·深度学习·机器学习·分类·数据挖掘
计科杨某人12 小时前
机器学习基本常识
随机森林·机器学习·支持向量机·监督学习·强化学习·最小二乘法·无监督学习
一个王同学13 小时前
从零到一 | CV转多模态大模型 | week22 | 实战项目-DocuMind-VL:基于 OCR 与 Qwen-VL 的文档多模态问答系统(二)
人工智能·深度学习·机器学习·计算机视觉·ocr