机器学习数学基础 120 章

为什么不应该显式求逆

层级:A|建议先修:02-09、02-12、02-18、09-03

教科书常把线性方程 Ax=bAx=b 写成 x=A1bx=A^{-1}b,这有助于推导,却不代表代码应该先计算逆矩阵。只为求解方程时,直接分解并求解通常更快、更省内存、更稳定。

1. 代数表达与计算过程不同

x=A1bx=A^{-1}b

说明可逆矩阵下解的数学形式。数值库的 solve(A,b) 通常执行:

  1. AA 做 LU、Cholesky、QR 等分解;
  2. 通过三角代入求解;
  3. 不构造 A1A^{-1} 的所有元素。

显式求逆相当于对单位矩阵的每一列解一次方程,计算了许多当前并不需要的信息。

2. 计算代价

对一般稠密 n×nn\times n 矩阵,分解和求逆都是 O(n3)O(n^3) 量级,但显式逆具有更大常数,还需额外 O(n2)O(n^2) 存储逆矩阵。

若只有一个或少量右端项,solve 明显更合理。若有多个右端项,可复用一次分解,而不是反复求逆。

3. 数值误差

稳定的分解求解器可具有良好后向稳定性。显式形成逆矩阵需要对每个逆元素舍入,随后再做矩阵乘法又引入一次误差。

不能笼统说“求逆永远数值错误”,高质量库也能稳定求逆;更准确的说法是:当目标只是 A1bA^{-1}b 时,显式逆没有收益,通常引入更多计算和误差机会。

4. 根据结构选择求解器

  • 一般方阵:LU 分解加主元选取;
  • 对称正定矩阵:Cholesky,速度更快、存储更省;
  • 超定最小二乘:QR 或 SVD;
  • 秩亏或近秩亏:SVD/伪逆或正则化;
  • 大型稀疏对称正定:共轭梯度;
  • 大型一般稀疏:GMRES、BiCGSTAB 等迭代法。

利用矩阵结构比机械调用通用逆更重要。

5. 最小二乘也不要套逆公式

正规方程写作

β^=(XTX)1XTy.\hat\beta=(X^TX)^{-1}X^Ty.

代码不应显式求 (XTX)1(X^TX)^{-1},而应使用 QR、SVD 或专门的 least-squares 求解器。形成 XTXX^TX 还会平方条件数。

6. Mahalanobis 距离

d2=(xμ)TΣ1(xμ).d^2=(x-\mu)^T\Sigma^{-1}(x-\mu).

v=xμv=x-\mu,可以先解

Σz=v,\Sigma z=v,

再计算 vTzv^Tz。若 Σ=LLT\Sigma=LL^T 是 Cholesky 分解,也可解 Lw=vLw=v,然后 d2=w2d^2=\|w\|^2

7. 高斯对数密度

多元高斯含

vTΣ1vlogdetΣ.v^T\Sigma^{-1}v \quad\text{和}\quad \log\det\Sigma.

Σ=LLT\Sigma=LL^T,则:

vTΣ1v=L1v2,v^T\Sigma^{-1}v=\|L^{-1}v\|^2, logdetΣ=2ilogLii.\log\det\Sigma=2\sum_i\log L_{ii}.

一次 Cholesky 同时稳定完成两个计算。

8. 矩阵行列式引理与 Woodbury 恒等式

在低秩更新中,可利用

(A+UCV)1=A1A1U(C1+VA1U)1VA1.(A+UCV)^{-1} =A^{-1}-A^{-1}U(C^{-1}+VA^{-1}U)^{-1}VA^{-1}.

但实现时仍应把每个 A1A^{-1} 作用理解为线性求解,而不是显式形成逆。Woodbury 可把大矩阵问题转为小矩阵问题,常见于 Bayesian 线性模型和 Gaussian process。

9. 自动微分中的求解

现代框架能对 solve、Cholesky 等运算求导。若 x=A1bx=A^{-1}b,其微分可由隐式方程

A,dx=dbdA,xA,dx=db-dA,x

求得,即

dx=A1(dbdA,x).dx=A^{-1}(db-dA,x).

反向传播同样转化为线性求解,无需构造逆矩阵。

10. 什么时候真的需要逆矩阵

有时逆矩阵本身就是输出,例如理论分析、某些协方差估计或需要访问全部逆元素。此时可以求逆,但应:

  • 利用对称、正定、稀疏等结构;
  • 估计条件数;
  • 验证残差 AA1I\|AA^{-1}-I\|
  • 不把数值逆误认为消除了病态问题。

11. 残差与误差

求得 x^\hat x 后,可检查残差

r=bAx^.r=b-A\hat x.

小残差说明 x^\hat x 是一个近似满足方程的解,但病态系统中小残差仍可能对应较大的解误差。需结合条件数判断。

12. 易错点

  1. pinv 不是“更稳定的普通逆”;它通过 SVD 和阈值处理秩亏,解决的是最小范数/最小二乘问题。
  2. 为多个右端项求解应复用分解,而不是在循环里重复 solve 的分解阶段。
  3. 对称矩阵不一定正定,不能未经检查就用 Cholesky。
  4. 给矩阵加极小对角 jitter 是正则化,会改变问题,应记录其大小。

常见问答

Q1:公式中还能写 A1A^{-1} 吗?
当然可以,它简洁表达数学关系。实现时把“逆乘向量”翻译为“解线性系统”。

Q2:如果很多次都要乘 A1A^{-1},先求逆是否更快?
通常仍应缓存分解并对多个右端项批量三角求解,既高效又稳定。只有确实需要逆的全部元素时才形成逆。

Q3:Cholesky 失败说明什么?
矩阵可能不对称、不正定、数值误差过大或条件极差。应先检查建模与矩阵谱,再决定是否对称化、正则化或换求解器。

Q4:为什么残差小还可能答案不准?
病态矩阵会把很小的方程扰动映射成很大的解变化,前向误差还取决于条件数。

练习

  1. x=A1bx=A^{-1}b 翻译成推荐的数值计算步骤。
  2. 为什么最小二乘优先 QR/SVD,而不是正规方程加显式逆?
  3. 给定 Cholesky Σ=LLT\Sigma=LL^T,写出 Mahalanobis 距离的计算步骤。
  4. 多个右端项 B=[b1,ldots,bm]B=[b_1,ldots,b_m] 如何高效求 AX=BAX=B

答案与提示

  1. 按矩阵结构做一次分解,再通过前代/回代解线性系统。
  2. 正规方程平方条件数,显式逆增加计算和舍入;QR/SVD 更稳健。
  3. Lw=xμLw=x-\mu,再计算 wTww^Tw
  4. 分解 AA 一次,对矩阵右端项批量做三角求解并复用分解。