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

向量空间:检验 AI 表示是否满足规则

检验零向量、加法封闭性和数乘封闭性,再用归一化嵌入作为反例,说明有用的表示集合为何不一定是向量空间。

分享这篇文章

嵌入流程可以将每个非零输出向量强制归一化为长度 11。这让相似度计算更方便,却也带来一个容易忽略的问题:在普通向量加法和数乘下,这些归一化后的输出并不构成向量空间。把两个输出相加,或改变一个向量的倍数,结果都可能离开允许的集合。

本课将“向量空间”变成一套检验方法,而不是一个标签。学完后,你将能够检查零向量、加法封闭性和数乘封闭性;在某条规则不成立时构造一个决定性反例;并解释为何归一化嵌入位于一个环境向量空间中,却不能自身构成向量空间。

**学习目标:**检验一个集合是否满足向量空间的封闭性规则。

第 17 课:线性组合生成新向量介绍了运算 ax+bya\boldsymbol{x}+b\boldsymbol{y}。 第 26 课:群、环与域说明有效运算说明了为何必须结合集合及其运算来考虑。官方 Mathematics for Machine Learning 图书第 2.4 节将这些内容形式化为向量空间。下文的检验、嵌入反例、代码、图示和练习均为原创。

向量空间保证线性组合仍属于该集合

设 VV 是一个集合,其元素称为向量。对于实向量空间,有两种运算:

+:V×V→V,⋅:R×V→V.+:V\times V\to V, \qquad \cdot:\mathbb{R}\times V\to V.

第一种运算将两个向量相加。第二种运算将向量乘以实数,也称为标量。箭头以 VV 为终点表示封闭性:两种运算的结果都必须仍是同一集合的成员。

仅有封闭性并不足以构成完整定义。向量加法还必须有零向量和加法逆元;加法必须满足结合律和交换律;数乘必须满足相应的结合律;并且还要满足熟悉的分配律和单位元规则。

关于每一个标量的规则要求很高。一个集合即使能承受乘以 22,却不能承受乘以 −1-1;或能承受正标量,却不能承受乘以 00,都不是实向量空间。

继承的运算可简化检验

大多数实际问题从候选集合 U⊆RnU\subseteq\mathbb{R}^n 开始,并使用 Rn\mathbb{R}^n 中已定义的普通加法和数乘。代数定律由环境空间继承。剩下的工作就是判断运算结果是否会离开 UU。

使用这项检验时有一个重要的不对称之处:

  • 要证明 UU 是向量空间,封闭性论证必须涵盖每个允许的输入。
  • 要证明 UU 不是向量空间,一个有效反例就足够。

检查三个方便的向量无法证明普遍封闭性。只要找到一对向量,其和离开了集合,就能立即否定封闭性。

例题:在组合运算下仍成立的约束

考虑集合

U={[x1x2]∈R2:x1+x2=0}.U=\left\{ \begin{bmatrix}x_1\\x_2\end{bmatrix}\in\mathbb{R}^2: x_1+x_2=0 \right\}.

UU 中的每个向量都具有 [t,−t]T[t,-t]^\mathsf{T} 的形式。取 t=0t=0 可知零向量属于 UU。现在任取向量

u=[p−p],v=[q−q]\boldsymbol{u}=\begin{bmatrix}p\\-p\end{bmatrix}, \qquad \boldsymbol{v}=\begin{bmatrix}q\\-q\end{bmatrix}

以及任意标量 a,b∈Ra,b\in\mathbb{R}。

数值检验时,取 u=[2,−2]T\boldsymbol{u}=[2,-2]^\mathsf{T}, v=[−1,1]T\boldsymbol{v}=[-1,1]^\mathsf{T}, a=3a=3, and b=−1b=-1:

3u−v=[6−6]+[1−1]=[7−7]∈U.3\boldsymbol{u}-\boldsymbol{v} =\begin{bmatrix}6\\-6\end{bmatrix} +\begin{bmatrix}1\\-1\end{bmatrix} =\begin{bmatrix}7\\-7\end{bmatrix}\in U.

这个计算展示了规则,而符号论证则证明该规则对所有取值都成立。

归一化嵌入未通过同一检验

现在定义单位长度集合

S={x∈Rd:∥x∥2=1}.S=\left\{\boldsymbol{x}\in\mathbb{R}^d: \lVert\boldsymbol{x}\rVert_2=1\right\}.

这是环境向量空间 Rd\mathbb{R}^d 中的单位球面。嵌入库可能会有意返回该集合中的向量。例如,当前 Sentence Transformers 的 encode 文档介绍了 normalize_embeddings 选项,它会将返回向量归一化为长度 11。

在二维空间中,取

e1=[10],e2=[01].\boldsymbol{e}_1=\begin{bmatrix}1\\0\end{bmatrix}, \qquad \boldsymbol{e}_2=\begin{bmatrix}0\\1\end{bmatrix}.

二者的欧几里得范数均为 11,因此都属于 SS。它们的和为

e1+e2=[11],∥[11]∥2=12+12=2.\boldsymbol{e}_1+\boldsymbol{e}_2 =\begin{bmatrix}1\\1\end{bmatrix}, \qquad \left\lVert\begin{bmatrix}1\\1\end{bmatrix}\right\rVert_2 =\sqrt{1^2+1^2}=\sqrt{2}.

由于 2≠1\sqrt{2}\ne1,该和不属于 SS。数乘封闭性也不成立:

2e1=[20],∥2e1∥2=2.2\boldsymbol{e}_1=\begin{bmatrix}2\\0\end{bmatrix}, \qquad \lVert2\boldsymbol{e}_1\rVert_2=2.

零向量构成第三个失败例子,因为它的范数是 00,而不是 11。

静态封闭性反例

单位圆不接受普通线性组合

蓝色圆包含所有欧几里得范数为 1 的二维向量。实线和虚线单位向量起初位于集合内,而它们的和、加倍后的向量以及零向量均不满足成员资格。

单位圆的封闭性失败坐标平面显示以零为中心的单位圆。向量 e 一和 e 二的端点位于圆上。它们的和位于圆外,2 倍 e 一更远离圆,零则位于圆心而非圆周上。坐标 x₁坐标 x₂S: ‖x‖₂ = 1e₁ = (1, 0)e₂ = (0, 1)e₁ + e₂ = (1, 1)2e₁ = (2, 0)0 = (0, 0)
圆是允许的集合,而非整个环境平面。不同的线型、端点圆环、标签和精确表格使每个成员资格失败都能在不依赖颜色的情况下辨认。
图中表示的精确成员资格检验
封闭性检验S 中的输入结果结果范数判定
加法e₁ 和 e₂e₁ + e₂ = (1, 1)√2位于 S 之外
数乘2 和 e₁2e₁ = (2, 0)2位于 S 之外
零向量所需的加法单位元0 = (0, 0)0不属于 S

任意一行都足以否定向量空间成员资格。这三行分别揭示不同要求,因此修复一种失败并不能消除其他失败。

La ilustración usa d=2d=2 porque la geometría cabe en una página. El mismo contraejemplo escalar funciona en cualquier dimensión: si ∥x∥2=1\lVert\boldsymbol{x}\rVert_2=1, entonces ∥2x∥2=2\lVert2\boldsymbol{x}\rVert_2=2. Por tanto, los embeddings normalizados a longitud unitaria en Rd\mathbb{R}^d no son un espacio vectorial con las operaciones habituales.

再次归一化会改变运算

常见流程会先将归一化嵌入相加或求平均,然后再次归一化结果。这种做法可能有用,但最后的归一化是一个新的非线性运算:

normalize⁡(x+y)=x+y∥x+y∥2,\operatorname{normalize}(\boldsymbol{x}+\boldsymbol{y}) =\frac{\boldsymbol{x}+\boldsymbol{y}} {\lVert\boldsymbol{x}+\boldsymbol{y}\rVert_2},

前提是分母不为零。未经处理的和会先离开单位球面,再由归一化映射回来。将结果映回 SS 并不能使 SS 对原始加法运算封闭。

零向量的情况很重要。如果 y=−x\boldsymbol{y}=-\boldsymbol{x}, then x+y=0\boldsymbol{x}+\boldsymbol{y}=\boldsymbol{0},再除以它的范数就会导致除以零。实现时需要为零行或接近零的行制定明确策略。

NumPy 的 linalg.norm 文档说明了下方使用的 axis 和 keepdims 控制项,用于为每个嵌入计算一个范数,同时保留可广播的列形状:

import numpy as np


def normalize_rows(vectors):
    vectors = np.asarray(vectors, dtype=float)
    norms = np.linalg.norm(vectors, axis=1, keepdims=True)
    normalized = np.divide(
        vectors,
        norms,
        out=np.zeros_like(vectors),
        where=norms > 0,
    )
    return normalized


embeddings = np.array([
    [3.0, 4.0],
    [-4.0, 3.0],
    [0.0, 0.0],
])

normalized = normalize_rows(embeddings)
print(normalized)
print(np.linalg.norm(normalized, axis=1))

输出为

[[ 0.6  0.8]
 [-0.8  0.6]
 [ 0.   0. ]]
[1. 1. 0.]

前两行落在单位圆上。零行仍为零,因为该函数有意将零作为工程上的回退值。这个回退值属于 R2\mathbb{R}^2,但不属于 SS,因此调用方不能声称每个输出的范数都是单位长度。

可靠的封闭性检查应关注实际运算

当模型说明将一组表示称为“空间”时,先识别集合及其运算,再假设是否具有线性结构。原始嵌入可能位于 Rd\mathbb{R}^d 中。单位归一化嵌入位于球面上。坐标非负且总和为 11 的概率向量位于另一受约束的集合中。每种集合都可能支持有用的算法,但普通加法和任意实数数乘不一定会让结果继续满足约束。

下一课将学习子空间:它们是通过封闭性检验、因而保留环境线性结构的受限子集。继续学习前,请用下列问题练习证明普遍封闭性并找出决定性失败。

检查你的理解

问题 1

对于配备普通向量运算的 Rⁿ 非空子集,需要进行哪三项成员资格检查才能确认它是向量空间?

显示分步解答

首先检查零向量是否属于该集合。其次,任取集合中的 x\boldsymbol{x} 和 y\boldsymbol{y},证明 x+y\boldsymbol{x}+\boldsymbol{y} 仍属于集合。第三,任取实标量 aa 和集合中的 x\boldsymbol{x},证明 axa\boldsymbol{x} 仍属于集合。其余向量空间定律由 Rn\mathbb{R}^n 继承。

问题 2

证明 U = {(t, −t): t ∈ R} 对线性组合 a u + b v 封闭。

显示分步解答

在 UU 中任取 u=(p,−p)\boldsymbol{u}=(p,-p) 和 v=(q,−q)\boldsymbol{v}=(q,-q),并取任意实数 aa 和 bb。于是

au+bv=(ap+bq,−ap−bq).a\boldsymbol{u}+b\boldsymbol{v} =(ap+bq,-ap-bq).

令 t=ap+bqt=ap+bq。结果为 (t,−t)(t,-t),符合 UU 的定义形式。由于输入和标量都是任意的,这就证明了封闭性,而不是只检查一个例子。

问题 3

使用 e₁ = (1, 0) 和 e₂ = (0, 1) 反驳单位归一化向量的加法封闭性。

显示分步解答

两个输入的范数都是 11,因此都属于单位归一化集合。它们的和是 (1,1)(1,1),其范数为 12+12=2\sqrt{1^2+1^2}=\sqrt{2},并非 11。因此,两个合法成员产生了集合之外的结果。这样一对向量就足以否定加法封闭性。

问题 4

将每个单位向量乘以 −1 能否反驳数乘封闭性?如果不能,请选一个可以反驳的标量。

显示分步解答

不能。如果 ∥x∥2=1\lVert\boldsymbol{x}\rVert_2=1,则 ∥−x∥2=1\lVert-\boldsymbol{x}\rVert_2=1,所以标量 −1-1 会让每个单位向量仍在球面上。但数乘封闭性必须对每个实数标量都成立。取 a=2a=2 时,∥2x∥2=2\lVert2\boldsymbol{x}\rVert_2=2,因此 2x2\boldsymbol{x} 位于单位球面之外,从而反驳封闭性。

问题 5

为什么按行归一化必须明确处理零向量?

显示分步解答

常用公式将 x\boldsymbol{x} 除以 ∥x∥2\lVert\boldsymbol{x}\rVert_2。当 x=0\boldsymbol{x}=\boldsymbol{0} 时,范数为 00,因此公式会要求除以零,结果没有定义。代码必须检测这种情况,并选择有文档说明的策略,例如返回零、抛出错误或过滤该行。在某些流程中返回零很实用,但结果并非单位归一化向量。

问题 6

某流程对两个单位嵌入求平均,再将平均值归一化。为什么这不能证明单位球面是向量空间?

显示分步解答

首先计算普通平均值:m=(x+y)/2\boldsymbol{m}=(\boldsymbol{x}+\boldsymbol{y})/2。它的范数不一定是 11,因此这个线性组合可能离开球面。随后流程再应用单独的归一化映射 m/∥m∥2\boldsymbol{m}/\lVert\boldsymbol{m}\rVert_2 返回球面。封闭性检验针对原始加法和数乘;增加修正步骤会改变所研究的运算。

问题 7

非负象限 Q = {(x₁, x₂): x₁ ≥ 0 且 x₂ ≥ 0} 包含零向量,且对加法封闭。Q 是实向量空间吗?

显示分步解答

不是。取属于 QQ 的 x=(1,0)\boldsymbol{x}=(1,0),并取实标量 a=−1a=-1。于是 ax=(−1,0)a\boldsymbol{x}=(-1,0),其第一个坐标为负数,因此结果不属于 QQ。尽管该集合包含零向量且对加法封闭,它仍未通过数乘封闭性检验。

资料来源

  1. Mathematics for Machine Learning companion website
  2. Mathematics for Machine Learning book PDF
  3. NumPy documentation: numpy.linalg.norm
  4. Sentence Transformers documentation: SentenceTransformer.encode