From d434afc7188120435be84b636574b5926340b4ea Mon Sep 17 00:00:00 2001 From: skindhu Date: Thu, 24 Oct 2024 11:07:33 +0800 Subject: [PATCH] add first chapter --- Book/1.理解大语言模型.md | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/Book/1.理解大语言模型.md b/Book/1.理解大语言模型.md index 5b0b4ec..1b81df3 100644 --- a/Book/1.理解大语言模型.md +++ b/Book/1.理解大语言模型.md @@ -5,6 +5,14 @@ - **从零开始构建大语言模型的计划** +- [1.1 LLM 是什么?](#11-llm-是什么) +- [1.2 LLMs 的应用](#12-llms-的应用) +- [1.3 构建和使用 LLMs 的步骤](#13-构建和使用-llms-的步骤) +- [1.4 介绍 Transformer 架构](#14-介绍-transformer-架构) +- [1.5 利用大型数据集](#15-利用大型数据集) +- [1.6 深入剖析GPT架构](#16-深入剖析gpt架构) +- [1.7 构建大语言模型](#17-构建大语言模型) +- [1.8 本章总结](#18-本章总结) @@ -34,7 +42,7 @@ LLMs 采用了一种称为 transformer 的架构(在第 1.4 节中将详细讨 由于 LLMs 能够生成文本,因此它们通常被称为一种生成式人工智能 (AI),常缩写为生成 AI 或 GenAI。如图 1.1 所示,人工智能涵盖了创造能执行类似人类智能任务的更广泛领域,包括理解语言、识别模式和做出决策,并包括机器学习和深度学习等子领域。 - + 用于实现人工智能的算法是机器学习领域的核心。机器学习具体涉及开发可以从数据中学习并基于数据做出预测或决策的算法,而不需要明确的编程。举例来说,垃圾邮件过滤器就是机器学习的一个实际应用。与其手动编写规则来识别垃圾邮件,不如将标记为垃圾邮件和合法邮件的电子邮件示例输入给机器学习算法。通过最小化训练数据集上的预测误差,模型能够学习识别垃圾邮件的模式和特征,从而将新邮件分类为垃圾邮件或合法邮件。 @@ -46,13 +54,13 @@ LLMs 采用了一种称为 transformer 的架构(在第 1.4 节中将详细讨 接下来的章节将介绍 LLMs 能解决的问题、LLMs 面临的挑战,以及我们将在本书中实现的一般 LLM 架构。 - + ## 1.2 LLMs 的应用 由于具备解析和理解非结构化文本数据的高级能力,LLMs 在多个领域有着广泛的应用。目前,LLMs 被广泛用于机器翻译、新文本生成(见图 1.2)、情感分析、文本摘要等多种任务。最近,LLMs 还被用于内容创作,比如撰写小说、文章,甚至计算机代码。 - + LLMs 还可以支持复杂的聊天机器人和虚拟助手,例如 OpenAI 的 ChatGPT 或谷歌的 Gemini(以前称为 Bard),这些助手能够回答用户的问题,并提升传统搜索引擎的功能,如 Google Search 和 Microsoft Bing。 @@ -62,7 +70,7 @@ LLMs 还可以支持复杂的聊天机器人和虚拟助手,例如 OpenAI 的 在本书中,我们将重点了解 LLMs 的工作原理,从基础开始,编码一个能够生成文本的 LLM。我们还将学习使 LLMs 执行查询的技术,包括回答问题、总结文本、将文本翻译成不同语言等。换句话说,在本书中,我们将通过一步步构建的方式,学习复杂的 LLM 助手(如 ChatGPT)的工作原理。 - + ## 1.3 构建和使用 LLMs 的步骤 @@ -82,7 +90,7 @@ LLMs 还可以支持复杂的聊天机器人和虚拟助手,例如 OpenAI 的 > + 冻结部分权重的微调,一般冻结低层(往往是学习到的基础语言特征),对高层的权重进行调整。一般用于加速训练,或者数据量较小,全权重微调可能导致过拟合的情况下使用。 > + GPT的训练任务是通用的语言建模任务,主要是根据已有上下文预测下一个token,这种训练让模型具备了基础的语言生成能力。但是ChatGPT的对话任务不仅要求生成连贯的文本,还要求模型理解对话上下文、维护多轮对话的一致性、处理指令性任务,并在某些场景下具备情感理解能力。为了解决这些更复杂的需求,模型必须对大量的对话数据进行全模型微调,以调整所有的权重,使模型不仅在语言生成上有良好的表现,也能在对话上下文中生成更加相关和符合语境的回复。 - + 如图 1.3 所示,创建 LLM 的第一步是用大量文本数据进行训练,这些数据有时被称为原始文本。这里的 "raw" 指的是这些数据只是普通文本,没有任何标注信息[^1] 。(可以进行过滤,比如去除格式字符或未知语言的文档。) @@ -94,13 +102,13 @@ LLM 的第一阶段训练被称为预训练,旨在创建一个初始的预训 在本书中,我们将介绍 LLM 的预训练和微调的代码实现,并将在预训练基础 LLM 后,深入探讨指令微调和分类微调的具体细节。 - + ## 1.4 介绍 Transformer 架构 大多数现代 LLM 基于 transformer 架构,这是一种深度神经网络架构,首次在 2017 年的论文《Attention Is All You Need》中提出。为了理解 LLM,我们需要简要回顾一下最初为机器翻译开发的原始 transformer,该架构用于将英文文本翻译成德文和法文。图 1.4 显示了 transformer 架构的简化版本。 - + 图 1.4 中的 transformer 架构由两个子模块组成:编码器和解码器。编码器模块处理输入文本,将其编码为一系列数值表示或向量,以捕捉输入的上下文信息。然后,解码器模块利用这些编码向量生成输出文本。例如,在翻译任务中,编码器将源语言文本编码为向量,而解码器则将这些向量解码为目标语言的文本。编码器和解码器都由多个层通过自注意力机制相连。您可能会对输入的预处理和编码过程有许多疑问,这些将在后续章节的逐步实现中详细解答。 @@ -118,13 +126,13 @@ 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] > @@ -132,13 +140,13 @@ GPT 模型主要是为文本补全任务设计和训练的,但它们在能力 > > 如今的 LLM 大部分是基于上一节提到的 Transformer 架构来实现。因此,在文献中,Transformers 和 LLMs 常常被视为同义词。然而,值得注意的是,并非所有的 Transformers 都是 LLM,因为它们也可以用于计算机视觉。同时,并非所有的 LLM 都是基于 Transformers 的,市场上也有一些基于递归和卷积架构的大语言模型。这些替代方法的主要目的是提高 LLM 的计算效率。不过,这些替代架构能否与基于 Transformer 的 LLM 的能力相竞争,以及它们是否会在实际中得到应用,还需要进一步观察。为了简单起见,本书将“LLM”一词用来指代类似于 GPT 的基于 Transformer 的 LLM。(感兴趣的读者可以在本章末尾的进一步阅读部分找到相关文献。)--> - + ## 1.5 利用大型数据集 流行的 GPT 和 BERT 类模型的大型训练数据集包含丰富多样的文本语料,涉及数十亿个单词,并涵盖广泛的话题以及自然语言和计算机语言。为了提供一个具体的例子,表 1.1 总结了用于预训练 GPT-3 的数据集,这个数据集是第一个版本 ChatGPT 的基础模型。 - + 通过表1.1能得出的主要结论是,这个训练数据集的规模和多样性使得这些模型在各种任务中表现优异,包括语言的语法、语义和上下文,甚至还可以处理一些需要通用知识的任务。 @@ -158,7 +166,7 @@ GPT 模型主要是为文本补全任务设计和训练的,但它们在能力 在本书中,我们将一步步实现预训练代码,并利用它来预训练一个 LLM。所有的计算都将在普通消费级硬件上进行。在实现预训练代码后,我们将学习如何重用公开可用的模型权重,并将这些权重加载到我们所实现的架构中,这样在本书后续微调 LLM 时,我们就可以跳过昂贵的预训练阶段。 - + ## 1.6 深入剖析GPT架构 @@ -168,7 +176,7 @@ GPT 模型主要是为文本补全任务设计和训练的,但它们在能力 GPT-3 是该模型的增强版,具有更多参数,并在更大的数据集上进行训练。而在 ChatGPT 中提供的原始模型是通过在一个大型指令数据集上微调 GPT-3 而创建的,这一过程使用了 OpenAI 的 InstructGPT 论文中的方法,我们将在第 7 章“使用人类反馈进行微调以遵循指令”中详细介绍。如图 1.6 所示,这些模型在文本完成方面表现出色,并且还能够进行拼写纠正、分类和语言翻译等其他任务。考虑到 GPT 模型是在相对简单的下一个单词预测任务上进行预训练的,这一点确实非常惊人,如图 1.7 所示。 - + 下一个单词预测任务是一种自我监督学习的方法,这是一种自我标注的形式。这意味着我们不需要专门收集训练数据的标签,而是可以利用数据本身的结构:我们可以把句子或文档中的下一个单词作为模型需要预测的标签。由于下一个单词预测任务允许我们“动态”生成标签,因此我们可以利用大量未标记的文本数据集来训练 LLM,这在第 1.5 节中也有讨论,即利用大型数据集。 @@ -176,7 +184,7 @@ GPT-3 是该模型的增强版,具有更多参数,并在更大的数据集 像 GPT-3 这样的架构明显大于原始的 transformer 模型。例如,原始的 transformer 将编码器和解码器块重复了六次,而 GPT-3 具有 96 层 transformer,总共有 1750 亿个参数。 - + GPT-3 于 2020 年推出,按照深度学习和大语言模型(LLM)开发的标准,如今看来,已经是很久以前了。然而,像 Meta 的 Llama 模型这样的最新架构依然基于相同的基本概念,仅做了些许修改。因此,理解 GPT 的重要性依旧不减。本书将专注于实现 GPT 背后的核心架构,并提供有关其他 LLM 所采用的特定调整的参考。 @@ -184,7 +192,7 @@ GPT-3 于 2020 年推出,按照深度学习和大语言模型(LLM)开发 模型能够执行未明确训练的任务被称为“涌现行为”。这种能力不是通过明确的训练传授的,而是模型接触大量多语言数据和多样化上下文后自然而然涌现的结果。GPT 模型能够“学习”不同语言之间的翻译模式,并执行翻译任务,尽管它们并没有专门针对这些任务进行训练,这展示了这些大规模生成语言模型的优势和能力。我们可以在不需要为每个任务使用不同模型的情况下,完成多种任务。 - + ## 1.7 构建大语言模型 @@ -202,7 +210,7 @@ GPT-3 于 2020 年推出,按照深度学习和大语言模型(LLM)开发 希望你能期待踏上这段激动人心的旅程! - + ## 1.8 本章总结