仿射空间如何解释偏置与决策边界
观察平移如何移动一条直线而不改变方向,并了解神经网络层中的偏置为何能让分类边界离开原点。
分类器的权重决定分隔两个类别的方向。偏置则让这条分隔线可以位于原点之外。这个小小的加项对应着几何平移:它把线性边界变成仿射边界,同时保持边界方向不变。
读完本文,你将能够区分平移后的子空间与经过原点的子空间,判断一个映射是线性还是仿射,并计算偏置如何改变简单分类器的边界。
学习目标: 区分线性集合与仿射集合,以及线性变换与仿射变换。
本文承接第 034 课,该课介绍了线性映射如何保持向量求和和数乘。《Mathematics for Machine Learning》第 2.8 节在此基础上引入偏移。本文中的例子、分类器计算、图示和练习均为原创。
直线可以保持方向,同时离开原点
向量子空间必须包含零向量。例如,所有 的倍数组成一条经过原点的直线:
取一点 ,并把它加到 中的每个向量上。得到的是一条平行直线,但它不再经过原点:
这条直线的参数坐标为 。消去 得到 。它的方向向量与 相同,但 上的每个点都平移了 。特别地,:第一坐标为零要求 ,此时第二坐标为 。如果所选的点 本身属于 ,那么平移后的集合 就等于 ;在这个特殊情形下,仿射子空间也同时是向量子空间。
- 无偏置:2x₁ − x₂ = 0
- 偏置 −1:2x₁ − x₂ = 1
图中的两条直线具有相同的方向向量 ,因为它与它们共有的法向量 垂直。虚线是实线的平移,位置改变而朝向不变。即使不依赖颜色,标签和方程也表达了相同的信息。
仿射组合会留在偏移集合中
识别仿射几何的一种方法,是使用系数之和为一的点组合。如果 和 属于 ,那么对任意实数 ,
由于 ,偏移 会保留下来;括号中的部分也属于 ,因为子空间对线性组合封闭。因此,直线上的点做插值后仍在这条直线上;即使 不在 内、形成外推,结论也成立。
普通求和的系数总和不同。对 ,,它不一定属于 。在我们的直线例子中,取 、,则 ,不满足直线方程 。因此,仿射子空间保持仿射组合;向量子空间保持所有线性组合并且包含零向量。
所选的锚点并不唯一。若 ,则 ,因为加上 中的元素只会改变作为锚点的点。方向空间是不变的部分;支撑点只是一个方便的代表。
偏置会移动分类器边界
仿射映射由线性映射加上一个固定平移构成:
对任意两个输入,平移项会在差值中抵消:
而对于系数和为一的组合,输出会保持相应的仿射组合:
这不同于任意求和时线性映射的规则。特别地,,因此非零偏置会让零输入映射到非零输出。
令 表示一个包含两个特征的输入,其分数为
当 时分到正类;当 时分到负类。分数为零的位置就是决策边界:
权重向量 决定边界的法向,偏置 则将分数的等值面设为 。在二维中,边界是一条直线;在更高维的特征空间中,相应的平坦集合称为超平面。点 位于边界上,因为 。沿方向 移动不会改变分数:
没有偏置时,边界为 ,并且经过原点。加上 改变的是截距,而不是法向量。更一般地,分类器分数 使用 确定超平面的朝向,使用 确定其偏移。PyTorch 的 torch.nn.Linear 文档将这种仿射形式写为 ,并默认启用可学习的偏置(torch.nn.Linear 文档)。当只有一个输出时,该层可以产生这种分数;后续再用阈值规则等方式分配类别。
只有在权重保持不变时,偏置才会使边界平行移动。如果训练改变了 ,边界的朝向也会改变。偏置也不能让一条仿射边界表达所有可能的分类模式;它只能调整这个特定线性分数的偏移。
用 NumPy 验证几何关系
可以直接检查这个例子。下面的代码计算支撑点以及沿方向移动得到的两个点的分数:
import numpy as np
w = np.array([2.0, -1.0])
b = -1.0
p = np.array([0.0, -1.0])
d = np.array([1.0, 2.0])
score = lambda x: w @ x + b
print(score(p)) # 0.0: p is on the boundary
print(score(p + d)) # 0.0: moving along d stays on it
print(score(p + 3 * d)) # 0.0: extrapolating along d also stays on it
print(score(np.zeros(2))) # -1.0: the origin is off the boundary
计算采用列向量几何,而常见的张量批次会把样本存放在行中。PyTorch 将批量线性层写作 ;转置是为了适应这种按行组织的约定。默认带偏置时,该操作是仿射的。设置 bias=False 会使层的映射变为线性,不过之后的非线性激活仍是另一个独立操作。
检查理解
Question 1
若 U = span((1, 2)) 且 p = (0, −1),写出 p + U 的参数形式,并说明它是否包含原点。
Show the step-by-step solution
集合中的每个点都可写成 ,其中 ,方向向量 。因此 。若要到达原点,第一坐标要求 ,但此时第二坐标为 。所以该集合不包含原点,也不是向量子空间。
Question 2
直线为 (x₁, x₂) = (3, 1) + t(2, −1)。给出一个锚点和它的方向空间。锚点唯一吗?
Show the step-by-step solution
给出的锚点为 ,方向空间为 。若 是 中任意向量,则 ,因此直线上的其他点也可以作为锚点。方向空间不变。
Question 3
说明仿射子空间对组合 λx + (1 − λ)y 封闭,即使 λ 不在 0 到 1 之间。
Show the step-by-step solution
写作 、,其中 。那么 。 的系数和为一,剩余向量因 对线性组合封闭而属于 。任意实数 都成立;当取值在 外时,点会沿同一仿射子空间超出线段外推。
Question 4
对于仿射直线 L = (0, −1) + span((1, 2)),检验它的锚点与自身相加所得的 (0, −2) 是否位于 L 上。
Show the step-by-step solution
点 属于这条直线,当且仅当 。代入 得 ,不等于 。所以普通求和的结果不在 上。两个点的系数总和为 ,锚点偏移被加了两次,而不是保留一次。
Question 5
对于 F(x) = Ax + b,计算 F(0),并说明该映射成为线性映射的条件。
Show the step-by-step solution
代入零向量:。所有线性映射都必须把零映射为零,所以若 , 就不是线性的。当 时,规则变为 ,它保持向量求和和数乘,因此是线性映射。
Question 6
对于 s(x) = 2x₁ − x₂ − 1,验证 p = (0, −1) 位于边界上,并说明 d = (1, 2) 沿着边界方向。
Show the step-by-step solution
在 处,,所以它位于零分数边界上。加上 后分数的变化量为 ,因为偏置是常数且权重与方向的点积为零。因此 仍在边界上。
Question 7
对于分类器分数 wᵀx + b,当 w 固定时改变 b 会怎样?如果训练中 w 也改变呢?
Show the step-by-step solution
边界满足 。固定 会保持法向量和朝向不变;改变 会改变等值面,从而平移边界。如果 改变,法向量也会改变,因此边界除了移动还可能旋转。偏置本身不控制朝向。
Question 8
PyTorch 使用默认偏置选项构造 nn.Linear(4, 2) 时,会得到什么映射?如何修改才能让该层是线性的?
Show the step-by-step solution
对于包含四个特征、按行存放的输入 ,该层返回 ,输出包含两个特征。默认的 bias=True 会加上可学习向量 ,因此这是仿射映射。使用 bias=False 构造后会移除该平移项,得到线性映射 。