AI 的子空间:检验受限特征族
学习子空间检验,证明平面对向量运算封闭,并用 NumPy 检查低维表示方向。
编码器对每个输入都可能产生数百个坐标,即使附近的表示只沿少数几个连贯方向变化。要分析这种限制,光看一簇点还不够;我们需要一个在方向相加和缩放后仍然有效的集合。
这个集合称为向量子空间。学完本课后,你将能够执行子空间检验,证明经过原点的平面满足检验,排除容易令人误判的反例,并解读已学习表示偏移量的低维线性模型。
学习目标: 检验子空间条件,并解读低维区域。
第 27 课:向量空间规定合法表示介绍了向量加法和标量乘法的环境规则。子空间沿用相同运算,同时缩小允许向量的范围。官方的机器学习数学(Mathematics for Machine Learning)配套网站在书籍 PDF第 2.4.3 节讲解向量子空间。下文的表示场景、计算、代码、图示和练习均为原创。
限制必须经受运算
设环境向量空间为 ,令 为候选集合。称 为子空间,意味着使用 上已定义的加法和标量乘法时,向量仍留在 内。环境空间提供运算;子集则必须证明自己对这些运算封闭。
检查零向量既快又有决定性。任何子空间都必须包含零向量,因为对每个 ,数乘封闭性都要求 。加法封闭性表示两个允许的方向可以组合。数乘封闭性则表示允许的方向在拉伸、缩短、反向或缩为零时仍然允许。
简洁的线性组合检验把这些要求合在一起。令 可得到加法,令 可得到数乘,令两个系数都为零可得到零向量。这与第 17 课介绍的线性组合运算相同,现在它被用作判断整个向量族是否属于集合的检验。
示例:经过原点的平面
考虑集合
该方程用一个关系约束显示出的三个坐标。任意选择 和 ,则 。因此, 中每个向量都具有如下形式
两个数 和 决定全部三个坐标。从几何上看,结果是在三维空间中的一个平面。令 会得到 ,因此该平面经过原点。
现在逐项执行检验。把任意两个成员写成
它们的和为
第三个坐标等于前两个坐标之和:。因此 。用任意实数 缩放 得到
它也满足定义方程。结合零向量检验,这就证明了 是 的子空间。
空间中的平面图
子空间让每个线性组合都留在平面上
蓝色平面包含原点,并包含第三个坐标等于前两个坐标之和的所有向量。实线箭头留在平面上;虚线箭头不满足方程。
| 向量 | 坐标 | 成员资格检验 | 结果 |
|---|---|---|---|
| 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 |
图示可以启发结论,代数才能证明结论:图中只能画出少数箭头,而封闭性必须对每一对向量和每个实数系数都成立。
这幅图回答了几何问题:“这些特征可以移动到哪里?”由于一个坐标由另外两个坐标决定,该平面的维数低于其环境空间。不过,证明比透视图更重要。几支箭头落在平面上,并不能证明无限多个可能向量都满足封闭性。
三个看似合理却不成立的集合
子空间是子集中的特殊情形。形状、对称性和平坦的外观都不足以构成证明。
首先,将示例中的平面平移一个单位:
这仍是一个平面,但 不满足条件,因为 。所以 不是向量子空间。数乘也能揭示问题:若 ,则 通常满足的是 ,而非定义 的方程。
其次,单位长度向量不构成子空间。归一化嵌入 可能满足 ,但 的长度为 ,而 的长度为 。该集合不满足数乘封闭性,也不包含零向量。因此,第 27 课讨论的归一化嵌入可以作为有用的模型输入,却不构成向量空间或子空间。
第三,有限数据集通常不是子空间。即使每条记录的表示都满足 ,仅存储的行也未必包含它们的和、相反数或所有实数倍。由约束定义的向量族 是子空间;用于发现或估计它的有限样本只是 的子集。
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
第一个 @ 构造三个线性组合。第二个 @ 对每个结果计算 。NumPy matmul 文档定义了 @ 所执行的形状规则;这里, 系数矩阵乘以 方向矩阵,得到三个 中的向量。
这个精确示例会得到零,但真实模型激活使用有限精度运算。NumPy allclose 文档定义了容差比较,并提醒其默认绝对容差可能不适用于远小于 1 的数值。设置 rtol=0.0 并明确选择 atol,能清楚表达零值检验的意图。容差仍须匹配激活值的尺度和应用可接受的误差;1e-12 适用于此处构造的 float64 示例,不是通用阈值。
该程序用已知约束检验选定的向量。它不能证明任意一群模型激活都属于该平面。要支持更广泛的主张,还需要拟合模型、分析残差,并提供证据说明所选线性近似足以描述研究区域。
表示流形通常只在局部平坦
令编码器将输入 映射为表示 。选择锚点表示 ,考察附近的偏移量
如果这些偏移量可以用少数方向的组合很好地近似,子空间 就能提供有用的局部线性模型。在原始坐标中,该近似是平移后的集合
偏移量族 经过零点。平移后的表示片段 经过 ,通常本身并不是 的子空间。中心化把合法方向与绝对位置区分开来。
这种观点是一种近似,并不声称所有学习得到的表示都位于同一个全局平面上。在Yoshua Bengio 关于深度表示的原始论文中,流形学习被描述为寻找低维高密度区域及其坐标系。论文将 PCA 视为流形学习的线性先驱,也说明了全局线性假设为何会遗漏曲线结构。在局部范围内,平面可以概括某个锚点附近变化的方向;距离更远时,有用方向可能旋转,近似误差也可能增大。
对于 AI 从业者,这给出了一条具体的解读规则:
- 子空间描述在混合和缩放下封闭的一族允许偏移量;
- 平移平面描述锚点附近可能出现的表示;
- 曲线表示流形在不同邻域中可能需要不同的局部平面。
子空间检验告诉我们这个线性对象在内部是否一致。它不能告诉我们该对象是否很好地拟合数据、是否捕获了因果特征,或是否保留了下游任务所需的信息。
边界情形让检验更明确
有两个子空间很容易被忽略。只含零向量的集合 满足所有条件:零加零仍为零,任意标量乘零也为零。整个环境空间 也是自身的子空间。它们称为平凡子空间,不过在检查论证时,这两种边界情形都很有用。
空集不满足条件,因为它不包含零向量。在实数范围内,只含一个非零向量的集合 也不满足条件:除非 ,否则 不在集合中。相比之下,整条直线 能通过检验,因为它包含所有实数倍、它们的和以及零向量。
子空间为受限特征族提供了精确语言。一旦集合通过检验,任意线性组合都仍然合法。下一课将针对描述该集合所用的方向提出另一个问题:其中是否有些方向是冗余的。
检查理解
问题 1
非空子集 U 要满足哪三个条件才能成为实向量空间的子空间?
显示分步解答
首先,验证 。其次,取任意 并证明 。第三,取任意实数标量 和任意 ,证明 。向量和标量都必须是任意的,因为检查少数示例无法证明整个集合的封闭性。
问题 2
用简洁检验说明 $U = {(a, b, a + b): a, b are real}$ 对线性组合封闭。
显示分步解答
取 和 属于 ,其中 和 为实数。于是
第三个坐标等于前两个坐标之和。因此 具有所需形式并属于 。由于 非空,简洁检验也保证零向量属于其中。
问题 3
对于 u = (2, -1, 1) 和 v = (-1, 3, 2),计算 -u + 2v,并检验结果是否位于本课的平面中。
显示分步解答
先缩放: 且 。两者相加得到 。成员资格方程是 ;这里 。方程成立,所以结果位于平面中,正如封闭性所预示的那样。
问题 4
为什么平移平面 W = {x in R^3: x_3 = x_1 + x_2 + 1} 会立即无法通过子空间检验?
显示分步解答
在进行较长计算之前先检验零向量。代入后得到 ,这是错误的,因此 。每个向量子空间都必须包含零,所以 不是子空间。多出来的常数将平面从原点移开。
问题 5
所有单位长度的嵌入向量构成子空间吗?指出失败的运算。
显示分步解答
不构成。设 的长度为 1,即 。数乘封闭性要求 和 仍在集合中,但它们的长度分别为 2 和 0,因此都不是单位长度。该集合也排除了零向量。归一化很有用,但其输出族不是向量子空间。
问题 6
NumPy 代码报告约束残差 [0, 0, 0]。这证明了什么,还有什么尚未证明?
显示分步解答
这证明三个构造出的偏移量在所选数值容差内满足 ,也验证了这些示例的矩阵形状和运算。它没有证明每个真实模型激活都位于该平面、该平面能很好地拟合更大的数据集,或这些表示方向对下游任务很重要。这些经验性主张需要更多证据。
问题 7
为什么在用子空间 U 建模附近表示之前要减去锚点 h_0?
显示分步解答
子空间描述方向,并且必须经过零点。附近的表示通常围绕非零锚点 聚集。减去它可得到偏移量 ,其零向量表示“相对锚点没有移动”。我们可以用 建模这些偏移量,再加回锚点,得到平移后的局部片段 。
问题 8
将每个集合分类为 R^3 的子空间或非子空间:{0}、R^3、空集,以及固定非零 u 的 {lambda u: lambda is real}。
显示分步解答
是子空间,因为加法和数乘不会离开零点。 是自身的子空间,因为其向量运算封闭。空集不是子空间,因为它缺少零向量。最后, 是子空间: 时包含零,数乘只改变系数,而 仍属于同一集合。