想象你要向朋友描述一道菜。你大概会说:口味 9 分、辣度 6 分、价格 7 分、分量 8 分……把这几项分数按固定顺序排成一串,就得到一个「向量」:[9, 6, 7, 8]。AI 的世界里,万物皆可这样描述——一张图片、一段文字、一个用户,最终都变成一串数字交给模型处理。向量就是一串有固定顺序的数字,是 AI 用来「看见」世界的基本语言。
从箭头到一串数字:两种长相,同一个东西
中学数学里,向量是一根带箭头的线段——有长度(大小)、有指向(方向)。比如「向东走 3 步、向北走 2 步」,画出来就是一个箭头。
但到了 AI 里,向量换了一副更朴素的长相:一串按顺序排好的数字。上面那个二维箭头 [3, 2],竖着写、横着写都行,本质就是两个数字。AI 不关心它「长什么样」,只关心这些数字本身。
这里有个关键差别:二维、三维的箭头还能画在纸上;可 AI 常用的向量动辄几百上千维(几百上千个数字),根本画不出来——这时「一串数字」才是向量唯一可用的样子。
维度:这串数字有几个
向量里数字的个数,叫它的维度(dimension)。三维向量有 3 个数字,七百维向量有 700 个数字。
在 AI 里有个特别朴素的对应:维度 = 你用一个东西的多少个特征来描述它。描述一道菜用了「口味、辣度、价格、分量」4 项,那这道菜的向量就是 4 维;如果用 300 项指标去描述一个词,这个词的向量就是 300 维。维度越高,描述越精细,但计算也越重——这是 AI 模型设计时反复权衡的事。
向量怎么算:点积,AI 最爱的运算
单看一个向量用处有限,AI 真正常做的是比较两个向量——「这两样东西像不像」。这就要靠一种叫点积(dot product)的运算。
点积的规则简单得离谱:两个向量对应位置的数字相乘,再把所有乘积加起来,得到一个单独的数。
符号逐个拆开看:
:参与运算的两个向量(数学上习惯加粗字母表示向量,和单个数字区分) :点乘运算符,读作「点」,就是「对应位置相乘、再全部加起来」这套运算的记号 :位置编号,从 1 数到维度 ,指向量里「第几个数字」 :向量的维度,也就是它有几个数字 :两个向量在同一个位置 上的数字(如 是 的第 2 个数) (读作 sigma):求和号,把每一项的乘积 从 一直累加到 - 等号左边的
:点积的结果,是一个单独的数(叫标量),不再是向量——这一点最容易看漏
通俗理解:把两道菜的评分逐项相乘再求和——两道菜在某项都给高分,乘起来就大,加总就高;说明它们在各维度上「口味一致」,所以相似。
动手算一个。取
(自检:结果是单个数 11,符合点积「输出一个数」的定义;两个向量的数字都是正数,点积为正,方向大致一致,合理。)
点积凭什么能衡量「像不像」
点积背后有个直观规律:两个向量方向越一致,点积越大;方向相反,点积是负数;互相垂直,点积为 0。
换成现实场景就好懂了:
- 你和好友给一批电影打分,分数的「走势」很像(你爱的他也爱、你嫌的他也嫌)→ 点积大 → 推荐系统判定你们口味相似,于是拿他看过而你没看过的片子推给你。
- 两个八竿子打不着的东西,评分毫无规律上的关联 → 点积接近 0。
不过这里有个容易踩的坑:点积的大小会被向量本身的「长度」带着跑——两个数字都偏大的向量,哪怕方向并不算接近,点积也可能偏大。所以工程上比较相似时,常先给向量「归一化」(除以它自己的长度,让所有向量长度都变成 1)再算点积——这其实就是「余弦相似度」在干的事:它只看方向、不看长度,比单纯的点积更公平。
正因为既能衡量相似、又能用矩阵一口气算一大批,点积和余弦相似度才成了搜索引擎、推荐系统、给 AI 喂「相关内容」时的核心运算。
向量在 AI 里的位置
向量是 AI 整座大厦的地基,几乎到处都是它:
- 特征表示:一条数据(一张图、一句话)进模型之前,先转成向量。
- 词向量 / embedding:让 AI 把每个词变成几百维的向量,意思相近的词向量也接近(比如「猫」和「狗」的向量,比「猫」和「汽车」近得多)——这是 GPT 等模型理解语言的第一步。
- 模型参数:神经网络里成亿个可学习的「旋钮」(权重),本质上也是一个个向量。
- 相似度检索:向量数据库、RAG(检索增强生成)都靠比较向量来找最相关的内容。
可以说,没有向量,AI 就没法把现实世界的东西塞进数学公式里。顺带提一句:把一组向量排成一张表,就得到了矩阵——那是另一个地基级概念,之后再单独展开。
记住一件事就够了:向量就是一串有顺序的数字,是 AI 描述万物的通用语言;它的维度等于「用了几个特征」,而点积让 AI 能用一个数衡量两样东西有多像。抓住这两点,后面读 embedding、注意力机制、神经网络,都不会再被「向量」这个词绊住。
完整代码
下面这段 PyTorch 代码不训练任何模型,纯粹演示「向量 = 一串数字」和「点积 = 相似度」这两件最基础的事。跑一遍,你就能看到 AI 内部最朴素的运算长什么样。
import torch
# 设置随机种子,保证每次运行结果一样(教学代码固定随机性,便于核对输出)
torch.manual_seed(42)
# === 1. 创建向量 ===
# torch.tensor 把一个普通 Python 列表转成 PyTorch 能运算的「张量」
# (「张量」是 PyTorch 装数字的容器,排成一列的「一维张量」就是本文讲的向量);
# 这里 x 是一个二维向量(2 个数字),可以理解为某个东西的 2 个特征值
x = torch.tensor([1.0, 2.0])
y = torch.tensor([3.0, 4.0])
print("向量 x:", x) # 输出 tensor([1., 2.])
print("向量 y:", y) # 输出 tensor([3., 4.])
# .shape 查看形状;[2] 表示这是一个长度为 2 的一维向量(共 2 个数字)
print("x 的形状:", x.shape) # 输出 torch.Size([2])
# === 2. 点积:对应项相乘再相加 ===
# torch.dot 计算点积,对应文章公式 x·y = Σ x_i·y_i
dot = torch.dot(x, y)
print("点积 x·y:", dot.item()) # 1*3 + 2*4 = 11
# .item() 把只含一个数的张量取出成普通 Python 数字,方便打印
# === 3. 用点积比较「相似度」:一个迷你推荐例子 ===
# 假设有 3 部电影,每部用 3 个特征打分:[剧情, 喜剧, 动作]
movies = torch.tensor([
[9.0, 2.0, 3.0], # 电影 A:剧情强
[8.0, 1.0, 4.0], # 电影 B:剧情强
[2.0, 9.0, 8.0], # 电影 C:喜剧 + 动作
])
# 你的口味向量(爱剧情、不太爱喜剧、一般动作)
me = torch.tensor([9.0, 2.0, 4.0])
# 用 @ 做矩阵乘法,一次性算出你和每部电影的点积(相似度):
# movies @ me 会把「每部电影向量」分别和「你的向量」做点积,得到 3 个相似度
scores = movies @ me
print("你和各部电影的相似度:", scores)
# 剧情强的 A、B 和你点积高(口味合),C 和你点积低
# 找最相似的那部推荐给你
best = scores.argmax() # .argmax() 返回最大值所在的位置编号
print("最推荐的电影编号:", best.item())
# 预期输出:相似度约为 tensor([97., 90., 68.]),A 最高 → 推荐编号 0(电影 A)
# (9×9+2×2+4×3=97,9×8+2×1+4×4=90,9×2+2×9+4×8=68,可自己代一遍核对)参考资料
- 线性代数 — 动手学深度学习(D2L) https://zh.d2l.ai/chapter_preliminaries/linear-algebra.html
- What is Vector Embedding? — IBM https://www.ibm.com/think/topics/vector-embedding
- 机器学习的数学基础:向量篇 — HaHack https://www.hahack.com/math/math-vector/