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

AI 方程:一次预测可以匹配多组参数对

学习把方程读作约束,描述一变量和二变量解集,安全地保持等价关系,并在 NumPy 中测试模型参数。

分享这篇文章

一个玩具预测模型返回

y^=2w+b,\hat y=2w+b,

其中权重 ww 和偏置 bb 都是实数。对于一个观测样本,目标值是 55。使预测匹配该目标会施加约束

2w+b=5.2w+b=5.

参数对 (w,b)=(1,3)(w,b)=(1,3) 有效,因为 2(1)+3=52(1)+3=5。(0,5)(0,5)、(2,1)(2,1) 和 (−1,7)(-1,7) 也都有效。一个目标值并没有揭示某个唯一的参数设置,而是选出了完整的参数对解集

S={(w,b)∈R2∣2w+b=5}={(t,5−2t)∣t∈R}.S=\left\{(w,b)\in\mathbb R^2\mid 2w+b=5\right\} =\left\{(t,5-2t)\mid t\in\mathbb R\right\}.

这个集合是 (w,b)(w,b) 平面上的一条直线:直线上的每个点都会让模型恰好预测 55,而直线之外的每个点都会偏离目标。学完本课,你将能够区分表达式、方程、约束和恒等式;描述方程的所有解;并识别代数捷径何时会改变解集。

**学习目标:**把方程当作约束,并描述满足它的全部取值。

本课沿用第 3 课:定义域、陪域与有效模型输入中的定义域原则:在知道允许哪些取值之前,不能陈述方程的解。官方的 Mathematics for Machine Learning 配套网站将数学基础组织为理解模型和学习过程的工具。其第 1 章和第 2.1 节说明了从模型参数走向解集、再走向线性方程组的路径。下面的单方程桥接内容是原创内容;它停在方程组、高斯消元、秩和优化之前。

等号把计算变成真假检验

符号 2w+b2w+b 构成一个表达式。给定 ww 和 bb 的取值后,这个表达式有一个数值,但它并不声称这个数值是某个特定数字。

符号 2w+b=52w+b=5 构成一个方程。它对某个赋值提出一个可能为真或假的断言。当 (w,b)=(1,3)(w,b)=(1,3) 时断言为真;当 (1,2)(1,2) 时,由于 2(1)+2=42(1)+2=4,断言为假。

这些相关术语承担不同的作用:

术语在实数上的示例它告诉我们的内容
表达式2w+b2w+b要计算的量;没有等号,也没有真假值
方程2w+b=52w+b=5其真假取决于 ww 和 bb 的断言
约束要求 2w+b=52w+b=5只有满足方程的赋值才可行
恒等式2(w+1)=2w+22(w+1)=2w+2对每个 w∈Rw\in\mathbb R 都为真
解(w,b)=(1,3)(w,b)=(1,3)使方程为真的一个赋值
解集{(t,5−2t)∣t∈R}\{(t,5-2t)\mid t\in\mathbb R\}所有满足条件的赋值,而不只是一个示例

“方程”和“约束”的区别在于它们扮演的角色。同一个字符串 2w+b=52w+b=5,作为数学语法是方程;当它筛选候选参数时则是约束。“恒等式”更强:2(w+1)=2w+22(w+1)=2w+2 根本不会筛掉任何实数 ww。

一个变量不保证只有一个答案

考虑方程

3x−7=11,x∈R.3x-7=11, \qquad x\in\mathbb R.

两边加上 77,再除以非零数 33,得到

3x−7=11  ⟺  3x=18  ⟺  x=6.3x-7=11 \iff 3x=18 \iff x=6.

双箭头   ⟺  \iff 表示“当且仅当”。每一步都可以撤销,因此实数解集为 S={6}S=\{6\}。把答案代回原方程即可检查:3(6)−7=18−7=113(6)-7=18-7=11。

书面变量的数量并不能决定解的数量:

方程及其定义域解集原因
3x−7=113x-7=11,x∈Rx\in\mathbb R{6}\{6\}恰好一个实数通过真假检验
x+1=x+2x+1=x+2,x∈Rx\in\mathbb R∅\varnothing减去 x+1x+1 后得到假命题 0=10=1
2(x+1)=2x+22(x+1)=2x+2,x∈Rx\in\mathbb RR\mathbb R两边对每个实数 xx 都相等
x2=2x^2=2,x∈Rx\in\mathbb R{−2,2}\{-\sqrt2,\sqrt2\}两个实数的平方等于 22
x2=2x^2=2,x∈Qx\in\mathbb Q∅\varnothing两个实数解都不是有理数

这里 ∅\varnothing 是空集,R\mathbb R 是实数集,Q\mathbb Q 是有理数集。最后两行使用同一个方程但使用不同定义域,因此回答的是不同问题。

一个目标值留下一个参数族

回到 2w+b=52w+b=5,其中 (w,b)∈R2(w,b)\in\mathbb R^2。记号 R2\mathbb R^2 表示实数有序对。隔离 bb:

2w+b=5  ⟺  b=5−2w.2w+b=5 \iff b=5-2w.

这一步没有固定 ww。给它任意实数值命名为 tt;那么 bb 就被确定为 5−2t5-2t。这给出了全部解:

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

为什么说这个描述是完整的?对每个实数 tt,代入可得 2t+(5−2t)=52t+(5-2t)=5,所以列出的每一对都是解。反过来,任何满足 2w+b=52w+b=5 的参数对都必须满足 b=5−2wb=5-2w;令 t=wt=w,该参数对就属于上面列出的族。两个方向共同证明了集合相等。

模型预测 2w + b 和目标值 5 的参数直线探索器。移动联动参数可沿完整解直线移动,或测试一个独立的候选参数对。
沿精确解集移动

方向键以 0.25 为步长改变 w;所需偏置会自动更新。

1

方向键以 0.5 为步长改变 b;所需权重会自动更新。

3

指针操作:沿直线拖动带十字的圆形标记。两个滑块提供等价的键盘控制。

选中的解:w = 1,b = 3,且 2w + b = 5。

所有精确解×选中的联动解◆独立候选值
受 2w 加 b 等于 5 约束的参数对一条下降的解直线包含所有预测值为 5 的权重—偏置对。带十字的圆标记联动解,菱形标记独立控制的候选值,虚线段显示候选值与直线之间的垂直差距。-2-101234-30369权重 w偏置 bb = 5 − 2w
测试任意候选参数对

独立设置两个值。判定使用精确的四分之一增量算术,而不是容差。

1
2

不是解:(1, 2) 预测 4,残差为 -1。在这个权重下,所需偏置是 3。

选中的解:w = 1,b = 3,且 2w + b = 5。 不是解:(1, 2) 预测 4,残差为 -1。在这个权重下,所需偏置是 3。

当前与参考参数对及其计算
参数对权重 w偏置 b2w + b残差约束判定
选中的联动参数对1350 是解
独立候选参数对124-1 不是解
参考参数对 A0550 是解
参考参数对 B2150 是解

实线、选中的带十字圆、候选菱形、文字判定和表格共同传达同一个结论,不依赖颜色。移动联动控件会改变参数对,但不会改变预测值:增加 0.250.25 的 ww 要求减少 0.50.5 的 bb。把候选值移到直线外会产生非零残差。因此,一次观测建立的是可行性——它说明哪些参数对能拟合——而不是应该优先选择哪一个拟合参数对。

可逆步骤保留每一个解

代数变形在产生等价方程时是安全的,而不只是产生一个所有旧解恰好都满足的方程。区别在于反向是否成立。

设 L(x)L(x) 和 R(x)R(x) 在 x∈Dx\in D 上有定义。对同一定义域上有定义的任意表达式 c(x)c(x),

L(x)=R(x)  ⟺  L(x)+c(x)=R(x)+c(x).L(x)=R(x) \iff L(x)+c(x)=R(x)+c(x).

正向步骤在两边加上同一个值。反向步骤减去同一个值,恢复原方程。由于对每个 x∈Dx\in D 两个蕴含都成立,这两个方程恰好具有相同的解集。

同样,对于固定的非零数 kk,

L(x)=R(x)  ⟺  kL(x)=kR(x).L(x)=R(x) \iff kL(x)=kR(x).

乘以 kk 是可逆的,因为可以除以 kk。条件 k≠0k\ne0 是论证的一部分,不是技术性脚注。

对一变量示例,可逆路径可以双向阅读:

3x−7=11↔subtract 7add 73x=18↔multiply by 3divide by 3x=6.3x-7=11 \xleftrightarrow[\text{subtract }7]{\text{add }7} 3x=18 \xleftrightarrow[\text{multiply by }3]{\text{divide by }3} x=6.

每个箭头上下的标签都写出了互逆操作。一个有用的审计很简单:写明定义域,然后问自己如何对该定义域中的每个候选值撤销每一步。

四种捷径会改变问题

某个操作可能把解带到下一步,却不能把所有候选值从下一步带回去。写 ⇒\Rightarrow 而不是   ⟺  \iff,可以诚实地保留这种单向关系。

乘以零会抹掉信息

从 x=1x=1 出发,两边乘以零得到

x=1⇒0x=0⋅1⇒0=0.x=1\Rightarrow 0x=0\cdot1\Rightarrow 0=0.

原解集是 {1}\{1\};最后的恒等式对每个实数 xx 都为真。不存在可以恢复原限制的除以零操作。

除以变量可能丢掉它为零的情况

将 x2=xx^2=x 改写并因式分解为 x2−x=0x^2-x=0,再得到 x(x−1)=0x(x-1)=0。原方程的实数解是 x=0x=0 和 x=1x=1。 直接把原方程除以 xx 会悄悄假设 x≠0x\ne0:

x2=x⇒assumes x≠0divide by xx=1.x^2=x \quad\xRightarrow[\text{assumes }x\ne0]{\text{divide by }x}\quad x=1.

这个除法没有证明零是无效的;它只是从变形步骤的定义域中删除了零。在除以可能为零的表达式之前,先单独处理 x=0x=0 的情况。

平方可能引入额外候选值

方程 x=2x=2 的解集是 {2}\{2\}。两边平方得到 x2=4x^2=4,其实数解集为 {−2,2}\{-2,2\}。第一个方程两边相等会保证它们的平方相等,但平方相等不能保证原来的符号相同。平方后产生的任何候选值都必须代回原方程检查。

主平方根可能隐藏负解

从 x2=4x^2=4 写出 x=4=2x=\sqrt4=2 会丢掉 x=−2x=-2。在实数范围内,

x2=∣x∣,\sqrt{x^2}=|x|,

而不是对所有 xx 都等于 xx。完整的步骤是 ∣x∣=2|x|=2,因此 x=±2x=\pm2。平方和取主平方根并不是对所有实数都互逆的操作;符号和定义域条件决定哪个方向有效。

NumPy 容差是数值策略,不是符号相等

在代数中,参数对属于 SS 当且仅当 2w+b=52w+b=5 精确成立。软件经常计算十进制近似值,因此实现可以采用独立的接受策略。NumPy 官方的isclose 文档定义了逐元素容差检验。把目标值作为参考值并将相对容差设为零时,本课询问的是

∣y^−5∣≤10−12.|\hat y-5|\le10^{-12}.

下面这个已执行的示例让两个问题清晰可见:

import numpy as np

np.set_printoptions(precision=13)

candidates = np.array([
    [0.0, 5.0],
    [0.0, 5.0000000000005],
    [1.0, 2.999],
    [2.0, 1.0],
])
target = 5.0
predictions = 2.0 * candidates[:, 0] + candidates[:, 1]
residuals = predictions - target

print(predictions)
print(residuals)
print(predictions == target)
print(np.isclose(predictions, target, rtol=0.0, atol=1e-12))
[5.              5.0000000000005 4.999           5.             ]
[ 0.0000000000000e+00  5.0004445029117e-13 -9.9999999999945e-04
  0.0000000000000e+00]
[ True False False  True]
[ True  True False  True]

第一对和第四对存储的预测值都等于存储的目标值。第二对并不相等,尽管它的残差落在所选的 10−1210^{-12} 工程容差内。第三对偏差约为 10−310^{-3},两个检验都失败。

两个布尔掩码都不能证明精确的符号陈述。== 比较存储的浮点值,而 isclose 应用一个经过有意选择的不等式。NumPy 还说明,其通用相对容差公式把第二个参数当作参考值,而默认绝对容差对于非常小的参考值可能不合适。明确写出容差会让实现规则可复核;将候选值代回原符号方程仍然是数学检验。

一次观测说明什么能拟合,而不是该选什么

在任何训练算法出现之前,参数直线就揭示了一个实际限制。一次观测“输入系数 22,目标值 55”给两个实参数施加一个限制。它可以排除 (1,2)(1,2),却无法在 (1,3)(1,3) 和 (2,1)(2,1) 之间做出选择,因为两者的预测都恰好是 55。

额外观测可以施加额外约束,后续课程将讨论约束如何相互作用。本课更早也更基础的终点是:写出定义域,把方程当作真假条件,描述完整的满足集合,并让每次变形都对应一个逆操作或明确的候选值检查。这种习惯是逐行阅读下一课推导的基础。

检查你的理解

问题 1

将每一项分类为表达式、条件方程、恒等式、解或解集:3q + 1;3q + 1 = 7;2(q + 4) = 2q + 8;q = 2;以及 {2}。使用定义域 q ∈ ℝ。

显示分步解答
  • 3q+13q+1 是一个表达式:给定 qq 后它有一个值,但不提出相等断言。
  • 3q+1=73q+1=7 是一个条件方程:对一些实数值为真,对另一些为假。用它筛选 qq 时,它也是一个约束。
  • 2(q+4)=2q+82(q+4)=2q+8 是 R\mathbb R 上的恒等式。展开左边会得到 2q+82q+8,对每个实数 qq 都成立。
  • q=2q=2 是求解条件方程后得到的解:3(2)+1=73(2)+1=7。
  • {2}\{2\} 是解集。花括号表示所有实数解构成的集合,即使这个集合只有一个成员。

定义域对于恒等式和解集的陈述很重要;上述每个分类都是在 q∈Rq\in\mathbb R 上作出的。

问题 2

在实数范围内求解 5x + 2 = 17,展示可逆步骤,并写出解集。

显示分步解答

两边减去 22:

5x+2=17  ⟺  5x=15.5x+2=17\iff5x=15.

这是可逆的,因为加回 22 就能恢复第一个方程。两边除以非零数 55:

5x=15  ⟺  x=3.5x=15\iff x=3.

乘以 55 可以撤销这一步。把候选值代回原方程检查:

5(3)+2=15+2=17.5(3)+2=15+2=17.

因此实数解集是 S={3}S=\{3\}。

问题 3

描述满足 3u + v = 7 的每个实数对 (u, v),然后验证 u = −1、0 和 2 时得到的参数对。

显示分步解答

隔离 vv:两边减去 3u3u:

3u+v=7  ⟺  v=7−3u.3u+v=7\iff v=7-3u.

令 tt 表示对 uu 的任意实数选择。完整解集为

S={(t,7−3t)∣t∈R}.S=\{(t,7-3t)\mid t\in\mathbb R\}.

现在代入题目要求的三个值:

uuv=7−3uv=7-3u检查
−1-110103(−1)+10=−3+10=73(-1)+10=-3+10=7
00773(0)+7=73(0)+7=7
22113(2)+1=6+1=73(2)+1=6+1=7

每一行都满足方程,但参数 tt 遍历所有实数,所以这三行只是示例,不是整个解集。

问题 4

某个推导把 4(x − 3) = 20 变为 x − 3 = 5,再变为 x = 8。解释为什么两步都保留实数解集,并检查结果。

显示分步解答

先将两边除以 44:

4(x−3)=20  ⟺  x−3=5.4(x-3)=20\iff x-3=5.

因为 4≠04\ne0,乘以 44 可以撤销这一步。接着两边加上 33:

x−3=5  ⟺  x=8.x-3=5\iff x=8.

减去 33 可以撤销第二步。因此,对每个实数候选值,两个箭头都能双向成立。代入检查结果:

4(8−3)=4(5)=20.4(8-3)=4(5)=20.

实数解集是 {8}\{8\}。

问题 5

求 z² = 3z 的所有实数解。然后解释如果立即将两边除以 z,会丢失哪个解。

显示分步解答

将所有项移到一边并因式分解:

z2=3z  ⟺  z2−3z=0  ⟺  z(z−3)=0.z^2=3z \iff z^2-3z=0 \iff z(z-3)=0.

当至少一个因子为零时,实数乘积为零,因此

z=0orz−3=0,z=0\quad\text{or}\quad z-3=0,

得到 z=0z=0 或 z=3z=3。两者代回原方程都成立:02=3(0)=00^2=3(0)=0,32=3(3)=93^2=3(3)=9。所以 S={0,3}S=\{0,3\}。

把 z2=3zz^2=3z 除以 zz 会假设 z≠0z\ne0,并留下 z=3z=3。由于除以零没有定义,这一步丢失了有效解 z=0z=0。在除法之前必须单独处理零的情况。

问题 6

在实数范围内求解 √(x + 5) = x − 1。展示平方如何产生一个必须舍弃的候选值。

显示分步解答

平方根要求 x+5≥0x+5\ge0。平方根的值非负,因此等式还要求 x−1≥0x-1\ge0,即 x≥1x\ge1。两边平方以生成候选值:

x+5=(x−1)2=x2−2x+1.x+5=(x-1)^2=x^2-2x+1.

将所有项移到一边并因式分解:

0=x2−3x−4=(x−4)(x+1).0=x^2-3x-4=(x-4)(x+1).

平方后的方程给出 x=4x=4 或 x=−1x=-1。第二个候选值违反了 x≥1x\ge1 的必要条件,也不满足原方程:−1+5=2\sqrt{-1+5}=2,而 −1−1=−2-1-1=-2。第一个候选值可以验证:

4+5=9=3=4−1.\sqrt{4+5}=\sqrt9=3=4-1.

因此原方程的实数解集是 S={4}S=\{4\}。平方保留了真解,却引入了 −1-1,所以检查原方程至关重要。

问题 7

对于 2w + b = 5,软件计算出的候选预测值为 5 + 4 × 10⁻¹³。这个参数对是精确的符号解吗?np.isclose(prediction, 5, rtol=0, atol=10⁻¹²) 会接受它吗?解释两个答案。

显示分步解答

题目给出的精确残差是

(5+4×10−13)−5=4×10−13,(5+4\times10^{-13})-5=4\times10^{-13},

它不为零。因此,按题目所写的符号方程,这个参数对不是精确解。

对于 NumPy 策略,因为 rtol=0,要比较绝对残差与绝对容差:

4×10−13≤10−12.4\times10^{-13}\le10^{-12}.

这个不等式为真,所以 np.isclose 返回 True。其含义是“在这个容差下接受”,而不是“在符号上证明相等”。如果应用需要更严格或依赖尺度的策略,就必须选择并记录相应容差。

资料来源

  1. Mathematics for Machine Learning companion website
  2. Mathematics for Machine Learning book PDF
  3. NumPy documentation: numpy.isclose