零基础读懂大型语言模型的工作原理与训练机制
当 ChatGPT 于去年秋天推出时,它在科技行业和更大的世界中引发了冲击波。时至今日,几乎每个人都听说过 LLM(大型语言模型),并且有数千万人尝试过它们,但是仍然没有多少人了解它们是如何工作的。大多数人只听说过 LLM 被训练成'预测下一个单词',并且它们需要大量的文本来做到这一点,但仅此而已。
由于 LLM 的开发方式与传统软件那种由人类程序员提供明确的分步指令不同,ChatGPT 建立在数十亿个普通语言单词训练的神经网络上,因此,地球上没有人完全了解 LLM 的内部工作原理,这需要再过数年或数十年才能被人类完全解析。
本文将试图通过不使用技术术语或高级数学的方式,令普罗大众对 LLM 内部的工作原理有一定的理解。本文将首先解释词向量,然后将深入研究 Transformer,最后将解释这些模型是如何训练的。
1. Word vectors 词向量
词向量是 LLM 用于表示单词的方式,它是一长串数字。LLM 使用词向量的原因如下:
- 假设有一个词空间,通过词向量的数值的远近,用于表示两个或多个词之间是否有相似的含义。例如,在词空间中,最接近猫的词包括狗和宠物等;
- 词向量由于由数值构成,因此可以通过词向量的运算来'推理'单词。例如,谷歌研究人员将单词'biggest'的词向量,去掉'big'的词向量,再加上'small'的词向量,最终推理出来的是'smallest'。
词向量真正开始被提出并广而研究,是 Google 于 2013 年提出的 word2vec 项目。谷歌分析了从谷歌新闻收集的数百万份文档,以确定哪些单词往往出现在相似的句子中,随后,一个神经网络被训练来预测哪些单词与其他哪些单词同时出现,学会了在词空间中将相似的单词放在一起。
词向量当然还有其他的计算方式,比如用于类比。谷歌的词向量捕捉到了一些其他的关系:
- 瑞士人之于瑞士,就像柬埔寨人之于柬埔寨;
- 巴黎之于法国,就像柏林之于德国;
- 不道德之于道德,就像可能之于不可能;
- Mouse 之于 Mice,就像 Dollar 之于 Dollars;
- 男人之于女人,就像国王之于王后。
而由于这些向量是根据人类使用单词的方式构建的,因此它们也反射出了人类语言中存在的偏见。例如,在一些向量模型中,Doctor 减去 Man 加上 Woman 的结果是 Nurse,而减轻这种偏见,也是词向量研究的一个重要领域。
词向量是语言模型中很重要的部分,它们编码了有关单词之间微妙但重要的信息。如果语言模型学习了一些有关于猫的知识,例如它有时会去看宠物,那么小狗或者其他宠物也应该会有类似的动作;如果语言模型对巴黎和法国之间的关系有所了解,那么它也有可能认识到柏林和德国的关系,以及罗马和意大利之间的关系。
2. 词义取决于上下文
由于单词通常具有多种含义,因此简单的词向量方案并不总能准确地描述自然语言的事实信息。
例如以下两个句子:
- John picks up a magazine.
- Susan works for a magazine.
magazine 在这两个句子中虽然意义相近,但并不相同,John 拿起的是一本杂志,而 Susan 则是在一家出版社工作。
而 bank 在以下两个句子中的含义则并不相同:
- The bank wired John the money.
- The university is on the left bank of the river.
第一句中 bank 的意思是银行,第二句中的 bank 则表示河流旁边的土地。
当一个词有两个不相关的含义时,就像 bank 一样,称为同音异义词;当一个词有两个密切相关的含义时,如 magazine,称为多义词。像 ChatGPT 这样的 LLM 能够根据该单词出现的上下文,用不同的向量表示同一个单词。例如表示银行的 bank 和表示河流旁边的 bank 的词向量是不一样的,表示杂志的 magazine 和表示杂志社的 magazine 也是不一样的。
3. 将词向量转化为词预测
GPT-3 是 ChatGPT 背后的大语言模型,它由数十层的 Transformer 组成,每一层都采用一系列向量作为输入(输入文本中的每个单词对应一组向量),并添加了一些信息用于阐明该单词的含义,以更好地预测下一个单词。
Google 在 2017 年的一篇具有里程碑意义的论文中,将 LLM 的这些具有神经网络架构的层命名为 Transformer。
示例中的结构是从下往上,最下面一层是部分句子,即'John wants his bank to cash the',它将被通过 word2vec 转化为一组向量,作为第一层 Transformer 的输入。
第一层 Transformer 通过一定的思考,确认 wants 和 cash 两个词是动词,于是在这两个词后添加括号,标注其为动词,转化为向量后传递给下一层的 Transformer。我们将在第一层 Transformer 之后添加的这些信息称为隐藏状态。
第二层 Transformer 也为这个句子添加了一些上下文:bank 是一个财务机构,his 是指 John 的。这时这个句子变成了'John wants(verb) his(John's) bank(financial institution) to cash(verb) the',括号中的单词为每一层的 Transformer 所学习到的内容。
当然,以上只是特意将 Transformer 的工作内容简化,使我们能够更好理解的一个例子。实际的 LLM 会包含更多层的 Transformer,例如 GPT-3 包含了 96 层 Transformer。
研究表明,LLM 的前几层侧重于理解句子的语法并解决歧义,而后面的层则更偏重于对整个句子的高阶理解。例如,当 LLM'通读'一篇短篇小说时,它似乎会跟踪有关故事人物的各种信息:性别和年龄、与其他人物的关系、过去和现在的位置、个性和目标等等。
研究人员并不能确切地了解 LLM 是如何跟踪这些信息的,但从逻辑上讲,模型应该是通过修改隐藏状态向量后,一层一层往下传递来实现信息跟踪的。
GPT-3 使用了 12288 个维度的词向量,也就是说,每个词都由 12288 个数字的列表表示,是 Google 的 word2vec 的 20 倍。我们可以把这些额外的维度看作是一个'暂存空间',GPT-3 可以用它来存储每个词的上下文注释,即隐藏状态向量。前几层的注释可以被后几层读取和修改,使模型能够逐渐加深对整个段落的理解。
假设我们使用 96 层的 LLM 来解释一个 1000 字的故事时,第 60 层可能包括 John 的注释信息,而这些信息将被以某种方式编码为一组与 John 关联的 12288 维度的数字的列表。同样,故事中的其他单词例如 Cheryl、Donald、Boise、Wallet 等,也有可能有与之相关的 12288 维度的向量注释与之对应。
这些信息作为 hidden state vectors,将一层一层地往后传递,传到第 96 层后,第 96 层即可根据这些信息,预测下一个单词的内容。
4. Transformer 的内部逻辑
我们来看 Transformer 内部发生了什么,一般来讲,Transformer 通过以下两步来新增或更新每个单词的隐藏状态:
- Attention Step,每个单词'环顾四周',寻找具有相关上下文并相互共享信息的其他单词;
- Feed-Forward Step,每个单词'思考'上一步收集的信息,并尝试预测下一个单词;
LLM 使用网状的方式来执行这两个步骤,这有益于 LLM 充分利用 GPU 芯片的大规模并行处理能力,且有助于 LLM 扩展到包含成千上万个单词的段落。
4.1 注意力步骤 Attention Step
我们可以把注意力机制视为单词的匹配服务。在匹配服务执行过程中,每个单词都会生成一个查询向量清单,用于描述它所查找的单词的特征,同时会生成一个关键词向量清单用于描述其自身的特征。神经网络通过计算点积的方法,将每个关键词向量与每个查询向量进行比较以找到最匹配的单词,找到匹配项后,它会将信息从生成关键词向量的单词传输到生成查询向量的单词。
以上文中提到的'John wants his bank to cash the'为例,his 的查询向量可能是'我在寻找描述男性的名词',而 John 的关键词向量可能是'我是描述男性的名词',于是神经网络经过点积计算后,将生成'我是描述男性的名词'这个关键词向量的单词 John,传输到生成'我在寻找描述男性的名词'这个查询向量的单词 his。
每个注意力层都有几个注意力头,这意味着这种信息交换过程在每一层都会并行的发生几次,而每个注意力头的工作不一样:
- 一些注意力头可能会将代词与名词匹配;
- 一些注意力头可能专注于解决同音异义词的含义;
- 一些注意力头可能会将两个词的短语联系在一起,例如'John Biden';
- 等等。
注意力头通常都是按顺序操作,一层注意力头操作的结果成为下一层注意力头的输入,而每一项任务都经常需要几个注意力头的工作。
GPT-3 的最大版本有 96 层,每一层有 96 个注意力头,因此 GPT-3 每次预测一个新词时,都会执行 9216 次注意力操作。
接下来我们来看一下真实环境中,LLM 内部是如何工作的。去年,Redwood Research 的研究人员对 GPT-2 如何预测'When Mary and John went to the store, John gave a drink to'的下一个词进行了研究。
GPT-2 预测到下一个单词是 Mary,研究人员发现,有三种类型的注意力头促成了这一预测:
- 他们称之为名称移动头的三个注意力头将信息从 Mary 向量复制到最终的输入向量 to,GPT-2 使用 to 中的信息来预测下一个单词;
- 被称为主语抑制头的四个注意力头将 John 进行标记,阻止名称移动头将 John 的信息复制到 to 中;
- 标记重复头的二个注意力头将第二个 John 向量标记为第一个 John 向量的副本,以辅助主语抑制头决策不复制 John 的信息到 to 的 hidden state 中;
简而言之,这九个注意力头使 GPT-2 能够发现'John gave a drink to John'是无意义的,而决策应该是'John gave a drink to Mary'。
虽然 Redwood Research 的五人团队做了这些研究,并且发表了一篇 25 页的论文来阐述他们是如何识别和验证这些注意力,但这仍然不足以全面解释为什么 GPT-2 会决策 Mary 是下一个单词。例如在另一些句子'when Mary and John went to the restaurant, John gave his key to'中,显然预测 Mary 是这个句子的下一个词并不怎么合理,更合理的是'the valet'服务员。
4.2 前馈步骤 Feed-forward Step
注意力头在词向量之间传递信息之后,是一个前馈网络。前馈网络'思考'每个词向量并试图预测下一个词。前馈步骤阶段会单独分析每个单词,且能访问之前由注意力头复制的任何信息,但不会进行任何信息交换。
以下是 GPT-3 的最大版本中前馈层的结构:其中绿色和紫色的圆圈是神经元,即计算输入加权和的数学函数。
这只是 GPT-3 前馈层的基本结构,GPT-3 前馈层的实际结构,比这要复杂得多。其输出层有 12288 个神经元(对应于模型的 12288 维度的词向量),隐藏层有 49152 个神经元。
因此在最大版本的 GPT-3 中,前馈层的隐藏层中有 49152 个神经元,每个神经元有 12288 个输入(因此有 12288 个权重参数)。而每个神经元有 12288 个输出神经元,有 49152 个输入值(因此有 49152 个权重参数),这意味着每个前馈层有 12 亿个权重参数。而由于有 96 个前馈层,因此总共有 1160 亿个参数。
在 2020 年的一篇论文中,Tel Aviv University 大学的研究人员发现,前馈层通过模式匹配来工作——隐藏层中的每个神经元都匹配输入文本中的特定模式。
以下是 16 层版本的 GPT-2 中神经元匹配的一些模式:
- 第 1 层中的神经元匹配以'substitutes'结尾的单词序列;
- 第 6 层中的神经元匹配与军事相关的序列,并以'base'或'bases'结尾;
- 第 13 层中的神经元匹配以'下午 3 点到 7 点之间'或'从周五晚上 7:00 到'等时间范围结尾的序列;
- 第 16 层中的神经元匹配与电视节目相关的序列,例如'原始的 NBC 日间版本已存档'或'时间延迟使该集的观众增加了 57%';
正如我们所见,模式在后面几层中变得越来更加抽象,早期的层倾向于匹配特定的单词,而后期的层匹配更广泛的语义类别(如电视节目或时间间隔)的短语。这种匹配当然不是因为前馈层一次性检查了多个单词,而是因为'原始的 NBC 日间版本已存档'或'时间延迟使该集的观众增加了 57%'这些向量已经被加入到'archived'这个词的关键词向量中,在'Television'进行查询时,注意力头将 archived 的关键词向量复制到了 archived 向量的隐藏向量中。
当神经元匹配其中一种模式时,它会向词向量添加信息。虽然这些信息并不总是容易解释,但在许多情况下,您可以将其视为对下一个单词的初步预测。
对于前馈层,Brown University 的研究员基于 24 层的 GPT-2,对其如何预测'Q: What is the capital of France? A: Paris Q: What is the capital of Poland? A:'进行了进一步研究。研究人员发现,GPT-2 的前 15 层看起来像是在进行随意猜测,而在第 16 至 19 层,GPT-2 猜测出答案应该是 Poland(虽然不对,但更加接近),而在第 20 层,GPT-2 得出结论是 Warsaw 这个正确答案,并在后续的几层一直保持了这个正确答案。
Brown University 的研究员发现,第 20 个前馈层通过添加一个向量,将国家向量映射到其相应首都的向量,将 Poland 转化为 Warsaw,这种处理方式称为向量计算,它能完成类似于将小写单词转换为大写单词、将现在时态转换为过去时态等工作。
因此,注意力头从提示中较早的单词中检索信息,而前馈层使语言模型能够'记住'提示中没有的信息。
5. 如何训练语言模型
许多早期的机器学习算法要求训练样本由人类手工标记。例如,训练数据可能是狗或猫的照片,每张照片都有人工提供的标签('狗'或'猫')。人类需要标记数据,这使得创建足够大的数据集来训练强大的模型变得困难且昂贵。
LLM 的一个关键创新是它们不需要明确标记的数据。相反,它们通过尝试预测普通文本段落中的下一个单词来学习。几乎任何书面材料(从维基百科页面到新闻文章再到计算机代码)都适合训练这些模型。
例如,一个 LLM 可能会被输入'我喜欢我的奶油咖啡',并应该预测'糖'作为下一个单词。一个新初始化的语言模型在这方面将非常糟糕,因为它的每个权重参数(在最强大的 GPT-3 版本中为 1750 亿个)都将从一个基本上是随机数开始。但是,随着模型看到更多的例子(数千亿个单词),这些权重会逐渐调整,以做出越来越好的预测。
我们可以这样类比,假设你要去洗澡,你希望温度恰到好处:不要太热,也不要太冷。您以前从未使用过这个水龙头,因此您将旋钮指向随机方向并感受水温。如果太热,你把它转向一个方向;如果天气太冷,你就把它转向另一个方向。越接近合适的温度,所做的调整就越小。
现在让我们对这个类比做一些改动。首先,假设有 50,257 个水龙头,而不仅仅是一个。每个水龙头对应一个不同的词,如猫或银行。你的目标是让水只从水龙头中流出,与序列中的下一个单词相对应。
其次,水龙头后面有一堆相互连接的管道,这些管道上也有一堆阀门。因此,如果水从错误的水龙头流出,您可以调整水龙头上的旋钮。你派出一群聪明的松鼠向后追踪每根管道,并调整它们沿途发现的每个阀门。
这会变得很复杂,因为同一根管道可能对接了多个水龙头。因此,需要仔细考虑才能弄清楚哪些阀门要拧紧,哪些阀门要松动,以及松动多少。
显然,如果你从字面上理解它,这个例子很快就会变得非常难以理解。建立一个拥有 1750 亿个阀门的管道网络既不现实也没有用。但多亏了摩尔定律,计算机可以而且确实在这种规模下运行。
到目前为止,我们在本文中讨论的 LLM 的所有部分——前馈层中的神经元和在单词之间移动上下文信息的注意力头——都是作为一个简单的数学函数链(主要是矩阵乘法)实现的,其行为由可调整的权重参数决定。就像我故事中的松鼠松开和拧紧阀门来控制水流一样,训练算法也会增加或减少语言模型的权重参数来控制信息如何流经神经网络。
训练过程分两步进行。首先有一个'前进通道',打开水,检查它是否从正确的水龙头流出。然后关掉水,有一个'后退通道',松鼠沿着每根管道奔跑,拧紧和松开阀门。在数字神经网络中,松鼠的角色由一种称为反向传播的算法扮演,该算法在网络中'向后行走',使用微积分来估计每个权重参数的变化程度。
完成这个过程——对一个示例进行前向传递,然后向后传递以提高网络在该示例上的性能——需要数千亿次数学运算。训练像 GPT-3 这样大的模型需要重复该过程数十亿次——每个训练数据字一次。OpenAI 估计,训练 GPT-3 需要超过 3000 亿万亿次浮点计算——这相当于数十种高端计算机芯片的数月工作。
除了计算成本外,训练过程还需要巨大的电力消耗和硬件资源。随着模型规模的扩大,能耗问题日益凸显,这也是当前 AI 社区关注可持续发展的重要议题之一。未来的研究方向可能包括更高效的训练算法、稀疏模型以及绿色计算技术的应用,以降低大模型训练的环境足迹。
6. 综述
我们来尝试进行总结:
- LLM 使用词向量来表示单词,每个单词的词向量都是一长串数字,被存储在向量空间中,并且由于是数值,因此可以通过运算来进行推理,例如通过运算判断某两个单词之间的关系等;
- 由于存在同音异义词和多义词,因此虽然是同一个单词,在向量空间中可能存储在不同的位置,而不同单词可能存储在相近位置,单词的具体词义取决于上下文;
- LLM 由数十层的 Transformer 组成,第一层 Transformer 接受用户的输入(被转化为词向量),然后进行词向量运算和处理后,生成的数据(向量)会被存储在隐藏状态中,然后将原始向量和隐藏状态一起作为输入传给第二层 Transformer;第二层 Transformer 接收到第一层的原始向量和隐藏状态后,继续进行处理,更新隐藏状态,然后将原始向量和新的隐藏状态继续传到第三层 Transformer,依此类推;每一层都根据上一层输入的原始向量和隐藏状态进行下一个单词的预测,随着隐藏状态的越来越丰富和准确,使得预测结果越来越准确;
- 每一层 Transformer 内部的处理逻辑类似——注意力头从提示中较早的单词中检索信息,而前馈层使语言模型能够'记住'提示中没有的信息:
- Attention Step,注意力步骤,寻找具有相关上下文并相互共享信息的其他单词,每个单词都会生成一个查询向量清单,用于描述它所查找的单词的特征,同时会生成一个关键词向量清单用于描述其自身的特征。神经网络通过计算点积的方法,将每个关键词向量与每个查询向量进行比较以找到最匹配的单词,找到匹配项后,它会将信息从生成关键词向量的单词传输到生成查询向量的单词;
- Feed-forward Step,前馈步骤,注意力步骤传递信息之后,前馈步骤阶段会单独分析每个单词,且能访问之前由注意力头复制的任何信息,但不会进行任何信息交换,每个单词'思考'上一步收集的信息,并尝试预测下一个单词;
- LLM 的每一层 Transformer 都有多个注意力头(一般跟 Transformer 的层数相同),每个注意力头进行的单词匹配工作和机制都不一样,注意力头通常都是按顺序操作,一层注意力头操作的结果成为下一层注意力头的输入,而每一项任务都经常需要几个注意力头的工作;
- 前馈层由一个神经网络构成,也称多层感知器,神经元的数量即权重参数的数量,如上文所述,GPT-3 的前馈层有 1160 亿个参数,每一层前馈层完成不同的工作,使用向量数学进行推理并得出结果;
- LLM 不需要通过明确标记的数据进行学习,它们通过尝试预测普通文本段落中的下一个单词来学习,随着模型学习到越多的例子,前馈网络中的参数权重会逐步调整,以做出越来越好的预测,规模越大,LLM 的能力越强;

