Build-A-Large-Language-Mode.../cn-Book/附录B. 参考文献和进一步阅读.md

19 KiB
Raw Blame History

- 第一章 - 第二掌 - 第三章 - 第四章 - 第五章 - 第六章 - 第七章

第一章

正如彭博社的一个团队通过从零开始在金融数据上预训练的一个 GPT 版本所展示的那样,定制构建的 LLM 能够胜过通用 LLM。这个定制的 LLM 在金融任务上优于 ChatGPT同时在通用 LLM 基准测试中保持了良好的性能:

现有的 LLM 也可以通过适配和微调来胜过通用 LLM正如 Google Research 和 Google DeepMind 的团队在医疗领域所展示的那样:

提出原始 Transformer 架构的论文:

最初的编码器式 Transformer称为 BERT

描述解码器式 GPT-3 模型的论文,该模型启发了现代 LLM并将作为本书中从零开始实现 LLM 的模板:

用于图像分类的原始 Vision Transformer它表明 Transformer 架构不仅限于文本输入:

两种实验性的但不太流行的LLM 架构,它们作为并非所有 LLM 都必须基于 Transformer 架构的示例:

Meta AI 的模型是类似 GPT 的流行实现,与 GPT-3 和 ChatGPT 相比,它是公开可用的:

对于对第 1.5 节中数据集参考文献感兴趣的读者,这篇论文介绍了 Eleuther AI 策划的公开可用的 The Pile 数据集:

以下论文提供了在第 1.6 节中提及并在第 7 章中更详细讨论的用于微调 GPT-3 的 InstructGPT 的参考文献:

第二掌

以下论文更深入地讨论了字节对编码是如何作为一种分词方法使用的:

用于训练 GPT-2 的字节对编码分词器的代码已由 OpenAI 开源:

OpenAI 提供了一个交互式 Web UI 来演示 GPT 模型中的字节对分词器是如何工作的:

对于那些有兴趣从头开始编写和训练 BPE 分词器的读者Andrej Karpathy 的 GitHub 仓库 minbpe 提供了一个最小且易于理解的实现:

对于那些有兴趣研究其他一些流行的 LLM 使用的替代分词方案的读者,可以在 SentencePiece 和 WordPiece 的论文中找到更多信息:

第三章

对于有兴趣了解更多关于 RNN 和语言翻译的 Bahdanau 注意力的读者,可以在以下论文中找到详细的见解:

自注意力作为缩放点积注意力的概念是在最初的 Transformer 论文中提出的:

FlashAttention 是一种高效的自注意力机制实现它通过优化内存访问模式来加速计算过程。FlashAttention 在数学上与标准的自注意力机制相同,但优化了计算过程以提高效率:

PyTorch 实现了一个用于自注意力和因果注意力的函数,该函数为了提高效率而支持 FlashAttention。此功能目前为测试版可能会发生更改

PyTorch 还实现了一个基于 scaled_dot_product 函数的高效 MultiHeadAttention 类:

Dropout 是一种在神经网络中使用的正则化技术,通过在训练期间随机丢弃神经网络中的单元(及其连接)来防止过拟合:

虽然在实践中,基于缩放点积注意力的多头注意力仍然是最常见的自注意力变体,但作者发现,即使没有值权重矩阵和投影层,也可能获得良好的性能:

第四章

这篇名为《层归一化》的论文介绍了一种技术,通过归一化隐藏层内神经元的输入总和来稳定神经网络的隐藏状态动态,与先前发表的方法相比,显著减少了训练时间:

原始 Transformer 模型中使用的 Post-LayerNorm 在自注意力和前馈网络之后应用层归一化。相比之下,像 GPT-2 和更新的 LLM 中采用的 Pre-LayerNorm 在这些组件之前应用层归一化,这可以带来更稳定的训练动态,并且在某些情况下已被证明可以提高性能,如下列论文所述:

由于其更高的计算效率RMSNorm 是现代 LLM 中使用的一种流行的 LayerNorm 变体。此变体通过仅使用输入的均方根对输入进行归一化来简化归一化过程,而无需在平方之前减去均值。这意味着它在计算尺度之前不会对数据进行中心化。以下论文更详细地介绍了 RMSNorm

GELU高斯误差线性单元激活函数结合了经典 ReLU 激活函数和正态分布累积分布函数的特性来建模层输出,从而在深度学习模型中实现随机正则化和非线性,如下列论文所述:

GPT-2 的论文介绍了一系列不同规模的基于 Transformer 的 LLM——参数量分别为 1.24 亿、3.55 亿、7.74 亿和 15 亿:

OpenAI 的 GPT-3 从根本上使用了与 GPT-2 相同的架构只不过其最大的版本1750 亿参数)比最大的 GPT-2 模型大了 100 倍,并且在更多的数据上进行了训练。感兴趣的读者可以参考 OpenAI 的官方 GPT-3 论文以及 Lambda Labs 的技术概述,后者计算得出,在单个 RTX 8000 消费级 GPU 上训练 GPT-3 需要 665 年:

NanoGPT 是一个代码仓库,其中包含一个极简但高效的 GPT-2 模型实现,类似于本书中实现的模型。虽然本书中的代码与 nanoGPT 不同,但该仓库启发了将大型 GPT Python 父类实现重组为更小的子模块:

一篇信息丰富的博客文章指出,当上下文大小小于 32,000 个 token 时LLM 中的大部分计算都花费在前馈层而不是注意力层:

第五章

作者的一个视频讲座,详细介绍了损失函数并应用对数变换以使其更易于进行数学优化:

以下两篇论文详细介绍了用于预训练 LLM 的数据集、超参数和架构细节:

本书提供的以下补充代码包含从古腾堡计划准备 60,000 本公共领域书籍以用于 LLM 训练的说明:

第五章讨论了 LLM 的预训练,附录 D 涵盖了更高级的训练函数,例如线性预热和余弦退火。以下论文发现,类似的技术可以成功地应用于继续预训练已经预训练过的 LLM并提供额外的技巧和见解

BloombergGPT 是一个领域特定的大型语言模型 (LLM) 的示例,它通过在通用和领域特定的文本语料库(特别是金融领域)上进行训练而创建:

GaLore 是一个旨在提高 LLM 预训练效率的最新研究项目。所需的代码更改非常简单,只需将训练函数中 PyTorch 的 AdamW 优化器替换为 galore-torch Python 包提供的 GaLoreAdamW 优化器即可。

以下论文和资源分享了公开可用的大规模 LLM 预训练数据集,这些数据集包含数百 GB 到数 TB 的文本数据:

最初介绍 top-k 采样的论文:

集束搜索(第五章未涵盖)是一种替代的解码算法,它通过在每个步骤仅保留得分最高的局部序列来生成输出序列,以平衡效率和质量:

第六章

讨论不同类型微调的额外资源:

其他实验,包括对微调第一个输出 token 与最后一个输出 token 的比较,可以在 GitHub 上的补充代码材料中找到:

对于二元分类任务(例如垃圾邮件分类),从技术上讲,只使用一个输出节点而不是两个输出节点是可行的,正如我在以下文章中讨论的那样:

你可以在以下文章中找到关于微调 LLM 不同层的额外实验,该文章表明,除了输出层之外,微调最后一个 Transformer 模块可以显著提高预测性能:

读者可以在 imbalanced-learn 的文档中找到处理不平衡分类数据集的额外资源和信息:

对于有兴趣对垃圾邮件电子邮件而不是垃圾短信进行分类的读者,以下资源提供了一个大型电子邮件垃圾邮件分类数据集,其格式与第 6 章中使用的数据集格式类似的便捷 CSV 格式:

GPT-2 是一种基于 Transformer 架构解码器模块的模型,其主要目的是生成新的文本。作为替代方案,诸如 BERT 和 RoBERTa 之类的基于编码器的模型对于分类任务可能更有效:

最近的论文表明,通过在分类微调过程中移除因果掩码并进行其他修改,可以进一步提高分类性能:

第七章

用于指令微调的 Alpaca 数据集包含 5.2 万个指令-响应对,是首批最受欢迎的公开指令微调数据集之一:

以下列出的是适合指令微调的额外公开数据集:

Phi-3 是一个拥有 38 亿参数的模型,其指令微调变体据称可与更大的专有模型(如 GPT-3.5)相媲美:

研究人员提出了一种合成指令数据生成方法,该方法从一个指令微调的 Llama-3 模型生成 30 万个高质量的指令-响应对。在一个预训练的 Llama 3 基础模型上,使用这些指令示例进行微调后,其性能与原始的指令微调 Llama-3 模型相当:

研究表明,在指令微调中不屏蔽指令和输入可以有效地提高在各种 NLP 任务和开放式生成基准上的性能,尤其是在使用包含长指令和简短输出的数据集或使用少量训练示例进行训练时:

Prometheus 和 PHUDGE 是公开可用的大型语言模型,它们在评估具有可自定义标准的长篇回复方面与 GPT-4 相媲美。我们在第 7 章中没有使用这些模型,因为 Ollama 尚不支持它们,因此无法在笔记本电脑上高效执行。

以下报告中的结果支持这样一种观点:大型语言模型主要在预训练期间获取事实知识,而微调主要提高它们使用这些知识的效率。此外,这项研究探讨了使用新的事实信息对大型语言模型进行微调如何影响它们使用现有知识的能力,揭示了模型学习新事实的速度较慢,并且在微调期间引入新事实会增加模型生成不正确信息的倾向:

偏好微调是指令微调之后的一个可选步骤,旨在使 LLM 更紧密地与人类偏好对齐。作者的以下文章提供了有关此过程的更多信息: