跳到主内容
快讯直播
AI智模界
AI 词典

矩阵条件数:模型训练“一点就炸”的数学根源

一句话定义:矩阵条件数(condition number,记作 κ(A))衡量的是“输入的一点点误差,经过这个矩阵会被放大多少倍”。对方阵来说,它等于最大奇异值除以最小奇异值。

误差是怎么被放大的

看一个 2×2 的例子:

A = [[1, 0], [0, 0.001]]

解方程 Ax = b。取 b = (1, 0.001),得 x = (1, 1)。现在让 b 的第二个分量抖动 0.000001,变成 (1, 0.001001),解就跳到 x = (1, 1.001)。输入才动了百万分之一,输出动了千分之一——放大了 1000 倍,这就是 κ(A) = 1000。

几何上,把 A 想成一台“压扁机”:单位圆经过它变成一个极扁的椭圆,长轴 1、短轴 0.001。求解就是把这台机器反着开——压扁时几乎被压没的那个方向,要靠放大 1000 倍找回来,混进去的噪声自然也一起放大 1000 倍。这就是“病态”(ill-conditioned)。

容易混淆的地方

概念回答什么问题常见误区
条件数 κ(A)解对输入误差有多敏感(问题本身的性质)和行列式大小无关:0.001·I 的行列式极小,条件数却是 1
行列式 det(A)变换后体积缩放多少行列式接近 0 不等于病态,行列式大也不等于良态
特征值各方向缩放多少(要求可对角化)非正规矩阵的特征值看着都正常,条件数仍可能极大,看奇异值更可靠
算法稳定性计算过程本身会不会额外引入误差条件数是问题的属性,稳定性是算法的属性;良态问题也能被糟糕的算法算崩

对从业者的实际意义

  • 训练不稳:损失曲面的 Hessian(Hessian)条件数大,就像一个极度狭长的山谷。学习率被最陡的方向卡住,最平的方向又慢得像爬,于是来回震荡。归一化、BatchNorm、Adam、预条件(preconditioning),本质上都在压这个比值。
  • 数值溢出:半精度浮点数的有效位数少,条件数一大,舍入误差成倍放大,跑着跑着就 NaN。
  • 一个隐形陷阱:用正规方程 AᵀA·x = Aᵀb 求最小二乘,条件数会平方,即 κ(AᵀA) = κ(A)²。原本 10⁴ 的病态矩阵直接变 10⁸,精度崩掉。所以实践里宁可用 QR 或 SVD,也别显式构造 AᵀA。
  • 常见对策:加 L2 正则相当于给最小奇异值垫了个底;求协方差矩阵的逆时在对角线上加一个极小的抖动(jitter),也是同一个思路——别让 κ 飞上天。

对普通人的意义:凡是需要“反推”的场景——传感器标定、金融因子模型、推荐系统里的特征共线——只要数据中存在几乎重复的方向,反推结果就会被噪声主导。看到“输入没怎么变、输出差很多”,先怀疑条件数,往往比怀疑模型结构更快命中问题。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。