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

AI 的子空间:检验受限特征族

学习子空间检验,证明平面对向量运算封闭,并用 NumPy 检查低维表示方向。

分享这篇文章

编码器对每个输入都可能产生数百个坐标,即使附近的表示只沿少数几个连贯方向变化。要分析这种限制,光看一簇点还不够;我们需要一个在方向相加和缩放后仍然有效的集合。

这个集合称为向量子空间。学完本课后,你将能够执行子空间检验,证明经过原点的平面满足检验,排除容易令人误判的反例,并解读已学习表示偏移量的低维线性模型。

学习目标: 检验子空间条件,并解读低维区域。

第 27 课:向量空间规定合法表示介绍了向量加法和标量乘法的环境规则。子空间沿用相同运算,同时缩小允许向量的范围。官方的机器学习数学(Mathematics for Machine Learning)配套网站在书籍 PDF第 2.4.3 节讲解向量子空间。下文的表示场景、计算、代码、图示和练习均为原创。

限制必须经受运算

设环境向量空间为 V=R3V=\mathbb{R}^3,令 U⊆VU\subseteq V 为候选集合。称 UU 为子空间,意味着使用 VV 上已定义的加法和标量乘法时,向量仍留在 UU 内。环境空间提供运算;子集则必须证明自己对这些运算封闭。

检查零向量既快又有决定性。任何子空间都必须包含零向量,因为对每个 u∈Uu\in U,数乘封闭性都要求 0u=00u=0。加法封闭性表示两个允许的方向可以组合。数乘封闭性则表示允许的方向在拉伸、缩短、反向或缩为零时仍然允许。

简洁的线性组合检验把这些要求合在一起。令 α=β=1\alpha=\beta=1 可得到加法,令 β=0\beta=0 可得到数乘,令两个系数都为零可得到零向量。这与第 17 课介绍的线性组合运算相同,现在它被用作判断整个向量族是否属于集合的检验。

示例:经过原点的平面

考虑集合

U={[x1x2x3]∈R3:x3=x1+x2}.U=\left\{ \begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}\in\mathbb{R}^3 :x_3=x_1+x_2 \right\}.

该方程用一个关系约束显示出的三个坐标。任意选择 x1=ax_1=a 和 x2=bx_2=b,则 x3=a+bx_3=a+b。因此,UU 中每个向量都具有如下形式

[aba+b]=a[101]+b[011].\begin{bmatrix}a\\b\\a+b\end{bmatrix} =a\begin{bmatrix}1\\0\\1\end{bmatrix} +b\begin{bmatrix}0\\1\\1\end{bmatrix}.

两个数 aa 和 bb 决定全部三个坐标。从几何上看,结果是在三维空间中的一个平面。令 a=b=0a=b=0 会得到 (0,0,0)(0,0,0),因此该平面经过原点。

现在逐项执行检验。把任意两个成员写成

u=[aba+b],v=[cdc+d].u=\begin{bmatrix}a\\b\\a+b\end{bmatrix}, \qquad v=\begin{bmatrix}c\\d\\c+d\end{bmatrix}.

它们的和为

u+v=[a+cb+da+b+c+d].u+v =\begin{bmatrix}a+c\\b+d\\a+b+c+d\end{bmatrix}.

第三个坐标等于前两个坐标之和:(a+c)+(b+d)=a+b+c+d(a+c)+(b+d)=a+b+c+d。因此 u+v∈Uu+v\in U。用任意实数 λ\lambda 缩放 uu 得到

λu=[λaλbλ(a+b)]=[λaλbλa+λb],\lambda u =\begin{bmatrix}\lambda a\\\lambda b\\\lambda(a+b)\end{bmatrix} =\begin{bmatrix}\lambda a\\\lambda b\\\lambda a+\lambda b\end{bmatrix},

它也满足定义方程。结合零向量检验,这就证明了 UU 是 R3\mathbb{R}^3 的子空间。

空间中的平面图

子空间让每个线性组合都留在平面上

蓝色平面包含原点,并包含第三个坐标等于前两个坐标之和的所有向量。实线箭头留在平面上;虚线箭头不满足方程。

三维坐标空间中的平面子空间经过原点的蓝色平面表示集合 x 三等于 x 一加 x 二。向量 u、v 和 u 减 v 位于平面上。虚线向量 r 的终点离开平面,并以虚线间隔连接到它在平面上的对应点。U:x₃ = x₁ + x₂u = [1, 0, 1]v = [0, 1, 1]u − v = [1, −1, 0]r = [1, 0, 0]不满足 0 = 1 + 00
虽然向量写成三个坐标,平面只需要自由选择两个坐标。经过零点并对加法和数乘封闭,就构成子空间。
平面图所示的坐标检验
向量坐标成员资格检验结果
u[1, 0, 1]1 = 1 + 0属于 U
v[0, 1, 1]1 = 0 + 1属于 U
u − v[1, −1, 0]0 = 1 + (−1)属于 U
r[1, 0, 0]0 ≠ 1 + 0不属于 U

图示可以启发结论,代数才能证明结论:图中只能画出少数箭头,而封闭性必须对每一对向量和每个实数系数都成立。

这幅图回答了几何问题:“这些特征可以移动到哪里?”由于一个坐标由另外两个坐标决定,该平面的维数低于其环境空间。不过,证明比透视图更重要。几支箭头落在平面上,并不能证明无限多个可能向量都满足封闭性。

三个看似合理却不成立的集合

子空间是子集中的特殊情形。形状、对称性和平坦的外观都不足以构成证明。

首先,将示例中的平面平移一个单位:

W={x∈R3:x3=x1+x2+1}.W=\{x\in\mathbb{R}^3:x_3=x_1+x_2+1\}.

这仍是一个平面,但 (0,0,0)(0,0,0) 不满足条件,因为 0≠0+0+10\neq0+0+1。所以 WW 不是向量子空间。数乘也能揭示问题:若 w∈Ww\in W,则 2w2w 通常满足的是 x3=x1+x2+2x_3=x_1+x_2+2,而非定义 WW 的方程。

其次,单位长度向量不构成子空间。归一化嵌入 ee 可能满足 ∥e∥=1\lVert e\rVert=1,但 2e2e 的长度为 22,而 0e0e 的长度为 00。该集合不满足数乘封闭性,也不包含零向量。因此,第 27 课讨论的归一化嵌入可以作为有用的模型输入,却不构成向量空间或子空间。

第三,有限数据集通常不是子空间。即使每条记录的表示都满足 x3=x1+x2x_3=x_1+x_2,仅存储的行也未必包含它们的和、相反数或所有实数倍。由约束定义的向量族 UU 是子空间;用于发现或估计它的有限样本只是 UU 的子集。

NumPy 可以检验示例,但不能代替证明

对于示例中的平面,将两个生成方向按行存储。coefficients 的每一行告诉 NumPy 要组合各方向的多少倍:

import numpy as np

directions = np.array([
    [1.0, 0.0, 1.0],
    [0.0, 1.0, 1.0],
])

coefficients = np.array([
    [2.0, -1.0],
    [-1.0, 3.0],
    [0.5, 0.25],
])

offsets = coefficients @ directions
constraint = np.array([1.0, 1.0, -1.0])
constraint_residuals = offsets @ constraint

print(offsets)
print(constraint_residuals)
print(np.allclose(
    constraint_residuals,
    0.0,
    rtol=0.0,
    atol=1e-12,
))

输出为

[[ 2.   -1.    1.  ]
 [-1.    3.    2.  ]
 [ 0.5   0.25  0.75]]
[0. 0. 0.]
True

第一个 @ 构造三个线性组合。第二个 @ 对每个结果计算 x1+x2−x3x_1+x_2-x_3。NumPy matmul 文档定义了 @ 所执行的形状规则;这里,3×23\times2 系数矩阵乘以 2×32\times3 方向矩阵,得到三个 R3\mathbb{R}^3 中的向量。

这个精确示例会得到零,但真实模型激活使用有限精度运算。NumPy allclose 文档定义了容差比较,并提醒其默认绝对容差可能不适用于远小于 1 的数值。设置 rtol=0.0 并明确选择 atol,能清楚表达零值检验的意图。容差仍须匹配激活值的尺度和应用可接受的误差;1e-12 适用于此处构造的 float64 示例,不是通用阈值。

该程序用已知约束检验选定的向量。它不能证明任意一群模型激活都属于该平面。要支持更广泛的主张,还需要拟合模型、分析残差,并提供证据说明所选线性近似足以描述研究区域。

表示流形通常只在局部平坦

令编码器将输入 xx 映射为表示 h(x)∈Rdh(x)\in\mathbb{R}^d。选择锚点表示 h0h_0,考察附近的偏移量

Δh=h(x)−h0.\Delta h=h(x)-h_0.

如果这些偏移量可以用少数方向的组合很好地近似,子空间 UU 就能提供有用的局部线性模型。在原始坐标中,该近似是平移后的集合

h0+U={h0+u:u∈U}.h_0+U=\{h_0+u:u\in U\}.

偏移量族 UU 经过零点。平移后的表示片段 h0+Uh_0+U 经过 h0h_0,通常本身并不是 Rd\mathbb{R}^d 的子空间。中心化把合法方向与绝对位置区分开来。

这种观点是一种近似,并不声称所有学习得到的表示都位于同一个全局平面上。在Yoshua Bengio 关于深度表示的原始论文中,流形学习被描述为寻找低维高密度区域及其坐标系。论文将 PCA 视为流形学习的线性先驱,也说明了全局线性假设为何会遗漏曲线结构。在局部范围内,平面可以概括某个锚点附近变化的方向;距离更远时,有用方向可能旋转,近似误差也可能增大。

对于 AI 从业者,这给出了一条具体的解读规则:

  • 子空间描述在混合和缩放下封闭的一族允许偏移量;
  • 平移平面描述锚点附近可能出现的表示;
  • 曲线表示流形在不同邻域中可能需要不同的局部平面。

子空间检验告诉我们这个线性对象在内部是否一致。它不能告诉我们该对象是否很好地拟合数据、是否捕获了因果特征,或是否保留了下游任务所需的信息。

边界情形让检验更明确

有两个子空间很容易被忽略。只含零向量的集合 {0}\{0\} 满足所有条件:零加零仍为零,任意标量乘零也为零。整个环境空间 VV 也是自身的子空间。它们称为平凡子空间,不过在检查论证时,这两种边界情形都很有用。

空集不满足条件,因为它不包含零向量。在实数范围内,只含一个非零向量的集合 {u}\{u\} 也不满足条件:除非 u=0u=0,否则 2u2u 不在集合中。相比之下,整条直线 {λu:λ∈R}\{\lambda u:\lambda\in\mathbb{R}\} 能通过检验,因为它包含所有实数倍、它们的和以及零向量。

子空间为受限特征族提供了精确语言。一旦集合通过检验,任意线性组合都仍然合法。下一课将针对描述该集合所用的方向提出另一个问题:其中是否有些方向是冗余的。

检查理解

问题 1

非空子集 U 要满足哪三个条件才能成为实向量空间的子空间?

显示分步解答

首先,验证 0∈U0\in U。其次,取任意 u,v∈Uu,v\in U 并证明 u+v∈Uu+v\in U。第三,取任意实数标量 λ\lambda 和任意 u∈Uu\in U,证明 λu∈U\lambda u\in U。向量和标量都必须是任意的,因为检查少数示例无法证明整个集合的封闭性。

问题 2

用简洁检验说明 $U = {(a, b, a + b): a, b are real}$ 对线性组合封闭。

显示分步解答

取 u=(a,b,a+b)u=(a,b,a+b) 和 v=(c,d,c+d)v=(c,d,c+d) 属于 UU,其中 α\alpha 和 β\beta 为实数。于是

αu+βv=(αa+βc,  αb+βd,  α(a+b)+β(c+d)).\alpha u+\beta v =(\alpha a+\beta c,\;\alpha b+\beta d,\; \alpha(a+b)+\beta(c+d)).

第三个坐标等于前两个坐标之和。因此 αu+βv\alpha u+\beta v 具有所需形式并属于 UU。由于 UU 非空,简洁检验也保证零向量属于其中。

问题 3

对于 u = (2, -1, 1) 和 v = (-1, 3, 2),计算 -u + 2v,并检验结果是否位于本课的平面中。

显示分步解答

先缩放:−u=(−2,1,−1)-u=(-2,1,-1) 且 2v=(−2,6,4)2v=(-2,6,4)。两者相加得到 −u+2v=(−4,7,3)-u+2v=(-4,7,3)。成员资格方程是 x3=x1+x2x_3=x_1+x_2;这里 3=−4+73=-4+7。方程成立,所以结果位于平面中,正如封闭性所预示的那样。

问题 4

为什么平移平面 W = {x in R^3: x_3 = x_1 + x_2 + 1} 会立即无法通过子空间检验?

显示分步解答

在进行较长计算之前先检验零向量。代入后得到 0=0+0+10=0+0+1,这是错误的,因此 0∉W0\notin W。每个向量子空间都必须包含零,所以 WW 不是子空间。多出来的常数将平面从原点移开。

问题 5

所有单位长度的嵌入向量构成子空间吗?指出失败的运算。

显示分步解答

不构成。设 ee 的长度为 1,即 ∥e∥=1\lVert e\rVert=1。数乘封闭性要求 2e2e 和 0e0e 仍在集合中,但它们的长度分别为 2 和 0,因此都不是单位长度。该集合也排除了零向量。归一化很有用,但其输出族不是向量子空间。

问题 6

NumPy 代码报告约束残差 [0, 0, 0]。这证明了什么,还有什么尚未证明?

显示分步解答

这证明三个构造出的偏移量在所选数值容差内满足 x1+x2−x3=0x_1+x_2-x_3=0,也验证了这些示例的矩阵形状和运算。它没有证明每个真实模型激活都位于该平面、该平面能很好地拟合更大的数据集,或这些表示方向对下游任务很重要。这些经验性主张需要更多证据。

问题 7

为什么在用子空间 U 建模附近表示之前要减去锚点 h_0?

显示分步解答

子空间描述方向,并且必须经过零点。附近的表示通常围绕非零锚点 h0h_0 聚集。减去它可得到偏移量 Δh=h(x)−h0\Delta h=h(x)-h_0,其零向量表示“相对锚点没有移动”。我们可以用 UU 建模这些偏移量,再加回锚点,得到平移后的局部片段 h0+Uh_0+U。

问题 8

将每个集合分类为 R^3 的子空间或非子空间:{0}、R^3、空集,以及固定非零 u 的 {lambda u: lambda is real}。

显示分步解答

{0}\{0\} 是子空间,因为加法和数乘不会离开零点。R3\mathbb{R}^3 是自身的子空间,因为其向量运算封闭。空集不是子空间,因为它缺少零向量。最后,{λu:λ∈R}\{\lambda u:\lambda\in\mathbb{R}\} 是子空间:λ=0\lambda=0 时包含零,数乘只改变系数,而 λu+μu=(λ+μ)u\lambda u+\mu u=(\lambda+\mu)u 仍属于同一集合。

资料来源

  1. Mathematics for Machine Learning companion website
  2. Mathematics for Machine Learning book PDF
  3. NumPy documentation: numpy.matmul
  4. NumPy documentation: numpy.allclose
  5. Deep Learning of Representations