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

仿射空间如何解释偏置与决策边界

观察平移如何移动一条直线而不改变方向,并了解神经网络层中的偏置为何能让分类边界离开原点。

分享这篇文章

分类器的权重决定分隔两个类别的方向。偏置则让这条分隔线可以位于原点之外。这个小小的加项对应着几何平移:它把线性边界变成仿射边界,同时保持边界方向不变。

读完本文,你将能够区分平移后的子空间与经过原点的子空间,判断一个映射是线性还是仿射,并计算偏置如何改变简单分类器的边界。

学习目标: 区分线性集合与仿射集合,以及线性变换与仿射变换。

本文承接第 034 课,该课介绍了线性映射如何保持向量求和和数乘。《Mathematics for Machine Learning》第 2.8 节在此基础上引入偏移。本文中的例子、分类器计算、图示和练习均为原创。

直线可以保持方向,同时离开原点

向量子空间必须包含零向量。例如,所有 d=(1,2)d=(1,2) 的倍数组成一条经过原点的直线:

U={t(1,2):t∈R}。U = \{t(1,2):t\in\mathbb{R}\}。

取一点 p=(0,−1)p=(0,-1),并把它加到 UU 中的每个向量上。得到的是一条平行直线,但它不再经过原点:

L=p+U={p+u:u∈U}={(0,−1)+t(1,2):t∈R}。L = p+U = \{p+u:u\in U\} = \{(0,-1)+t(1,2):t\in\mathbb{R}\}。

这条直线的参数坐标为 (x1,x2)=(t,2t−1)(x_1,x_2)=(t,2t-1)。消去 tt 得到 2x1−x2=12x_1-x_2=1。它的方向向量与 UU 相同,但 LL 上的每个点都平移了 pp。特别地,0∉L0\notin L:第一坐标为零要求 t=0t=0,此时第二坐标为 −1-1。如果所选的点 pp 本身属于 UU,那么平移后的集合 p+Up+U 就等于 UU;在这个特殊情形下,仿射子空间也同时是向量子空间。

方向相同,有无偏移的对比偏置将边界从 2x₁ − x₂ = 0 移至 2x₁ − x₂ = 1。两条直线保持平行,平移后的边界不再包含原点。
x₁x₂原点p = (0, −1)偏移法向量 w = (2, −1)
  • 无偏置:2x₁ − x₂ = 0
  • 偏置 −1:2x₁ − x₂ = 1

图中的两条直线具有相同的方向向量 (1,2)(1,2),因为它与它们共有的法向量 (2,−1)(2,-1) 垂直。虚线是实线的平移,位置改变而朝向不变。即使不依赖颜色,标签和方程也表达了相同的信息。

仿射组合会留在偏移集合中

识别仿射几何的一种方法,是使用系数之和为一的点组合。如果 x=p+ux=p+u 和 y=p+vy=p+v 属于 LL,那么对任意实数 λ\lambda,

λx+(1−λ)y=λ(p+u)+(1−λ)(p+v)=p+(λu+(1−λ)v)∈p+U。\lambda x+(1-\lambda)y = \lambda(p+u)+(1-\lambda)(p+v) = p+\bigl(\lambda u+(1-\lambda)v\bigr) \in p+U。

由于 λ+(1−λ)=1\lambda+(1-\lambda)=1,偏移 pp 会保留下来;括号中的部分也属于 UU,因为子空间对线性组合封闭。因此,直线上的点做插值后仍在这条直线上;即使 λ\lambda 不在 [0,1][0,1] 内、形成外推,结论也成立。

普通求和的系数总和不同。对 x,y∈Lx,y\in L,x+y=2p+(u+v)x+y=2p+(u+v),它不一定属于 p+Up+U。在我们的直线例子中,取 x=px=p、y=py=p,则 x+y=(0,−2)x+y=(0,-2),不满足直线方程 2x1−x2=12x_1-x_2=1。因此,仿射子空间保持仿射组合;向量子空间保持所有线性组合并且包含零向量。

所选的锚点并不唯一。若 q∈Uq\in U,则 p+U=(p+q)+Up+U=(p+q)+U,因为加上 UU 中的元素只会改变作为锚点的点。方向空间是不变的部分;支撑点只是一个方便的代表。

偏置会移动分类器边界

仿射映射由线性映射加上一个固定平移构成:

对任意两个输入,平移项会在差值中抵消:

F(x)−F(y)=(Ax+b)−(Ay+b)=A(x−y)。F(x)-F(y)=(Ax+b)-(Ay+b)=A(x-y)。

而对于系数和为一的组合,输出会保持相应的仿射组合:

F(λx+(1−λ)y)=λF(x)+(1−λ)F(y)。F\bigl(\lambda x+(1-\lambda)y\bigr) = \lambda F(x)+(1-\lambda)F(y)。

这不同于任意求和时线性映射的规则。特别地,F(0)=bF(0)=b,因此非零偏置会让零输入映射到非零输出。

令 x=(x1,x2)∈R2x=(x_1,x_2)\in\mathbb{R}^2 表示一个包含两个特征的输入,其分数为

s(x)=2x1−x2−1。s(x)=2x_1-x_2-1。

当 s(x)≥0s(x)\ge 0 时分到正类;当 s(x)<0s(x)<0 时分到负类。分数为零的位置就是决策边界:

2x1−x2−1=0⟺2x1−x2=1。2x_1-x_2-1=0 \quad\Longleftrightarrow\quad 2x_1-x_2=1。

权重向量 w=(2,−1)w=(2,-1) 决定边界的法向,偏置 b=−1b=-1 则将分数的等值面设为 wTx=1w^\mathsf{T}x=1。在二维中,边界是一条直线;在更高维的特征空间中,相应的平坦集合称为超平面。点 p=(0,−1)p=(0,-1) 位于边界上,因为 2(0)−(−1)−1=02(0)-(-1)-1=0。沿方向 d=(1,2)d=(1,2) 移动不会改变分数:

没有偏置时,边界为 2x1−x2=02x_1-x_2=0,并且经过原点。加上 bb 改变的是截距,而不是法向量。更一般地,分类器分数 wTx+bw^\mathsf{T}x+b 使用 ww 确定超平面的朝向,使用 bb 确定其偏移。PyTorch 的 torch.nn.Linear 文档将这种仿射形式写为 y=xAT+by=xA^\mathsf{T}+b,并默认启用可学习的偏置(torch.nn.Linear 文档)。当只有一个输出时,该层可以产生这种分数;后续再用阈值规则等方式分配类别。

只有在权重保持不变时,偏置才会使边界平行移动。如果训练改变了 ww,边界的朝向也会改变。偏置也不能让一条仿射边界表达所有可能的分类模式;它只能调整这个特定线性分数的偏移。

用 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 将批量线性层写作 xAT+bxA^\mathsf{T}+b;转置是为了适应这种按行组织的约定。默认带偏置时,该操作是仿射的。设置 bias=False 会使层的映射变为线性,不过之后的非线性激活仍是另一个独立操作。

检查理解

Question 1

若 U = span((1, 2)) 且 p = (0, −1),写出 p + U 的参数形式,并说明它是否包含原点。

Show the step-by-step solution

集合中的每个点都可写成 p+tup+tu,其中 t∈Rt\in\mathbb{R},方向向量 u=(1,2)u=(1,2)。因此 (x1,x2)=(0,−1)+t(1,2)=(t,2t−1)(x_1,x_2)=(0,-1)+t(1,2)=(t,2t-1)。若要到达原点,第一坐标要求 t=0t=0,但此时第二坐标为 −1-1。所以该集合不包含原点,也不是向量子空间。

Question 2

直线为 (x₁, x₂) = (3, 1) + t(2, −1)。给出一个锚点和它的方向空间。锚点唯一吗?

Show the step-by-step solution

给出的锚点为 p=(3,1)p=(3,1),方向空间为 U=span⁡{(2,−1)}U=\operatorname{span}\{(2,-1)\}。若 qq 是 UU 中任意向量,则 (p+q)+U=p+U(p+q)+U=p+U,因此直线上的其他点也可以作为锚点。方向空间不变。

Question 3

说明仿射子空间对组合 λx + (1 − λ)y 封闭,即使 λ 不在 0 到 1 之间。

Show the step-by-step solution

写作 x=p+ux=p+u、y=p+vy=p+v,其中 u,v∈Uu,v\in U。那么 λx+(1−λ)y=(λ+1−λ)p+λu+(1−λ)v\lambda x+(1-\lambda)y=(\lambda+1-\lambda)p+\lambda u+(1-\lambda)v。pp 的系数和为一,剩余向量因 UU 对线性组合封闭而属于 UU。任意实数 λ\lambda 都成立;当取值在 [0,1][0,1] 外时,点会沿同一仿射子空间超出线段外推。

Question 4

对于仿射直线 L = (0, −1) + span((1, 2)),检验它的锚点与自身相加所得的 (0, −2) 是否位于 L 上。

Show the step-by-step solution

点 (x1,x2)(x_1,x_2) 属于这条直线,当且仅当 2x1−x2=12x_1-x_2=1。代入 (0,−2)(0,-2) 得 2(0)−(−2)=22(0)-(-2)=2,不等于 11。所以普通求和的结果不在 LL 上。两个点的系数总和为 22,锚点偏移被加了两次,而不是保留一次。

Question 5

对于 F(x) = Ax + b,计算 F(0),并说明该映射成为线性映射的条件。

Show the step-by-step solution

代入零向量:F(0)=A0+b=bF(0)=A0+b=b。所有线性映射都必须把零映射为零,所以若 b≠0b\ne0,FF 就不是线性的。当 b=0b=0 时,规则变为 F(x)=AxF(x)=Ax,它保持向量求和和数乘,因此是线性映射。

Question 6

对于 s(x) = 2x₁ − x₂ − 1,验证 p = (0, −1) 位于边界上,并说明 d = (1, 2) 沿着边界方向。

Show the step-by-step solution

在 pp 处,s(p)=2(0)−(−1)−1=0s(p)=2(0)-(-1)-1=0,所以它位于零分数边界上。加上 dd 后分数的变化量为 2(1)−1(2)=02(1)-1(2)=0,因为偏置是常数且权重与方向的点积为零。因此 p+d=(1,1)p+d=(1,1) 仍在边界上。

Question 7

对于分类器分数 wᵀx + b,当 w 固定时改变 b 会怎样?如果训练中 w 也改变呢?

Show the step-by-step solution

边界满足 wTx=−bw^\mathsf{T}x=-b。固定 ww 会保持法向量和朝向不变;改变 bb 会改变等值面,从而平移边界。如果 ww 改变,法向量也会改变,因此边界除了移动还可能旋转。偏置本身不控制朝向。

Question 8

PyTorch 使用默认偏置选项构造 nn.Linear(4, 2) 时,会得到什么映射?如何修改才能让该层是线性的?

Show the step-by-step solution

对于包含四个特征、按行存放的输入 xx,该层返回 y=xAT+by=xA^\mathsf{T}+b,输出包含两个特征。默认的 bias=True 会加上可学习向量 bb,因此这是仿射映射。使用 bias=False 构造后会移除该平移项,得到线性映射 y=xATy=xA^\mathsf{T}。

资料来源

  1. Mathematics for Machine Learning book PDF, Section 2.8
  2. PyTorch documentation: torch.nn.Linear