坦白说,向量作为大模型技术的底层数据格式,同时也是描述语义关系的核心数学模型——这一观点早已成为业界共识。不过,此前我并未深入思考过向量的真实含义。直到最近在探索向量数据库时,才猛然意识到,这个概念远非表面看起来那么直观。
先抛出一个看似基础的问题:向量数据库的实现原理,究竟是怎样运作的?
不要被“向量数据库”这个术语吓到。换个角度,问题就清晰得多:向量检索到底是如何实现的?
凡是上过中学数学课的人都知道,向量是一种既有大小又有方向的量。最典型的例子,就是平面坐标系中那条带箭头的黑色线段。但说实话,当年学的向量,与今天大模型里使用的向量,完全不在一个维度。通常我们所说的向量,指的是空间向量——可以在坐标系中画出来,能被肉眼直接看到的那种,比如空间几何图形。然而,大模型使用的向量,是纯粹的数学概念,并非我们想象中的空间向量形态。举个例子,一个320维的向量长什么样?连四维空间我们都难以想象,更何况是300多维度。

实际上,大模型所采用的向量,在数学上是通过矩阵来表达的一种数学结构;在编程语言实现时,它本质上就是数据结构中的多维数组,更直接地说,就是矩阵。
此前我们讨论过,传统的检索方式依赖字符匹配——即关键词必须完全一致才能命中结果。但大模型作为人工智能的关键技术路线之一,需要的是语义理解,而非简单的文字对应。举个简单的例子:“我好饿,我想吃饭”这句话,包含了明确的语义。而一篇文章、一本书,都承载着有意义的语义信息。更何况,同一句话,在不同语境下可能含义截然不同。因此,我们需要一种方式来表达、描述语义之间的关系。最终,业界的选择是——向量。
那么,向量在大模型中的真正意义是什么?它又是如何实现这一功能的?
向量本质上是一种用于描述大模型系统的数学结构。由于大模型系统极其复杂,必须有一种数学结构来承载和描述这种复杂的交互关系。而向量凭借其高维度特性,恰好能够胜任这一任务。例如,我们常说的欧氏距离、余弦相似度,都被用来计算向量之间的关系,也就是文本(以及其他模态数据)之间的语义相似度。
随着大模型应用的不断深入,其支持的数据格式也日益丰富。尤其是多模态大模型兴起之后,应用场景变得更加复杂,难度呈几何级数增长。那么,面对这些多模态数据,如何实现统一处理?同样需要一种基础的数学结构。答案依然是向量。原因在于:高维向量的复杂性,使其能够涵盖各种复杂任务场景,并且可以通过数值计算的方式来处理这些数据。
如果我们从向量的角度来理解大模型的训练和微调,那么训练和微调到底在做什么?
大模型的训练和微调,本质上就是通过一个数据模型,将输入到模型中的训练数据用向量来描述其关系,然后根据损失函数的误差,不断调整这些向量关系的数值,最终使该数值达到最优解。训练完成后,将模型的计算参数(也就是我们常说的大模型参数)保存下来。有了这套参数,模型就能对新输入的数据进行描述,并按照新数据的要求,生成与其向量关系最近的新内容。
从这个角度看,所谓的大模型技术,其实就是寻找一种通用的数学模型,去计算不同模态数据之间的数学关系。而描述这种数学关系的数学类型,就是向量。反推一下,如果未来有一种数学模型能够完全模拟人脑的运作方式,那么我们就完全可以用一种统一的数据格式(比如向量)来描述大脑的思维过程,进而实现真正意义上的人工智能。
