AI 学习资料 · 大型语言模型简介
什么是大语言模型:Transformer 与自注意力
大语言模型(LLM)是一种较新的技术,可以预测一个 token 或一串 token,有时预测出的 token 能有好几段话那么长。别忘了,token 可以是一个词、一个子词(词的一部分),甚至是单个字符。LLM 的预测比 N 元语法语言模型或循环神经网络好得多,原因是:
- LLM 包含的参数远多于循环模型。
- LLM 能收集多得多的上下文。
本章介绍构建 LLM 最成功、应用最广的架构:Transformer。
什么是 Transformer?
Transformer 是当前最先进的架构,适用于各种语言模型应用,例如翻译:
图略:图 1,一个基于 Transformer、把英语译成法语的应用。输入是英文句子“I am a good dog.”,翻译器输出同一句话的法语译文“Je suis un bon chien.”(来源:LLM:什么是大语言模型?)
完整的 Transformer 由编码器和解码器组成:
例如,在翻译器中:
- 编码器把输入文本(例如一个英文句子)处理成某种中间表示。
- 解码器把这种中间表示转换成输出文本(例如意思相同的法语句子)。
图略:图 2,完整的 Transformer 同时包含编码器和解码器。基于 Transformer 的翻译器先由编码器生成英文句子的中间表示,再由解码器把中间表示转换成法语输出句子。(来源:LLM:什么是大语言模型?)
补充:只用编码器或只用解码器的架构
本单元重点介绍同时包含编码器和解码器的完整 Transformer,不过也存在只用编码器和只用解码器的架构:
- 只用编码器的架构把输入文本映射成中间表示(通常是嵌入层)。只用编码器的架构适用于:
- 预测输入序列中的任意 token(这是语言模型的传统用途)。
- 生成复杂的嵌入,作为另一个系统(例如分类器)的输入。
- 只用解码器的架构根据已经生成的文本生成新的 token。只用解码器的模型通常擅长生成序列;现代的只用解码器的模型可以凭借生成能力,续写对话历史和其他提示词。
什么是自注意力?
为了更好地利用上下文,Transformer 在很大程度上依赖一种叫作自注意力的机制。实际上,自注意力会替输入中的每个 token 提出这样一个问题:
“输入中的其他每个 token,对这个 token 的理解各有多大影响?”
“自注意力”中的“自”指的是输入序列。有些注意力机制衡量的是输入 token 与输出序列(例如译文)或其他某个序列中 token 之间的关系,而自注意力只衡量输入序列内部各 token 之间关系的重要性。
为简单起见,假设每个 token 都是一个词,完整的上下文只有一个句子。请看下面这个句子:
The animal didn't cross the street because it was too tired.
这句话有 11 个词。11 个词中的每一个都在关注另外 10 个词,想知道这 10 个词各自对自己有多重要。例如,注意这句话里有代词 it。代词常常有歧义。代词 it 通常指前面不远处的名词或名词短语,但在这个例句里,it 指的是前面的哪个名词:animal(动物)还是 street(街道)?
自注意力机制会判断附近每个词与代词 it 的相关程度。原文的图 3 展示了结果:线条越蓝,表示这个词对代词 it 越重要。也就是说,对代词 it 来说,animal 比 street 更重要。
图略:图 3,代词 it 的自注意力。图中显示句子“The animal didn't cross the street because it was too tired”的 11 个词各自与代词 it 的相关程度,其中 animal 与 it 最相关。原图出自 Google 研究博客文章 Transformer: A Novel Neural Network Architecture for Language Understanding。(来源:LLM:什么是大语言模型?)
反过来,假设把句子的最后一个词改成这样:
The animal didn't cross the street because it was too wide.
在改过的句子里,自注意力应该会判断 street 比 animal 与代词 it 更相关。
有些自注意力机制是双向的,也就是会计算被关注的词之前和之后的 token 的相关性得分。例如,在原文图 3 中可以看到,it 两侧的词都被考察了。所以,双向自注意力机制可以从被关注词两侧的词中收集上下文。相比之下,单向自注意力机制只能从被关注词某一侧的词中收集上下文。双向自注意力特别适合生成整个序列的表示,而逐个 token 生成序列的应用则需要单向自注意力。因此,编码器使用双向自注意力,解码器使用单向自注意力。
什么是多头多层自注意力?
每个自注意力层通常由多个自注意力头组成。层的输出是对各个头的输出做某种数学运算(例如加权平均或点积)得到的结果。
由于每个头的参数都初始化为随机值,不同的头可以学到被关注的词与附近词之间的不同关系。例如,上一节介绍的自注意力头专注于判断代词 it 指的是哪个名词。而同一层中的其他自注意力头,可能学习每个词与其他所有词在语法上的相关性,或者学习其他相互关系。
完整的 Transformer 模型会把多个自注意力层叠在一起,前一层的输出就是下一层的输入。这种堆叠让模型能逐步形成对文本更复杂、更抽象的理解。较浅的层可能侧重于基本句法,较深的层则能整合这些信息,把握更细腻的概念,例如整个输入中的情感、上下文和主题之间的联系。
补充:LLM 的大 O 复杂度
自注意力要求上下文中的每个词都去学习它与上下文中所有其他词的相关性。所以,人们很容易断言这是一个 O(N²) 问题,其中:
- N 是上下文中的 token 数。
如果前面这个大 O 还不够让人头疼,那么再看:Transformer 包含多个自注意力层,每个自注意力层又包含多个自注意力头,所以大 O 实际上是:
O(N² · S · D)
其中:
- S 是自注意力层的数量。
- D 是每层的注意力头数量。
补充:LLM 是怎样训练的
您大概永远不会从零开始训练一个 LLM。训练一个工业级的 LLM 需要大量的机器学习专业知识、计算资源和时间。不过,既然您想多了解一点,这里就简单解释一下。
构建 LLM 的主要原料是数量惊人的训练数据(文本),通常经过一定程度的过滤。训练的第一阶段通常是在这些训练数据上进行某种形式的无监督学习。具体来说,模型通过遮盖预测(masked prediction)来训练,也就是故意把训练数据中的某些 token 藏起来,让模型尝试预测这些缺失的 token。例如,假设下面这句话是训练数据的一部分:
The residents of the sleepy town weren't prepared for what came next.
随机去掉一些 token,例如:
The ___ of the sleepy town weren't prepared for ___ came next.
LLM 本质上就是一个神经网络,所以由损失(模型正确推断出的被遮盖 token 的数量)来指导反向传播更新参数值的幅度。
编者注:括号里是原文的简化说法。严格地说,损失衡量的是模型预测与被遮盖 token 之间的差距,预测得越不准,损失越大。
经过训练、学会预测缺失数据的 Transformer 模型,会逐渐学会发现数据中的模式和更高阶的结构,从中找到推断缺失 token 的线索。请看下面这个被遮盖的示例:
Oranges are traditionally ___ by hand. Once clipped from a tree, __ don't ripen.
在海量遮盖示例上经过大量训练后,LLM 能学到:第一个空很可能填“harvested”或“picked”(采摘),第二个空适合填“oranges”或“they”。
还有一个可选的后续训练步骤,叫作指令调优,可以提高 LLM 遵循指令的能力。
为什么 Transformer 这么大?
Transformer 包含几千亿甚至几万亿个参数。本课程一般建议构建参数较少的模型,而不是参数较多的模型。毕竟,参数较少的模型做预测时用的资源比参数较多的模型少。不过,研究表明,参数更多的 Transformer 始终优于参数更少的 Transformer。
LLM 又是怎样生成文本的?
您已经看到研究人员怎样训练 LLM 预测缺失的一两个词,可能觉得这没什么了不起。毕竟,预测一两个词基本上就是各种文本、电子邮件和写作软件里都有的自动补全功能。您可能想知道,LLM 怎么能写出关于套利的句子、段落或俳句。
事实上,LLM 本质上就是一种自动补全机制,能自动预测(补全)成千上万个 token。例如,下面是一个句子,后面跟着一个被遮盖的句子:
My dog, Max, knows how to perform many traditional dog tricks.
___ (masked sentence)
LLM 可以为被遮盖的句子生成各种可能的概率,包括:
| 概率 | 词 |
|---|---|
| 3.1% | For example, he can sit, stay, and roll over.(比如,它会坐下、待着不动和打滚。) |
| 2.9% | For example, he knows how to sit, stay, and roll over.(比如,它知道怎样坐下、待着不动和打滚。) |
足够大的 LLM 可以为段落乃至整篇文章生成概率。您可以把用户向 LLM 提出的问题看成“给定”的句子,后面跟着一个假想的遮盖部分。例如:
User's question: What is the easiest trick to teach a dog?
LLM's response: ___
LLM 会为各种可能的回答生成概率。
再举一个例子:用海量数学“应用题”训练过的 LLM,看起来像是能做复杂的数学推理。但这些 LLM 基本上只是在对应用题形式的提示词做自动补全。
LLM 的优势
LLM 可以为各种各样的目标读者生成清晰易懂的文本。LLM 能对明确训练过的任务做出预测。有些研究人员声称,LLM 还能对没有明确训练过的输入做出预测,但也有研究人员反驳了这种说法。
LLM 的问题
训练 LLM 会遇到许多问题,包括:
- 收集庞大的训练集。
- 耗费数月时间,以及巨量的计算资源和电力。
- 解决并行计算方面的难题。
用 LLM 进行推理预测会带来以下问题:
- LLM 会产生幻觉,也就是说,它们的预测经常包含错误。
- LLM 消耗大量计算资源和电力。用更大的数据集训练 LLM 通常能减少推理所需的资源,不过更大的训练集要耗费更多训练资源。
- 和所有机器学习模型一样,LLM 可能表现出各种各样的偏差。
练习:检查理解程度
问题:假设一个 Transformer 用十亿份文档训练过,其中有几千份文档至少出现过一次 elephant(大象)这个词。下面哪些说法可能是对的?
可选答案与解析:
- 金合欢树(acacia trees)是大象的重要食物,它与 elephant 一词之间会逐渐获得较高的自注意力得分。(正确)是的,这能让 Transformer 回答有关大象食性的问题。
- Transformer 会把 elephant 一词与各种含有 elephant 的习语联系起来。(正确)是的,系统会开始在 elephant 与这些习语中的其他词之间赋予较高的自注意力得分。
- Transformer 会逐渐学会忽略训练数据中对 elephant 一词的讽刺或反讽用法。(错误)在足够广泛的训练集上训练的足够大的 Transformer,相当善于识别讽刺、幽默和反讽。所以,Transformer 不会忽略讽刺和反讽,而是会从中学习。