本章内容包括:
- 对大型语言模型(LLM)背后基本概念的高层次解释
- 对LLM所基于的Transformer架构的深入见解
- 从零开始构建LLM的计划
大型语言模型(LLM),例如OpenAI的ChatGPT,属于近年来开发的深度神经网络模型,开启了自然语言处理(NLP)的新时代。在LLM出现之前,传统方法在诸如电子邮件垃圾分类和简单模式识别等分类任务上表现出色,这些任务通常可以通过手工设计的规则或简单模型捕捉到。然而,它们在需要复杂理解和生成能力的语言任务上往往表现不佳,如解析详细指令、进行上下文分析以及创建连贯且符合上下文的原创文本。例如,早期的语言模型无法从关键词列表中撰写电子邮件,而这是当代LLM的一个简单任务。
LLM具备出色的理解、生成和解释人类语言的能力。然而,值得澄清的是,当我们说语言模型“理解”时,我们的意思是它们能够以连贯且符合上下文的方式处理和生成文本,而并非它们具有人类般的意识或理解力。
在深度学习的推动下,LLM得以实现。深度学习是机器学习和人工智能(AI)的一个子领域,专注于神经网络。LLM通过大规模的文本数据进行训练,这种大规模的训练使LLM能够捕捉到比以往方法更深层次的上下文信息和语言微妙之处。因此,LLM在广泛的NLP任务中表现出了显著的性能提升,包括文本翻译、情感分析、问答等。
现代LLM与早期NLP模型的另一个重要区别在于,早期的NLP模型通常是为特定任务设计的,如文本分类、语言翻译等。虽然那些早期的NLP模型在其狭窄的应用范围内表现出色,LLM则展示了其在广泛的NLP任务中的广泛能力。
LLM成功的原因可归功于其背后的Transformer架构以及LLM训练所使用的大量数据,这使得它们能够捕捉到丰富的语言细微差别、上下文和模式,而这些是手工编码难以实现的。
向基于Transformer架构的模型转变,并使用大规模训练数据训练LLM,已经从根本上改变了NLP,提供了更强大的工具来理解和处理人类语言。
以下讨论将奠定基础,实现本书的主要目标:通过代码逐步实现一个基于Transformer架构的类似ChatGPT的LLM,从而理解LLM。
什么是大型语言模型(LLM)?
大型语言模型(LLM)是一种设计用来理解、生成和回应类似人类文本的神经网络。这些模型是深度神经网络,通过大规模的文本数据进行训练,有时训练数据覆盖了互联网上公开可用的绝大部分文本。
“大型语言模型”中的“大型”既指模型在参数规模上的庞大,也指其训练所使用的巨大数据集。这样的模型通常包含数百亿甚至数千亿个参数,这些参数是网络中的可调权重,在训练过程中被优化,用于预测序列中的下一个词。通过预测下一个词来训练模型是合理的,因为这利用了语言的内在顺序特性,帮助模型学习文本中的上下文、结构和关系。尽管这是一个非常简单的任务,但它能够产生如此强大的模型,这让许多研究人员感到惊讶。在后续章节中,我们将逐步讨论并实现下一个词的训练过程。
LLM使用一种称为Transformer的架构,该架构使模型在进行预测时能够有选择地关注输入的不同部分,从而特别擅长处理人类语言的细微差别和复杂性。
由于LLM能够生成文本,它们也常被称为生成型人工智能的一种形式,通常缩写为生成型AI或GenAI。正如图1.1所示,人工智能(AI)涵盖了创建可以执行需要类似人类智能的任务(包括理解语言、识别模式和做出决策)的更广泛领域,并且包括机器学习和深度学习等子领域。
用于实现人工智能的算法是机器学习领域的核心。具体来说,机器学习涉及开发能够从数据中学习并基于数据做出预测或决策的算法,而不需要显式编程。为说明这一点,可以想象垃圾邮件过滤器是机器学习的一个实际应用。与其手动编写规则来识别垃圾邮件,不如使用机器学习算法,向其提供标记为垃圾邮件和正常邮件的示例。通过最小化其在训练数据集上的预测误差,模型可以学习识别垃圾邮件的模式和特征,从而能够将新的邮件分类为垃圾邮件或非垃圾邮件。
如图1.1所示,深度学习是机器学习的一个子集,专注于利用具有三层或更多层(也称为深度神经网络)的神经网络来建模数据中的复杂模式和抽象。与深度学习相比,传统的机器学习需要手动提取特征。这意味着人类专家需要识别并选择模型最相关的特征。
尽管如今人工智能领域以机器学习和深度学习为主导,但它还包括其他方法,例如基于规则的系统、遗传算法、专家系统、模糊逻辑或符号推理。
回到垃圾邮件分类的例子中,在传统机器学习中,人类专家可能会从电子邮件文本中手动提取特征,例如某些触发词的频率(例如“奖品”、“赢取”、“免费”)、感叹号的数量、全大写单词的使用或是否存在可疑链接。基于这些专家定义特征创建的数据集将用于训练模型。与传统机器学习不同,深度学习不需要手动特征提取,这意味着人类专家不需要为深度学习模型识别和选择最相关的特征。(然而,无论是传统机器学习还是深度学习用于垃圾邮件分类,都仍然需要收集垃圾邮件或非垃圾邮件的标签,这些标签需要由专家或用户收集。)
接下来,我们将探讨LLM今天可以解决的一些问题、LLM所应对的挑战以及我们将在后面实现的通用LLM架构。
LLM的应用
由于其解析和理解非结构化文本数据的高级能力,LLM在多个领域具有广泛的应用。如今,LLM被用于机器翻译、生成新文本(见图1.2)、情感分析、文本摘要等许多任务。最近,LLM还被用于内容创作,例如撰写小说、文章,甚至编写计算机代码。
LLM还可以为高级聊天机器人和虚拟助手提供支持,例如OpenAI的ChatGPT或Google的Gemini(前称为Bard),它们能够回答用户查询并增强传统搜索引擎,如Google搜索或微软Bing。
此外,LLM还可以用于从大量文本中有效地检索专业领域的信息,如医学或法律。这包括筛选文档、总结冗长的段落以及回答技术性问题。
简而言之,LLM在几乎所有涉及解析和生成文本的任务中都具有重要的自动化价值。其应用几乎无穷无尽,随着我们不断创新并探索使用这些模型的新方法,显然LLM有潜力重新定义我们与技术的关系,使其更加对话式、直观且易于访问。
我们将重点理解LLM的工作原理,从零开始编写一个能够生成文本的LLM。你还将学习LLM执行查询的技术,包括回答问题、总结文本、将文本翻译成不同语言等。换句话说,你将通过一步步构建,学习像ChatGPT这样复杂的LLM助手是如何运作的。
构建和使用LLM的阶段
为什么要构建我们自己的LLM?从头开始编写LLM是理解其机制和局限性的一项极好练习。此外,这还能让我们掌握预训练或微调现有开源LLM架构以适应我们特定领域数据集或任务的必要知识。
注意 如今,大多数LLM是使用PyTorch深度学习库实现的,我们也将使用它。读者可以在附录A中找到PyTorch的全面介绍。
研究表明,在建模性能方面,定制构建的LLM——针对特定任务或领域优化的模型——可以超过通用型LLM,例如ChatGPT提供的那些,这些模型设计用于广泛的应用场景。此类定制模型的例子包括BloombergGPT(专门用于金融领域)和针对医疗问答的LLM(详细信息请参见附录B)。
使用定制构建的LLM具有多个优势,特别是在数据隐私方面。例如,由于保密性问题,公司可能不愿意将敏感数据与第三方LLM提供商(如OpenAI)共享。此外,开发较小的定制LLM可以直接部署在客户设备上,例如笔记本电脑和智能手机上,这也是苹果公司目前正在探索的方向。这样的本地实现可以显著减少延迟,并降低服务器相关的成本。此外,定制LLM为开发人员提供了完全的自主权,使他们能够根据需要控制模型的更新和修改。
构建LLM的一般过程包括预训练和微调。“预”训练指的是模型的初始训练阶段,在这一阶段,LLM等模型在一个大型、广泛的数据集上进行训练,以形成对语言的广泛理解。这个预训练的模型随后可以通过微调进一步优化,微调是指模型在一个更窄、更具体的任务或领域数据集上进行专门训练。这种由预训练和微调组成的双阶段训练方法如图1.3所示。
构建LLM的第一步是将其训练在大规模的文本数据集上,有时称为原始文本。在这里,“原始”指的是这些数据只是普通的文本,没有任何标签信息。(可能会进行过滤,例如去除格式字符或未知语言的文档。)
注意 有机器学习背景的读者可能会注意到,传统的机器学习模型和通过常规监督学习范式训练的深度神经网络通常需要标签信息。然而,在LLM的预训练阶段情况并非如此。在这个阶段,LLM使用自监督学习,模型从输入数据中生成自己的标签。
LLM的第一阶段训练也称为预训练,这会生成一个初始的预训练LLM,通常称为基础模型或基石模型。这类模型的典型例子是GPT-3模型(ChatGPT中原始模型的前身)。这个模型能够完成文本补全任务,即完成用户提供的未写完的句子。它还具有有限的少样本学习能力,这意味着它可以根据少量的示例学习执行新任务,而不需要大量的训练数据。
在通过大规模文本数据集训练获得预训练的LLM后,LLM已经学会了预测文本中的下一个词,我们可以进一步对LLM进行有标签数据的训练,也就是所谓的微调。
微调LLM的两种最流行的类型是指令微调和分类微调。在指令微调中,带标签的数据集由指令和答案对组成,例如,一个翻译查询及其正确翻译的文本。在分类微调中,带标签的数据集由文本和相关的类别标签组成,例如带有“垃圾邮件”和“非垃圾邮件”标签的电子邮件。
我们将涵盖LLM的预训练和微调的代码实现,并在预训练一个基础LLM后,深入探讨指令微调和分类微调的具体内容。
介绍Transformer架构
大多数现代LLM依赖于Transformer架构,这是一种深度神经网络架构,首次在2017年的论文《Attention Is All You Need》中提出([arxiv.org/abs/1706.03…]。要理解LLM,我们必须首先了解最初的Transformer模型,它最初是为机器翻译开发的,用于将英文文本翻译成德语和法语。图1.4展示了简化的Transformer架构。
Transformer架构由两个子模块组成:编码器(encoder)和解码器(decoder)。编码器模块处理输入文本,并将其编码为一系列数值表示或向量,这些向量捕捉了输入的上下文信息。接着,解码器模块利用这些编码的向量生成输出文本。例如,在翻译任务中,编码器将源语言的文本编码为向量,解码器则解码这些向量以生成目标语言的文本。编码器和解码器都由许多层组成,这些层通过所谓的自注意力机制连接。你可能有很多关于输入是如何预处理和编码的问题,这些将在后续章节中通过逐步实现得到解答。
Transformer和LLM的关键组成部分是自注意力机制(未展示),它使模型能够根据序列中不同单词或标记相对于彼此的重要性进行加权。该机制使模型能够捕捉输入数据中的长距离依赖关系和上下文关系,从而增强生成连贯且符合上下文的输出的能力。然而,由于其复杂性,我们将把进一步的解释留到第3章,在那里我们会逐步讨论和实现这一机制。
Transformer架构的后续变体,例如BERT(双向编码器表示,Bidirectional Encoder Representations from Transformers的缩写)和各种GPT模型(生成型预训练Transformer,Generative Pretrained Transformers的缩写),在此基础上进行了扩展,以适应不同的任务。如果你感兴趣,可以参阅附录B以获得更多阅读建议。
BERT建立在原始Transformer的编码器子模块之上,其训练方法与GPT不同。虽然GPT专为生成任务设计,但BERT及其变体则专注于掩蔽词预测,即模型预测给定句子中被掩盖或隐藏的词,如图1.5所示。这种独特的训练策略使BERT在文本分类任务中表现出色,包括情感预测和文档分类。作为其能力的一个应用示例,撰写本文时,X(前称为Twitter)使用BERT来检测有害内容。
另一方面,GPT专注于原始Transformer架构中的解码器部分,设计用于生成文本的任务。这包括机器翻译、文本摘要、小说创作、编写计算机代码等。
GPT模型主要是为文本补全任务设计和训练的,但它们也表现出极大的灵活性。这些模型擅长执行零样本学习和少样本学习任务。零样本学习指的是在没有任何先前特定示例的情况下,能够推广到完全未知的任务。相对而言,少样本学习则是指从用户提供的极少量示例中学习,如图1.6所示。
Transformer与LLM的区别
当今的大型语言模型(LLM)基于Transformer架构。因此,Transformer和LLM这两个术语在文献中常常被互换使用。然而,需要注意的是,并非所有的Transformer都是LLM,因为Transformer也可以用于计算机视觉。同样,也不是所有的LLM都是基于Transformer的,因为一些LLM是基于循环神经网络(RNN)和卷积神经网络(CNN)架构的。这些替代方法的主要动机是提高LLM的计算效率。然而,这些替代的LLM架构是否能够与基于Transformer的LLM相竞争,以及它们是否会在实践中被广泛采用,仍有待观察。为简化起见,我使用“LLM”一词来指代类似于GPT的基于Transformer的LLM。(感兴趣的读者可以在附录B中找到描述这些架构的文献参考。)
使用大规模数据集
流行的GPT和BERT类模型的训练数据集涵盖了多样且全面的文本语料库,包含数十亿的单词,涉及广泛的主题以及自然语言和编程语言。为了提供一个具体的例子,表1.1总结了用于预训练GPT-3的数据集,该模型是首版ChatGPT的基础模型。
表1.1 GPT-3 LLM的预训练数据集
数据集名称 | 数据集描述 | 词元数量 | 训练数据中的比例 |
---|---|---|---|
CommonCrawl(过滤) | 网络抓取数据 | 4100亿词元 | 60% |
WebText2 | 网络抓取数据 | 190亿词元 | 22% |
Books1 | 基于互联网的书籍语料库 | 120亿词元 | 8% |
Books2 | 基于互联网的书籍语料库 | 550亿词元 | 8% |
Wikipedia | 高质量文本 | 30亿词元 | 3% |
表1.1报告了词元的数量,其中一个词元是模型读取的文本单位,数据集中的词元数量大致相当于文本中的单词和标点符号的数量。第2章将讨论词元化,这是将文本转换为词元的过程。
主要结论是,这些训练数据集的规模和多样性使这些模型能够在多种任务上表现出色,包括语言句法、语义和上下文分析,甚至包括一些需要常识的任务。
GPT-3 数据集详情
表1.1展示了用于GPT-3的数据集。表格中的比例列加总为100%,已调整了四舍五入误差。尽管“词元数量”列中的子集总和为4990亿词元,但模型实际仅在3000亿词元上进行了训练。GPT-3论文的作者没有说明为何模型没有使用全部的4990亿词元进行训练。
作为背景参考,CommonCrawl数据集的规模是4100亿词元,单独就需要大约570GB的存储空间。相比之下,后续模型的迭代版本,例如Meta的LLaMA,扩展了训练范围,包含了更多的数据源,如Arxiv研究论文(92GB)和StackExchange的与代码相关的问答(78GB)。
GPT-3论文的作者并未共享其训练数据集,但一个可以公开获取的类似数据集是Dolma: An Open Corpus of Three Trillion Tokens for LLM Pretraining Research,由Soldaini等人于2024年发布([arxiv.org/abs/2402.00…])。然而,该数据集中可能包含受版权保护的作品,具体的使用条款可能取决于用途和所在国家。
这些模型的预训练特性使其在下游任务的进一步微调中极其多功能,因此它们也被称为基础模型或基石模型。预训练LLM需要大量资源,并且成本非常高。例如,GPT-3的预训练成本估计为460万美元的云计算费用([mng.bz/VxEW])。
好消息是,许多预训练的LLM作为开源模型可以使用,能够作为通用工具来撰写、提取和编辑不属于其训练数据的文本。此外,LLM可以在相对较小的数据集上进行微调,这减少了所需的计算资源并提升了性能。
我们将实现预训练的代码,并用它来预训练一个LLM用于教学目的。所有计算都可以在消费级硬件上执行。在实现预训练代码后,我们将学习如何重用公开可用的模型权重并将其加载到我们实现的架构中,这样在微调我们的LLM时,就可以跳过昂贵的预训练阶段。
深入了解GPT架构
GPT最初由OpenAI的Radford等人在论文《通过生成式预训练提升语言理解》([mng.bz/x2qg])中提出。GPT-3是这一模型的扩展版本,拥有更多的参数,并在更大规模的数据集上进行训练。此外,ChatGPT中使用的原始模型是通过在一个大型指令数据集上微调GPT-3创建的,微调方法来自OpenAI的InstructGPT论文([arxiv.org/abs/2203.02…])。如图1.6所示,这些模型是非常出色的文本补全模型,并且能够执行其他任务,例如拼写纠正、分类或语言翻译。令人惊讶的是,GPT模型的预训练仅基于一个相对简单的下一个词预测任务,如图1.7所示。
下一个词预测任务是一种自监督学习形式,也就是一种自标注。这意味着我们不需要显式地为训练数据收集标签,而是可以利用数据本身的结构:可以使用句子或文档中的下一个词作为模型要预测的标签。由于下一个词预测任务允许我们“动态”创建标签,因此可以使用大规模的无标签文本数据集来训练LLM。
与我们在1.4节中讨论的原始Transformer架构相比,GPT的整体架构相对简单。本质上,它只是没有编码器的解码器部分(见图1.8)。由于像GPT这样的解码器模型通过一次预测一个单词来生成文本,它们被视为自回归模型的一种。自回归模型将之前的输出作为未来预测的输入。因此,在GPT中,每个新单词都是基于前面的序列选择的,这提高了生成文本的连贯性。
像GPT-3这样的架构也比原始Transformer模型大得多。例如,原始Transformer模型将编码器和解码器块重复了6次,而GPT-3总共有96个Transformer层和1750亿个参数。
GPT-3于2020年推出,按照深度学习和大型语言模型发展的标准来看,已经算是很久以前的事情了。然而,像Meta的Llama模型等最近的架构,仍然基于相同的基本概念,只进行了小幅修改。因此,理解GPT仍然具有重要意义,因此我将重点介绍GPT背后的主要架构,同时指出其他LLM所采用的一些具体调整。
尽管原始的Transformer模型由编码器和解码器块组成,明确设计用于语言翻译,GPT模型尽管具有更大但更简单的仅解码器架构,并以下一个词预测为目标,却也能够执行翻译任务。这一能力最初让研究人员感到意外,因为它源自一个主要训练任务是下一个词预测的模型,而该任务并未专门针对翻译进行设计。
模型执行未明确训练的任务的能力被称为“涌现行为”。这种能力不是在训练过程中明确教授的,而是由于模型在多语言、多样化上下文中接触到大量数据后自然产生的结果。GPT模型能够“学习”不同语言之间的翻译模式,并执行翻译任务,尽管它们并未专门为此训练,展示了这些大规模生成语言模型的优势和能力。我们可以用单一模型执行多种任务,而不需要为每个任务使用不同的模型。
构建大型语言模型
现在我们已经为理解LLM打下了基础,让我们从头开始编写一个模型。我们将以GPT的基本理念为蓝图,分三个阶段来完成这一任务,如图1.9所示。
在第1阶段,我们将学习基本的数据预处理步骤,并编写每个LLM核心的注意力机制代码。接下来,在第2阶段,我们将学习如何编写并预训练一个类似GPT的LLM,使其能够生成新的文本。同时,我们还会介绍评估LLM的基础知识,这是开发高效NLP系统的关键。
从头开始预训练一个LLM是一项巨大的任务,对于像GPT这样的模型,计算成本可能高达数千甚至数百万美元。因此,第2阶段的重点是使用小型数据集进行教育目的的训练实现。此外,我还提供了加载公开可用模型权重的代码示例。
最后,在第3阶段,我们将使用一个预训练的LLM并对其进行微调,使其能够执行指令任务,例如回答问题或对文本进行分类——这些是许多实际应用和研究中最常见的任务。
希望你期待开启这段令人兴奋的旅程!
总结
LLM改变了自然语言处理领域,此前该领域主要依赖于显式的基于规则的系统和简单的统计方法。LLM的出现引入了由深度学习驱动的新方法,推动了对人类语言的理解、生成和翻译的进步。
现代LLM的训练分为两个主要步骤: 首先,它们在大规模无标签文本语料库上进行预训练,通过使用句子中下一个词的预测作为标签。 然后,它们在较小的、有标签的目标数据集上进行微调,以执行指令或分类任务。
LLM基于Transformer架构。Transformer架构的关键思想是注意力机制,它使LLM在一次生成一个单词的过程中能够选择性地访问整个输入序列。
原始的Transformer架构由一个解析文本的编码器和一个生成文本的解码器组成。
用于生成文本和执行指令的LLM,如GPT-3和ChatGPT,仅实现了解码器模块,简化了架构。
由数十亿单词组成的大型数据集对于LLM的预训练至关重要。
尽管GPT类模型的通用预训练任务是预测句子中的下一个词,这些LLM却展现出涌现特性,如分类、翻译或摘要文本的能力。
一旦LLM完成预训练,生成的基础模型可以更高效地用于各种下游任务的微调。
在定制数据集上微调的LLM在特定任务上可以超越通用LLM的表现。
大模型&AI产品经理如何学习
求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。
1.学习路线图
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
(都打包成一块的了,不能一一展开,总共300多集)
因篇幅有限,仅展示部分资料,需要点击下方图片前往获取
3.技术文档和电子书
这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
4.LLM面试题和面经合集
这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓