AI 数学课程 · 第 13 课,共 180

无解、唯一解,还是多解

学习分类二元线性方程组,将每种解的数量与参数可辨识性联系起来,并处理矛盾数据或重复数据。

分享这篇文章

三个只有两行的数据集,可能让同一个模型呈现三种截然不同的行为。设仿射预测规则为

y^=wx+b,\widehat y=wx+b,

其中实数 ww 和 bb 是未知的权重与偏置。

数据集第一条观测第二条观测精确拟合结果
A(1,4)(1,4)(3,8)(3,8)一组:(w,b)=(2,2)(w,b)=(2,2)
B(1,4)(1,4)(1,6)(1,6)无解:同一个输入要求两个不同的输出
C(1,4)(1,4)(1,4)(1,4)无穷多组:第二行重复了第一行

数据集 A 可以确定两个参数。数据集 B 与精确模型矛盾。数据集 C 增加了一行,却没有增加新的限制。 行数本身无法告诉我们数据包含了多少信息。

学完本课后,你将能够从方程和几何图形中识别不相容、唯一解以及欠定的二元线性方程组;不使用 行列式或矩阵秩来证明每种分类;并解释结果对参数可辨识性意味着什么。

学习成果: 识别不相容、唯一解以及欠定的方程组。

本课承接第 12 课:方程组作为交点, 其中一个解必须满足每项约束,并表现为一个共同点。官方 Mathematics for Machine Learning 配套网站 在第 2.1 和 2.3 节 中介绍无解、唯一解或无穷多解的分类。下面的数据集、推导、代码、探索器和练习题均为原创。

解的数量诊断可用的信息

考虑关于实数未知量 uu 和 vv 的两个方程。每个非退化方程——即其左侧两个系数不同时为零的方程—— 都会在 (u,v)(u,v) 平面上画出一条直线。方程组的解集就是这些直线的交集。

这三种可能不是需要死记的目录,而是源自直线的几何性质。两条不平行的直线相交一次。不同的平行线永不 相交。如果两条直线共有两个不同的点,那么它们都经过由这两个点确定的那条直线,因此两条直线重合并 共有所有点。因此,两个变量的两个线性方程不可能有恰好两个、三个或任何其他大于一的有限个实数解。

用机器学习的语言说,如果在给定模型下只有一个参数设置能够拟合观测,那么参数就能从给定观测中被辨识。 可辨识性取决于约束提供的信息,而不只是收集了多少行数据。

消元会显露一个值、矛盾或恒等式

在本课程的现阶段,最直接的分类测试是组合方程,同时保留它们的共同解。注意计算的最后一行说了什么。

一个解会留下可代入的值

求解

\begin{aligned} 2u+v&=7, \tag{1}\\ u-v&=2. \tag{2} \end{aligned}

将方程 (1) 和 (2) 相加,消去 vv:

3u=9  ⟺  u=3.3u=9 \iff u=3.

将 u=3u=3 代入方程 (2):

3−v=2  ⟺  v=1.3-v=2 \iff v=1.

无解以矛盾告终

现在考虑

\begin{aligned} u+2v&=4, \tag{3}\\ 2u+4v&=11. \tag{4} \end{aligned}

将方程 (3) 乘以 2 得到 2u+4v=82u+4v=8。方程 (4) 却要求同一个左侧等于 11。从方程 (4) 中减去方程 (3) 的两倍,就能明确显示冲突:

(2u+4v)−2(u+2v)=11−2(4)  ⟺  0=3.(2u+4v)-2(u+2v)=11-2(4) \iff 0=3.

没有任何 uu 和 vv 的值能让 0=30=3 成立。方程组不相容,其两条直线平行且不同,解集为 ∅\varnothing。 计算并不是没能找到隐藏的答案;它证明了不存在精确答案。

无穷多解以恒等式告终

最后考虑

\begin{aligned} 3u-v&=5, \tag{5}\\ -6u+2v&=-10. \tag{6} \end{aligned}

方程 (6) 是方程 (5) 的 −2-2 倍。将方程 (5) 的两倍与方程 (6) 相加,得到

(−6u+2v)+2(3u−v)=−10+2(5)  ⟺  0=0.(-6u+2v)+2(3u-v)=-10+2(5) \iff 0=0.

恒等式 0=00=0 对所有 uu 和 vv 都成立;它没有增加新的限制。这不意味着每一对数都能解原方程组。 仍然有一个独立方程。为 uu 任意选择实数 tt,方程 (5) 就迫使 v=3t−5v=3t-5:

(u,v)=(t,3t−5),t∈R.(u,v)=(t,3t-5), \qquad t\in\mathbb R.

对于每个实数 tt,都有

3t−(3t−5)=5,3t-(3t-5)=5,

将这个等式乘以 −2-2 就能验证方程 (6)。自由选择 tt 会沿着共同直线生成无穷多个解。

在一个参数平面中比较三种几何形态

探索器将 w+b=4w+b=4 保留为一项观测约束,然后改变其余数据所要求的内容。使用原生选择框选择配置。 除非设备请求减少动效,否则直线会在不同状态间过渡。实线、虚线和点线与颜色一起传达相同区别, 带标题的表格则不依赖 SVG 或 JavaScript 来陈述每个结论。

参数可辨识性取决于观测约束如何相交,而不只是行数。

使用方向键浏览选项。图形、状态和表格会更新为所选的精确拟合问题。

直线在 (w, b) = (2, 2) 处相交一次,因此两个参数都可辨识。

约束 1(实线): w + b = 4约束 2(虚线): 2w + b = 6唯一解(圈加号)
权重和偏置参数平面中的观测约束所选配置:一个解。直线在 (w, b) = (2, 2) 处相交一次,因此两个参数都可辨识。
当前约束及图形的语义替代描述
约束方程它的作用
约束 1(实线)w + b = 4定义能拟合第一条观测的第一组参数对。
约束 2(虚线)2w + b = 6与第一条直线相交一次,并确定两个参数。
精确分类唯一且相容
解集{(2, 2)}
对模型参数的含义观测确定了权重 w = 2 和偏置 b = 2。

首次由服务器渲染的状态是唯一解系统 w+b=4w+b=4 和 2w+b=62w+b=6,其中包括其状态、图形和语义表。选择噪声 情形会为模型 y^=wx+b\widehat y=wx+b 加入由观测 (0,2)(0,2)、(1,4)(1,4) 和 (2,6.1)(2,6.1) 产生的三项约束。前两项 选择 (w,b)=(2,2)(w,b)=(2,2),但第三项要求 2(2)+2=6.12(2)+2=6.1,这是错误的。

不除以零的系数测试

对于两个非退化方程

a1u+b1v=c1,a2u+b2v=c2,\begin{aligned} a_1u+b_1v&=c_1,\\ a_2u+b_2v&=c_2, \end{aligned}

比较系数对 (a1,b1)(a_1,b_1) 和 (a2,b2)(a_2,b_2)。如果一个系数对是另一个的实数倍,则它们成比例:存在一个数 kk 使得

(a2,b2)=k(a1,b1).(a_2,b_2)=k(a_1,b_1).

这种写法比单独比较 a2/a1a_2/a_1 和 b2/b1b_2/b_1 更安全,因为任一分母都可能为零。

系数关系右侧关系几何形态解
不存在同一个乘数 kk 能匹配两个系数不需要不平行直线恰好一个
(a2,b2)=k(a1,b1)(a_2,b_2)=k(a_1,b_1)c2≠kc1c_2\ne kc_1不同的平行直线无
(a2,b2)=k(a1,b1)(a_2,b_2)=k(a_1,b_1)c2=kc1c_2=kc_1同一条直线两次无穷多

唯一解的情形意味着两个方程在不同方向上施加约束。平行的情形具有相同的左侧模式;将第一个左侧缩放后, 要么重现第二个右侧,要么暴露矛盾。

零系数仍然是普通数据。方程组

0u+v=−1,u+0v=3\begin{aligned} 0u+v&=-1,\\ u+0v&=3 \end{aligned}

不过就是 v=−1v=-1 和 u=3u=3。水平线和竖直线在唯一点 (3,−1)(3,-1) 相交。问题在于试图除以 a1=0a_1=0 的比值测试; 零系数本身并没有问题。

如果整个左侧都为零,该方程就是退化的,必须直接读取:

退化方程含义对更大方程组的影响
0u+0v=00u+0v=0对每个实数对都成立的恒等式不增加限制
0u+0v=50u+0v=5对任何实数对都不成立的矛盾使完整方程组不相容

例如,u+v=4u+v=4 与 0=00=0 放在一起仍然留下无穷族 (t,4−t)(t,4-t)。恒等式不会把一条直线升级为一个唯一点。

可辨识性会询问观测增加了什么

回到 y^=wx+b\widehat y=wx+b。每条观测 (xi,yi)(x_i,y_i) 都会变成一个参数约束

xiw+b=yi.x_iw+b=y_i.

对于观测 (1,4)(1,4) 和 (3,8)(3,8),约束为

w+b=4,3w+b=8.\begin{aligned} w+b&=4,\\ 3w+b&=8. \end{aligned}

相减得到 2w=42w=4,因此 w=2w=2 且 b=2b=2。不同的输入值使观测以不同方式约束参数。

把 (1,4)(1,4) 重复一百次,仍然只是把 w+b=4w+b=4 写一百次。数据集的行数增加了,但允许的参数族仍然是 (w,b)=(t,4−t)(w,b)=(t,4-t)。这些观测无法分别确定 ww 和 bb。

如果重复的输入带有两个目标,例如 (1,4)(1,4) 和 (1,6)(1,6),约束就变成 w+b=4w+b=4 和 w+b=6w+b=6。精确仿射模型 无法同时满足二者。这是一个精确拟合诊断,并不是数据毫无价值的证明。测量噪声、四舍五入的标签, 或过于简单的模型,都可能使真实观测不相容。

后面的课程会引入秩,作为计算独立线性信息数量的术语。本课只需要可见的测试:约束是相交、冲突,还是重复?

NumPy 将精确求解与近似拟合分开

上面的唯一解例子可以写成数组方程。A 的每一行包含乘在 (u,v)(u,v) 上的系数,c 的每个元素包含所要求的右侧:

import numpy as np

A = np.array([
    [2.0,  1.0],
    [1.0, -1.0],
])
c = np.array([7.0, 2.0])

solution = np.linalg.solve(A, c)
verified = np.allclose(A @ solution, c, rtol=0.0, atol=1e-12)

print("solution:", solution)
print("A @ solution:", A @ solution)
print("passes both equations:", verified)

# Three slightly inconsistent observations of y_hat = w*x + b.
x_observed = np.array([0.0, 1.0, 2.0])
y_observed = np.array([2.0, 4.0, 6.1])
design = np.column_stack((x_observed, np.ones_like(x_observed)))

approximate, _, _, _ = np.linalg.lstsq(design, y_observed, rcond=None)
predictions = design @ approximate
residuals = predictions - y_observed

print("approximate [w, b]:", np.round(approximate, 6))
print("predictions:", np.round(predictions, 6))
print("residuals:", np.round(residuals, 6))
print(
    "all three exact:",
    np.allclose(residuals, 0.0, rtol=0.0, atol=1e-12),
)

验证后的输出为:

solution: [3. 1.]
A @ solution: [7. 2.]
passes both equations: True
approximate [w, b]: [2.05     1.983333]
predictions: [1.983333 4.033333 6.083333]
residuals: [-0.016667  0.033333 -0.016667]
all three exact: False

官方 numpy.linalg.solve 文档 规定, 对于具有唯一解的方阵系统,它执行精确的数值求解;对于奇异或非方形的系数数组,它会引发 LinAlgError。 但这个错误本身无法区分“无解”和“无穷多解”,因为两种平行配置都无法满足唯一解要求。代数分类必须补充含义。

numpy.allclose 会在选定容差内检查数组。 代码设置 rtol=0.0 和明确的绝对容差,因为参考残差为零;NumPy 警告说,其默认绝对容差并不适合每种小数值尺度。 这个数值检查支持精确推导,但不会重新定义数学相等。

噪声行没有共同的精确参数对,因此第二次计算提出了不同的问题。numpy.linalg.lstsq 文档 说明,当不存在精确解时,返回的向量会最小化残差的欧几里得大小。它产生的 (w,b)≈(2.05,1.9833)(w,b)\approx(2.05,1.9833) 带来小残差,而不是零残差。最小二乘法会在后续课程中专门介绍;在这里,它标记出求解每一项约束与 近似不相容观测之间的边界。

下一行应该改变交集

分类一个方程组,归根结底是在问每项约束增加了什么。相交会确定一个点。矛盾会清空解集。缩放后的重复项 会留下一个自由选择。对于 AI 模型,这些结果分别对应可辨识的参数、不可能的精确拟合,或数据无法区分的参数。

下一课将赋予向量以正式角色,把它们作为 AI 数据的表示。恢复参数之前,请记住本课的诊断:先检查观测是否真的 唯一地选择了它。

检验你的理解

问题 1

求解 2x + y = 8 和 x − y = 1。说明为什么方程组恰好有一个解,并在两个方程中验证该点。

显示分步解答

相加两个方程,使 yy 消去:

(2x+y)+(x−y)=8+1  ⟺  3x=9  ⟺  x=3.(2x+y)+(x-y)=8+1 \iff 3x=9 \iff x=3.

将 x=3x=3 代入 x−y=1x-y=1:

3−y=1  ⟺  y=2.3-y=1 \iff y=2.

现在在两个原方程中检验 (3,2)(3,2):

2(3)+2=8,3−2=1.2(3)+2=8, \qquad 3-2=1.

消元确定了 xx,代入确定了 yy,而且该点通过了两个真值检验。因此解集恰好为 {(3,2)}\{(3,2)\}。

问题 2

分类 x + 3y = 5 和 2x + 6y = 13。推导决定性的陈述,并解释其几何意义。

显示分步解答

第一个方程的左侧乘以 2 得 2x+6y2x+6y。从第二个方程中减去第一个方程的两倍:

(2x+6y)−2(x+3y)=13−2(5)  ⟺  0=3.(2x+6y)-2(x+3y)=13-2(5) \iff 0=3.

这个矛盾不可能对任何实数 xx 或 yy 成立。系数对 (2,6)(2,6) 是 (1,3)(1,3) 的两倍,但右侧 13 不是 5 的两倍。 直线平行且不同,因此方程组不相容,解集为 ∅\varnothing。

问题 3

求出 4p − 2q = 6 和 −2p + q = −3 的所有解。解释为什么 0 = 0 不是最终答案。

显示分步解答

将第二个方程乘以 −2-2 得到

−2(−2p+q)=−2(−3)  ⟺  4p−2q=6,-2(-2p+q)=-2(-3) \iff 4p-2q=6,

这就是第一个方程。因此,用一个方程消去另一个方程会得到 0=00=0,说明这两个方程重复了同一个限制。

仍有一个限制。将 4p−2q=64p-2q=6 除以 2:

2p−q=3  ⟺  q=2p−3.2p-q=3 \iff q=2p-3.

令 p=tp=t,其中 t∈Rt\in\mathbb R 任意。于是每个解为

(p,q)=(t,2t−3).(p,q)=(t,2t-3).

恒等式 0=00=0 诊断出了冗余;参数化的直线,而不是恒等式本身,才是完整的无穷解集。

问题 4

不除以零系数,分类 0x + y = 4 和 3x + 0y = 9。

显示分步解答

直接读取零系数。第一个方程是 y=4y=4,一条水平线。第二个方程是 3x=93x=9,因此除以非零数 3 得 x=3x=3,一条竖直线。

两条直线在 (x,y)=(3,4)(x,y)=(3,4) 处相交一次。验证为

0(3)+4=4,3(3)+0(4)=9.0(3)+4=4, \qquad 3(3)+0(4)=9.

方程组相容且有唯一解。不需要任何类似 3/03/0 的比值。

问题 5

如果第二个方程分别为 (a) 0x + 0y = 0 或 (b) 0x + 0y = 7,方程 x + y = 2 会怎样?给出每种解集。

显示分步解答

对于 (a),第二个方程是 0=00=0,对每个实数对都成立。它不增加限制。第一条直线仍然存在,因此令 x=tx=t,得到 y=2−ty=2-t:

Sa={(t,2−t)∣t∈R}.S_a=\{(t,2-t)\mid t\in\mathbb R\}.

方程组相容且欠定,有无穷多个解。

对于 (b),第二个方程是 0=70=7,对任何实数对都不成立。一个解必须同时满足这个矛盾和第一条直线,这是不可能的。因此

Sb=∅,S_b=\varnothing,

方程组不相容。

问题 6

模型 ŷ = wx + b 收到观测 (2, 7) 五十次。w 和 b 能被辨识吗?将所有精确拟合参数化,并解释重复行增加了什么。

显示分步解答

每次重复观测都会产生同一个约束:

2w+b=7.2w+b=7.

自由选择权重 w=tw=t。那么偏置必须是

b=7−2t.b=7-2t.

因此所有精确拟合为

(w,b)=(t,7−2t),t∈R.(w,b)=(t,7-2t), \qquad t\in\mathbb R.

五十个副本仍然只画出一条参数直线,因此有无穷多个参数对可以拟合。这些行确认了同一观测,却没有增加不同的限制。 仅凭这个数据集,两个参数都不可辨识。

问题 7

对于模型 ŷ = wx + b 的观测 (0, 2)、(1, 4) 和 (2, 6.1),证明不存在精确拟合。然后解释 NumPy 最小二乘输出 [2.05, 1.983333] 做了什么、没有声称什么。

显示分步解答

第一条观测迫使 b=2b=2。第二条观测接着给出

w+b=4  ⟺  w+2=4  ⟺  w=2.w+b=4 \iff w+2=4 \iff w=2.

唯一满足前两行的参数对是 (w,b)=(2,2)(w,b)=(2,2)。将它代入第三行:

2w+b=2(2)+2=6≠6.1.2w+b=2(2)+2=6\ne6.1.

因此不存在能同时精确满足三项约束的参数对。

最小二乘输出使用 w≈2.05w\approx2.05 和 b≈1.983333b\approx1.983333。它的预测约为 (1.983333,4.033333,6.083333)(1.983333,4.033333,6.083333), 残差约为 (−0.016667,0.033333,−0.016667)(-0.016667,0.033333,-0.016667)。这些数值很小但不为零。该输出最小化了指定的残差度量;它不会把 不相容的精确方程组变成相容的方程组,也没有声称每个观测都被精确匹配。

资料来源

  1. Mathematics for Machine Learning companion website
  2. Mathematics for Machine Learning book PDF
  3. NumPy documentation: numpy.linalg.solve
  4. NumPy documentation: numpy.linalg.lstsq
  5. NumPy documentation: numpy.allclose