diff --git a/cn-Book/1.理解大语言模型.md b/cn-Book/1.理解大语言模型.md index 2ca4fa5..b417b34 100644 --- a/cn-Book/1.理解大语言模型.md +++ b/cn-Book/1.理解大语言模型.md @@ -51,7 +51,9 @@ LLM 采用了一种称为 Transformer 的架构(在第 1.4 节中将详细讨 由于 LLM 能够生成文本,因此它们通常被称为一种生成式人工智能 (AI),常缩写为生成 AI 或 GenAI。如图 1.1 所示,人工智能涵盖了创造能执行类似人类智能任务的更广泛领域,包括理解语言、识别模式和做出决策,并包括机器学习和深度学习等子领域。 - +
+ +
用于实现人工智能的算法是机器学习领域的核心。机器学习往往不需要明确的编程实现,而是涉及可以从数据中学习并基于数据做出预测或决策的算法研究。举例来说,垃圾邮件过滤器就是机器学习的一个实际应用。与其手动编写规则来识别垃圾邮件,不如将标记为垃圾邮件和合法邮件的电子邮件示例输入给机器学习算法。通过最小化训练数据集上的预测误差,模型能够学习识别垃圾邮件的模式和特征,从而将新邮件分类为垃圾邮件或合法邮件。 @@ -69,7 +71,9 @@ LLM 采用了一种称为 Transformer 的架构(在第 1.4 节中将详细讨 由于具备解析和理解非结构化文本数据的高级能力,LLM 在多个领域有着广泛的应用。目前,LLM 被广泛用于机器翻译、新文本生成(见图 1.2)、情感分析、文本摘要等多种任务。最近,LLM 还被用于内容创作,比如撰写小说、文章,甚至计算机代码。 - +
+ +
LLM 还可以支持复杂的聊天机器人和虚拟助手,例如 OpenAI 的 ChatGPT 或谷歌的 Gemini(以前称为 Bard),这些助手能够回答用户的问题,并提升传统搜索引擎的功能,如 Google Search 和 Microsoft Bing。 @@ -98,7 +102,9 @@ LLM 还可以支持复杂的聊天机器人和虚拟助手,例如 OpenAI 的 C > + 全权重的微调,这种方式会在训练过程中对模型的所有预训练权重进行调整,但由于权重已经经过预训练,大多数情况下,微调只会对预训练权重进行微小调整,而不是大幅度改变。这种方式能够让模型保持原有的语言生成能力,同时使其在特定任务上表现得更好。 > + 冻结部分权重的微调,一般冻结低层(往往是学习到的基础语言特征),对高层的权重进行调整。这种微调方式常在需要加速训练,或者数据量较小,全权重微调可能导致过拟合的情况下使用。 - +
+ +
如图 1.3 所示,创建 LLM 的第一步是用大量文本数据进行训练,这些数据一般被称为原始文本。这里的 "raw" 指的是这些数据只是普通文本,没有任何标注信息[^1] 。(可以进行过滤,比如去除格式字符或未知语言的文档。) @@ -116,7 +122,9 @@ LLM 的第一阶段训练被称为预训练,旨在创建一个初始的预训 大多数现代 LLM 基于 transformer 架构,这是一种深度神经网络架构,首次在 2017 年的论文《Attention Is All You Need》中提出。为了理解 LLM,我们需要简要回顾一下最初为机器翻译开发的原始 Transformer,该架构用于将英文文本翻译成德文和法文。图 1.4 显示了 Transformer 架构的简化版本。 - +
+ +
图 1.4 中的 Transformer 架构由两个子模块组成:编码器和解码器。编码器模块处理文本输入,将其编码为一系列数值表示或向量,以捕捉输入的上下文信息。然后,解码器模块利用这些编码向量生成输出文本。例如,在翻译任务中,编码器将源语言文本编码为向量,而解码器则将这些向量解码为目标语言的文本。编码器和解码器都由多个层通过自注意力机制相连。您可能会对输入的预处理和编码过程有许多疑问,这些将在后续章节的逐步实现中详细解答。 @@ -134,13 +142,17 @@ BERT 是基于原始 Transformer 架构的编码器子模块,与 GPT 的训练 > > **个人思考:** 为什么BERT适合用于文档分类或情感预测,这主要是基于BERT的训练模式,BERT也是基于Transformer架构,但它采用的是 **masked language model (MLM)** 训练方式,即在训练过程中,它会随机遮掩输入句子中的一些词(称为“masked”),并让模型预测这些被遮掩的词。这种训练策略被称为**掩蔽词预测**。这一独特的训练方法使得 BERT 能够更好地理解句子的上下文,因为它需要根据整句话的前后部分来预测被遮掩的词。这种双向(bidirectional)的训练使得 BERT 更适合处理需要全局上下文理解的任务,而文档分类或情感预测正是两种对于上下文语义理解要求非常高的场景。 - +
+ +
另一方面,GPT 专注于原始 Transformer 架构中的解码器部分,被设计用于需要生成文本的任务。这些任务包括机器翻译、文本摘要、小说创作和编写代码等。在本章接下来的部分,我们将更详细地讨论 GPT 架构,并在本书中从零开始实现它。 GPT 模型主要是为文本补全任务设计和训练的,但它们在能力上展现出显著的多样性。这些模型擅长执行zero-shot 和few-shot 学习任务。zero-shot 学习指的是在没有先前具体示例的情况下,能够处理完全未见过的任务。而few-shot 学习则是指模型可以从用户提供的极少量示例中进行学习,如图 1.6 所示。 - +
+ +
> [!NOTE] > @@ -154,7 +166,9 @@ GPT 模型主要是为文本补全任务设计和训练的,但它们在能力 流行的 GPT 和 BERT 类模型的大型训练数据集代表了丰富而全面的文本语料库,涵盖数十亿个单词,涉及各种主题以及自然语言和计算机语言。为了提供一个具体的例子,表 1.1 总结了用于预训练 GPT-3 的数据集,这个模型是第一版 ChatGPT 的基础。 - +
+ +
通过表1.1能得出的主要结论是,这个训练数据集的规模和多样性使得这些模型在各种任务中表现优异,包括不同语言的语法、语义和上下文信息,甚至还可以处理一些需要通用知识的任务。 @@ -184,15 +198,27 @@ GPT 模型主要是为文本补全任务设计和训练的,但它们在能力 GPT-3 是该模型的增强版,具有更多参数,并在更大的数据集上进行训练。而在 ChatGPT 中提供的原始模型是通过在一个大型指令数据集上微调 GPT-3 而创建的,这一过程使用了 OpenAI 的 InstructGPT 论文中的方法,我们将在第 7 章“使用人类反馈进行微调以遵循指令”中详细介绍。如图 1.6 所示,这些模型在文本完成方面表现出色,并且还能够进行拼写纠正、分类和语言翻译等其他任务。考虑到 GPT 模型是在相对简单的下一个单词预测任务上进行预训练的,这一点确实非常惊人,如图 1.7 所示。 - +
+ +
下一个单词预测任务是一种自监督学习的方法,这是一种自我标注的形式。这意味着我们不需要专门收集训练数据的标签,而是可以利用数据本身的结构:我们可以把句子或文档中的下一个单词作为模型需要预测的标签。由于下一个单词预测任务允许我们“动态”生成标签,因此我们可以利用大量未标记的文本数据集来训练 LLM,这在第 1.5 节中也有讨论,即利用大型数据集。 与我们在 1.4 节讨论的原始 Transformer 架构相比,通用 GPT 架构相对简单。实际上,它仅包含解码器部分,而没有编码器,如图 1.8 所示。由于像 GPT 这样的解码器模型是通过逐字预测生成文本,因此它们被视为一种自回归模型。自回归模型会将之前的输出作为未来预测的输入。因此,在 GPT 中,每个新词的选择都是基于之前的文本序列,这样可以提高生成文本的连贯性。 +> [!NOTE] +> +> 自回归,是一种用于`时间序列`分析的**统计技术**,它假设时间序列的`当前值`是其`过去值`的**函数**。 +> +> 自回归模型,使用类似的数学技术来确定序列中,**元素之间**的**概率相关性**。然后,它们使用所得知识,来猜测未知序列中的下一个元素。 +> +> 自相关,用于衡量序列中元素之间的相关性;一般会圈定一个时间窗口,计算窗口内元素之间的相关性。大部分场景下,窗口之前的元素,对窗口之后的元素影响较小。 + 像 GPT-3 这样的模型架构明显大于原始的 Transformer 模型。例如,原始的 Transformer 将编码器和解码器块重复了六次,而 GPT-3 具有 96 层 Transformer,总共有 1750 亿个参数。 - +
+ +
GPT-3 于 2020 年推出,按照深度学习和大语言模型(LLM)开发的标准,如今看来,已经是很久以前了。然而,像 Meta 的 Llama 模型这样的最新架构依然基于相同的基本原理,仅做了些许修改。因此,理解 GPT 的重要性依旧不减。本书将专注于实现 GPT 背后的核心架构,并提供有关其他 LLM 所采用的特定调整的参考。 @@ -206,7 +232,9 @@ GPT-3 于 2020 年推出,按照深度学习和大语言模型(LLM)开发 在本章中,我们为理解LLM打下了基础。在本书的其余部分,我们将从零开始编码一个 LLM,使用 GPT 的基本理念作为框架,并分为三个阶段进行,如图 1.9 所示。 - +
+ +
首先,我们将学习基本的数据预处理步骤,并编写 LLM 核心的注意力机制代码。 diff --git a/cn-Book/2.处理文本数据.md b/cn-Book/2.处理文本数据.md index 1311885..3dfcbb3 100644 --- a/cn-Book/2.处理文本数据.md +++ b/cn-Book/2.处理文本数据.md @@ -25,13 +25,13 @@ -在上一章中,我们介绍了大语言模型(LLM)的基本结构,并了解到它们会基于海量的文本数据集进行预训练。我们特别关注的是仅使用通用 Transformer 架构中解码器部分的 LLM,这也是 ChatGPT 和其他流行的类似 GPT 的 LLM 所依赖的模型。 +在上一章中,我们介绍了大语言模型(LLM)的基本结构,并了解到 LLM 用海量文本数据集进行`预训练`。我们特别关注仅用**解码器**(Transformer 架构下)的 LLM,这也是 ChatGPT 和其他流行 GPT 的 LLM 所依赖的模型。 -在预训练阶段,LLM 逐字处理文本。通过使用下一个单词预测任务训练拥有数百万到数十亿参数的 LLM,最终能够生成具有出色能力的模型。这些模型随后可以进一步微调,以遵循指令或执行特定目标任务。然而,在我们接下来几章中实现和训练 LLM 之前,我们需要准备训练数据集,这也是本章的重点,如图 2.1 所示。 +在**预训练**阶段,LLM 逐字处理文本。通过**预测下一个单词任务**,来训练出拥有数百万到数十亿参数的 LLM,最终生成的模型具有出色的能力。随后可以进一步微调模型,以遵循指令或执行特定目标任务。然而,在我们接下来几章中实现和训练 LLM 之前,我们需要准备训练数据集,这也是本章的重点,如图 2.1 所示。 -在本章中,您将学习如何为训练 LLM 准备输入文本。这包括将文本拆分为单个单词和子词token,并将这些token编码为 LLM 的向量表示。您还将了解一些先进的token分割方案,比如字节对编码,这种方法在像 GPT 这样的流行 LLM 中得到应用。最后,我们将实现一个采样和数据加载策略,以生成后续章节中训练 LLM 所需的输入输出数据对。 +在本章中,您将学习如何为训练 LLM 准备输入文本。这包括将文本拆分为单个单词和子词token,并将这些token编码为 LLM 的向量表示。您还将了解一些先进的token分割方案,比如字节对编码,流行 LLM 中常用此类优化后的方案。最后,我们将实现一个采样和数据加载策略,以生成后续章节中训练 LLM 所需的输入输出数据对。