课程/M01/向量:箭头、坐标与数据
M01 · 向量与几何核心约 30 分钟

1.1 向量:箭头、坐标与数据

本节位置:模块 1 · 向量与几何 | 前置:0.3 | 预计:30 分钟

一句话:向量是「一组有序的数」,但你可以把它当成箭头、坐标或数据点来理解——三种视角说的是同一件事。

0. 场景引入

早高峰 7 点 50,一个导航 App 正在重算全城的到达时间。地图里有 12 万条路段,每条路段用几个数描述当前状态:平均速度、拥堵指数、过去 5 分钟的流量变化。

如果只用 3 个数,整张表是 ,勉强能塞进 CPU 的 2 MB L2 缓存,单次查询约 0.1 ms。如果扩到 64 个数(加上车道数、红绿灯、天气、事故、坡度),表变成 30.7 MB,只能放内存;每秒 5000 次请求就要吃掉 154 GB/s 的带宽。

决定:维度取多少?顺带一个更基础的问题——「方向」这个词在 64 维里还剩什么意义?算错的代价很具体:路线延迟多算 90 秒,用户错过高速出口,下一次他就换 App 了。

这个选择还决定缓存命中率:3 维表能整张放进 L2,64 维表每查一次都要从内存拖数据,命中率从九成掉到个位数,带宽差 21 倍——这才是架构评审会上真正要吵的东西。

读完本节,你应该能回答三个问题:

  1. 同一个向量作为箭头、坐标、数据,三种身份什么时候可以互换?
  2. 为什么 4096 维没有箭头图像,却仍然能算长度和夹角?
  3. one-hot 与 embedding 的差别,到底落在哪一维上?

1. 直觉

身份一:箭头(几何)

在平面上,向量是一个带方向的箭头:从原点出发,指向某个位置。 表示「向右 3、向上 4」。

  • 长度(模):箭头的长短;
  • 方向:箭头指向哪里。

物理里的力、速度、位移都是这种向量。两个力可以合成,这就是向量加法。

身份二:坐标(代数)

固定一个坐标系后,向量就是一组数:。 第一个数表示「沿 轴走多少」,第二个数表示「沿 轴走多少」。

💡 关键洞察:坐标依赖坐标系。同一个箭头,换一组基(比如把坐标轴旋转 45°),坐标就变了,但箭头没变。这就是第 2.5 节「基变换」的主题。

身份三:数据(机器学习)

在机器学习里,向量是一个特征列表:用户的偏好、一张图片的像素、一个词的 embedding。 这时「方向」和「长度」不一定有物理意义,但距离和夹角仍然有用——它们衡量「相似」。

💡 一句话直觉:箭头给你几何,坐标给你计算,数据给你应用;三者是同一对象的三张面孔。

类比边界:数据向量的「方向」不总是可解释的。embedding 的某一维通常没有独立含义,意义分布在多个维度的组合里。

1.4 它在现实世界里对应什么

导航里三种身份同时出现:从人民广场到机场的位移是箭头(地图平面上的 2 维向量,单位是米);路口的经纬度是坐标(换一套投影,数值全变,位置不变);一条路段的状态是数据(速度、流量、事故密度,各维单位不同)。

量级:全城 12 万条路段 × 3 个数 = 36 万个数字,fp32 约 1.4 MB,比一张手机截图还小。这正是它能常驻缓存、每秒查 5000 次的原因。

这个类比在哪里失效?地图上的箭头有统一单位(米),长度天然有意义;数据向量的各维量纲不同——60 km/h 的速度和 3 条车道相加没有物理含义。不先标准化就算长度,「长度」会被数值范围最大的那一维主导,后面的距离和相似度全跟着偏。

2. 定义

2.1 向量

维实向量是 个实数的有序组:

所有这样的向量组成 维实向量空间 。 叫第 个分量(component)。

默认写成列向量:

行向量写作 。列向量的约定是为了让矩阵乘法 自然成立(第 3.2 节)。

2.2 相等与维度

  • 两个向量相等,当且仅当每个分量都相等,且维度相同。
  • 向量的维度是分量的个数 ,也就是 中的 。
  • 注意:这里的「维度」是「坐标有多少个」,不是「空间有几维」的哲学问题;在 2.4 节会给出更精确的「维数」定义。

2.3 两种特殊向量

  • 零向量 :唯一长度为 0 的向量,方向未定义。
  • 单位向量:长度为 1 的向量。任意非零向量除以自己的长度,就得到同方向的单位向量(第 1.4 节)。

2.4 one-hot 向量

词表有 个词,第 个词的 one-hot 表示是:第 个分量为 1,其余为 0。

它是最朴素的「把符号变成向量」的方法:任意两个不同词的 one-hot 向量点积为 0,无法表达「猫和狗比猫和汽车更像」。embedding 就是为了解决这个问题(第 8 节)。

3. 为什么这样定义

为什么不把向量定义成「箭头」就完事?

因为箭头只适合 2D/3D。机器学习里的向量有 768、4096 甚至上万维,无法画出来。但「一组数」的定义可以推广到任意维度,而且保留了可计算性:加法、数乘、点积都能逐分量定义。

「向量」这个词来自哈密顿的四元数:四元数由一个实部和三个虚部组成,后者被称为「向量部分」。把这种对象从 3 维推广到任意维、并系统研究线性扩张的,是格拉斯曼的扩张论。

反过来,为什么不只保留「一组数」?因为几何直觉能帮你判断定理是否成立。例如「两个向量正交」在代数上是点积为零,在几何上是垂直;有了箭头图像,你更容易记住为什么投影公式长那样。

定义选择「有序组」而不是「集合」,是因为顺序重要: 和 是不同的向量;而 。向量的每个位置对应一个固定的特征/坐标轴。

3.1 反事实:把向量定义成「集合」

集合里没有顺序。如果向量也这样定义,那么

就是同一个向量——「快、抒情、电子」和「电子、快、抒情」被当成同一首歌或同一条路段。

更糟的是,集合能提供的「大小」只有元素个数(都是 3),于是速度、拥堵、事故三个数彻底混在一起:一条「速度 0.7、事故 0.2」的路和一条「速度 0.2、事故 0.7」的路无法区分,而前者畅通、后者封路。

荒谬之处一眼可见:所有路段的「长度」都等于 3,点积、夹角、投影全部失去定义,M01 后面的内容无从谈起。顺序不是书写习惯,是定义的一部分。

4. 性质与推导

4.1 分量运算

向量的加法与数乘都逐分量进行:

这两条运算满足八条向量空间公理(第 2.1 节),因此 是一个向量空间。

4.2 由分量计算长度

这是勾股定理在 维的推广:每增加一个正交方向,长度按平方和累加。

4.3 向量与函数的关系

向量不一定是「一排数」。所有多项式组成一个空间,每个多项式就是一个「向量」;所有连续函数也组成空间。只要定义了加法和数乘,并满足公理,就是向量空间。这是第 2.1 节要展开的抽象。

5. 例子

5.1 手算:从箭头到长度

:

  • 箭头:从原点向右 3、向上 4;
  • 长度:;
  • 与 轴夹角:,。

5.2 场景:三条路段的状态向量

延续开头的例子,三个数依次是归一化后的「速度、拥堵指数、事故密度」:

直观上 更像 (都通畅、事故都少); 速度低、拥堵高,是典型的严重拥堵路段。 第 1.5 节会用余弦相似度把这个直觉变成一个数。

5.3 场景闭环:12 万条路段的相似度查询

输入:12 万条路段 × 3 维 fp32 = 1.44 MB;一次请求拿用户当前路段的向量 和全表比一遍。

计算:每次查询 FLOP,读 1.44 MB 数据。按 1 GFLOP/s 的标量实现约 0.72 ms;向量化到 10 GFLOP/s 约 0.07 ms。

输出:每条路段一个相似度分数,取 top-3 作为备选路线,重算 ETA。

成本:1.44 MB 常驻 L2,5000 QPS 下带宽需求 ,一台机器扛得住。换成 64 维:表 30.7 MB,带宽需求 154 GB/s,超过单机内存带宽,只能加机器或分片。

失败条件:

  • 量纲不统一:速度(0–120)与车道数(1–6)直接算长度,长度被速度主导,推荐出来的路线永远「上高速」而不是「最快」。兜底:先做 z-score 或按分位数归一化。
  • 拿 id 当特征:用路段 id 的 12 万维 one-hot 表示路段,任意两条的距离都是 ,相邻路段与相隔 20 公里的路段一样「不像」。兜底:用可计算的特征,或用路网图嵌入。
  • 特征版本漂移:新加「天气」一维却没重估归一化参数,分布整体偏移。兜底:特征版本化,上线前比对分布。

5.4 场景:token embedding

一个词表 、隐藏维度 的模型,embedding 表是 。 第 8721 个 token 的向量就是 的第 8721 行:

这是一个 4096 维的数据向量,没有直观的「箭头」图像,但它仍然可以和别的向量做点积、算距离。

6. 常见误区

  1. 误区:向量就是一个箭头,所以只能在 2D/3D 里用。 纠正:箭头是 3 维以内的可视化;向量的定义是「有序组」,可以任意维。高维向量不能画,但可以算。

  2. 误区:高维向量「无法想象」,所以没有几何意义。 纠正:点积、范数、夹角、投影在任意维都有定义,且几何直觉(正交、相似)仍然成立。高维的额外现象(如距离集中)是第 12.2 节的内容。

  3. 误区: 和 是同一个向量,只是写法不同。 纠正:顺序是定义的一部分,它们关于对角线对称,但分量不同。

  4. 误区:行向量和列向量可以随意混用。 纠正:形状不同。矩阵乘法要求维度匹配; 是标量, 是矩阵。

7. 概念网络

  • 前置:0.3 张量 —— 向量是一阶张量。
  • 后续:1.2 加法与线性组合 —— 向量之间如何运算。
  • 后续:1.3 点积 —— 用两个向量算出一个数。
  • 后续:2.1 向量空间 —— 把「一组数」抽象成公理。
  • 关联:11.1 Embedding —— 离散符号如何变成向量。

8. 通往大模型:embedding 就是「查一行」

大模型第一步是查表:

# E: [V, D], token_ids: [B, T]
X = E[token_ids]          # [B, T, D]
  • :词表大小(几万到几十万);
  • :隐藏维度(几百到上万);
  • 输出 X[b, t] 是一个 维向量,表示第 条序列第 个 token 的初始表示。

这张可训练的词向量表因 Mikolov 等 的 word2vec 而普及:每个 token 对应表里的一行,训练把语义相近的词推到相近的方向上。

可检验结论:embedding 表的参数量是 。对 ,约 3860 万,占 GPT-2 1.24 亿参数的近三分之一。这也解释了为什么小模型里 embedding 占比很高。

另一个事实:同一个 token 在不同上下文中的初始 embedding 相同,是后续的 attention 层让同一个词在不同句子里产生不同的隐藏状态(第 11.3 节)。所以「一词多义」不是 embedding 表解决的,而是上下文层解决的。

如果这一步算错,用户会看到什么:embedding 查表时 token id 与词表版本错开一位,模型照样流畅地生成——只是每隔几个词冒出「隔壁」的词,像打字时手指总往右一格。若把 [B,T,D] 的最右轴当成 batch 去索引,形状检查有时侥幸通过,输出退化成高频虚词循环。这类 bug 的共同点是「看起来还会说话」,只能靠固定输入的可复现测试抓出来。

9. 练习

  1. 概念:用三种身份(箭头/坐标/数据)分别描述向量 。
  2. 计算:求 的长度,以及它与 的夹角余弦。
  3. 计算:写出词表大小 时,第 2 个词的 one-hot 向量,并说明它与第 4 个词 one-hot 的点积。
  4. 场景:为什么 one-hot 表示无法表达「猫和狗相似」?embedding 至少需要满足什么条件才能表达?
  5. 开放:一个 4096 维向量,你能说出它的「方向」吗?在什么意义上这个概念仍然有用?
参考答案
  1. 箭头:三维空间中从原点指向 ;坐标:在标准基下的三个坐标;数据:某个对象的三个特征值。
  2. ;。
  3. ;与 的点积为 0。
  4. one-hot 两两正交,距离都相同,无法编码语义相似;embedding 需要让语义相近的词在空间中距离近/夹角小(通过训练得到)。
  5. 不能直观想象,但「方向」仍可用于计算夹角、投影、聚类;它是 4096 维空间中的一个射线。

10. 一页速记

  • 向量 = 有序数组 = 箭头 = 坐标 = 数据点,四种说法一个对象。
  • 的维度是分量个数;默认列向量。
  • 加法、数乘逐分量;长度由勾股定理推广。
  • one-hot 正交、无语义;embedding 用训练得到语义几何。
  • 同一个 token 的初始 embedding 相同,上下文差异由后续层产生。
  • 物理意义 / 现实对应:地图上的位移箭头(有统一单位、有方向)与路段状态清单(各维量纲不同,必须先标准化)。

11. 参考文献与致谢

这一页的知识不是凭空来的。下面列出本页直接借用的原始工作与权威整理;正文中的人名、定理名已链接到对应条目。链接优先指向 DOI、arXiv 或可长期访问的原文存档。

  • 哈密顿(William Rowan Hamilton, 1866):Elements of Quaternions。四元数的「向量部分」是现代向量概念的直系来源;本页讨论的「向量」一词即源于此。Cambridge 重印本(2010)
  • 格拉斯曼(Hermann Grassmann, 1844):Extension Theory(德文原著 Die lineare Ausdehnungslehre,1844)。把向量从 3 维箭头推广到任意维,并系统研究线性扩张;本页 的有序组观点可追溯到此。AMS 英译本(2000)
  • Mikolov 等(2013):Efficient Estimation of Word Representations in Vector Space。word2vec 让词被训练成低维向量,本页 token embedding「查一行」的做法由此普及。arXiv:1301.3781

下一篇 → 1.2 加法、数乘与线性组合

返回 M01 导览去练习场

随堂测 · 3 题

单选难度 1第 1 / 3 题
关于向量 与 ,下列说法正确的是?

源文件:01-向量与几何/01-向量是什么.md

输入关键词开始搜索