《从头开始构建大语言模型》01

曾伟 2024-07-13

简介:人生迷茫的时候,就来读书学习吧。今天偶然在微信公众号深度学习与NLP上看到介绍一本新书《Build a Large Language Model From Scratch》(从头开始构建大语言模型),真羡慕老美总是能及时出这么好的书,目前好像还没对应的中文书。这本英文书在MANNING卖31.19美刀,穷逼自然是不可能买的,继续搜索在SCRIBD网上找到PDF下载链接,随便在Arxiv上找了五篇论文上传下载得到,不过对比了一下目录发现不是最新版,不过还是可以凑活着读,另外发现中文互联网也有人已经开始阅读了,比如Datawhale博客1博客2。稍等,最终我发现在MANNING上可以按章阅读,😅。

目录

  1. 了解大语言模型
  2. 使用文本数据
  3. 编码注意力机制
  4. 从头开始实现GPT模型以生成文本
  5. 对未标记数据进行预训练
  6. 分类任务微调
  7. 使用人类反馈进行微调以遵循人类指令
  8. 附录A:Pytorch简介
  9. 附录B:参考文献和进一步阅读
  10. 附录C:习题参考答案
  11. 附录D:在训练循环中添加附加功能
  12. 使用LORA进行参数高效微调

1 了解大语言模型

本章涵盖:

  • 大语言模型(LLMs)背后基本概念的高层次解释
  • 对诸如ChatGPT平台上使用的LLMs中Transformer架构的见解
  • 从零开始构建LLM的一份计划

大语言模型(LLMs)是过去几年开发的深度神经网络模型,著名例子是OpenAI开发的ChatGPT。LLMs开创了一个自然语言处理(NLP)的新时代。在大型语言模型出现之前,传统方法擅长分类任务,例如垃圾邮件分类和简单的模式识别,这些任务可以通过手工设计的规则或更简单的模型来实现。然而,他们通常在需要复杂理解和生成能力的语言任务中表现不佳,例如解析并给出详细说明、进行上下文分析或创造连贯且适合上下文的原始文本。例如,先前的语言模型无法从一系列关键字中撰写电子邮件,这对于当代LLMs语言模型来说是非常容易的。

LLMs具有理解、生成和解释人类语言的非凡能力。然而,需要澄清的是,当我们说语言模型“理解”时,我们的意思是说,它们能够以看起来连贯且与上下文相关的方式处理和生成文本,而不是说它们真的拥有类似人类的意识或理解。

得益于深度学习(机器学习的子集,一种专注神经网络的AI技术)的进步,LLMs可以通过大量文本数据进行训练。与以前的方法相比,这使得LLMs能够捕获更深层次的上下文信息和人类语言的微妙之处。因此,LLMs显着提高了各种 NLP 任务的性能,包括文本翻译、情感分析、智能问答等等。

当代LLMs和早期 NLP 模型之间的另一个重要区别是,这些早期的 NLP 模型通常是为特定任务而设计的,例如文本分类、语言翻译等。尽管那些早期的 NLP 模型在狭窄的特定应用中表现出色,但LLMs在广泛的 NLP 任务中表现出泛化的熟练程度。

LLMs背后的成功可以归因于支撑许多LLMs应用的Transformer架构,以及用于LLMs训练的大量数据,这使得LLMs可以捕获通过手工规则难以量化的各种语言之间细微差别、上下文关联度及语言范式。

这种使用Transformer架构和大量训练数据集训练得到的LLMs,从根本上颠覆了NLP,为机器理解人类语言和与人类用语言交互提供了更强大的工具。

从本章开始,我们为实现本书最初的目标奠定基础,我们的目标是:通过一步一步编码,实现一个基于Transformer的类ChatGPT的LLM来深入理解LLMs。

1.1 什么是LLM?

LLM指大语言模型,是一种被设计用来理解、生成和回应类人文本的神经网络模型。这些模型是在大量文本数据上训练的深度神经网络,有时包含互联网上整个公开文本的大部分内容。

大型语言模型中的“大”既指模型的参数大小,也指训练模型所依据的庞大数据集。像这样的模型通常有数百亿甚至数千亿个参数,这些参数是网络中可调整的权重,在训练期间进行优化,以预测文本序列中的下一个单词。下一个单词预测是可行的,因为它利用语言固有的顺序性质来训练模型来理解文本中的上下文、结构和关系。这并不是一项非常简单的任务,因此许多研究人员对它能够产生如此强大的模型感到惊讶。们将在后面的章节中逐步讨论和实现下一个单词预测的训练程序。

LLMs利用一种称为 Transformer 的架构(在第 1.4 节中有更详细的介绍),这使他们能够在进行预测时有选择地关注输入的不同部分,使他们特别擅长处理人类语言的细微差别和复杂性。

由于LLMs能够生成文本,LLMs因此通常也被称为生成式人工智能(AI)的一种形式,通常缩写为生成式AI或GenAI。如图 1.1 所示,人工智能涵盖了创建机器的更广泛领域,这些机器可以执行类似人类智能的任务,包括理解语言、识别模式和做出决策,并包括机器学习和深度学习等子领域。

图 1.1 图1.1 正如对不同领域之间关系的分层描述所表示的那样,LLMs代表了深度学习技术的特定应用,利用它们所具备的处理和生成类似人类的文本的能力。深度学习是机器学习的一个专门分支,专注于使用多层神经网络。机器学习和深度学习是旨在实现使计算机能够从数据中学习并执行通常需要人类智能的任务的算法领域。

用于实现人工智能的算法是机器学习领域的重点。具体来说,机器学习涉及算法的开发,这些算法可以从数据中学习并根据数据做出预测或决策,而无需明确编程。为了说明这一点,将垃圾邮件过滤器想象成机器学习的实际应用。机器学习算法不是手动编写规则来识别垃圾邮件,而是提供标记为垃圾邮件和合法邮件的电子邮件样本,通过最小化在训练数据集的预测误差,该模型可以学习到垃圾邮件的模式和特征,使其能够将新电子邮件分类为垃圾邮件或合法邮件。

如图1.1所示,深度学习是机器学习的一个子集,专注于利用具有三层或更多层的神经网络(也称为深度神经网络)来对数据中的复杂模式和抽象进行建模。与深度学习相比,传统的机器学习需要手动提取特征,这意味着人类专家需要识别和选择与模型最相关的特征。

虽然人工智能领域现在以机器学习和深度学习为主,但它也包括其他方法,例如,使用基于规则的系统、遗传算法、专家系统、模糊逻辑或符号推理。

回到垃圾邮件分类示例,在传统的机器学习中,人类专家可能会手动从电子邮件文本中提取特征,例如某些触发词(“prize”、“win”、“free”)的频率、感叹号的数量、所有大写单词的使用或是否存在可疑链接。然后,基于这些专家定义的特征创建的数据集将用于训练模型。与传统的机器学习相比,深度学习不需要手动提取特征,这意味着人类专家不需要识别和选择与深度学习模型最相关的特征。(但是,不论在传统的机器学习还是在深度学习的垃圾邮件分类中,您仍然需要收集标签,例如垃圾邮件或非垃圾邮件,这些标签需要由专家或用户收集。)

在接下来的章节中,将介绍有哪些问题是LLMs今天可以解决的,有哪些挑战是LLMs需要处理的,以及本书将要实现的通用LLM架构。

1.2 LLMs的应用

由于它们具有解析和理解非结构化文本数据的高级功能,LLMs因此在各个领域都有广泛的应用。今天,LLMs它被用于机器翻译、小说文本的生成(见图 1.2)、情感分析、文本摘要和许多其他任务。LLMs最近被用于内容创作,例如写小说、文章,甚至计算机代码。

图 1.2 图1.2 LLM接口支持用户和AI系统之间使用自然语言交流。这张截图显示了ChatGPT根据用户的要求写一首诗。

LLMs还可以是功能强大的聊天机器人或者虚拟助手,例如OpenAI的ChatGPT或谷歌的Gemini(以前称为Bard),它们可以回答用户的询问并增强诸如Google和Microsoft Bing的传统搜索引擎。

此外,LLMs可用于从医学或法律等专业领域的大量文本中有效地进行知识检索。这包括筛选文档、总结冗长的段落和回答专业问题。

简而言之,LLMs在几乎所有设计自动解析或生成文本的任务上都是无可匹敌的。它们的应用场景几乎是无穷无尽的,随着我们不断创新和探索使用这些模型的新方法,它们有可能重塑我们我们与科技的关系,使的科技更容易对话互动、更加直观和更易于获取。

在本书中,我们将重点从头开始了解LLMs如何工作,并编写可以生成文本的LLM代码。除此之外,我们还将学习使用LLMs进行查询、从回答问题到总结文本、将文本翻译成不同的语言等技术。总之,这本书将通过一步一步构建来了解诸如ChatGPT这样的复杂LLM助手是如何工作的。

1.3 LLMs的构建和使用

我们为什么要构建自己的LLMs?从头开始编写LLM代码是了解其机制和局限性的绝佳手段。此外,它还为我们提供了所需的必要知识,以便根据我们自己的特定领域数据集或任务对现有的开源LLM架构进行预训练或微调。

研究表面,专为各种应用程序而设计的定制LLMs在模型性能方面可以胜过类似ChatGPT的通用LLMs。这方面的例子包括专门用于金融的 BloombergGPT,以及专为医疗问答构建的LLM(有关详细信息,请参阅附录B中的“参考文献和进一步阅读”部分)。

使用定制LLMs产品具有多种优势,尤其是在数据隐私方面。例如,出于保密考虑,公司可能不愿与 OpenAI 等第三方LLM提供商共享敏感数据。此外,开发定制LLMs可以直接部署在用户设备上,例如笔记本电脑和智能手机,这是苹果等公司目前正在探索的事情。这种本地部署可以显著降低延迟并降低与服务器相关的成本。进一步地,定制的LLMs可授权开发人员完全自主权,允许他们根据需要完全控制对模型的更新和修改。

创建的LLM一般过程包括预训练和微调。“预训练pretraining”中的术语“pre”是指在大量的、多样化的数据集上训练像LLM这样的模型以达到能对语言泛化理解的初级阶段。然后,这个预训练的模型将作为一个基础,可以通过微调进一步完善,在这个微调的过程中,模型在更窄的专用于特定任务或领域的专用数据集上进行专门训练。这种由预训练和微调组成的两阶段训练方法如图 1.3 所示。

图 1.3 图1.3 预训练一个LLM模型涉及在大量文本数据集上进行下一个单词的预测。一个预训练好的LLM模型可以在一个更小的有标签的数据集上进行微调。

如图 1.3 所示,创建一个LLM的第一步是在大型文本数据语料库(有时称为原始文本,raw text)上对其进行训练。在这里,“raw”是指这些数据只是没有任何标签信息的常规文本[1]。(可以进行一定的过滤,例如删除未知语言的格式字符或文档。)

LLM的第一个训练阶段也称之为预训练,用于创建初始的预训练模型,通常被称为基模型(base model)或者基础模型(foundation model)。一个典型例子是 GPT-3 模型(ChatGPT的前身)。该模型能够完成文本,即完成用户提供的写了一半的句子。它还具有有限的上样本学习的能力,这意味着它可以仅根据几个示例学习执行新任务,而不需要大量的训练数据。这将在下一节“Transformer架构简介”中进一步说明。

在使用大量文本数据集完成训练得到预训练好的LLM模型之后(LLM被训练用来预测文本中的下一个词),我们可以使用有标签的数据集进一步训练LLM,这种做法称为微调(finetuning)。

两个最流行的微调LLM的方法分别为:指令微调(instruction-finetuning)和分类任务的微调(finetuning for classification tasks)。在指令微调中,有标签的数据集由指令和回答对组成,例如用于翻译文本的原本以及正确翻译的文本这样的回答对。在分类微调中,有标签的数据集由文本和相关联的类别标签组成,例如,带有垃圾邮件和非垃圾邮件标签的电子邮件文本。

在本书中,我们将介绍预训练和微调的LLM代码实现,并且在预训练完基础LLM之后,我们将在本书后面更深入地研究指令微调和分类微调的细节。

1.4 Transformer架构介绍

大多数现代LLMs人都依赖于Transformer架构,这是2017年论文《Attention Is All You Need》中介绍的深度神经网络架构。为了理解LLMs,我们必须简要回顾一下最初的Transformer,它最初是为机器翻译而开发的,将英语文本翻译成德语和法语。Transformer架构的简化版本如图 1.4 所示。

图 1.4 图 1.4 最初的Transformer架构的简化图,一种用于语言翻译的深度学习模型。Transformer由两部分组成,一个编码器处理输入文本并生成文本的嵌入表示(一种在不同维度上捕获许多不同特征的数字化表示),解码器可以使用该表示来一次生成一个单词的翻译文本。注意看,此图展示了翻译过程的最后阶段,给定原始输入文本(“This is an example”)和部分翻译的句子(“Das ist ein”),解码器只需生成最后一个单词(“Beispiel”)即可完成翻译。

图 1.4 中描述的Transformer架构由两个子模块组成,一个编码器和一个解码器。编码器模块处理输入文本,并将其编码为一系列数字化表示或向量,以捕获输入的上下文信息。然后,解码器模块获取这些编码的向量并从中生成输出文本。例如,在翻译任务中,编码器将源语言中的文本编码为向量,解码器将对这些向量进行解码以生成目标语言的文本。编码器和解码器都由许多层组成,这些层通过所谓的自注意力机制(self-attention)连接起来。对于如何预处理和编码输入文本,你可能有很多疑问,这些将在后续章节中逐步实现。

Transformer及LLMs中的一个关键组件是自注意力机制(在图中未展示),它允许模型权衡序列中不同单词或tokens之间相对于彼此的重要性。这种机制使模型能够捕获输入数据中的长依赖关系和上下文关系,从而增强其生成连贯且上下文相关文本输出的能力。然而,由于其复杂性,我们将推迟到第3章才进行解释,在那里我们将逐步讨论并实现它。此外,我们还将在第2章“使用文本数据”中讨论和实现数据预处理步骤,以创建模型输入。

Transformer的后期变体,例如BERT(bidirectional encoder representations from transformers)和GPT(generative pretrained transformers)都基于上述介绍的概念构建的,以使Transformer这个架构能够适应不同的任务。(参考文献见附录B。)

BERT 建立在原始 Transformer 的编码器子模块之上,其训练方法与 GPT 不同。GPT是为生成任务而设计的,而BERT及其变体专门用于掩码词(指中间被盖住的词)预测,其中模型预测给定句子中的掩码词或隐藏词,如图 1.5 所示。这种独特的训练策略使 BERT 在文本分类任务(包括情感预测和文档分类)方面具有优势。在撰写本文时,Twitter使用BERT来检测有毒内容,是BERT应用的一个重要例子。

图 1.5 图 1.5 Transformer编码器和解码器子模块的可视化表示。在左侧是编码器,用于类似BERT的LLMs,它专注于掩码词预测,主要用于文本分类等任务。在右侧是解码器,用于类似GPT的LLMs,专为生成任务和生成连贯的文本序列而设计。

另一方面,GPT 专注于原始 Transformer 架构的解码器部分,专为需要生成文本的任务而设计,这包括机器翻译、文本摘要、小说写作、编写计算机代码等。我们将在本章的其余部分更详细地讨论 GPT 架构,并在本书中从头开始实现它。

GPT模型主要被设计和训练用来执行文本生成任务,其能力显示出显著的多功能性。这些模型擅长执行零样本和少样本学习任务。零样本学习是指在没有任何事先具体示例的情况下推广到完全没见过的任务的能力,另一方面,小样本学习指从用户提供的最小数量的示例作为输入进行学习的能力,如图 1.6 所示。

图 1.6 图 1.6 除了文本补全之外,类GPT的LLMs还可以根据各种不同任务的输入解决各种任务,而无需重新训练、微调或特定于任务的模型架构更改。有时,在输入中提供目标示例会很有帮助,这称为少样本设置(few-shot setting)。另外,类GPT 的LLMs也能够在没有特定示例的情况下执行任务,这称为零样本设置(zero-shot setting)。

Transformers与LLMs

今天的LLMs基于上一节中介绍的Transformer架构。因此,Transformers和LLMs是文献中经常使用的同义词。但是,请注意,并非所有Transformers都是这样LLMs,因为Transformers也可用于计算机视觉。此外,并非所有LLMs都是Transformers,因为有基于递归(RNN)和卷积(CNN)架构的大型语言模型,这些替代方法背后的主要动机是提高LLMs的计算效率。然而,这些替代的LLM架构是否能够与基于Transformer的LLMs的同台竞技,以及它们是否会在实践中被采用还有待观察。为简单起见,本书使用术语“LLM”来指代类似于 GPT 的基于transformer的LLMs。(有兴趣的读者可以在本章末尾的“参考文献和进一步阅读”部分找到描述这些架构的文献参考。)

1.5 使用大型数据集

目前流行的类GPT和类BERT模型所用到的的大型训练数据集,包含数十亿个单词的多样化和全面的文本语料库,其中涵盖大量主题的自然语言和计算机语言。为了提供一个具体的例子,表 1.1 总结了用于预训练 GPT-3 的数据集,该数据集是 ChatGPT 第一版的基础模型所用到的数据集。

表 1.1 目前受欢迎的GPT-3 LLM用到的预训练数据集
数据集名称 数据集说明 tokens数量 在训练数据集中的占比
CommonCrawl (filtered) 网页爬虫数据 4100亿 60%
WebText2 网页爬虫数据 190亿 22%
Books1 基于互联网的图书语料库 120亿 8%
Books2 基于互联网的图书语料库 550亿 8%
Wikipedia 高质量的文本 30亿 3%

表 1.1 报告了tokens的数量,其中token是模型读取的基本文本单位,数据集中的token数量大致等于文本中的单词数和标点符号数。我们将在下一章中更详细地介绍tokenization,即将文本转换为tokens的过程。

主要结论是,这个训练数据集的规模和多样性使这些模型能够在各种任务上表现良好,包括语言语法、语义和上下文,甚至一些需要通用知识的任务。

GPT-3 数据集详细信息

表 1.1 显示了用于 GPT-3 的数据集。表中的占比这一列对抽样数据的总和达 100%,并针对舍入误差进行了调整。尽管“tokens数量”这一列中的子集总数为 5090亿个,但该模型仅在 3000 亿个代币上进行了训练。GPT-3 论文的作者没有具体说明为什么该模型没有在所有 5090 亿个代币上进行训练。

对于文本内容,以CommonCrawl数据集为例,仅该数据集就包含4100亿个tokens,需要大约 570 GB 的存储空间。但相比之下,类GPT-3的后期迭代模型,例如Meta的LLaMA,已经扩大了它们的训练数据范围,包括额外的数据源,如 Arxiv 研究论文(92 GB) 和 StackExchange 的代码相关问答文本(78 GB)。

GPT-3 论文的作者没有分享训练数据集,但公开可用的可对比数据集是 Dolma: an Open Corpus of Three Trillion Tokens for LLM Pretraining Research,作者是Soldaini等人,2024年发表。但是,该集合可能包含受版权保护,确切的使用条款可能取决于预期的用法和国家/地区。

这些模型的预训练的本质是使它们具有令人难以置信的通用性,可用于进一步微调下游任务,这就是为什么它们也被称为基模型或基础模型的原因。预训练LLMs需要获得大量资源,而且非常昂贵。例如,GPT-3 预训练的成本估计为 460 万美元(按云计算计费积分计算)[2]。

好消息是,许多预训练LLMs的开源模型可以用作通用工具,用于编写、提取和编辑不属于训练数据的文本。此外,LLMs还可以在数据集相对较小的特定任务上进行微调,从而减少所需的计算资源并提高特定任务的性能。

在本书中,我们将实现用于预训练的代码,并使用它来预训练用于教育目的LLM。所有计算都可以在消费类硬件上执行。在实现预训练代码之后,我们将学习如何重用公开可用的模型权重,并将它们加载到我们将要实现的架构中,这样我们就可以在本书后面进行LLMs微调时跳过昂贵的预训练阶段。

1.6 深入理解GPT架构

在本章的前面,我们提到了类 GPT 模型、GPT-3 和 ChatGPT。现在让我们仔细看看通用的 GPT 架构。首先,GPT 表示 Generative Pretrained Transformer,最初是在以下论文中介绍的:

  • Improving Language Understanding by Generative Pre-Training (2018) by Radford et al. from OpenAI, http://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf

GPT-3 是该模型的放大版本,具有更多参数并在更大的数据集上进行训练。ChatGPT 提供的原始模型是通过使用 OpenAI 的 InstructGPT 论文中的方法在大型指令数据集上微调 GPT-3 而创建的,我们将在第 7 章“使用人类反馈进行微调以遵循人类指令”中更详细地介绍。正如我们在前面的图 1.6 中看到的,这些模型是能够胜任的已训练完成的模型,可以执行其他任务,例如拼写更正、分类或语言翻译。考虑到 GPT 模型是在相对简单的预测下一个单词这一任务上预训练的,这实际上是非常神奇的,如图 1.7 所示。

图 1.7 图 1.7 在 GPT 模型的预测下一个单词预训练任务中,系统通过查看前面的单词来学习预测句子中即将到来的单词。这种方法有助于模型理解单词和短语在语言中通常如何组合在一起,从而形成可应用于各种其他任务的基础。

下一个单词预测任务是自我监督学习的一种形式,是一种自我标记的形式。这意味着我们不需要显式收集训练数据的标签,而是可以利用数据本身的结构:我们可以使用句子或文档中的下一个单词作为模型应该预测的标签。由于这个下一个单词预测任务允许我们“动态”创建标签,因此可以利用大量未标记的文本数据集进行LLMs训练,如前面在第 1.5 节 “使用大型数据集”中所述。

与我们在第 1.4 节中介绍的原始 Transformer 架构相比,通用的 GPT 架构相对简单。本质上讲,它只是没有编码器的解码器部分,如图 1.8 所示。由于像 GPT 这样的解码器模型通过一次预测一个单词文本的方式来生成文本,因此它们被认为是一种自回归模型。自回归模型将其先前的输出合并为未来预测的输入。因此,在 GPT 中,每个新单词都是根据其前面的顺序来选择的,这提高了生成文本的连贯性。

GPT-3 等架构也比原来的 Transformer 模型大得多。例如,原始Transformer将编码器和解码器块重复六次。GPT-3 有 96 个Transformer层,总共有 1750 亿个参数。

图 1.8 图 1.8 GPT 架构仅使用原始Transformer的解码器部分。它专为单向、从左到右的文本处理而设计,非常适合文本生成和下一个单词预测任务,以迭代方式一次生成一个单词文本。

GPT-3 于 2020 年推出,按照深度学习和大型语言模型 (LLM) 开发的标准,它被认为是很久以前的事了。然而,最近的架构,如 Meta 的 Llama 模型,仍然基于相同的基本概念,仅仅只引入了微小的修改。因此,理解 GPT 仍然一如既往地重要,本书重点介绍实现 GPT 背后的突出架构,同时提供采用特定方式调整的替代LLMs方案。

最后,有趣的是,尽管由编码器和解码器块组成的原始 Transformer 模型是专门为语言翻译而设计的,但 GPT 模型——旨在预测下一个单词的更大但更简单的仅解码器架构的模型——也能够执行翻译任务。这种能力最初是研究人员出乎意料的,因为它来自一个主要针对下一个单词预测任务进行训练的模型,这是一项不专门针对翻译任务而训练的模型。

执行模型未明确训练而具备执行该任务的能力称为“emergent behavior”。这种能力在训练期间没有被明确训练,而是模型暴露在大量多语言数据的不同上下文中所产生的自然结果。GPT 模型可以“学习”语言之间的翻译模式并执行翻译任务,即使它们没有经过专门训练,这一事实证明了这些大规模生成式语言模型的优势和能力。我们可以执行不同的任务,而无需对每个任务使用不同的模型。

1.7 构建大语言模型

在本章中,我们为理解LLMs奠定基础。在本书的其余部分,我们将从头开始编写一个LLM代码。我们将以 GPT 背后的基本思想为蓝图,分三个阶段解决这个问题,如图 1.9 所示。

图 1.9 图 1.9 本书中涵盖的构建LLMs包括三个阶段:实现LLM架构和数据准备、预训练LLM以创建基础模型,以及微调基础模型以成为个人助理或文本分类器。

首先,我们将了解基本的数据预处理步骤,并编写每个 LLM的核心——注意力机制。

接下来,在第 2 阶段,我们将学习如何编码和预训练能够生成新文本的类似GPT 的 LLM 模型。我们还将介绍评估LLMs的基础知识,这对于开发可用的 NLP 系统至关重要。

请注意,从头开始预训练LLM是一项艰巨的任务,需要数千到数百万美元的计算成本来构建类似 GPT 的模型。因此,第 2 阶段的重点是使用小型数据集实施用于教育目的的模型训练。此外,本书还将提供用于加载公开可用的模型权重的示例代码。

最后,在第 3 阶段,我们将对预训练好的LLM进行微调,以实现诸如回答问题或对文本进行分类之类的任务——这是许多现实世界应用和研究中最常见的任务。

希望您期待踏上这段激动人心的旅程!

1.8 小结

  • LLMs改变了自然语言处理领域,该领域以前主要依赖于基于规则的显式系统和更简单的统计方法。LLMs引入了新的深度学习驱动方法,产生了在理解、生成和翻译人类语言方面的进步。
  • 训练现代LLMs分为两个主要步骤:
    • 首先,通过使用句子中下一个单词的预测值作为“标签”,对大量未标记的文本进行预训练。
    • 然后,在较小的有标签目标数据集上对它们进行微调,以实现对话或执行分类任务。
  • LLMs基于Transformer架构。Transformer 架构的关键思想是一种注意力机制,当一次生成一个字的输出时,LLM可以选择性地访问整个输入序列。
  • 最初的Transformer架构由一个用于解析文本的编码器和一个用于生成文本的解码器组成。
  • LLMs用于生成文本和执行指令,例如 GPT-3 和 ChatGPT,仅使用解码器模块,简化架构。
  • 由数十亿个单词组成的大型数据集对于预训练LLMs至关重要。在本书中,我们将出于教育目的在小型数据集上实现和训练LLMs,但也将了解如何加载公开可用的模型权重。
  • 虽然类 GPT 模型的一般预训练任务是预测句子中的下一个单词,但这些LLMs模型表现出“emergent”属性,例如也具备对文本进行分类、翻译或总结的能力。
  • 一旦LLM完成了预训练,就可以更有效地针对各种下游任务对生成的基础模型进行微调。
  • LLMs在自定义数据集上进行微调可以在特定任务上优于常规LLMs数据集。

[1] 具有机器学习背景的读者可能会注意到,传统的机器学习模型和通过传统监督学习范式训练的深度神经网络通常需要标签信息。但是,对于 的LLMs预训练阶段,情况并非如此。在此阶段,LLMs利用自监督学习,其中模型从输入数据生成的文本作为自己的标签。本章稍后将介绍此概念。

[2] GPT-3, The $4,600,000 Language Model, https://www.reddit.com/r/MachineLearning/comments/h0jwoz/d_gpt3_the_4600000_language_model/