什么是大型语言模型(LLMs)
现在,你可能已经听说过它们了。大语言模型(Large Language Models,通常简称为LLMs)是一种复杂的神经网络。这些模型在自然语言处理(NLP)领域引发了许多创新,其特点是拥有大量的参数,通常达到数十亿,使其在处理和生成文本方面表现出色。它们在大量的文本数据上进行训练,从而能够掌握各种语言模式和结构。LLMs的主要目标是解释和生成类似人类的文本,捕捉自然语言的细微差别,包括语法(单词的排列)和语义(单词的含义)。
LLMs的核心训练目标是预测句子中的下一个单词。这个简单的目标引发了许多新兴的能力。例如,它们可以进行算术计算、解开单词的混乱,甚至在一些专业考试中表现出色,如通过美国医学执照考试。此外,这些模型在各种NLP任务中也做出了重要贡献,包括机器翻译、自然语言生成、词性标注、句法分析、信息检索等,即使在这些特定领域没有直接的训练或微调。
大语言模型中的文本生成过程是自回归的,这意味着它们根据已生成的标记序列生成下一个标记。注意力机制在这个过程中是一个关键组件;它建立了单词之间的联系,确保生成的文本是连贯的并且符合上下文。在深入探索大语言模型的架构及其构建块(如注意力机制)之前,了解一些基本术语和概念是至关重要的。让我们首先概述一下驱动这些模型的架构,然后定义一些术语,如语言建模和标记化。
关键LLM术语
Transformer
语言模型的强大基础在于其架构。传统上,递归神经网络(RNNs)由于其处理序列数据的能力被用于文本处理。它们维持一个内部状态,保留来自先前单词的信息,帮助实现序列理解。然而,RNNs在处理长序列时面临挑战,因为它们容易忘记较早的信息,转而关注最近处理的输入。这主要是由梯度消失问题引起的,这种现象指的是梯度在反向传播过程中逐渐变小。结果是,早期输入相关的权重几乎没有改变,阻碍了网络从数据中学习和记住长期依赖关系的能力。
基于Transformer的模型解决了这些挑战,成为自然语言处理任务的首选架构。这种架构在具有影响力的论文《Attention Is All You Need》中首次提出,是自然语言处理领域的关键创新。它为前沿模型如GPT-4、Claude和LLaMA奠定了基础。该架构最初被设计为编码器-解码器框架。该设置使用编码器处理输入文本,识别重要部分并创建输入的表示。与此同时,解码器能够将编码器的输出(一个高维向量)转换回人类可读的文本。这些网络在诸如摘要生成等任务中非常有用,其中解码器根据传递给编码器的文章生成摘要。由于该架构的组件(编码器和解码器)可以共同使用或单独使用,因此它提供了在各种任务中的额外灵活性。一些模型仅使用网络的编码器部分将文本转换为向量表示,或仅使用解码器块,这是大语言模型的核心。下一章将详细介绍这些组件。
语言建模
随着LLMs的兴起,语言建模已成为自然语言处理的重要组成部分。它是基于大量语料库学习语言中单词的概率分布。这一学习过程通常涉及使用经典统计方法或新颖的深度学习技术来预测序列中的下一个标记。
大语言模型的训练目标是预测下一个单词、标点符号或其他元素,这些都是基于文本中已经出现的标记。通过理解训练数据中单词的分布,这些模型变得非常熟练,能够根据上下文猜测下一个单词的概率。例如,模型可以将以“我住在纽约”开头的句子补全为“纽约”,而不是“鞋子”这样的无关词。
在实际应用中,模型处理的是标记,而不是完整的单词。这种方法可以通过更有效地捕捉人类语言的复杂性,从而实现更准确的预测和文本生成。
标记化
标记化是与LLMs交互的初始阶段。它涉及将输入文本拆分成称为标记的小片段。标记可以是单个字符到整个单词,这些标记的大小可以极大地影响模型的性能。一些模型采用子词标记化,将单词拆分为保留有意义语言元素的更小段落。
考虑以下句子:“孩子的涂色书。”
如果标记化在每个空白字符后拆分文本,结果将是: ["The", "child's", "coloring", "book."]
在这种方法中,你会注意到标点符号仍然附着在单词上,如“child's”和“book”。
另一种方法是根据空白字符和标点符号分隔文本;输出将是: ["The", "child", "'", "s", "coloring", "book", "."]
标记化过程依赖于模型。重要的是要记住,模型以一对预训练的标记器和相关模型权重的形式发布。还有更高级的技术,如字节对编码(Byte-Pair Encoding),它被大多数新发布的模型使用。如下面的示例所示,这种方法还将“coloring”这样的单词拆分为两个部分: ["The", "child", "'", "s", "color", "ing", "book", "."]
子词标记化通过将单词拆分为有意义的段落(如将“coloring”拆分为“color”和“ing”)进一步提升了模型的语言理解能力。这扩展了模型的词汇量,并提高了其把握语言结构和形态学细微差别的能力。了解“ing”部分表示现在时态可以简化我们如何表示不同时态的单词。我们不再需要为单词的基本形式(如“play”)和它的现在时形式(“playing”)保持单独的条目。通过将“play”与“ing”结合,我们可以表示“playing”而不需要两个单独的条目。这种方法增加了表示一段文本所需的标记数量,但大大减少了我们在词典中需要的标记数量。
标记化过程涉及扫描整个文本以识别唯一的标记,然后对其进行索引以创建词典。这个词典为每个标记分配一个唯一的标记ID,使文本的标准化数值表示成为可能。在与模型交互时,这种将文本转换为标记ID的过程使模型能够高效地处理和理解输入,因为它可以快速参考词典以解码每个标记的含义。我们将在本书后面的章节中看到这个过程的示例。
一旦我们有了标记,我们就可以处理Transformer的内部工作:嵌入(Embeddings)。
嵌入(Embeddings)
标记化后的下一步是将这些标记转换为计算机可以理解和处理的形式——这就是嵌入的作用。嵌入是一种将标记(单词或单词片段)转换为计算机能够理解的数字语言的方式。它们帮助模型理解关系和上下文。它们使模型能够看到单词之间的联系,并利用这些联系更好地理解文本,主要通过注意力机制。
嵌入为每个标记分配一个独特的数字ID,以捕捉其含义。这种数字形式帮助计算机看到两个标记之间的相似性,例如知道“happy”和“joyful”在意义上接近,即使它们是不同的单词。
这一步很重要,因为它帮助模型以数字方式理解语言,弥合了人类语言和机器处理之间的差距。
最初,每个标记会被分配一组随机的数字作为其嵌入。随着模型的训练(即读取和学习大量文本),这些数字会被调整。目标是调整这些数字,以使具有相似含义的标记最终具有类似的数字集。这种调整是由模型在学习标记出现的不同上下文时自动完成的。
尽管数字集(或向量)的概念可能听起来复杂,但它们只是模型高效存储和处理标记信息的一种方式。我们使用向量是因为它们是一种简单的方式,使模型能够跟踪标记之间的关系。它们基本上只是大量的数字列表。
在第二章中,我们将进一步探讨这些嵌入是如何创建和在Transformer架构中使用的。
训练/微调
LLMs在大量文本语料库上训练,目标是正确预测序列中的下一个标记。如前所述,语言建模的目标是调整模型的参数,以最大化基于观察数据的正确预测概率。通常,模型会在来自互联网的大型通用数据集(如The Pile或CommonCrawl)上进行训练。有时,还会使用更具体的数据集,如StackOverflow Posts数据集,作为获取领域特定知识的例子。这个阶段也称为预训练阶段,表示模型被训练以学习语言理解,并为进一步的调优做好准备。
训练过程调整模型的权重,以增加预测序列中下一个标记的可能性。这种调整基于训练数据,引导模型朝着准确的标记预测方向发展。
在预训练之后,模型通常会进行针对特定任务的微调。这一阶段需要在更小的数据集上进一步训练,以完成某项任务(例如文本翻译)或专门领域(如生物医学、金融等)。微调允许模型调整其对特定任务或领域的先前知识,从而提高其性能。
微调过程可能很复杂,尤其是对于像GPT-4这样的高级模型。这些模型采用先进的技术,并利用大量数据来实现其性能水平。
预测
模型在训练或微调阶段后可以通过预测序列中的后续标记来生成文本。这是通过将序列输入模型,生成潜在下一个标记的概率分布,实质上为词汇表中的每个单词分配一个分数。根据分数选择下一个标记。生成过程将循环进行,以逐一预测单词,从而生成任意长度的序列。然而,保持模型的有效上下文大小是至关重要的。
上下文大小
上下文大小(或上下文窗口)是LLMs的一个关键方面。它指的是模型在单次请求中能够处理的最大标记数。上下文大小影响模型能够处理的文本长度,直接影响模型的性能和产生的结果。
不同的LLMs具有不同的上下文大小。例如,OpenAI的“gpt-3.5-turbo-16k”模型具有处理16,000个标记的上下文窗口。模型生成标记的数量有固有的限制。较小的模型可能有最多1,000个标记的容量,而像GPT-4这样的大型模型在本书编写时可以处理最多32,000个标记。
规模定律
规模定律描述了语言模型性能与各种因素之间的关系,包括参数数量、训练数据集大小、计算预算和网络架构。这些定律在《Chinchilla》论文中进行了详细阐述,为成功训练模型的资源分配提供了有用的见解。它们也是AI社区中“规模就是一切”这一说法的许多迷因的来源。
以下因素决定了语言模型的性能:
- 参数数量(N)表示模型从数据中学习的能力。更多的参数使得检测数据中的复杂模式成为可能。
- 训练数据集的大小(D)和标记的数量,从小文本块到单个字符,都被计算在内。
- FLOPs(每秒浮点运算次数)估算了训练过程中使用的计算资源。
在他们的研究中,作者在一个包含70亿个参数的Chinchilla模型上训练了1.4万亿个标记的数据集。这种方法符合论文中提出的规模定律:对于一个X参数的模型,最佳训练涉及大约X * 20个标记。例如,一个具有1000亿个参数的模型理想情况下应在约2万亿个标记上进行训练。
这种方法使得Chinchilla模型尽管比其他LLMs规模较小,但却超越了它们所有的模型。它在语言建模和特定任务性能上有所提升,使用了更少的内存和计算能力。可以在towardsai.net/book找到“Training Compute-Optimal Large Language Models”这篇论文。
LLMs中的新兴能力
LLMs中的新兴能力描述了随着模型规模的增长,新的技能意外地出现。这些能力,包括算术、回答问题、总结材料等,并没有在训练过程中显式地教给模型。相反,它们在模型规模增加时自发出现,因此称为“新兴”。
LLMs是概率模型,学习自然语言模式。当这些模型扩大时,它们的模式识别能力在数量上得到改善,同时在质量上也发生变化。
传统上,模型需要任务特定的微调和架构调整才能执行特定任务。然而,扩展后的模型可以在没有架构变化或专门微调的情况下执行这些任务。它们通过自然语言处理解释任务,具有执行各种功能的能力。LLMs能够在没有明确微调的情况下完成多种功能,这是一个重要的里程碑。
更令人惊讶的是,这些能力的展现方式。LLMs随着其规模的增长,从几乎零到有时接近最先进的性能,迅速且不可预测地发展。这种现象表明这些能力来自模型的规模,而不是被清晰地编程到模型中。
模型规模的增长以及训练数据集的扩展,伴随着计算成本的显著增加,为今天的大型语言模型的出现铺平了道路。例如,Cohere Command、GPT-4和LLaMA等模型,每个都代表了语言建模演变中的重要里程碑。
提示(Prompts)
我们提供给LLMs的文本(或图像、数字、表格等)通常称为提示(prompts)。提示是给AI系统(如OpenAI的GPT-3和GPT-4)提供的指令,提供生成类似人类文本的上下文——提示越详细,模型的输出通常越好。
简洁、描述性且短小(根据任务而定)的提示通常会导致更有效的结果,使LLM能够发挥创造力,同时引导其朝向期望的输出。使用特定的词语或短语可以帮助将模型的注意力集中在生成相关内容上。创建有效的提示需要明确的目的,保持简单,战略性地使用关键词,并确保可操作性。测试提示以确保输出相关且无错误是至关重要的。以下是一些提示建议:
-
使用精确的语言:提示中的精确性可以显著提高输出的准确性。
- 不够精确的提示:“写关于狗粮的文章。”
- 更精确的提示:“写一篇500字的信息性文章,讲述成年金毛寻回犬的饮食需求。”
-
提供足够的上下文:上下文帮助模型理解预期的输出:
- 上下文不足的提示:“写一个故事。”
- 提供足够上下文的提示:“写一个设定在维多利亚时代的短故事,讲述一个年轻侦探解决他第一次重大案件的故事。”
-
测试不同的变体:尝试不同的提示风格,找到最有效的方法:
- 初始提示:“写一篇关于瑜伽好处的博客文章。”
- 变体1:“撰写一篇1000字的博客文章,详细说明定期瑜伽练习的身体和心理好处。”
- 变体2:“创建一篇引人入胜的博客文章,突出将瑜伽融入日常生活的十大好处。”
-
审查输出:在发布之前始终检查自动生成的输出的准确性和相关性。
- 审查前:“瑜伽是提高柔韧性和力量的好方法。它还可以帮助减少压力和改善心理清晰度。然而,重要的是要记住所有瑜伽姿势并不适合每个人。”
- 审查后(更正):“瑜伽是提高柔韧性和力量的好方法。它还可以帮助减少压力和改善心理清晰度。然而,重要的是要记住并非所有瑜伽姿势都适合每个人。在开始任何新的锻炼计划之前,请始终咨询医疗专业人士。”
LLMs中的幻觉和偏见
在人工智能系统中,“幻觉”指的是这些系统生成与事实或现有输入不一致的输出,例如文本或视觉内容。举个例子,如果ChatGPT对某个问题给出一个引人注目但事实错误的回答,这就是一种幻觉。这些幻觉表明了AI输出与现实世界知识或上下文之间的不匹配。
在LLMs中,幻觉发生在模型生成的输出与现实世界事实或上下文不符时。这可能导致虚假信息的传播,特别是在医疗保健和教育等信息准确性至关重要的关键行业中。LLMs中的偏见也可能导致结果倾向于特定的观点,可能会强化有害的刻板印象和歧视。
例如,如果用户问:“2025年谁赢得了世界大赛?”而LLM回答了一个具体的获胜者。到目前为止(2024年1月),该事件尚未发生,因此任何回答都是推测性的且不正确。
此外,AI和LLMs中的偏见是另一个关键问题。它指的是这些模型倾向于基于其训练数据偏向特定的输出或决策。如果训练数据主要来自某个特定地区,模型可能会偏向该地区的语言、文化或观点。在训练数据中包含的偏见(如性别或种族)可能导致AI系统的输出也存在偏见或歧视。
例如,如果用户问LLM:“谁是护士?”而它回答:“她是照顾医院病人的医疗专业人员。”这展示了性别偏见。这个范式本质上将护理与女性联系在一起,这需要适当地反映现实,即男性和女性都可以是护士。
减少AI系统中的幻觉和偏见涉及改进模型训练、使用验证技术以及确保训练数据的多样性和代表性。找到在最大化模型潜力和避免这些问题之间的平衡仍然具有挑战性。
令人惊讶的是,这些“幻觉”在创意领域如小说创作中可能是有利的,允许创造新的和新颖的内容。最终目标是创建强大、有效但也值得信赖、公平和可靠的LLMs。我们可以最大化LLMs的承诺,同时最小化其风险,确保这项技术的优势可供所有人使用。
使用LLMs进行翻译(GPT-3.5 API)
现在,我们可以结合所学内容,通过OpenAI的API演示如何与其专有LLM进行交互,指示模型执行翻译。要使用OpenAI提供的LLMs生成文本,首先需要为Python环境生成一个API密钥。以下是生成此密钥的逐步指南:
-
创建并登录OpenAI账户。
-
登录后,从右上角菜单中选择“个人”(Personal),然后点击“查看API密钥”(View API keys)。
-
在API密钥页面上,找到“创建新的秘密密钥”(Create new secret key)按钮。点击它以生成一个新的秘密密钥。请记住安全保存此密钥,因为稍后会使用到。
-
生成API密钥后,可以使用以下格式将其安全地存储在.env文件中:
OPENAI_API_KEY="<YOUR-OPENAI-API-KEY>"每次启动包含以下行的Python脚本时,API密钥将自动加载到名为OPENAI_API_KEY的环境变量中。openai库随后使用此变量进行文本生成任务。
.env文件必须与Python脚本在同一目录中。
from dotenv import load_dotenv
load_dotenv()
现在,模型已经准备好进行交互!以下是使用模型进行从英语到法语翻译的示例代码。该代码将提示作为带有用户角色的消息发送,使用OpenAI Python包从API发送和检索请求。如果您对所有细节不太理解也没关系,我们将在第5章中更全面地使用OpenAI API。现在,请关注messages参数,它接收指导模型执行翻译任务的提示。
from dotenv import load_dotenv
load_dotenv()
import os
import openai
# 要翻译的英文文本
english_text = "Hello, how are you?"
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": f'''Translate the following English text to French: "{english_text}"'''}
],
)
print(response['choices'][0]['message']['content'])
输出示例:
Bonjour, comment ça va?
💡 您可以安全地将敏感信息(如API密钥)存储在单独的文件中,并使用dotenv避免在代码中意外暴露。这在处理开源项目或与他人共享代码时尤其重要,因为它确保了敏感信息的安全。
通过提供示例来控制LLMs的输出
少样本学习(few-shot learning),作为LLMs的其中一种新兴能力,意味着在进行预测之前向模型提供少量示例。这些示例具有双重作用:一方面,它们“教”模型在推理过程中如何操作,另一方面,它们充当“过滤器”,帮助模型识别数据集中相关的模式。少样本学习使模型能够适应新的任务。尽管像GPT-3这样的LLMs在语言建模任务(如机器翻译)中表现出色,但它们在需要更复杂推理的任务上表现可能会有所不同。
在少样本学习中,提供给模型的示例帮助发现数据集中相关的模式。这些数据集在训练过程中有效地编码到模型的权重中,因此模型会寻找与提供的样本显著关联的模式,并利用这些模式生成输出。因此,通过添加更多示例,模型的精度提高,从而提供更具针对性和相关性的响应。
以下是一个少样本学习的示例,我们通过不同的消息类型向模型提供描述电影的表情符号的示例。(我们将在书中稍后讨论不同的消息类型。)例如,可以用表情符号表示电影《泰坦尼克号》(Titanic),如邮轮、波浪、心形等,或者表示《黑客帝国》(The Matrix)电影。模型识别到这些模式后,能够使用玩具的表情符号准确地描述电影《玩具总动员》(Toy Story)。
from dotenv import load_dotenv
load_dotenv()
import os
import openai
# 用于总结的提示
prompt = """
用表情符号描述以下电影。
{movie}: """
examples = [
{ "input": "Titanic", "output": "🛳️🌊❤️🧊🎶🔥🚢💔👫💑" },
{ "input": "The Matrix", "output": "🕶️💊💥👾🔮🌃👨🏻💻🔁🔓💪" }
]
movie = "Toy Story"
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt.format(movie=examples[0]["input"])},
{"role": "assistant", "content": examples[0]["output"]},
{"role": "user", "content": prompt.format(movie=examples[1]["input"])},
{"role": "assistant", "content": examples[1]["output"]},
{"role": "user", "content": prompt.format(movie=movie)},
]
)
print(response['choices'][0]['message']['content'])
输出示例:
🧸🤠👦🧒🎢🌈🌟👫🚁👽🐶🚀
令人着迷的是,模型仅凭两个示例,就能识别复杂的模式,例如将电影标题与一系列表情符号关联起来。这种能力只有在模型对电影故事和表情符号的含义有深刻理解时才能实现,从而使模型能够将两者结合起来,根据自身的理解回应查询。
从语言模型到大规模语言模型
语言模型的演变经历了从预训练语言模型(LMs)到大规模语言模型(LLMs)的范式转变。语言模型,如ELMo和BERT,最初通过预训练和针对特定任务的微调捕捉上下文相关的词汇表示。然而,LLMs的引入,如GPT-3和PaLM,证明了模型规模和数据量的扩大能够解锁超越小规模模型的突现能力。通过上下文学习,这些LLMs能够处理更复杂的任务。
LLMs中的突现能力
正如我们所讨论的,当较大的模型展现出某种能力,而较小的模型则没有,这种能力被认为是突现的,这是大规模语言模型成功的关键因素。LLMs中的突现能力是指当语言模型的规模超过特定阈值时发生的经验现象。随着模型规模的增加,突现能力变得更加明显,受到训练所用计算能力和模型参数等方面的影响。
什么是突现能力
这一现象表明,模型在学习和概括时超出了其预训练的范围,以未被明确编程或预期的方式进行。这些能力在规模曲线上表现出明显的模式。最初,模型的表现几乎是随机的,但一旦达到某个规模阈值,其性能显著提升。这种现象被称为相变,代表了从较小规模系统中无法明显看出的剧烈行为变化。
扩展语言模型的规模主要集中在增加计算量、扩展模型参数和扩大训练数据集规模。有时,新的能力可以在减少训练计算量或减少模型参数的情况下出现,特别是当模型在更高质量的数据上进行训练时。此外,突现能力的出现受到数据量和质量以及模型参数数量等因素的影响。LLMs中的突现能力随着模型规模的扩大而显现,单纯通过延伸小规模模型中观察到的趋势无法预测。
评估突现能力的基准
用于评估语言模型突现能力的几个基准包括BIG-Bench、TruthfulQA、大规模多任务语言理解(MMLU)基准和上下文中的词(WiC)基准。主要基准包括:
- BIG-Bench:这个套件包含200多个基准,测试各种任务,如算术运算(例如:“Q: 132加762等于多少?A: 894”)、国际音标(IPA)转写和单词解密。这些任务评估模型执行计算、处理和使用稀有词汇及处理字母表的能力。(例如:“英语:1931年马来西亚普查是一种警报。IPA:ðə 1931 ˈmeɪleɪ ˈsɛnsəs wɑz ən əˈlɑrm bɛl。”)像GPT-3和LaMDA这样的模型在这些任务上的表现通常开始时接近于零,但在达到某个规模后显著提高,表明突现能力的出现。有关这些基准的更多细节可以在Github库中找到。
- TruthfulQA:这个基准评估模型提供真实回答的能力。它包括两个任务:生成任务,其中模型用一到两句话回答问题,以及多项选择任务,其中模型从四个选项或真/假陈述中选择正确答案。随着Gopher模型规模的扩大,其表现显著提高,超过随机结果20%以上,标志着这一能力的出现。
- Massive Multi-task Language Understanding (MMLU) :评估模型在57个不同任务上的世界知识和解决问题能力,包括基础数学、美国历史和计算机科学。虽然某些规模的GPT、Gopher和Chinchilla模型在所有主题上的平均表现未能超越随机猜测,但更大规模的模型表现出改进的性能,提示这一能力的出现。
- Word in Context (WiC) :该基准关注语义理解,涉及上下文敏感的词嵌入的二元分类任务。它需要确定目标词(动词或名词)在两个上下文中是否具有相同的意义。像Chinchilla这样的模型在大规模下初始时未能超越随机性能。然而,当像PaLM这样的模型扩展到更大规模时,超越随机性能的能力出现,表明这一能力在更大规模下的突现。
导致突现能力的因素
- 多步骤推理:涉及指导模型执行一系列中间步骤,然后提供最终结果。这种方法被称为链式推理(chain-of-thought prompting),只有在应用于足够大规模的模型时才能比标准提示更有效。
- 任务微调:另一种策略是在各种任务上对模型进行微调,这些任务以指令跟随(Instruction Following)形式呈现。这种方法仅在模型达到一定规模时表现出改进的性能,强调了规模在实现高级能力中的重要性。
突现能力的风险
随着语言模型规模的扩大,突现风险也成为关注点。这些包括与准确性、偏见和有害内容相关的社会挑战。采用鼓励模型“有帮助、无害和诚实”的策略可以缓解这些风险。
例如,WinoGender基准评估职业上下文中的性别偏见,显示虽然扩大规模可以提升模型性能,但也可能在模糊情况下放大偏见。较大的模型倾向于更多地记忆训练数据,但去重等方法可以减少这一风险。
其他风险包括未来语言模型可能存在的潜在漏洞或有害内容合成,这些在当前模型中可能更为普遍或未被充分表征。
转向通用模型
新能力的出现改变了NLP社区对这些模型的看法和利用方式。尽管NLP传统上关注任务特定的模型,但模型规模的扩大促使了对“通用”模型的研究,这些模型能够处理训练中未明确包括的各种任务。
这种转变在扩展的少样本提示通用模型超越任务特定模型的实例中显而易见。例如,GPT-3在TriviaQA和PiQA中的表现设立了新基准,PaLM在算术推理中表现出色,多模态Flamingo模型在视觉问答中取得了顶级表现。此外,通用模型能够用最少的示例执行任务,扩展了其应用范围,包括将自然语言指令转换为机器人执行、用户交互和多模态推理等领域。
扩展上下文窗口
上下文长度的重要性
语言模型中的上下文窗口表示模型可以同时处理的输入令牌数量。在如GPT-4这样的模型中,目前的上下文窗口大约为32K令牌,相当于大约50页的文本。然而,最近的进展将这一数字扩展到了令人印象深刻的100K令牌或约156页,这在Anthropic的Claude模型中得到了体现。
上下文长度主要使模型能够同时处理和理解更大的数据集,提供对上下文的更深入理解。当将大量特定数据输入语言模型并提出与这些数据相关的问题时,这一特性特别有用。例如,在分析关于特定公司或问题的长篇文档时,更大的上下文窗口允许语言模型回顾和记住更多的独特信息,从而生成更准确、更量身定制的回答。
原始Transformer架构的局限性
尽管原始的Transformer架构具有优势,但在处理广泛的上下文长度时仍面临挑战。具体而言,Transformer中的注意力层操作相对于输入令牌数量(用 )表示,具有二次时间和空间复杂度。随着上下文长度的扩展,训练和推理所需的计算资源显著增加。
为了更好地理解这一点,让我们审视Transformer架构的计算复杂度。Transformer模型中注意力层的复杂度是 ,其中是上下文长度(输入令牌的数量),是嵌入大小。
这种复杂度源于注意力层中的两个主要操作:线性投影以创建查询(Query)、键(Key)和值(Value)矩阵(复杂度 ~ )和这些矩阵的乘法(复杂度 ~ )。随着上下文长度或嵌入大小的增加,计算复杂度也呈二次增长,这对处理更大的上下文长度构成挑战。
扩展上下文窗口的优化技术
尽管原始Transformer架构存在计算挑战,但研究人员已开发出一系列优化技术,以提高Transformer的效率并将其上下文长度容量扩展到100K令牌:
- ALiBi位置编码:原始Transformer使用位置正弦编码(Positional Sinusoidal Encoding),在推断更大上下文长度时表现不佳。而ALiBi(具有线性偏置的注意力,Attention with Linear Biases)是一种更具可扩展性的解决方案。这种位置编码技术允许模型在较小的上下文中进行训练,然后在更大的上下文中进行微调,使其更适应不同的上下文大小。
- 稀疏注意力:稀疏注意力通过将注意力分数集中在令牌的子集上,解决了计算挑战。此方法显著减少了计算复杂度,相对于令牌数量n呈线性缩放,从而大幅降低了整体计算需求。
- FlashAttention:FlashAttention重构了注意力层计算,以提高GPU效率。它将输入矩阵划分为块,然后参考这些块处理注意力输出,优化了GPU内存利用率并提高了处理效率。
- 多查询注意力(MQA) :MQA通过在对键和值矩阵进行线性投影时聚合所有注意力头的权重,减少了键/值解码器缓存中的内存消耗。这种整合方式提高了内存利用效率。
FlashAttention-2
FlashAttention-2作为原始FlashAttention的进步,专注于优化Transformer模型中注意力层的速度和内存效率。这一升级版从头开始重新开发,利用了Nvidia的新原语。与其前身相比,其性能约提高了2倍,在A100 GPUs上实现了高达230 TFLOPs的计算能力。
FlashAttention-2在多个方面改进了原始FlashAttention:
- 更改算法以花费更多时间在matmul FLOPs上,减少了16倍更昂贵的非matmul FLOPs数量。
- 优化批量大小、头数和序列长度维度的并行性,特别是在处理长序列时加速显著。
- 增强每个线程块内的任务分区,减少了warp之间的同步和通信,从而减少了共享内存的读写。
- 添加了对高达256维的注意力头维度和多查询注意力(MQA)的支持,进一步扩展了上下文窗口。
通过这些增强,FlashAttention-2成功地推进了上下文窗口的扩展(同时仍保留了原始Transformer架构的基本限制)。
LongNet:迈向十亿令牌的上下文窗口
LongNet代表了Transformer优化领域的重大进展,如论文《LONGNET: Scaling Transformers to 1,000,000,000 Tokens》中所述。这一创新方法旨在将语言模型的上下文窗口扩展到前所未有的10亿令牌,大幅提升了处理和分析大规模数据的能力。
LongNet的主要进展是实现了“扩张注意力”(dilated attention)。这一创新的注意力机制允许随着令牌之间的间隔增大,注意力领域呈指数级增长,而随着令牌之间的距离增大,注意力计算反向减少(因为每个令牌将关注较少的令牌)。这种设计方法平衡了有限的注意力资源和对序列中每个令牌的访问需求。
LongNet的扩张注意力机制具有线性计算复杂度,相比于普通Transformer的二次复杂度有了显著改进。
一些流行的LLM时间线
以下是过去五年中一些最受欢迎的LLM的时间线:
- [2018]GPT-1:由OpenAI推出的GPT-1奠定了GPT系列的基础,采用生成型、解码器仅模型架构。它开创了无监督预训练与有监督微调结合用于自然语言文本预测的结合。
- [2019]GPT-2:在GPT-1架构的基础上,GPT-2将模型规模扩展到15亿参数,展示了模型在使用统一格式处理输入、输出和任务信息方面的多功能性。
- [2020]GPT-3:2020年发布的GPT-3在1750亿参数下标志着一个显著跃进,引入了上下文学习(ICL)。该模型在各种NLP任务中表现出色,包括推理和领域适应,突显了扩大模型规模的潜力。
- [2021]Codex:OpenAI于2021年7月推出的Codex是GPT-3的变体,经过GitHub代码语料库的微调,展示了先进的编程和数学问题解决能力,体现了专门训练的潜力。
- [2021]LaMDA:DeepMind的研究人员推出了LaMDA(对话应用的语言模型),专注于对话应用,拥有1370亿参数。其目标是增强对话生成和对话AI的能力。
- [2021]Gopher:2021年,DeepMind的Gopher拥有2800亿参数,在MMLU基准上接近人类水平表现,但面临偏见和虚假信息等挑战。
- [2022]InstructGPT:2022年,InstructGPT作为GPT-3的增强版,利用来自人类反馈的强化学习来改进指令跟随和内容安全,更好地符合人类偏好。
- [2022]Chinchilla:DeepMind于2022年推出的Chinchilla拥有700亿参数,根据规模规律优化了计算资源使用,在基准测试中取得了显著的准确性提升。
- [2022]PaLM:谷歌研究于2022年推出的Pathways语言模型(PaLM),拥有惊人的5400亿参数,展示了卓越的少样本性能,得益于谷歌的Pathways系统进行分布式计算。
- [2022]ChatGPT:2022年11月,OpenAI的ChatGPT基于GPT-3.5和GPT-4,针对对话AI进行了定制,并展示了人类般的沟通和推理能力。
- [2023]LLaMA:Meta AI于2023年2月开发的LLaMA(大型语言模型Meta AI)推出了一系列从70亿到650亿参数的大型语言模型。LLaMA的发布打破了有限访问的传统,将模型权重以非商业许可的方式提供给科学界。随后的创新,如LLaMA 2及其他对话格式,进一步强调了访问性,这次是以商业许可的方式提供。
- [2023]GPT-4:2023年3月,GPT-4扩展了其能力到多模态输入,在各种任务中超越了其前身,代表了LLM发展的另一个重大步骤。
- [2024]Gemini 1.5:谷歌的Gemini 1.5相较于前一版本具有显著升级,采用了新的专家混合架构和多模态模型能力,Gemini 1.5 Pro支持高级长上下文理解和高达100万令牌的上下文窗口。该模型的上下文窗口尺寸比目前任何其他模型都大。模型可以通过谷歌的专有API进行访问。
- [2024]Gemma:谷歌还发布了Gemma模型,有2亿和7亿参数两个版本。这些模型是在生成Gemini模型的训练阶段开发的,现在可以公开访问。用户可以以预训练和指令微调格式访问这些模型。
- [2024]Claude 3 Opus:Anthropic最新发布的Claude 3 Opus可以通过其专有API访问。它是首批在不同基准测试中达到或超过GPT-4的模型之一。Claude 3 Opus拥有200K令牌的上下文窗口,宣称在信息窗口中的位置无论如何都具备出色的回忆能力。
- [2024]Mistral:在发布详细的专家混合架构文献后,Mistral现已向公众提供8x22亿基模型。这是当前最好的开源选项,但仍未能超越像GPT-4或Claude这样的闭源模型的表现。
- [2024]无限注意力:谷歌近期的论文,可能是Gemini 1.5 Pro模型的基础,探讨了可以无限扩展模型上下文窗口大小的技术。由于论文中提到模型可以在高达1000万令牌的情况下表现优异,虽然尚未发布具有这些规格的模型,但该方法被描述为可以显著提高任何模型的少样本学习性能而不受上下文大小限制的即插即用解决方案。
如果您想更深入了解这些模型,建议阅读《大型语言模型调查》一文。
自然语言处理和大型语言模型的历史
这段历史记录了语言模型的发展,从早期的统计模型到首个大型语言模型(LLMs)的诞生。这个章节不是深入的技术研究,而是以故事的形式探索模型的构建过程。如果某些模型的具体细节显得复杂,不必担心。
语言建模的演变
自然语言处理(NLP)模型的演变是不断创新和改进的故事。1954年,词袋模型(Bag of Words,BOW)作为一种简单的计数方法出现,它通过计算文档中单词的出现频率进行建模。然后在1972年,TF-IDF模型出现,通过基于单词的稀有度或频率调整单词计数,改进了这一策略。2013年,Word2Vec的出现标志着一个重大突破。这个模型使用词嵌入捕捉了单词之间微妙的语义联系,而以前的模型则无法做到这一点。
随后,递归神经网络(RNNs)的出现进一步推动了模型的发展。RNNs能够学习序列中的模式,使它们能够有效处理各种长度的文档。
2017年,Transformer架构的推出标志着这一领域的范式变化。通过在输出生成过程中使用注意力机制,模型可以选择性地关注输入中最相关的部分。这一突破为2018年的BERT铺平了道路。BERT使用双向Transformer显著提升了各种传统NLP任务的性能。
随后的几年中,模型不断发展。每一个新模型,如RoBERTa、XLM、ALBERT和ELECTRA,都引入了额外的增强和优化,推动了NLP领域的可能性边界。
模型时间线
- [1954] 词袋模型(Bag of Words, BOW)
词袋模型是一种基本方法,用于统计手稿中单词的出现次数。尽管简单,它无法考虑单词的顺序或上下文。 - [1972] TF-IDF
TF-IDF在BOW的基础上,通过赋予稀有单词更高的权重而对常见单词给予较低权重,改进了模型对文档相关性的检测能力。然而,它没有考虑单词的上下文。 - [2013] Word2Vec
Word2Vec通过使用词嵌入,这些高维向量封装了语义关联,实现了对文本语义的重大突破。 - [2014] RNNs在编码器-解码器架构中的应用
RNNs是一项重要进展,能够计算文档嵌入并添加单词上下文。它们逐渐引入了长短期记忆(LSTM,1997年)以处理长期依赖,以及双向RNN(1997年)以增强上下文理解。编码器-解码器RNNs(2014年)改进了这一方法。 - [2017] Transformer
Transformer通过其注意力机制大幅提高了嵌入计算和输入与输出之间的对齐,彻底改变了NLP任务。 - [2018] BERT
BERT,作为双向Transformer,利用全局注意力和联合训练目标,实现了令人印象深刻的NLP结果。 - [2018] GPT
GPT是第一个自回归模型,基于Transformer架构。随后它演变为GPT-2(2019年),这是GPT的一个更大且优化版本,在WebText上进行预训练;而GPT-3(2020年)则是GPT-2的更大且优化版本,预训练于Common Crawl。 - [2019] CTRL
CTRL类似于GPT,引入了控制代码以实现条件文本生成。这一特性增强了对生成文本内容和风格的控制。 - [2019] Transformer-XL
Transformer-XL通过重用先前计算的隐藏状态,实现了更长的上下文记忆。这一增强显著改善了模型处理扩展文本序列的能力。 - [2019] ALBERT
ALBERT通过实现句子顺序预测代替下一个句子预测,并采用参数减少技术,提供了BERT的更高效版本。这些改动降低了内存使用,并加速了训练过程。 - [2019] RoBERTa
RoBERTa在BERT的基础上进行改进,采用动态掩蔽语言模型,省略了下一个句子预测,使用BPE标记器,并采用了更好的超参数,以提升性能。 - [2019] XLM
XLM是一个多语言Transformer,使用包括因果语言建模、掩蔽语言建模和翻译语言建模在内的多种目标进行预训练,以满足多语言NLP任务的需求。 - [2019] XLNet
XLNet结合了Transformer-XL的优势和广义自回归预训练方法,能够学习双向依赖,并提供比传统单向模型更好的性能。 - [2019] PEGASUS
PEGASUS具有双向编码器和左到右解码器,使用掩蔽语言建模和缺失句子生成等目标进行预训练,使其在摘要生成任务中表现出色。 - [2019] DistilBERT
DistilBERT是BERT的一个较小、更快的版本,保留了超过95%的性能。该模型使用蒸馏技术压缩了预训练的BERT模型。 - [2019] XLM-RoBERTa
XLM-RoBERTa是RoBERTa的多语言版本,在一个多语言语料库上进行训练,主要使用掩蔽语言建模目标,增强了其多语言能力。 - [2019] BART
BART具有双向编码器和左到右解码器,通过故意破坏文本然后学习重建原始文本进行训练,使其在各种生成和理解任务中具有实用性。 - [2019] ConvBERT
ConvBERT通过用包含卷积的模块替代传统的自注意力块,使模型能够更有效地处理文本中的全局和局部上下文。 - [2020] Funnel Transformer
Funnel Transformer通过逐渐压缩隐藏状态序列到更短的序列,创新性地减少了计算成本,同时保持了性能。 - [2020] Reformer
Reformer提供了一种更高效的Transformer版本。它利用局部敏感哈希用于注意力机制和轴位置编码等优化,提升了效率。 - [2020] T5
T5将NLP任务视为文本到文本的问题。它通过混合无监督和有监督任务进行训练,使其在各种应用中都具有很强的通用性。 - [2020] Longformer
Longformer将Transformer架构适应于更长的文档。它用稀疏版本替代了传统的注意力矩阵,提高了训练效率,并更好地处理了长文本。 - [2020] ProphetNet
ProphetNet使用未来N-gram预测目标进行训练,融入了独特的自注意力机制。该模型旨在改进序列到序列任务,如摘要生成和问答。 - [2020] ELECTRA
ELECTRA提出了一种新的训练方法,使用替代词检测目标。它在效率和性能方面优于BERT,适用于各种NLP任务。 - [2021] Switch Transformers
Switch Transformers引入了稀疏激活专家模型,这是对专家混合(MoE)方法的新变化。这一设计使模型能够更高效地处理更广泛的任务,标志着Transformer模型规模扩展的一个重要步骤。
回顾
自然语言处理的进步,从基本的词袋模型(Bag of Words)开始,带我们走到了今天的先进而高度复杂的基于Transformer的模型。大型语言模型(LLMs)是强大的架构,它们在大量的文本数据上进行训练,能够理解和生成几乎与人类语言相似的文字。基于Transformer设计的LLMs在捕捉语言中的长期依赖性和通过自回归过程生成文本方面表现出色。
2020年和2021年是大型语言模型(LLMs)发展的关键时刻。在此之前,语言模型的主要目标是生成连贯且上下文适宜的消息。然而,这些年的LLMs进步引发了一次范式转变。
从预训练语言模型到大型语言模型(LLMs)的历程,标志着LLMs的独特特性,例如扩展规律的影响以及如上下文学习、逐步推理技术和指令跟随等能力的出现。这些新兴能力是LLMs成功的核心,在少量示例和增强提示等场景中得到了展示。然而,扩展也带来了偏见和毒性等挑战,需要仔细考虑。
LLMs中的新兴能力将焦点转向通用模型,开辟了超越传统NLP研究的新应用领域。上下文窗口的扩展在这一转变中也发挥了关键作用。诸如FlashAttention-2等创新,通过优化注意力层的速度和内存使用,以及引入“扩张注意力”方法的LongNet,为上下文窗口可能扩展到10亿个标记铺平了道路。
在本章中,我们探讨了LLMs的基本概念、历史和演变。我们通过实际示例实验了标记化、上下文和少量示例学习等概念,并识别了LLMs中固有的问题,如幻觉和偏见,强调了缓解措施。
💡 关于评估基准和优化技术的研究论文可以在 towardsai.net/book 找到。