- US - English
- China - 简体中文
- India - English
- Japan - 日本語
- Malaysia - English
- Singapore - English
- Taiwan, China - 繁體中文
无效的输入。不支持特殊字符。
了解嵌入空间,以及 AI 如何模拟知识。
要回答“AI 是如何获得‘知识’的?”这个问题,我们不能仅仅分析其输出的内容,而必须深入了解 AI 背后隐藏的、普通人不熟悉的数学空间。AI 所做的预测就发生在这个数学空间中。了解该过程有助于改变我们与 AI 的关系,我们不应将 AI 视为真理的来源,而应将其视为一个复杂的系统。AI 系统基于概率生成预测,我们必须加深对 AI 的认识,并怀着审慎的态度,才能更好地利用 AI 的能力。有了这种技术层面的理解,我们才能以一种更加平衡的方式去思考,并开始进行深入的探究:不再盲目接受有关 AI 的笼统、泛泛的论断,而是首先承认其不确定性,然后提出更精确的问题——AI 可能会在何时、什么条件下、以何种方式增强或者重塑人类的能力? 本文是我们有关 AI 相关概念的四篇博客系列文章中的第一篇。我们将从“词元”和“嵌入”等基本术语开始讨论,然后进一步了解“嵌入空间”,这是一个高维度的空间,在 AI 大语言模型内部用于表示语言。正是在嵌入空间内部,单词之间的关系被编码,然后以一种统计的方式,而非基于单词意义的方式,来引导模型作出预测。我们还会谈到内存在该过程中的作用。作为 AI 底层硬件架构的一部分,内存以一种默默无闻的方式,决定了这些系统能够存储及输出的内容。
“白雪公主的故事告诉我们,永远不要吃……”
这是作家 Lemony Snicket 提出的一个未完成的句子。作家在这里试图重新构想白雪公主故事的结局,同时也为了揭示:当逻辑偏离了正常轨道,走向极端时,我们从故事中获得的教训将会变得非常奇怪、不合常理。虽然这个句子不完整,但前半部分已经给我们提供了足够的信息。读到这些信息时,我们的脑海中会浮现出一种熟悉的形状,并引导我们想到接下来应该出现的词。这一过程只有少部分来自有意识的回忆,更多的部分来自已经深深“嵌入”我们记忆中的东西——童年时代阅读童话故事时留下的烙印。因此,答案脱口而出:苹果!或者更确切一点:毒苹果。作为读者,面对这个不完整句子时,我们可能会感觉自己非常有把握去补全它,这是一种对该句子应该如何收尾的下意识反射。即便我们也知道,苹果并非那个故事真正要传达的寓意。这种反应引出了一些更深层次的问题:如果一种语言模型可以产生与人类相同或相似的结果,那么它究竟是从哪些知识中推导出该结果的?在模型内部,这些“知识”又是怎样表示的?
如果我们将这个不完整的句子提供给大语言模型 (LLM),它可能会这样补全句子:“来自陌生人的食物”、“毒苹果”,或者只是简单输出“苹果”。每个版本似乎都是合理的。“来自陌生人的食物”反映了故事中的实际情节;“毒苹果”指出了故事中的标志性危险物;“苹果”则指向故事中出现的、大家都知道的水果。但这些可能的答案,都不是从模型的真实体验或经历中得出的。在这里,LLM 并没有去解释这句话背后的故事,它只是通过识别英语中的统计模式,然后得出答案的。也就是说,LLM 只是从下一个词元出现的概率分布中采样,然后来生成文本。所以,其生成的结果可能发生变化,与我们如何表述提示词、所使用的具体模型,甚至最近与模型的对话有关。因此,我们上面所举的例子,只是说明了模型有可能生成这些答案,并不是一定会生成这些答案。
在我们继续探讨 AI 如何通过这些统计模式获得知识之前,一个值得考虑的问题是:是什么样的物理基础设施,让模型具备了获得知识的能力? 输出“苹果”或“来自陌生人的食物”这样的答案看起来很简单,但其依赖的底层机制却是一个非常复杂的层状结构,就像我们大脑中存储的、曾经阅读过的无数故事一样。模型的每一个预测,都来自于其内部存储的、数字化的关系,而这些信息必须依赖物理基础设施才能存在。而这些数据需要一个“容身之所”——也就是能够大规模存储、计算和处理它们的电路与内存系统。在模型与我们流畅交流背后,是其运行所在的底层硬件架构。“底层硬件架构”虽大多隐匿于视野之外,不太被注意到,但对于模型生成每一次看似毫不费力的响应都至关重要。本篇博客专注于对从文本到预测这一过程的概念性讨论。在讨论中,我们会稍微涉及使这一切成为可能的物理基础设施,并会特别关注基础硬件中所采用的先进内存技术。正是凭借这些技术,模型才产生了智能。
文本到预测的过程是如何实现的?
词元
当 AI 遇到一个单词时,它不会像人类一样去回想单词的意思,也不会去回忆自身的过往经历、记忆或感觉。它只是将单词转换为词元,然后依靠这些词元来解释整个文本。我们可以将词元视为 LLM 可以处理的最小文本单位。词元可以是完整的单词,例如“snow”;也可以是单词的一部分,例如“app”;甚至可以是标点符号、字母或空格。当我们将“白雪公主的故事告诉我们,永远不要吃……”这样的短语输入 AI 系统,然后要求 AI 补全句子时,AI 首先会将这些文本转换成词元。词元化的确切结果因模型而异,不过,很可能类似这样:
["\u201cThe\u201d | \u201c moral\u201d | \u201c of\u201d | \u201c Snow\u201d | \u201c White\u201d | \u201c is\u201d | \u201c to\u201d | \u201c never\u201d | \u201c eat\u201d"]
需注意,为便于说明,我们对这一过程进行了简化处理。真正的词元化基于复杂的算法,通常是专有算法。这些都是较短的常见单词,这意味着它们在词元化的过程中不太可能继续分解。请注意中间单词前的空格。这表示它们包含在句子当中,而非开启一个新的语义单元。1从文本到预测是一个多步骤过程,词元化只是其中的一个阶段。为了理解机器如何辨认人类语言,可以将这一过程视为一种变形的过程。就像毛虫变成蝴蝶一样,在人类语言(在本例中,输入内容为文本)变成机器可以解释的东西之前,经历了一系列结构化的步骤,其中的含义被转化为数学关系。为了简单起见,我们将这一复杂过程简化为两个步骤:从文本到词元;再从词元到嵌入。然而,实际的转换过程要复杂得多,涉及许多中间步骤,如词元 ID 和其他表示形式。这些步骤旨在帮助机器更好地理解表达形式丰富多样的自然语言。
嵌入
然后,词元被映射到嵌入。嵌入是一种数学表示形式,可以保留单词之间的语义(单词所代表的想法)和语法(单词在句子中扮演的角色)关联。2重要的是,这些关联并非通过人工明确编程实现;它们是从单词在训练数据(可能包括文献、文章、文字稿和其他资料)中出现和重复出现的模式中自主学习得来的。随后,这些嵌入将被投影到训练期间产生的高维空间中。这个空间被称为嵌入空间,是一种数学结构,用于对嵌入模型中语言的内部表示进行编码。它不是一部包含各种定义的词典,而是一张呈现单词之间邻近性和关联性的统计图谱。也就是说,那些经常同时出现或发挥相似功能的词语,会在嵌入空间中相互聚集、彼此靠近。例如,“Pirouette”(芭蕾舞中的脚尖旋转)和“arabesque”(芭蕾舞中的燕式旋转)可能会彼此靠近,“apples”(苹果)和“caramel”(黄油奶糖)同样如此,但这种关系只是一种统计结果,并不是因为模型能够理解芭蕾舞或者甜点搭配。这些单词只在类似的上下文中彼此靠近出现。
模拟出的知识
以上解释可以让我们得出模型与人类之间的关键区别。对人类而言,“苹果”这个词可能引发多种层次的含义(与我们的经历和记忆有关):邻居家的树、一斤苹果的重量、舌尖上的甜味等等。人类的理解源于文化、感觉和生活经验。但对 AI 来说,“苹果”并不会以这种方式存在于记忆当中。它的含义完全基于在句子中的位置,从嵌入空间内的关系推断得出,并且基于从海量文本中学到的模式。AI 可能不会像人类那样去“理解”,但它模拟出了人类的理解,表现足够优秀,并且非常有用。这里的“模拟”是指 LLM 可以生成类似于知识的响应,而非暗示 AI 系统具有像人类一样的理解能力或意识。如果想要更好地理解 AI 如何生成看起来类似知识的东西,我们需要深入地探究嵌入空间。
什么是“嵌入空间”?
当您为 AI 聊天机器人编写提示词时,您可能会觉得,您在用通俗的英语(或者您选择的其他语言)下达指令。但实际上发生的事情要复杂得多。您输入的单词不会以人类理解的方式被解读出含义;它们在嵌入空间中转化为高维向量。该嵌入空间的维度可以高达数百甚至数千个,在其中,模型生成回复的依据并非对单词的理解,而是空间内的向量关系。3这一技术过程深刻地改变了我们与机器互动的方式。无论是打字还是语音,如今我们对 AI 系统发出的指令更像是自然对话,而非代码。计算机科学家 Andrej Karpathy 用一句幽默的话描述了这一转变:“当下,最热门的新式编程语言是英语。” 这一说法巧妙地揭示了背后更深层次的变革:语言本身成为了一种界面,尤其是在与大语言模型交互时。这种情况下,我们使用英语的行为不再像是日常沟通;反而更偏向于一种结构化输入,承担着特定功能。但是,尽管 AI 看起来也在“说”英语,但它实际上所做的事情却要复杂得多。
统计学“回音室”
嵌入空间会基于其可获取的各类人类表达内容,从统计层面捕捉词语的共现趋势,这些内容涵盖了从新闻文章、论文,到 Reddit 论坛上的帖文、八卦小报标题等所有形式。在这个空间中,“含义”的定义既不依赖语法规则,也不源于人类使用语言时的刻意目的;它完全取决于词语的共现频率——这恰好反映了人类过去将这些词语与其他词语搭配使用的习惯。预测的这种统计性质,也可能有助于解释为什么 AI 生成的句子缺乏张力:它总是优先选择出现概率最高的下一个词,而不会选择更能激发思考的词。模型类型不同,输出文本的风格倾向也会有差异:有的更倾向于输出连续的简洁有力短句,但所有句子的语义都收尾得过快。至少目前,AI 无法真正生成有张力的长文本。模型以“文本补全”为训练目标,往往会过快完成表达,并努力避免模糊或矛盾的表达,这些特征可以精确地将人类与机器区分开来。当下次 AI 似乎非常同意您的观点,并且欣然为您提供您所期待的确定性结论时,请务必注意 AI 的这种倾向。AI 模型不会去“思考”该省略哪些信息、保留哪些信息,以便句子具有张力,可用来表达复杂的意思;它所做的,只是努力实现统计层面的连贯性,确保输出与训练数据保持一致。
“n 维张量”:AI 如何近似表达语义
构成嵌入空间的嵌入元素被表示为张量,张量是一种能从数学层面表征多维度间关系的工具。张量可以是一维列表(如向量)、包含行和列的二维表格(如矩阵),也可以是更高维度的对象,维度可延伸至三维、四维乃至 n 维。对于语言模型而言,每个嵌入向量都是一维张量,即一个包含数百乃至数千个数值的向量。这些数值并非随机生成。每个数值都代表高维空间中的一个独特维度,从中可以发现隐藏在含义、语法和上下文中的各种模式。
从 2D 到 3D:概念讲解
为了使嵌入空间更加直观,我们从一个简化的版本开始:一个二维嵌入空间。想象一下,两个轴分别代表统计学意义上的邻近关系,这是一种我们无法直接解释的关系。沿着一个轴,“苹果”可能与“水果”“猎人”“嫉妒”和“咬”等词距离较近。沿着另一个轴,它可能与“红色”“甜”和“脆”等单词相邻(图 1)。这些分组并不直接反映“童话”或者“口味”等概念类别,而是体现这些词语在语言中共同出现的频率。这种方法与语言学家 J.R. Firth 的著名见解不谋而合:“观其伴而知其意。” 这种情况下,单词的含义来自于使用它的上下文,而不是词典中的定义。
现在,我们再增加一个维度。在三维空间中,“苹果”可能出现在“知识”“诱惑”和“蛇”附近,暗示其在《圣经》语境中的关联(图 2)。4这些都是“苹果”这个词出现时的不同语境,而模型捕捉到的只是这些语境对应的统计规律,并非词语背后的符号化含义。
从 4D 到 512D:复杂度增加
想象一下,如果我们继续添加第四个维度(例如时间维度),再用 1980 年前后的数据对嵌入模型进行训练,可能会发现,“苹果”周围出现的词语可能会因时代不同而有所差异(图 3)。到了 20 世纪 80 年代,“苹果”开始与“计算机”“技术”一起出现,一同出现的还有两个人名,这两个人都叫史蒂夫。在此之前,苹果公司总部所在地库比蒂诺还是一座农业小城,“苹果”与该地区尚未形成紧密的文化关联。这时候,与“苹果”有联系的词都与果园和柑橘类水果有关,“苹果”还没有与后来成为《财富》100 强的苹果公司的图标产生密切联系。这种变化说明语言的概率分布并非固定不变的,而是动态发展的:随着文化力量对语言产生影响,其分布会随时间推移而演变。
n 维
在添加时间作为第四个维度后,我们看到了文化演变对语言使用的影响。不过,在真正实际使用的嵌入空间中,维度的规模要大得多。在二维或三维空间中,我们很容易定位一个点,例如地图上的位置或空间中的物体。但是嵌入空间包含数百或数千个维度,即使能定位某个点,也会变得无法可视化。为了更加具体地展示这种变化,表 1 显示了每个单词如何表示为一个数字列表,且维度数量决定了嵌入向量的规模。这些数值本身并不传递任何含义,但它们确实在模型的嵌入空间中定位了某个单词。例如,在 n 维嵌入空间中,“苹果”这个单词可以表示为类似 [0.2, 0.3, 0.2, 0.5, …, 0.8] 这样的向量,从而代表了“苹果”的数值表示。
因此,当我们说单词“苹果”和“咬”分别由 n 个值表示时,我们实际上是在描述向量,这些向量将每个词定位为 n 维空间中的一个点。回到本文开头的示例:“白雪公主的故事告诉我们,永远不要吃……”模型并非通过理解故事来补全这句话,而是去计算统计学上最有可能出现的下一个单词。在本示例中,“苹果”是可能出现的下一个单词(但并非唯一可能出现的词),是因为数学计算(统计规律)判定它应该出现在这里。
为何这些数学方法与内存有关?
嵌入向量是 n 维度空间中的数学表示,而其中的每个维度则代表了单词之间的关系。理解了这一点,有助于我们了解 AI 如何模拟人类的理解能力。但是,这些坐标值并非仅存在于理论中,它们还必须存储在物理内存中。根据不同的应用场景,每个嵌入向量包含数百乃至数千个数值,每个数值的精度为 4 位到 32 位。例如,GPT-3 模型的嵌入空间维度超过 12,000 维,而较小的模型可能会使用 768 或 1024 个维度。5嵌入向量的维度越高,其数据规模就越大,所需存储的数值数量也越多。而且每个数值都占用存储空间。这种对空间的需求面临一种底层限制:嵌入表示的复杂度越高,所需占用的物理内存空间就越大。除了存储嵌入向量,模型还必须管理键值缓存(KV 缓存)中的中间计算结果。KV 缓存是一种短期内存,能让模型调用过往交互数据(如对话历史),无需从头重新计算。随着模型处理的词元数量增多,其需要在 KV 缓存中存储的临时数据也会增加,进而导致整体内存占用上升。
所有这些因素叠加在一起:嵌入向量本身、嵌入向量的规模以及 KV 缓存。随着模型接收更多词元,并存储更多关联数据时,所需内存急剧增加,不仅体现在占用内存的大小上,还体现在管理内存在复杂度上。到这个时候,计算和内存架构开始决定模型能做什么、不能做什么。
问题的关键不仅在于模型的计算能力有多强,还在于它能够以多快的速度调用已存储的信息(即“已知内容”)。为满足这些需求,内存系统的改进变得愈发重要。其中一个例子是高带宽内存 (HBM))——最初为科学计算而开发,现在已广泛用于支持 AI 应用。如今,HBM 在 AI 系统中扮演着“低调却关键”的角色,可帮助模型更高效地处理海量数据。通常,拖慢模型速度的不只是计算能力。模型的响应还会受到模型访问内存的最大速度的影响,或者说,模型能以多快的速度检索并返回已知内容。
接下来还会发生什么?
当我们谈论完嵌入,开始考虑语境的作用时,又会面临一个新的内存挑战。模型需要保留的文本越多,所需的内存就越多。如果您曾经遇到过这样的弹出消息:“您还剩下 3 次提问机会”,就会知道,该模型已经接近该对话的最大语境长度(以词元为单位计量),您很快就需要开启一个新的对话线程。这种限制不仅影响了 AI 系统可以做什么;它还决定了系统如何处理和表示语境本身。这是另一个主题,我们将在本系列博客的下一篇中探讨。
技术贡献者
1. Schneppat, J.-O. (n.d.)。空白字符字元化。Schneppat AI。网址:https://schneppat.com/whitespace-tokenization.html
2. 嵌入:嵌入空间和静态嵌入。(n.d.) Google Machine Learning Education 产品中的课程。网址:https://developers.google.com/machine-learning/crash-course/embeddings/embedding-space
3. Tennenholtz, G. 等。2024 年。《使用大语言模型揭开嵌入空间的神秘面纱》。ICLR 2024 大会论文。网址:https://www.cs.toronto.edu/~cebly/Papers/2991_demystifying_embedding_spaces_.pdf
4. TensorFlow。(n.d.) Embedding Projector。网址:https://projector.tensorflow.org/
5. Li, C. 2020 年 6 月 3 日。《OpenAI 的 GPT-3 语言模型:技术概述》。Lambda. 网址:https://lambda.ai/blog/demystifying-gpt-3