add first chapter

This commit is contained in:
skindhu 2024-10-24 10:50:19 +08:00
parent 63564b1d9c
commit 5bf6ac6613
1 changed files with 18 additions and 12 deletions

View File

@ -34,7 +34,7 @@ LLMs 采用了一种称为 transformer 的架构(在第 1.4 节中将详细讨
由于 LLMs 能够生成文本,因此它们通常被称为一种生成式人工智能 (AI),常缩写为生成 AI 或 GenAI。如图 1.1 所示,人工智能涵盖了创造能执行类似人类智能任务的更广泛领域,包括理解语言、识别模式和做出决策,并包括机器学习和深度学习等子领域。 由于 LLMs 能够生成文本,因此它们通常被称为一种生成式人工智能 (AI),常缩写为生成 AI 或 GenAI。如图 1.1 所示,人工智能涵盖了创造能执行类似人类智能任务的更广泛领域,包括理解语言、识别模式和做出决策,并包括机器学习和深度学习等子领域。
<img src="../Image/figure1.1.png" style="zoom:100%;" /> <img src="../Image/figure1.1.png" style="zoom:45%;" />
用于实现人工智能的算法是机器学习领域的核心。机器学习具体涉及开发可以从数据中学习并基于数据做出预测或决策的算法,而不需要明确的编程。举例来说,垃圾邮件过滤器就是机器学习的一个实际应用。与其手动编写规则来识别垃圾邮件,不如将标记为垃圾邮件和合法邮件的电子邮件示例输入给机器学习算法。通过最小化训练数据集上的预测误差,模型能够学习识别垃圾邮件的模式和特征,从而将新邮件分类为垃圾邮件或合法邮件。 用于实现人工智能的算法是机器学习领域的核心。机器学习具体涉及开发可以从数据中学习并基于数据做出预测或决策的算法,而不需要明确的编程。举例来说,垃圾邮件过滤器就是机器学习的一个实际应用。与其手动编写规则来识别垃圾邮件,不如将标记为垃圾邮件和合法邮件的电子邮件示例输入给机器学习算法。通过最小化训练数据集上的预测误差,模型能够学习识别垃圾邮件的模式和特征,从而将新邮件分类为垃圾邮件或合法邮件。
@ -52,7 +52,7 @@ LLMs 采用了一种称为 transformer 的架构(在第 1.4 节中将详细讨
由于具备解析和理解非结构化文本数据的高级能力LLMs 在多个领域有着广泛的应用。目前LLMs 被广泛用于机器翻译、新文本生成(见图 1.2、情感分析、文本摘要等多种任务。最近LLMs 还被用于内容创作,比如撰写小说、文章,甚至计算机代码。 由于具备解析和理解非结构化文本数据的高级能力LLMs 在多个领域有着广泛的应用。目前LLMs 被广泛用于机器翻译、新文本生成(见图 1.2、情感分析、文本摘要等多种任务。最近LLMs 还被用于内容创作,比如撰写小说、文章,甚至计算机代码。
<img src="../Image/figure1.2.png" style="zoom:100%;" /> <img src="../Image/figure1.2.png" style="zoom:45%;" />
LLMs 还可以支持复杂的聊天机器人和虚拟助手,例如 OpenAI 的 ChatGPT 或谷歌的 Gemini以前称为 Bard这些助手能够回答用户的问题并提升传统搜索引擎的功能如 Google Search 和 Microsoft Bing。 LLMs 还可以支持复杂的聊天机器人和虚拟助手,例如 OpenAI 的 ChatGPT 或谷歌的 Gemini以前称为 Bard这些助手能够回答用户的问题并提升传统搜索引擎的功能如 Google Search 和 Microsoft Bing。
@ -76,13 +76,13 @@ LLMs 还可以支持复杂的聊天机器人和虚拟助手,例如 OpenAI 的
> [!TIP] > [!TIP]
> >
> 思考:** 预训练的数据集已经学习好了语言模型的基础能力包括语法、词汇、语言结构可以相对准确的预测下一个token。而微调则是利用特定领域的数据来让模型适应某些特定的任务。 > **思考:** 预训练的数据集已经学习好了语言模型的基础能力包括语法、词汇、语言结构可以相对准确的预测下一个token。而微调则是利用特定领域的数据来让模型适应某些特定的任务。
> >
> + 微调默认情况下会调整所有权重,但由于权重已经经过预训练,大多数情况下,微调只会对预训练权重进行微小调整,而不是大幅度改变。这种方式能够让模型保持原有的语言生成能力,同时使其在特定任务上表现得更好。 > + 微调默认情况下会调整所有权重,但由于权重已经经过预训练,大多数情况下,微调只会对预训练权重进行微小调整,而不是大幅度改变。这种方式能够让模型保持原有的语言生成能力,同时使其在特定任务上表现得更好。
> + 冻结部分权重的微调,一般冻结低层(往往是学习到的基础语言特征),对高层的权重进行调整。一般用于加速训练,或者数据量较小,全权重微调可能导致过拟合的情况下使用。 > + 冻结部分权重的微调,一般冻结低层(往往是学习到的基础语言特征),对高层的权重进行调整。一般用于加速训练,或者数据量较小,全权重微调可能导致过拟合的情况下使用。
> + GPT的训练任务是通用的语言建模任务主要是根据已有上下文预测下一个token这种训练让模型具备了基础的语言生成能力。但是ChatGPT的对话任务不仅要求生成连贯的文本还要求模型理解对话上下文、维护多轮对话的一致性、处理指令性任务并在某些场景下具备情感理解能力。为了解决这些更复杂的需求模型必须对大量的对话数据进行全模型微调以调整所有的权重使模型不仅在语言生成上有良好的表现也能在对话上下文中生成更加相关和符合语境的回复。 > + GPT的训练任务是通用的语言建模任务主要是根据已有上下文预测下一个token这种训练让模型具备了基础的语言生成能力。但是ChatGPT的对话任务不仅要求生成连贯的文本还要求模型理解对话上下文、维护多轮对话的一致性、处理指令性任务并在某些场景下具备情感理解能力。为了解决这些更复杂的需求模型必须对大量的对话数据进行全模型微调以调整所有的权重使模型不仅在语言生成上有良好的表现也能在对话上下文中生成更加相关和符合语境的回复。
<img src="../Image/figure1.3.png" style="zoom:100%;" /> <img src="../Image/figure1.3.png" style="zoom:45%;" />
如图 1.3 所示,创建 LLM 的第一步是用大量文本数据进行训练,这些数据有时被称为原始文本。这里的 "raw" 指的是这些数据只是普通文本,没有任何标注信息[^1] 。(可以进行过滤,比如去除格式字符或未知语言的文档。) 如图 1.3 所示,创建 LLM 的第一步是用大量文本数据进行训练,这些数据有时被称为原始文本。这里的 "raw" 指的是这些数据只是普通文本,没有任何标注信息[^1] 。(可以进行过滤,比如去除格式字符或未知语言的文档。)
@ -100,29 +100,35 @@ LLM 的第一阶段训练被称为预训练,旨在创建一个初始的预训
大多数现代 LLM 基于 transformer 架构,这是一种深度神经网络架构,首次在 2017 年的论文《Attention Is All You Need》中提出。为了理解 LLM我们需要简要回顾一下最初为机器翻译开发的原始 transformer该架构用于将英文文本翻译成德文和法文。图 1.4 显示了 transformer 架构的简化版本。 大多数现代 LLM 基于 transformer 架构,这是一种深度神经网络架构,首次在 2017 年的论文《Attention Is All You Need》中提出。为了理解 LLM我们需要简要回顾一下最初为机器翻译开发的原始 transformer该架构用于将英文文本翻译成德文和法文。图 1.4 显示了 transformer 架构的简化版本。
<img src="../Image/figure1.4.png" style="zoom:100%;" /> <img src="../Image/figure1.4.png" style="zoom:45%;" />
图 1.4 中的 transformer 架构由两个子模块组成:编码器和解码器。编码器模块处理输入文本,将其编码为一系列数值表示或向量,以捕捉输入的上下文信息。然后,解码器模块利用这些编码向量生成输出文本。例如,在翻译任务中,编码器将源语言文本编码为向量,而解码器则将这些向量解码为目标语言的文本。编码器和解码器都由多个层通过自注意力机制相连。您可能会对输入的预处理和编码过程有许多疑问,这些将在后续章节的逐步实现中详细解答。 图 1.4 中的 transformer 架构由两个子模块组成:编码器和解码器。编码器模块处理输入文本,将其编码为一系列数值表示或向量,以捕捉输入的上下文信息。然后,解码器模块利用这些编码向量生成输出文本。例如,在翻译任务中,编码器将源语言文本编码为向量,而解码器则将这些向量解码为目标语言的文本。编码器和解码器都由多个层通过自注意力机制相连。您可能会对输入的预处理和编码过程有许多疑问,这些将在后续章节的逐步实现中详细解答。
transformers 和 LLMs 的一个关键组成部分是自注意力机制(未显示),它使模型能够相对地权衡序列中不同单词或标记的重要性。这个机制帮助模型捕捉输入数据中的远程依赖关系和上下文关系,从而提高生成连贯且与上下文相关的输出的能力。不过,由于自注意力机制的复杂性,我们将在第三章中逐步讨论和实现它。此外,第二章《处理文本数据》中,我们也将讨论并实现创建模型输入所需的数据预处理步骤。 transformers 和 LLMs 的一个关键组成部分是自注意力机制(未显示),它使模型能够相对地权衡序列中不同单词或标记的重要性。这个机制帮助模型捕捉输入数据中的远程依赖关系和上下文关系,从而提高生成连贯且与上下文相关的输出的能力。不过,由于自注意力机制的复杂性,我们将在第三章中逐步讨论和实现它。此外,第二章《处理文本数据》中,我们也将讨论并实现创建模型输入所需的数据预处理步骤。
> [!TIP]
>
> **思考:** 早期用于翻译任务的模型一般使用RNNRNN的核心是循环结构也就是会把当前的输出和之前的状态结合起来再输入到下一步。这样网络就可以记住前面输入的信息并把这些信息应用到后续的预测中。例如当你输入一段文字时RNN会记住前面的单词以帮助理解后面的单词。但这种机制也有一个非常明显的不足长距离依赖问题。虽然RNN能“记住”前面的信息但它对非常长的序列记忆能力有限。随着序列变长早期信息会逐渐被“遗忘”导致长距离依赖的问题。这就像你在听一长段话可能会逐渐忘记开头说的内容。而Transformer架构通过自注意力机制后面详细介绍实现机制实现能够关注序列中的任意位置而不需要经过层层传递。因此无论信息在序列中距离多远Transformer都能有效地捕捉和利用长距离的依赖关系。 > **思考:** 早期用于翻译任务的模型一般使用RNNRNN的核心是循环结构也就是会把当前的输出和之前的状态结合起来再输入到下一步。这样网络就可以记住前面输入的信息并把这些信息应用到后续的预测中。例如当你输入一段文字时RNN会记住前面的单词以帮助理解后面的单词。但这种机制也有一个非常明显的不足长距离依赖问题。虽然RNN能“记住”前面的信息但它对非常长的序列记忆能力有限。随着序列变长早期信息会逐渐被“遗忘”导致长距离依赖的问题。这就像你在听一长段话可能会逐渐忘记开头说的内容。而Transformer架构通过自注意力机制后面详细介绍实现机制实现能够关注序列中的任意位置而不需要经过层层传递。因此无论信息在序列中距离多远Transformer都能有效地捕捉和利用长距离的依赖关系。
transformer 架构的后续变体,包括 BERT双向编码器表示来自 transformers 的缩写)和各种 GPT 模型(生成预训练变换器的缩写),都是基于这一概念进行构建的,以适应不同的任务。(参考文献见附录 B。 transformer 架构的后续变体,包括 BERT双向编码器表示来自 transformers 的缩写)和各种 GPT 模型(生成预训练变换器的缩写),都是基于这一概念进行构建的,以适应不同的任务。(参考文献见附录 B。
BERT 是基于原始 transformer 架构的编码器子模块,与 GPT 的训练方法有所不同。GPT 主要用于生成任务,而 BERT 及其变体则专注于掩码词预测,即模型在给定句子中预测被掩码或隐藏的词,如图 1.5 所示。这种独特的训练策略使得 BERT 在文本分类任务中具备优势包括情感预测和文档分类。作为应用实例截至目前Twitter 正在使用 BERT 来检测有害内容。 BERT 是基于原始 transformer 架构的编码器子模块,与 GPT 的训练方法有所不同。GPT 主要用于生成任务,而 BERT 及其变体则专注于掩码词预测,即模型在给定句子中预测被掩码或隐藏的词,如图 1.5 所示。这种独特的训练策略使得 BERT 在文本分类任务中具备优势包括情感预测和文档分类。作为应用实例截至目前Twitter 正在使用 BERT 来检测有害内容。
> [!TIP]
>
> **思考:** 为什么BERT适合用于文档分类或情感预测这主要是基于BERT的训练模式BERT也是基于Transformer架构但它采用的是 **masked language model (MLM)** 训练方式即在训练过程中它会随机遮掩输入句子中的一些词称为“masked”并让模型预测这些被遮掩的词。这种训练策略被称为**掩蔽词预测**。这一独特的训练方法使得 BERT 能够更好地理解句子的上下文因为它需要根据整句话的前后部分来预测被遮掩的词。这种双向bidirectional的训练使得 BERT 更适合处理需要全局上下文理解的任务,而文档分类或情感预测正是两种对于上下文语义理解要求非常高的场景。 > **思考:** 为什么BERT适合用于文档分类或情感预测这主要是基于BERT的训练模式BERT也是基于Transformer架构但它采用的是 **masked language model (MLM)** 训练方式即在训练过程中它会随机遮掩输入句子中的一些词称为“masked”并让模型预测这些被遮掩的词。这种训练策略被称为**掩蔽词预测**。这一独特的训练方法使得 BERT 能够更好地理解句子的上下文因为它需要根据整句话的前后部分来预测被遮掩的词。这种双向bidirectional的训练使得 BERT 更适合处理需要全局上下文理解的任务,而文档分类或情感预测正是两种对于上下文语义理解要求非常高的场景。
<img src="../Image/figure1.5.png" style="zoom:100%;" /> <img src="../Image/figure1.5.png" style="zoom:45%;" />
另一方面GPT 专注于原始 Transformer 架构中的解码器部分,被设计用于需要生成文本的任务。这些任务包括机器翻译、文本摘要、小说创作和编写代码等。在本章接下来的部分,我们将更详细地讨论 GPT 架构,并在本书中从零开始实现它。 另一方面GPT 专注于原始 Transformer 架构中的解码器部分,被设计用于需要生成文本的任务。这些任务包括机器翻译、文本摘要、小说创作和编写代码等。在本章接下来的部分,我们将更详细地讨论 GPT 架构,并在本书中从零开始实现它。
GPT 模型主要是为文本补全任务设计和训练的但它们在能力上展现出显著的多样性。这些模型擅长执行zero-shot 和few-shot 学习任务。zero-shot 学习指的是在没有先前具体示例的情况下能够处理完全未见过的任务。而few-shot 学习则是指模型可以从用户提供的极少量示例中进行学习,如图 1.6 所示。 GPT 模型主要是为文本补全任务设计和训练的但它们在能力上展现出显著的多样性。这些模型擅长执行zero-shot 和few-shot 学习任务。zero-shot 学习指的是在没有先前具体示例的情况下能够处理完全未见过的任务。而few-shot 学习则是指模型可以从用户提供的极少量示例中进行学习,如图 1.6 所示。
<img src="../Image/figure1.6.png" style="zoom:100%;" /> <img src="../Image/figure1.6.png" style="zoom:45%;" />
[^TRANSFORMERS 与 LLMS]: 如今的 LLM 大部分是基于上一节提到的 Transformer 架构来实现。因此在文献中Transformers 和 LLMs 常常被视为同义词。然而,值得注意的是,并非所有的 Transformers 都是 LLM因为它们也可以用于计算机视觉。同时并非所有的 LLM 都是基于 Transformers 的,市场上也有一些基于递归和卷积架构的大语言模型。这些替代方法的主要目的是提高 LLM 的计算效率。不过,这些替代架构能否与基于 Transformer 的 LLM 的能力相竞争以及它们是否会在实际中得到应用还需要进一步观察。为了简单起见本书将“LLM”一词用来指代类似于 GPT 的基于 Transformer 的 LLM。感兴趣的读者可以在本章末尾的进一步阅读部分找到相关文献。 <!-- TRANSFORMERS 与 LLM
如今的 LLM 大部分是基于上一节提到的 Transformer 架构来实现。因此在文献中Transformers 和 LLMs 常常被视为同义词。然而,值得注意的是,并非所有的 Transformers 都是 LLM因为它们也可以用于计算机视觉。同时并非所有的 LLM 都是基于 Transformers 的,市场上也有一些基于递归和卷积架构的大语言模型。这些替代方法的主要目的是提高 LLM 的计算效率。不过,这些替代架构能否与基于 Transformer 的 LLM 的能力相竞争以及它们是否会在实际中得到应用还需要进一步观察。为了简单起见本书将“LLM”一词用来指代类似于 GPT 的基于 Transformer 的 LLM。感兴趣的读者可以在本章末尾的进一步阅读部分找到相关文献。-->
@ -130,7 +136,7 @@ GPT 模型主要是为文本补全任务设计和训练的,但它们在能力
流行的 GPT 和 BERT 类模型的大型训练数据集包含丰富多样的文本语料,涉及数十亿个单词,并涵盖广泛的话题以及自然语言和计算机语言。为了提供一个具体的例子,表 1.1 总结了用于预训练 GPT-3 的数据集,这个数据集是第一个版本 ChatGPT 的基础模型。 流行的 GPT 和 BERT 类模型的大型训练数据集包含丰富多样的文本语料,涉及数十亿个单词,并涵盖广泛的话题以及自然语言和计算机语言。为了提供一个具体的例子,表 1.1 总结了用于预训练 GPT-3 的数据集,这个数据集是第一个版本 ChatGPT 的基础模型。
<img src="../Image/table1.1.png" style="zoom:100%;" /> <img src="../Image/table1.1.png" style="zoom:45%;" />
通过表1.1能得出的主要结论是,这个训练数据集的规模和多样性使得这些模型在各种任务中表现优异,包括语言的语法、语义和上下文,甚至还可以处理一些需要通用知识的任务。 通过表1.1能得出的主要结论是,这个训练数据集的规模和多样性使得这些模型在各种任务中表现优异,包括语言的语法、语义和上下文,甚至还可以处理一些需要通用知识的任务。
@ -160,7 +166,7 @@ GPT-3 论文的作者没有公开训练数据集,但有一个与其相当的
GPT-3 是该模型的增强版,具有更多参数,并在更大的数据集上进行训练。而在 ChatGPT 中提供的原始模型是通过在一个大型指令数据集上微调 GPT-3 而创建的,这一过程使用了 OpenAI 的 InstructGPT 论文中的方法,我们将在第 7 章“使用人类反馈进行微调以遵循指令”中详细介绍。如图 1.6 所示,这些模型在文本完成方面表现出色,并且还能够进行拼写纠正、分类和语言翻译等其他任务。考虑到 GPT 模型是在相对简单的下一个单词预测任务上进行预训练的,这一点确实非常惊人,如图 1.7 所示。 GPT-3 是该模型的增强版,具有更多参数,并在更大的数据集上进行训练。而在 ChatGPT 中提供的原始模型是通过在一个大型指令数据集上微调 GPT-3 而创建的,这一过程使用了 OpenAI 的 InstructGPT 论文中的方法,我们将在第 7 章“使用人类反馈进行微调以遵循指令”中详细介绍。如图 1.6 所示,这些模型在文本完成方面表现出色,并且还能够进行拼写纠正、分类和语言翻译等其他任务。考虑到 GPT 模型是在相对简单的下一个单词预测任务上进行预训练的,这一点确实非常惊人,如图 1.7 所示。
<img src="../Image/figure1.7.png" style="zoom:100%;" /> <img src="../Image/figure1.7.png" style="zoom:45%;" />
下一个单词预测任务是一种自我监督学习的方法,这是一种自我标注的形式。这意味着我们不需要专门收集训练数据的标签,而是可以利用数据本身的结构:我们可以把句子或文档中的下一个单词作为模型需要预测的标签。由于下一个单词预测任务允许我们“动态”生成标签,因此我们可以利用大量未标记的文本数据集来训练 LLM这在第 1.5 节中也有讨论,即利用大型数据集。 下一个单词预测任务是一种自我监督学习的方法,这是一种自我标注的形式。这意味着我们不需要专门收集训练数据的标签,而是可以利用数据本身的结构:我们可以把句子或文档中的下一个单词作为模型需要预测的标签。由于下一个单词预测任务允许我们“动态”生成标签,因此我们可以利用大量未标记的文本数据集来训练 LLM这在第 1.5 节中也有讨论,即利用大型数据集。
@ -168,7 +174,7 @@ GPT-3 是该模型的增强版,具有更多参数,并在更大的数据集
像 GPT-3 这样的架构明显大于原始的 transformer 模型。例如,原始的 transformer 将编码器和解码器块重复了六次,而 GPT-3 具有 96 层 transformer总共有 1750 亿个参数。 像 GPT-3 这样的架构明显大于原始的 transformer 模型。例如,原始的 transformer 将编码器和解码器块重复了六次,而 GPT-3 具有 96 层 transformer总共有 1750 亿个参数。
<img src="../Image/figure1.8.png" style="zoom:100%;" /> <img src="../Image/figure1.8.png" style="zoom:45%;" />
GPT-3 于 2020 年推出按照深度学习和大语言模型LLM开发的标准如今看来已经是很久以前了。然而像 Meta 的 Llama 模型这样的最新架构依然基于相同的基本概念,仅做了些许修改。因此,理解 GPT 的重要性依旧不减。本书将专注于实现 GPT 背后的核心架构,并提供有关其他 LLM 所采用的特定调整的参考。 GPT-3 于 2020 年推出按照深度学习和大语言模型LLM开发的标准如今看来已经是很久以前了。然而像 Meta 的 Llama 模型这样的最新架构依然基于相同的基本概念,仅做了些许修改。因此,理解 GPT 的重要性依旧不减。本书将专注于实现 GPT 背后的核心架构,并提供有关其他 LLM 所采用的特定调整的参考。
@ -182,7 +188,7 @@ GPT-3 于 2020 年推出按照深度学习和大语言模型LLM开发
在本章中我们为理解LLM打下了基础。在本书的其余部分我们将从零开始编码一个 LLM使用 GPT 的基本理念作为框架,并分为三个阶段进行,如图 1.9 所示。 在本章中我们为理解LLM打下了基础。在本书的其余部分我们将从零开始编码一个 LLM使用 GPT 的基本理念作为框架,并分为三个阶段进行,如图 1.9 所示。
<img src="../Image/figure1.9.png" style="zoom:45%;" /> <img src="../Image/figure1.9.png" width="80%" />
首先,我们将学习基本的数据预处理步骤,并编写 LLM 核心的注意力机制代码。 首先,我们将学习基本的数据预处理步骤,并编写 LLM 核心的注意力机制代码。