数学本质系列 · 从数学概念出发,解释 AI 为什么能够工作
我们可以直接把“猫”写进电脑,也可以把“数据库”“北京”“悲伤”这些词存进去,但对大模型来说,这些文字本身并没有多少可计算的东西。计算机真正擅长的是数字,所以 AI 面对语言时,第一件重要的事不是理解,而是把对象变成数字,同时尽可能保留它们之间的关系。向量就是干这件事的。
关键不是把文字编号,而是给它安排一个位置
最简单的办法当然是编号:猫=1、狗=2、汽车=3。但这个表示几乎没有意义。数字 1 和 2 比较接近,并不能说明猫和狗真的比猫和汽车更相似。
我们真正希望的是另一种表示:让“猫”“狗”“老虎”彼此靠近,让“汽车”离它们远一些;让“北京”和“上海”具有某些相似方向,让“国王”和“王后”之间也存在可以被数学捕捉的关系。这时候就需要给每个对象安排多个坐标。
| 向量不是一串数字,而是一个对象在某个空间中的坐标。 | | --- |
例如为了直观,我们暂时只设计三个维度,可以写成:猫 = (0.9, 0.8, 0.2)。三个数字可以粗略理解为某些特征上的位置。真实模型当然不会只有三个维度,而可能使用几百、几千甚至更多维度,而且绝大多数维度并不能简单解释成“动物性”“大小”这样的人工概念。真正重要的不是某一个维度代表什么,而是所有维度共同决定了这个对象在空间里的位置。
图 1|从编号到向量:编号只能区分对象,向量还能保存对象之间的空间关系
一旦有了坐标,关系就可以计算了
假设“猫”和“狗”的向量方向很接近,而“猫”和“数据库”的方向相差很大,那么数学就可以用距离、夹角或者点积去衡量这种关系。原本很模糊的一句话——“猫和狗在语义上比较接近”——现在变成了一个可以计算的问题:两个向量到底有多接近?
这一步很重要,因为 AI 处理的大量问题,本质上都需要比较关系:哪段文档和问题最相关,句子里的哪个词更值得关注,这张图片和哪段文字更接近,下一步应该从哪些信息中寻找答案。向量让这些模糊的“关系”第一次进入了可以计算的空间。
大模型看到的句子,其实是一组向量
一句“猫坐在窗台上”进入模型以后,会先被拆成 Token。每个 Token 通过 Embedding 表取得一个初始向量,于是一句话就变成了一组高维坐标;把这些向量排列起来,得到的已经不再是文字,而是一个矩阵。
| X = [ x₁, x₂, x₃, … ]ᵀ —— 每一行都可以看成一个 Token 的向量表示 | | --- |
接下来 Transformer 做的大量工作,就是不断改变这些向量。“苹果”单独出现时只是一个初始表示,但放在“吃了一个苹果”和“苹果发布了新手机”里,经过 Attention 和多层网络之后,它最终形成的上下文向量会不同。
所以大模型并不是给一个词永久贴上一张固定的“含义标签”。更准确地说,它会根据上下文,不断重新计算这个 Token 此刻应该处在高维空间的什么位置。这也是 Transformer 能够处理语境的关键之一。
图 2|同一个 Token,在不同上下文中会被 Transformer 更新到不同的表示位置
RAG和向量数据库,其实也是同一件事
向量并不只存在于模型内部。今天常见的 RAG,会先把文档切成若干片段,再通过 Embedding 模型把每个片段变成向量并存入向量数据库。用户提问时,问题同样变成向量,然后系统寻找空间中最接近它的那些文档向量。
所以所谓“语义检索”,并不是数据库真的读懂了中文。它做的是一件很数学的事情:在高维空间里,寻找离这个问题最近的几个点。当然,距离近并不意味着语义一定正确,Embedding 模型、切分方式和检索策略都会影响结果,但它揭示了一个非常重要的事实:很多看似属于“理解”的问题,最后都可以转化成空间中的位置关系。
图 3|Embedding 把语义问题变成空间问题,Attention、RAG 和相似度计算都建立在这层表示之上
向量真正改变的,是问题的表达方式
人类习惯用文字描述世界:猫是什么,银行是什么,悲伤是什么。AI 需要做的第一步,却是把这些对象放进一个数学空间。一旦进入这个空间,“是什么”之外又多出了很多可以计算的问题:它在哪里?它离谁更近?它和谁方向一致?经过一次变换以后,它应该移动到哪里?
这也解释了为什么线性代数会成为现代 AI 最底层的语言之一。向量负责给信息安排坐标,矩阵负责改变这些坐标。从文字进入大模型的那一刻开始,现实世界里的词语、图片和知识,就已经被转换成了高维空间中的点。之后大量所谓的“理解”,其实都发生在这些点之间的距离、方向和不断变化的位置里。
| 本质总结:AI 先把世界变成坐标,再计算坐标之间的关系。 | | --- |