一个玩具预测模型返回
y^=2w+b,
其中权重 w 和偏置 b 都是实数。对于一个观测样本,目标值是 5。使预测匹配该目标会施加约束
2w+b=5.
参数对 (w,b)=(1,3) 有效,因为 2(1)+3=5。(0,5)、(2,1) 和 (−1,7) 也都有效。一个目标值并没有揭示某个唯一的参数设置,而是选出了完整的参数对解集
S={(w,b)∈R2∣2w+b=5}={(t,5−2t)∣t∈R}.
这个集合是 (w,b) 平面上的一条直线:直线上的每个点都会让模型恰好预测 5,而直线之外的每个点都会偏离目标。学完本课,你将能够区分表达式、方程、约束和恒等式;描述方程的所有解;并识别代数捷径何时会改变解集。
**学习目标:**把方程当作约束,并描述满足它的全部取值。
本课沿用第 3 课:定义域、陪域与有效模型输入中的定义域原则:在知道允许哪些取值之前,不能陈述方程的解。官方的 Mathematics for Machine Learning 配套网站将数学基础组织为理解模型和学习过程的工具。其第 1 章和第 2.1 节说明了从模型参数走向解集、再走向线性方程组的路径。下面的单方程桥接内容是原创内容;它停在方程组、高斯消元、秩和优化之前。
等号把计算变成真假检验
符号 2w+b 构成一个表达式。给定 w 和 b 的取值后,这个表达式有一个数值,但它并不声称这个数值是某个特定数字。
符号 2w+b=5 构成一个方程。它对某个赋值提出一个可能为真或假的断言。当 (w,b)=(1,3) 时断言为真;当 (1,2) 时,由于 2(1)+2=4,断言为假。
这些相关术语承担不同的作用:
| 术语 | 在实数上的示例 | 它告诉我们的内容 |
|---|
| 表达式 | 2w+b | 要计算的量;没有等号,也没有真假值 |
| 方程 | 2w+b=5 | 其真假取决于 w 和 b 的断言 |
| 约束 | 要求 2w+b=5 | 只有满足方程的赋值才可行 |
| 恒等式 | 2(w+1)=2w+2 | 对每个 w∈R 都为真 |
| 解 | (w,b)=(1,3) | 使方程为真的一个赋值 |
| 解集 | {(t,5−2t)∣t∈R} | 所有满足条件的赋值,而不只是一个示例 |
“方程”和“约束”的区别在于它们扮演的角色。同一个字符串 2w+b=5,作为数学语法是方程;当它筛选候选参数时则是约束。“恒等式”更强:2(w+1)=2w+2 根本不会筛掉任何实数 w。
一个变量不保证只有一个答案
考虑方程
3x−7=11,x∈R.
两边加上 7,再除以非零数 3,得到
3x−7=11⟺3x=18⟺x=6.
双箭头 ⟺ 表示“当且仅当”。每一步都可以撤销,因此实数解集为 S={6}。把答案代回原方程即可检查:3(6)−7=18−7=11。
书面变量的数量并不能决定解的数量:
| 方程及其定义域 | 解集 | 原因 |
|---|
| 3x−7=11,x∈R | {6} | 恰好一个实数通过真假检验 |
| x+1=x+2,x∈R | ∅ | 减去 x+1 后得到假命题 0=1 |
| 2(x+1)=2x+2,x∈R | R | 两边对每个实数 x 都相等 |
| x2=2,x∈R | {−2,2} | 两个实数的平方等于 2 |
| x2=2,x∈Q | ∅ | 两个实数解都不是有理数 |
这里 ∅ 是空集,R 是实数集,Q 是有理数集。最后两行使用同一个方程但使用不同定义域,因此回答的是不同问题。
一个目标值留下一个参数族
回到 2w+b=5,其中 (w,b)∈R2。记号 R2 表示实数有序对。隔离 b:
2w+b=5⟺b=5−2w.
这一步没有固定 w。给它任意实数值命名为 t;那么 b 就被确定为 5−2t。这给出了全部解:
(w,b)=(t,5−2t),t∈R.
为什么说这个描述是完整的?对每个实数 t,代入可得 2t+(5−2t)=5,所以列出的每一对都是解。反过来,任何满足 2w+b=5 的参数对都必须满足 b=5−2w;令 t=w,该参数对就属于上面列出的族。两个方向共同证明了集合相等。
模型预测 2w + b 和目标值 5 的参数直线探索器。移动联动参数可沿完整解直线移动,或测试一个独立的候选参数对。所有精确解×选中的联动解◆独立候选值
当前与参考参数对及其计算| 参数对 | 权重 w | 偏置 b | 2w + b | 残差 | 约束判定 |
|---|
| 选中的联动参数对 | 1 | 3 | 5 | 0 | ✓ 是解 |
|---|
| 独立候选参数对 | 1 | 2 | 4 | -1 | ≠ 不是解 |
|---|
| 参考参数对 A | 0 | 5 | 5 | 0 | ✓ 是解 |
|---|
| 参考参数对 B | 2 | 1 | 5 | 0 | ✓ 是解 |
|---|
实线、选中的带十字圆、候选菱形、文字判定和表格共同传达同一个结论,不依赖颜色。移动联动控件会改变参数对,但不会改变预测值:增加 0.25 的 w 要求减少 0.5 的 b。把候选值移到直线外会产生非零残差。因此,一次观测建立的是可行性——它说明哪些参数对能拟合——而不是应该优先选择哪一个拟合参数对。
可逆步骤保留每一个解
代数变形在产生等价方程时是安全的,而不只是产生一个所有旧解恰好都满足的方程。区别在于反向是否成立。
设 L(x) 和 R(x) 在 x∈D 上有定义。对同一定义域上有定义的任意表达式 c(x),
L(x)=R(x)⟺L(x)+c(x)=R(x)+c(x).
正向步骤在两边加上同一个值。反向步骤减去同一个值,恢复原方程。由于对每个 x∈D 两个蕴含都成立,这两个方程恰好具有相同的解集。
同样,对于固定的非零数 k,
L(x)=R(x)⟺kL(x)=kR(x).
乘以 k 是可逆的,因为可以除以 k。条件 k=0 是论证的一部分,不是技术性脚注。
对一变量示例,可逆路径可以双向阅读:
3x−7=11add 7subtract 73x=18divide by 3multiply by 3x=6.
每个箭头上下的标签都写出了互逆操作。一个有用的审计很简单:写明定义域,然后问自己如何对该定义域中的每个候选值撤销每一步。
四种捷径会改变问题
某个操作可能把解带到下一步,却不能把所有候选值从下一步带回去。写 ⇒ 而不是 ⟺,可以诚实地保留这种单向关系。
乘以零会抹掉信息
从 x=1 出发,两边乘以零得到
x=1⇒0x=0⋅1⇒0=0.
原解集是 {1};最后的恒等式对每个实数 x 都为真。不存在可以恢复原限制的除以零操作。
除以变量可能丢掉它为零的情况
将 x2=x 改写并因式分解为 x2−x=0,再得到 x(x−1)=0。原方程的实数解是 x=0 和 x=1。
直接把原方程除以 x 会悄悄假设 x=0:
x2=xdivide by xassumes x=0x=1.
这个除法没有证明零是无效的;它只是从变形步骤的定义域中删除了零。在除以可能为零的表达式之前,先单独处理 x=0 的情况。
平方可能引入额外候选值
方程 x=2 的解集是 {2}。两边平方得到 x2=4,其实数解集为 {−2,2}。第一个方程两边相等会保证它们的平方相等,但平方相等不能保证原来的符号相同。平方后产生的任何候选值都必须代回原方程检查。
主平方根可能隐藏负解
从 x2=4 写出 x=4=2 会丢掉 x=−2。在实数范围内,
x2=∣x∣,
而不是对所有 x 都等于 x。完整的步骤是 ∣x∣=2,因此 x=±2。平方和取主平方根并不是对所有实数都互逆的操作;符号和定义域条件决定哪个方向有效。
NumPy 容差是数值策略,不是符号相等
在代数中,参数对属于 S 当且仅当 2w+b=5 精确成立。软件经常计算十进制近似值,因此实现可以采用独立的接受策略。NumPy 官方的isclose 文档定义了逐元素容差检验。把目标值作为参考值并将相对容差设为零时,本课询问的是
∣y^−5∣≤10−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−12 工程容差内。第三对偏差约为 10−3,两个检验都失败。
两个布尔掩码都不能证明精确的符号陈述。== 比较存储的浮点值,而 isclose 应用一个经过有意选择的不等式。NumPy 还说明,其通用相对容差公式把第二个参数当作参考值,而默认绝对容差对于非常小的参考值可能不合适。明确写出容差会让实现规则可复核;将候选值代回原符号方程仍然是数学检验。
一次观测说明什么能拟合,而不是该选什么
在任何训练算法出现之前,参数直线就揭示了一个实际限制。一次观测“输入系数 2,目标值 5”给两个实参数施加一个限制。它可以排除 (1,2),却无法在 (1,3) 和 (2,1) 之间做出选择,因为两者的预测都恰好是 5。
额外观测可以施加额外约束,后续课程将讨论约束如何相互作用。本课更早也更基础的终点是:写出定义域,把方程当作真假条件,描述完整的满足集合,并让每次变形都对应一个逆操作或明确的候选值检查。这种习惯是逐行阅读下一课推导的基础。
检查你的理解
问题 1
将每一项分类为表达式、条件方程、恒等式、解或解集:3q + 1;3q + 1 = 7;2(q + 4) = 2q + 8;q = 2;以及 {2}。使用定义域 q ∈ ℝ。
显示分步解答
- 3q+1 是一个表达式:给定 q 后它有一个值,但不提出相等断言。
- 3q+1=7 是一个条件方程:对一些实数值为真,对另一些为假。用它筛选 q 时,它也是一个约束。
- 2(q+4)=2q+8 是 R 上的恒等式。展开左边会得到 2q+8,对每个实数 q 都成立。
- q=2 是求解条件方程后得到的解:3(2)+1=7。
- {2} 是解集。花括号表示所有实数解构成的集合,即使这个集合只有一个成员。
定义域对于恒等式和解集的陈述很重要;上述每个分类都是在 q∈R 上作出的。
问题 2
在实数范围内求解 5x + 2 = 17,展示可逆步骤,并写出解集。
显示分步解答
两边减去 2:
5x+2=17⟺5x=15.这是可逆的,因为加回 2 就能恢复第一个方程。两边除以非零数 5:
5x=15⟺x=3.乘以 5 可以撤销这一步。把候选值代回原方程检查:
5(3)+2=15+2=17.因此实数解集是 S={3}。
问题 3
描述满足 3u + v = 7 的每个实数对 (u, v),然后验证 u = −1、0 和 2 时得到的参数对。
显示分步解答
隔离 v:两边减去 3u:
3u+v=7⟺v=7−3u.令 t 表示对 u 的任意实数选择。完整解集为
S={(t,7−3t)∣t∈R}.现在代入题目要求的三个值:
| u | v=7−3u | 检查 |
|---|
| −1 | 10 | 3(−1)+10=−3+10=7 |
| 0 | 7 | 3(0)+7=7 |
| 2 | 1 | 3(2)+1=6+1=7 |
每一行都满足方程,但参数 t 遍历所有实数,所以这三行只是示例,不是整个解集。
问题 4
某个推导把 4(x − 3) = 20 变为 x − 3 = 5,再变为 x = 8。解释为什么两步都保留实数解集,并检查结果。
显示分步解答
先将两边除以 4:
4(x−3)=20⟺x−3=5.因为 4=0,乘以 4 可以撤销这一步。接着两边加上 3:
x−3=5⟺x=8.减去 3 可以撤销第二步。因此,对每个实数候选值,两个箭头都能双向成立。代入检查结果:
4(8−3)=4(5)=20.实数解集是 {8}。
问题 5
求 z² = 3z 的所有实数解。然后解释如果立即将两边除以 z,会丢失哪个解。
显示分步解答
将所有项移到一边并因式分解:
z2=3z⟺z2−3z=0⟺z(z−3)=0.当至少一个因子为零时,实数乘积为零,因此
z=0orz−3=0,得到 z=0 或 z=3。两者代回原方程都成立:02=3(0)=0,32=3(3)=9。所以 S={0,3}。
把 z2=3z 除以 z 会假设 z=0,并留下 z=3。由于除以零没有定义,这一步丢失了有效解 z=0。在除法之前必须单独处理零的情况。
问题 6
在实数范围内求解 √(x + 5) = x − 1。展示平方如何产生一个必须舍弃的候选值。
显示分步解答
平方根要求 x+5≥0。平方根的值非负,因此等式还要求 x−1≥0,即 x≥1。两边平方以生成候选值:
x+5=(x−1)2=x2−2x+1.将所有项移到一边并因式分解:
0=x2−3x−4=(x−4)(x+1).平方后的方程给出 x=4 或 x=−1。第二个候选值违反了 x≥1 的必要条件,也不满足原方程:−1+5=2,而 −1−1=−2。第一个候选值可以验证:
4+5=9=3=4−1.因此原方程的实数解集是 S={4}。平方保留了真解,却引入了 −1,所以检查原方程至关重要。
问题 7
对于 2w + b = 5,软件计算出的候选预测值为 5 + 4 × 10⁻¹³。这个参数对是精确的符号解吗?np.isclose(prediction, 5, rtol=0, atol=10⁻¹²) 会接受它吗?解释两个答案。
显示分步解答
题目给出的精确残差是
(5+4×10−13)−5=4×10−13,它不为零。因此,按题目所写的符号方程,这个参数对不是精确解。
对于 NumPy 策略,因为 rtol=0,要比较绝对残差与绝对容差:
4×10−13≤10−12.这个不等式为真,所以 np.isclose 返回 True。其含义是“在这个容差下接受”,而不是“在符号上证明相等”。如果应用需要更严格或依赖尺度的策略,就必须选择并记录相应容差。