4.2 解的存在性与通解结构:特解加零空间
本节位置:模块 4 · 线性方程组 | 前置:3.7 四个基本子空间、4.1 | 预计:40 分钟
一句话:先比较两个秩判断「有没有解」,再用自由变量写出「所有解长什么样」。
0. 场景引入
运营商的核心网每 5 分钟从 12 条骨干链路读一次计数,想还原 40 条 OD(origin–destination)流各有多大。路由表告诉你哪些 OD 流经过哪条链路,于是
12 个方程、40 个未知数,秩最多 12,至少有 28 个自由方向。可观测的只有 12 个组合,你却要决定「下个月给哪条链路扩一个 10G 口」:扩错一条,8 万元设备费白花,拥塞还在。40 条流里可能只有 3 条是大象流,可这 3 条恰恰是链路计数最看不清的。
更现实的是,链路计数有约 0.5% 的采样误差。一条 8 Gbps 的链路,0.5% 就是 40 Mbps;当两条链路之和本该等于第三条时,这 40 Mbps 会让等式差一点点—— 不在列空间里,方程无解。
于是运维脚本每天都会遇到两种结局:解不唯一,或者直接报错。
问题:多出来的 28 个自由度到底是什么?无解时又该拿什么代替答案?读完本节,你应该能回答三件事:
- 怎样用两个秩,一次判断「无解 / 唯一 / 无穷多」?
- 无穷多解时,通解里的「特解」和「零空间」各自负责什么?
- 为什么「随便挑一个解」在工程上会骗人?
1. 直觉
1.1 消元 = 换一组更好看的约束
高斯消元(Gaussian elimination)做行变换:把方程加减乘除,得到等价但更简单的方程组。它不改变解集,只改变观察角度。目标是阶梯形(row echelon form):每行第一个非零元(主元,pivot)逐行右移。
1.2 主元列与自由列
| 行 | 说明 | |||||
|---|---|---|---|---|---|---|
| 1 | 1 | 2 | 0 | -4 | 0 | 主元 |
| 2 | 0 | 0 | 1 | 3 | 1 | 主元 |
| 3 | 0 | 0 | 0 | 0 | 0 | 没有新信息 |
有主元的未知数被方程「定住」;、 两列没有主元,对应自由变量(free variable),可以任取。
💡 一句话直觉:解 = 一个特解 + 所有「不改变输出」的方向的组合。前者负责命中 ,后者解释为什么有无穷多解。
图: 的解集是一条直线; 是其中一个特解,沿零空间方向 移动仍留在解集上。
1.3 它在现实世界里对应什么
把消元想成一台会计合并报表的机器。40 条 OD 流是 40 个明细科目,12 条链路是 12 张汇总表:每张表只告诉你「经过我的科目之和」。消元做的事,是把 12 张汇总表重新组合成 12 个彼此独立的口径;剩下的 28 个方向,是汇总表永远看不到的明细分配。
| 数学对象 | 网络层析里的对应物 |
|---|---|
| 未知数 | 40 条 OD 流的速率 |
| 第 行 | 第 条链路上有哪些 OD 流经过(0/1) |
| 主元列 | 能被计数唯一确定的流量组合 |
| 自由变量 | 无论怎么改都不影响任何链路计数的重分配 |
| 通解 | 所有与这 12 个计数一致的流量矩阵 |
量级直觉:28 个自由方向,如果每个只取「有/无」两种极端,就有 种流量矩阵与同一份计数相容。你以为在做测量,其实是在做欠定反演。
1.4 这个类比在哪里失效
流量必须非负,按包计数还是整数。线性解集里绝大多数点带负分量,物理上根本不存在;最小范数解也可能给出负流量。
第二,路由矩阵 不是常数:ECMP 按五元组哈希,同一对 OD 的包会走不同链路, 随流量分布变。
第三,5 分钟计数不是同一瞬间的快照,各链路采样时刻有偏移,这本身就是 的另一个来源。
2. 定义
2.1 增广矩阵(augmented matrix)
把右端 当作最后一列,就得到增广矩阵 。这样行变换能同时作用在系数与右端上,不会漏项。
2.2 秩
是列空间维数,也等于阶梯形中主元的个数; 是增广矩阵的秩。
2.3 秩判据(Rouché–Capelli)
这条判据以 Rouché 与 Capelli 的名字流传;它的现代矩阵语言处理见 Horn 与 Johnson。
设 、 为未知数个数:
| 条件 | 解的情况 | 自由变量个数 |
|---|---|---|
| 无解 | — | |
| 唯一解 | ||
| 无穷多解 |
2.4 通解
若 是任一特解(particular solution),则全部解为 ,其中 。记作 ,一个 维的仿射子空间。
3. 为什么这样定义
为什么用「两个秩是否相等」判定存在性?因为行变换把 与 化成阶梯形:出现 ()就是「」的矛盾,它让增广矩阵恰好多一个主元,增广秩比系数秩大 1。反之没有这种行,就能从下往上回代,一定解得出。
为什么通解写成「特解 + 零空间」?因为 是线性的:任意两个解的差满足 ,落在零空间里。所以所有解彼此只差一个零空间向量;自由度 就是零空间维数(4.3 证明)。
3.1 反事实:把自由变量全部置零
欠定时最省事的「选解」办法是:让自由变量取 0,只解主元。听上去无害——它确实给出一个精确解。看一个手算例子:
一个方程、两个未知数,、。置零 得 ;置零 得 ;取两分量相等得 。三个都满足方程,范数分别是 、、。
如果这是两条 OD 流,报给扩容决策的就是「1 Gbps 全走 A」还是「各 500 Mbps」——同一份计数,三个答案,差别是 100%。
再看不那么平凡的例子:5.1 的 系统里,特解 的范数是 1,而把自由变量取成 得到的 范数是 。两者都精确满足方程,但一个把所有流量压到第 3 条 OD 流上,另一个让第 1 条流变成负数。真正的最小范数解是 ,范数约 ——它哪个都不是(按 SVD 计算)。
所以「特解任选」不是自由,是责任:选解规则必须由工程先验给出——最小范数、非负、稀疏,各对应一种业务假设。
4. 性质与推导
4.1 行变换保持解集
三种行变换都是左乘一个可逆矩阵 ,于是 。解集不变,但 的列空间会变——所以不能拿行变换后的矩阵去研究列空间。这是最容易踩的坑之一。
4.2 唯一性与解集结构
若 ,每列都有主元,没有自由变量,回代时每个未知数都被唯一确定。若 ,取自由变量 与 得到两个不同解,故不唯一。
对任意 都是解;反之任一解 都满足 。互相包含,所以解集恰好是 。
这条结论把工作拆成两半:找一个特解(消元 + 回代),再找零空间的一组基(4.3)。若两个秩不等,方程无解,秩判据到此为止;4.4 会把目标换成最小化 。
5. 例子
5.1 手算: 系统的通解
消元。 用第一行消去下面两行的 :。再令 ,并用 消去 中的 :。阶梯形为
数秩。 主元在第 1、3 列,,增广秩也是 2,,故有无穷多解,自由变量 、。
写通解。 回代得 、:
验算。 ;两个方向向量 、 都满足 。NumPy 复核:np.linalg.matrix_rank(A) == 2;lstsq 返回的是解集中范数最小的点(与 相差一个零空间向量)。
5.2 同一系数、矛盾右端
把第三式右端从 4 改成 5:,再减 得 。出现 ,无解。此时 、增广秩 :多出来的一列无法被系数列表示。
5.3 场景:当链路计数自己不自洽
先看一个 4 条链路、2 条 OD 流的最小例子。路由关系是
实测(单位 Gbps)。由 得 ,由 得 ,两者差 0.030 Gbps Mbps。系数秩是 2,增广秩是 3——出现 的矛盾行,无解。
这不是路由模型写错了,而是采样误差。真实网络里 12 条链路的计数永远不可能严格自洽;工程上的下一步不是找「精确解」,而是承认它无解,改用 4.4 的最小二乘,并把残差 当作「这份计数有多脏」的指标。
5.4 场景闭环:12 条链路、40 条 OD 流、5 分钟
输入:路由矩阵 ,每条 OD 流平均经过 3.5 条链路,非零元约 140 个。用 CSR 稀疏存储, kB;计数向量 是 96 B。每 5 分钟来一次,一天 288 次。
计算:对 做一次消元/QR,约 FLOP;回代与零空间基再乘一个常数。按 1 GFLOP/s 估,单次不到 10 μs——算力从来不是瓶颈。
输出:一个特解 、零空间的一组基(28 个方向)、残差 。决策是「扩哪条链路」,但报告里必须同时写清:这个结论依赖哪条选解规则。
成本:每次 10 μs,一年 10 万次也只有 1 s 的计算量。真正的成本是决策风险:28 维自由度里,任何一条 OD 流都能在不改变 12 个计数的前提下被改掉;单靠计数无法定位大象流(elephant flow)。
失败条件:
- 最小范数把流量摊平: 会把每条 OD 流都分到一点,真正 2 Gbps 的大象流被报成 300 Mbps。兜底:加 sFlow/NetFlow 采样,或用稀疏/非负先验。
- 负流量:线性解允许 ,物理上不存在。兜底:改用非负最小二乘,并检查解的可行性。
- 过期:链路权重、ECMP 哈希一变, 整张作废。兜底:拓扑变更后立即重算 ,并在残差突增时告警。
6. 常见误区
- 误区: 就有唯一解。纠正:还必须先满足两个秩相等。例如 、:,但增广秩为 3,无解。
- 误区:自由变量个数是 。纠正:是 ,自由变量来自没有主元的列,列数由 决定。
- 误区:行变换会改变列空间,所以不能用来解方程。纠正:行变换保持解集,这正是消元合法的原因;它只改变列空间。
- 误区:通解里的特解唯一。纠正:特解任选,不同特解差一个零空间向量;作为集合的通解唯一,写法不唯一。
- 误区:无解时没有任何信息可用。纠正:可以问哪个 让残差最小(4.4),也可以问至少满足哪几个方程。
7. 概念网络
- 前置:4.1 线性方程组的几何 —— 三种情形的几何图像。
- 前置:3.7 四个基本子空间 —— 列空间、零空间是秩判据的语言。
- 后续:4.3 齐次方程与零空间 —— 把 算到底。
- 后续:4.4 最小二乘 —— 无解时的最优近似。
- 后续:4.5 伪逆与最小范数解 —— 无穷多解里挑范数最小的。
- 关联:1.6 正交与投影 —— 残差正交是最优性条件。
8. 通往大模型:微调中的「解不唯一」
出现位置:约束式微调、模型编辑、把一批输入输出对「装进」权重。
形状:设要修改的权重是 (),约束来自 个样本:,其中 、。每一行是独立的 元方程组,未知数 个、方程 个。
为什么需要:当 时 ,按秩判据这是无穷多解,解集维数 。满足全部约束的权重有整整一个 维(取 )的仿射族。训练停在哪一点取决于初始化、优化器和正则;不同点对旧任务的影响可能完全不同。
可检验结论:任取两个满足 的权重 ,差 满足 ,即每一行都落在 的左零空间里。沿这个方向改权重,对这批约束的输出没有任何影响——这正是「零空间方向」在大模型里的物理含义,也是 4.3 与 4.5 的连接点。
import numpy as np
rng = np.random.default_rng(0)
D, K = 32, 4
H = rng.normal(size=(D, K)); Y = rng.normal(size=(D, K))
W1 = np.linalg.lstsq(H.T, Y.T, rcond=None)[0].T # 最小范数解
Z = rng.normal(size=(D, D))
Z -= Z @ H @ np.linalg.pinv(H) # 投影到左零空间
W2 = W1 + 0.1 * Z
print(np.linalg.norm(W1 @ H - Y), np.linalg.norm(W2 @ H - Y)) # 都满足约束
如果这一步算错,工程上看到什么现象:把「两个秩相等」误读成「有唯一解」,脚本会对欠定系统直接调用 solve,要么报奇异矩阵,要么返回一个带负流量的解;再或者用 pinv 的默认阈值,把近相关的两条链路当成独立约束,扩容建议一天一个样。运维侧看到的不是「数学错了」,而是「同一张网,昨天的报告说扩 A,今天说扩 B」。
9. 练习
- 概念:为什么「增广秩更大」等价于「无解」?用阶梯形里的 行解释。
- 计算:解 、、,写出通解与自由变量个数。
- 计算:判断 、、 是否有解;若有,求通解。
- 计算:、,求秩与通解。
- 开放:两个微调结果在 100 条评测样本上表现完全一样,能否断定是同一个模型?用本节语言回答。
参考答案
- 该行在系数部分无主元、在增广部分有主元,故增广秩比系数秩恰好多 1,对应方程 ,无解。反之无此行则可回代求解。
- 第二式是第一式的 2 倍,冗余;由第三式 ,代入第一式得 。,一个自由变量。取 :。
- 消元:、,相减得 ,无解(系数秩 2,增广秩 3)。
- 三行成比例,; 与列同方向,有解。,通解 。
- 不能。评测只覆盖部分方向(就像只有 个约束),两个模型可能只差一个「在这些样本上输出为零」的零空间方向,换输入就会分叉。要判断异同,需要更多方向的探针,或直接比较权重差。
10. 一页速记
- 先把 化成阶梯形,数主元。
- 物理意义 / 现实对应:通解是一族「与所有可观测计数一致」的流量分配;特解是代表,零空间是看不见的重分配。
- 有解 。
- 有解后: 唯一; 无穷多,自由度 。
- 通解 ,特解任选,零空间补自由度。
- 行变换保解集、不保列空间。
11. 参考文献与致谢
这一页的知识不是凭空来的。下面列出本页直接借用的原始工作与权威整理;正文中的人名、定理名已链接到对应条目。链接优先指向 DOI、arXiv 或可长期访问的原文存档。
- 霍恩与约翰逊(Roger A. Horn & Charles R. Johnson, 2012):Matrix Analysis(2nd ed.)。把相容性判据()与通解 放进同一套矩阵语言,第 2.3–2.4 节的写法与之一致。Cambridge University Press
- 格卡尔(Joseph F. Grcar, 2011):How ordinary elimination became Gaussian elimination。考据「普通消元」如何被归到高斯名下——消元法本身早于高斯,1809 年《天体运动论》的传播才让这个名字定型,第 1.1 节沿用这个叫法。Historia Mathematica 38(2), 163–218
下一篇 → 4.3 齐次方程与零空间
随堂测 · 6 题
源文件:04-线性方程组/02-解的存在性与通解.md