当前位置: 首页 > news >正文

LLMs From Scratch(一)---理解大语言模型

目录

一、什么是LLM

二、LLM的应用领域

三、构建和使用LLM的三个阶段

四、使用LLM执行不同任务

五、利用大型数据集

六、深入剖析GPT架构

七、构建大语言模型

八、总结


本章包括

1.大型语言模型(LLM)基本概念的深层次解释

2.深入了解transformer架构,由此衍生出类似ChatGPT的LLM(包括国外的:GPT、BERT、T5、LLaMA,国内的:Qwen、Baichuan等,当然我也也需要知道,虽然Transformer架构是如今的主流大模型架构,但也有非Transformer架构的大模型,比如RWKV。)

3.从零开始构建LLM的计划


        大型语言模型(LLM),如 OpenAI 的 ChatGPT 所提供的模型,是近些年发展的深度神经网络模型。它们为自然语言处理(NLP)带来了新的时代。在大型语言模型出现之前,传统方法在垃圾邮件分类和简单模式识别等分类任务中表现出色,这些任务可以用手工规则或更简单的模型来捕捉。然而,在需要复杂理解和生成能力的语言任务中,如解析详细指令、进行上下文分析或创建连贯且与上下文相适应的原始文本时,这些方法通常表现不佳。例如,前几代语言模型无法根据关键字列表编写电子邮件————而这是当代的 LLM 能够轻松完成的任务。

        语言模型具有理解、生成和解释人类语言的卓越能力。不过,有必要澄清的是,当我们说语言模型 "能理解 "时,我们指的是它们能以看起来连贯且与上下文相关的方式处理和生成文本,而不是说它们拥有类似人类的意识或理解能力。

        深度学习是以神经网络为核心的机器学习和人工智能(AI)的一个子集,在深度学习的推动下,LLM 在大量文本数据的基础上进行训练。与以前的方法相比,这使得 LLM 能够捕捉到更深层次的语境信息和人类语言的微妙之处。因此,LLM 在文本翻译、情感分析、问题解答等各种 NLP 任务中的性能都有显著提高。

        当代 LLM 与早期 NLP 模型之间的另一个重要区别是,后者通常是为特定任务而设计的;尽管早期的 NLP 模型在狭窄的应用领域表现出色,但 LLM 则在广泛的 NLP 任务中表现出更强的泛化能力。

        LLM 的成功可归功于其背后的 Transformer 架构,该架构支撑了许多LLM,以及 LLM 训练所用到的海量数据,这使得它们能够捕捉各种语言细微差别、语境和模式,这些内容如果手动编码将会非常具有挑战性。

        这种转向基于 Transformer 架构实施模型并使用大型训练数据集来训练 LLM 的做法,已经根本性地改变了自然语言处理 NLP,为理解和与人类语言互动提供了更强大的工具。

        从本章开始,我们为实现本书的主要目标奠定基础:通过在代码中逐步实现基于 Transoformer 架构的类ChatGPT的LLM,从而理解 LLM。

一、什么是LLM

        LLM 即大型语言模型,是一种神经网络,旨在理解、生成和响应人类文本。这些模型是在海量文本数据上训练出来的深度神经网络,有时包含互联网上全部公开文本的很大一部分。

        大型语言模型中的 "大型 "指的是该模型的参数规模以及训练该模型的庞大数据集。此类模型通常有数百亿甚至数千亿个参数,这些参数是网络中可调整的权重,在训练过程中进行优化,以预测序列中的下一个单词。下一个单词的预测是合理的,因为它利用了语言固有的顺序性来训练理解文本中上下文、结构和关系的模型。然而,这只是一项非常简单的任务,因此能产生如此强大的模型令许多研究人员感到惊讶。我们将在后面的章节中逐步讨论和实现下一个单词的训练过程。

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

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

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

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

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

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

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

        接下来的部分将介绍 LLM 目前可以解决的一些问题、LLM 所面临的挑战,以及我们将在本书中实现的一般 LLM 架构。

二、LLM的应用领域

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

        图 1.2 LLM 界面实现了用户与人工智能系统之间的自然语言交流。这张截图显示的是 ChatGPT 根据用户的要求写了一首诗。

        LLM 还可以支持复杂的聊天机器人和虚拟助手,如 OpenAI 的 ChatGPT 或谷歌的 Gemini(原名 Bard),它们可以回答用户的询问,并增强谷歌搜索或微软必应等传统搜索引擎的功能。

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

        简而言之,LLM对于自动化几乎任何涉及解析和生成文本的任务都极具价值。它们的应用几乎是无限的,随着我们不断创新和探索使用这些模型的新方法,很明显,LLM有可能重塑我们与技术的关系,使其更具对话性、直观性和易用。

        在本书中,我们将重点关注从零开始理解LLM的工作原理,并编写一个能够生成文本的LLM。我们还将学习让 LLM 执行查询的技术,包括回答问题、总结文本、将文本翻译成不同语言等。换句话说,在本书中,我们将通过一步步构建 ChatGPT 等复杂的 LLM 助手,了解其工作原理。

三、构建和使用LLM的三个阶段

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

        研究表明,在模型性能方面,定制的 LLM(为特定任务或领域量身定制的 LLM)可能优于通用 LLM(如 ChatGPT 提供的 LLM),后者专为各种应用而设计。这方面的例子包括专门用于金融领域的 BloombergGPT 和为医学问题解答量身定制的 LLM(详情请参见附录 B 中的 "进一步阅读和参考文献 "部分)。

        创建 LLM 的一般过程包括预训练和微调。预训练 "中的 "预 "指的是初始阶段,在这个阶段,像 LLM 这样的模型会在一个大型、多样化的数据集上接受训练,以形成对语言的广泛理解。然后,这种预训练模型可作为基础资源,通过微调进一步完善。微调过程是指在针对特定任务或领域的较窄数据集上对模型进行专门训练。图 1.3 描述了这种由预训练和微调组成的两阶段训练方法。

        图 1.3 LLM 的预训练包括在大型文本数据集上预测下一个单词。然后,可以使用较小的标注数据集对预训练 LLM 进行微调。

        如图 1.3 所示,创建 LLM 的第一步是在大量文本数据(有时称为原始文本)上进行训练。这里的 "原始 "是指这些数据只是普通文本,没有任何标签信息[1]。(可以进行过滤,如去除格式化字符或未知语言的文档)。

        LLM 的第一个训练阶段也称为预训练,即创建一个初始的预训练 LLM,通常称为基础或基本模型。这种模型的一个典型例子是 GPT-3 模型(ChatGPT 中提供的原始模型的前身)。该模型能够完成文本,即完成用户提供的半写句子。它还具有有限的 "少样本 "能力,这意味着它能够仅基于几个示例而不是需要大量的训练数据来学习执行新任务。下一节 "针对不同任务使用Transormer "将进一步说明这一点。

        通过在大型文本数据集上的训练获得预训练 LLM 后,我们可以在标注数据上进一步训练 LLM,也就是所谓的微调。

        微调LLM的两个最受欢迎的类别包括指令微调(instructionfinetuning)分类任务微调(finetuning for classification tasks)。 在指令微调中,标注数据集由指令和答案对组成,例如翻译文本的查询以及正确的翻译文本。在分类微调中,标注数据集由文本和相关类标签组成,例如与垃圾邮件和非垃圾邮件标签相关的电子邮件。

        在这本书中,我们将涵盖预训练和微调LLM的代码实现,并在预训练基础LLM后,更深入地探讨指令微调和分类微调的具体内容。

四、使用LLM执行不同任务

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

        transformer由两部分组成:编码器负责处理输入文本,并生成文本的嵌入表示(一种数字表示,可捕捉不同维度的许多不同因素),解码器可利用该表示逐字生成翻译文本。请注意,该图显示的是翻译过程的最后阶段,解码器只需根据原始输入文本("This is an example")和部分翻译的句子("Das ist ein")生成最终单词("Beispiel")即可完成翻译。

        编码器模块处理输入文本,并将其编码为一系列数字表示或向量,以捕捉输入的上下文信息。然后,解码器模块接收这些编码矢量,并从中生成输出文本。例如,在翻译任务中,编码器将源语言的文本编码成向量,解码器对这些向量进行解码,生成目标语言的文本。编码器和解码器都由许多层组成,通过所谓的自我注意机制连接起来。关于输入是如何预处理和编码的,您可能有很多问题。这些问题将在随后的章节中逐步解决。

        Transformer 和 LLM 的一个关键组成部分是自注意力机制(未在图中显示),它允许模型权衡序列中不同词或标记的相对重要性。这种机制使模型能够捕捉输入数据中的长程依赖关系和上下文关系,从而增强其生成连贯且与上下文相关的输出的能力。然而,由于其复杂性,我们将把解释工作推迟到第 3 章,在那里我们将逐步讨论和实施这一机制。此外,我们还将在第2章“处理文本数据”中讨论和实施数据预处理步骤,以创建模型输入。

        Transformer 架构后来的变体,如所谓的 BERT(bidirectional encoder representations from transformers 的简称)和各种 GPT 模型(generative pretrained transformers 的简称),都是在这一概念的基础上发展起来的,以适应不同任务的需要。(参考文献见附录 B)。

        BERT 建立在原始transformer的编码器子模块基础上,其训练方法与 GPT 不同。GPT 专为生成任务而设计,而BERT及其变体则专注于屏蔽词预测,即模型预测给定句子中的屏蔽词或隐藏词,如图 1.5 所示。这种独特的训练策略使 BERT 在文本分类任务(包括情感预测和文档分类)中具有优势。在本文撰写过程中,Twitter 使用BERT检测有毒内容,这就是BERT功能的一个应用。

        左侧的编码器部分展示了类似 BERT 的 LLM,这些 LLM 专注于屏蔽词预测,主要用于文本分类等任务。右边的解码器部分展示的是 GPT 类 LLM,设计用于生成任务和生成连贯的文本序列。

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

        GPT 模型主要是为执行文本补全任务而设计和训练的,它们也显示出了非凡的多功能性。这些模型善于执行零样本学习和少量样本学习任务。零样本学习指的是在没有任何先前具体实例的情况下,对完全未见过的任务进行泛化的能力。另一方面,少量样本学习涉及从用户提供的极少量实例中学习,如图 1.6 所示。

Transformer和LLM的区别:

        如今的 LLM 基于上一节介绍的 Transformer 架构。因此,在文献中,Transformer 和 LLM 通常是同义词。但请注意,并非所有的 Transformer 都是 LLM,因为 Transformer 也可用于计算机视觉。同样,并非所有 LLM 都是 Transformer,因为也有基于递归和卷积架构的大型语言模型。这些替代方法背后的主要动机是提高 LLM 的计算效率。不过,这些替代 LLM 架构能否与基于 Transformer 的 LLM 相抗衡,以及它们是否会被实际采用,还有待观察。(有兴趣的读者可以在本章结尾的 "进一步阅读 "部分找到描述这些架构的文献参考)。

五、利用大型数据集

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

表1.1 流行的GPT-3大型语言模型的预训练数据集

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

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

六、深入剖析GPT架构

        在本章的前文中,我们提及了GPT类模型、GPT-3和ChatGPT等术语。现在,让我们更详细地探讨一下GPT的一般架构。首先,GPT代表生成式预训练Transformer,最初在以下论文中被介绍:

  • 通过生成式预训练改善语言理解(2018年),作者Radford等人,来自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 在GPT模型的下一个词预训练任务中,系统通过观察前面的词来学习预测句子中即将出现的词。这种方法帮助模型理解词语和短语在语言中通常是如何组合在一起的,形成了一个可以应用于各种其他任务的基础。

        下一个词预测任务是一种自监督学习形式,属于自我标记的一种。这意味着我们不需要为训练数据显式地收集标签,而是可以利用数据本身的结构:我们可以使用句子或文档中的下一个词作为模型应该预测的标签。由于这个下一个词预测任务允许我们“即时”创建标签,就有可能利用大量未标记的文本数据集来训练大型语言模型,正如之前在1.5节“利用大数据集”中所讨论的。

        与我们在1.4节中介绍的原始Transformer架构相比,使用大型语言模型(LLMs)执行不同任务,通用的GPT架构相对简单。本质上,它只是解码器部分而没有编码器,如图1.8所示。由于像GPT这样的解码器风格模型通过一次预测一个词来生成文本,它们被认为是一种自回归模型自回归模型将其之前的输出作为未来预测的输入。因此,在GPT中,每一个新词都是基于它之前的序列来选择的,这提高了生成文本的连贯性。

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

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

        GPT-3是在2020年推出的,按照深度学习和大型语言模型(LLM)发展的标准,这已经被认为是很久以前的事情了。然而,最近的一些架构,比如Meta的Llama模型,仍然基于相同的基础概念,只是引入了一些小的修改。因此,理解GPT仍然非常重要,本书专注于实现GPT背后的主要架构,同时提供了一些由其他LLM采用的特定调整的指引。

        最后,有趣的是,虽然原始的Transformer模型是明确为语言翻译设计的,但GPT模型——尽管它们有更大而且更简单的架构,主要目标是下一个词的预测——也能够执行翻译任务。这一能力最初让研究人员感到意外,因为它出现在一个主要针对下一个词预测任务训练的模型中,而这个任务并没有特别指向翻译。

        模型能够执行它没有被明确训练去执行的任务的能力被称为“涌现现象”。这种能力并不是在训练过程中明确教授的,而是作为模型接触到大量多语言数据和多样化语境的自然结果而出现的。GPT模型能够“学习”语言之间的翻译模式并执行翻译任务,尽管它们并没有特别为此进行训练,这展示了这些大规模生成性语言模型的好处和能力。我们可以不使用不同的模型就执行多样化的任务。

七、构建大语言模型

        在本章中,我们奠定了理解 LLMs 的基础。在本书的剩余部分,我们将从头开始编写一个 LLM 。我们将以 GPT 背后的基本思想作为蓝图,并按照图1.9中概述的三个阶段来解决这个问题。

图 1.9 本书涵盖的构建大型语言模型(LLM)的阶段包括实现LLM架构和数据准备过程、预训练LLM以创建基础模型,以及微调基础模型,使其成为个人助理或文本分类器。

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

        接下来,在第二阶段,我们将学习如何编写和预训练一个类似GPT的LLM,这种模型能够生成新文本。我们还将讨论评估LLM的基本原则,这对于开发能力强大的自然语言处理系统至关重要。

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

        最后,在第三阶段,我们将采用预训练的LLM,并微调它以执行诸如回答查询或分类文本之类的指令——这是许多实际应用和研究中最常见的任务。

        希望您期待着开始这一激动人心的旅程!

八、总结

  • 大型语言模型(LLMs)已经彻底改变了自然语言处理领域,该领域之前主要依赖于明确的基于规则的系统和更简单的统计方法。LLMs的出现引入了新的深度学习驱动的方法,这些方法推动了对人类语言的理解、生成和翻译的进步。
  • 现代LLMs主要通过两个步骤进行训练。
  • 首先,它们在大量未标记的文本语料库上进行预训练,使用句子中下一个词的预测作为“标签”。
  • 然后,它们在较小的、有标签的目标数据集上进行微调,以执行指令或进行分类任务。
  • LLMs基于 transformer 架构。transformer 架构的关键思想是注意力机制,它在生成输出时,使LLM能够选择性地访问整个输入序列中的每一个词。
  • 原始的 transformer 架构包括用于解析文本的编码器和用于生成文本的解码器
  • 用于生成文本和执行指令的LLMs,如GPT-3和ChatGPT,只实现了解码器模块,简化了架构。预训练LLMs需要数十亿词的大型数据集。在本书中,我们将在小型数据集上实现和训练LLMs,用于教育目的,但也将展示如何加载公开可用的模型权重。
  • 尽管GPT类模型的一般预训练任务是预测句子中的下一个词,这些LLMs表现出了“突现”属性,如分类、翻译或总结文本的能力。(涌现现象)
  • 一旦LLM被预训练,得到的基础模型可以更有效地针对各种下游任务进行微调。
  • 在定制数据集上微调的LLMs可以在特定任务上胜过通用的LLMs。

http://www.dtcms.com/a/469311.html

相关文章:

  • 清除 iPhone 数据以便出售:永久删除您的数据
  • 关于在ios系统中签名并安装ipa文件的五种方法,PakePlus打包的ipa文件可以看看
  • 网站首页动画代码澄海区建设局网站
  • 设计模式篇之 单例模式 Singleton
  • C++设计模式_结构型模式_组合模式Composite(树形模式)
  • 反转控制与依赖注入详解:以订单处理系统为例
  • 【Unity每日一记】Unity脚本基础指南
  • Isaac Lab 2.3深度解析:全身控制与增强遥操作如何重塑机器人学习
  • 全美东莞网站建设福建省建设行业企业资质查询网站
  • SpringBoot集成springdoc
  • 【Java开发日记】请介绍类加载过程,什么是双亲委派模型?
  • 算法奇妙屋(五)-链表
  • 从iPhone转移到itel手机的联系人转移指南
  • MySQL实战篇04_Docker入门实战:从零搭建MySQL容器环境
  • 上海网站制作机构做网站后面维护要收钱吗
  • wget 命令速查手册 | HTTP / FTP 文件下载全指南
  • ffmpeg avio使用示例
  • 我把Excel变成了像素画板!用Python实现图片到单元格的映射
  • Android相册高频面试场景分析
  • 郑州建筑公司网站建设网页制作标准
  • iOS 推送证书 P8 介绍及生成流程
  • Ubuntu22.04安装Ibus的中文输入法
  • 基于STM32的智能物联网加湿器/智能家居
  • 23种设计模式——解释器模式(Interpreter Pattern)
  • 贴吧网站建设个人免费空间申请
  • 机器人能否实现远程视频通话方便家属探视老人
  • 小杰深度学习(ten)——视觉-经典神经网络——LetNet
  • LeetCode每日一题——困于环中的机器人
  • c++11 列表初始化 右值引用 移动语义 引用折叠 完美转发
  • 以太网与工业以太网通信C#开发