Build a Large Language Model (From Scratch) 从零开始构建大型语言模型 (Sebastian Raschka) (Z-Library)
Statistics
5
Views
0
Downloads
0
Donations
Uploader

高宏飞

Shared on 2025年12月14日
Actions

Build a Large Language Model (From Scratch) 从零开始构建大型语言模型 (Sebastian Raschka) (Z-Library)

技术

AuthorSebastian Raschka

从零开始构建大型语言模型是为了帮助你理解和创建自己的类似GPT的大型语言 模型(LLMs)。本书首先专注于文本数据处理和编码注意力机制的基础知识,然 后引导你从头实现一个完整的GPT模型。书中还涵盖了预训练机制以及针对特定 任务(如文本分类和遵循指令)的微调。读完这本书后,你将深入了解LLMs的工 作原理,并具备构建自己模型的技能。虽然你创建的模型规模较小,但它们使用相同的概念,作为掌握构建最先进的LLMs核心机制和技术的强大教育工具。

Publisher: Manning Publications
Publish Year: 2025
Language: 英文
File Format: PDF
File Size: 28.8 MB
Support Statistics
¥.00 · 0times
Text Preview (First 20 pages)
Registered users can read the full content for free

Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.

构建大型语言模型 Sebastian Raschka 构建大型语言模型(LLM)的三个主要阶段是实现LLM架构和数据准备过程(第 一阶段),预训练LLM以创建基础模型(第二阶段),以及微调基础模型以成为 个人助手或文本分类器(第三阶段)。本书将探讨并实现每个阶段。 从零开始构建大型语言模型 SEBASTIAN RASCHKA 有关本书及其他Manning书籍的在线信息和订购,请访问 www.manning.com。当批 量订购时,出版商提供此书的折扣。如需更多信息,请联系 特惠销售部 Manning Publications Co. 20 Baldwin Road
PO Box 761 Shelter Island, NY 11964 邮箱: orders@manning.com ©2025 Manning Publications Co.保留所有权利。 未经出版商事先书面许可,不得以任何形式或任何方式复制、存储或传输本出版 物的任何部分,包括电子、机械、影印或其他方式。 制造商和销售商用于区分其产品的许多标识被注册为商标。当这些标识出现在书 中时,如果Manning Publications意识到有商标声明,这些标识将以大写字母或全 部大写字母印刷。 认识到保存已写内容的重要性,Manning的政策是使用无酸纸印刷我们出版的书 籍,并尽最大努力实现这一目标。同时,我们也认识到保护地球资源的责任, Manning的书籍至少使用15%的再生纸印刷,并且在加工过程中不使用元素氯。 作者和出版商已尽力确保本书在付梓时提供的信息是正确的。作者和出版商不承 担并且在此否认对任何一方因错误或遗漏而造成的任何损失、损害或中断的责 任,无论这些错误或遗漏是由疏忽、事故或其他原因引起的,还是由于使用此处 的信息引起的。 Manning Publications Co. 20 Baldwin Road PO Box 761 Shelter Island, NY 11964 开发编辑:Dustin Archibald 技术编辑:David Caswell 审稿编辑:Kishor Rit 生产 编辑:Aleksandar Dragosavljevic´ 校对编辑:Kari Lucke 和 Alisa Larson 校对: Mike Beady 技术校对:Jerry Kuch 排版:Dennis Dalinnik 封面设计:Marija Tudor 简要内容 1 ■ 了解大型语言模型 1 2 ■ 处理文本数据 17 3 ■ 编码注意力机制 50 4 ■ 从头实现一个GPT模型以生成文本 92 5 ■ 在未标注数据上预训练 128 6 ■ 细调用于分类 169 7 ■ 细调以遵循指令 204
A ■ PyTorch简介 251 B ■ 参考文献和进一步阅读 289 C ■ 练习解答 300 D ■ 为训练循环添加额外功能 313 E ■ 使用LoRA进行参数高效的细调 322 序言 xi 致谢 xiii 关于本书 xv 关于作者 xix 关于封面插图 xx 了解大型语言模型 1.1 什么是LLM? 2 1.2 LLM的应用 4 1.3 构建和使用LLM的阶段 5 1.4 介绍Transformer架构 7 1.5 利用大型数据集 10 1.6 深入了解GPT架构 12 1.7 构建大型语言模型 14 处理文本数据 17 2.1 了解词嵌入 18 2.2 对文本进行分词 21 2.3 将分词转换为分词ID 24 2.4 添加特殊上下文分词 29 2.5 字节对编码 33 2.6 使用滑动窗口进行数据采样 35 2.7 创建分词嵌入 41 2.8 编码词位置 43 编码注意力机制 50 3.1 建模长序列的问题 52 3.2 使用注意力机制捕捉数据依赖关系 54 3.3 使用自注意力关注输入的不同部分 55 一个简单的无训练权重的自注意力机制
56 计算所有输入分词的注意力权重 61 3.4 实现带训练权重的自注意力 64 分步计算注意力权重 65 ■ 实现一个紧凑的自注 意力Python类 70 3.5 使用因果注意力隐藏未来单词 74 应用因果注意力掩码 75 ■ 使用dropout屏蔽额 外的注意力权重 78 ■ 实现一个紧凑的因果注意力类 80 3.6 将单头注意力扩展到多头注意力 82 堆叠多个单头注意力层 82 ■ 使用权重分割 实现多头注意力 86 从头实现一个GPT模型以生成文本 92 4.1 编码LLM架构 93 4.2 使用层归一化归一化激活函数 99 4.3 实现带有GELU激活函数的前馈网络 105 4.4 添加快捷连接 109 4.5 在Transformer块中连接注意力和线性层 113 4.6 编码GPT模型 117 4.7 生成文本 122 在未标注数据上预训练 128 5.1 评估生成式文本模型 129 使用GPT生成文本 130 ■ 计算文本生成损失 132 ■ 计 算训练集和验证集的损失 140 5.2 训练LLM 146 5.3 控制随机性的解码策略 151 温度缩放 152 ■ Top-k采样 155 修改文本生成函数 157 5.4 在PyTorch中加载和保存模型权重 159 5.5 从OpenAI加载预训练权重 160 细调用于分类 169 6.1 不同类别的细调 170 6.2 准备数据集 172 6.3 创建数据加载器 175 6.4 使用预训练权重初始化模型 181 6.5 添加分类头 183
6.6 计算分类损失和准确率 190 6.7 在监督数据上细调模型 195 6.8 使用LLM作为垃圾邮件分类器 200 细调以遵循指令 204 7.1 指令细调简介 205 7.2 准备用于监督指令细调的数据集 207 7.3 将数据组织成训练批次 211 7.4 为指令数据集创建数据加载器 223 7.5 加载预训练LLM 226 7.6 在指令数据上细调LLM 229 7.7 提取并保存响应 233 7.8 评估细调后的LLM 238 7.9 结论 247 下一步是什么? 247 ■ 跟上快速发展的领域 248 ■ 最后的话 248 附录A PyTorch简介 251 附录B 参考文献和进一步阅读 289 附录C 练习解答 300 附录D 为训练循环添加额外功能 313 附录E 使用LoRA进行参数高效的细调 322 索引 337 前言 我一直对语言模型着迷。十多年前,我的AI之旅始于一门统计模式分类课程,这 引导我完成了第一个独立项目:开发一个基于歌词检测歌曲情绪的模型和Web应 用程序。 快进到2022年,随着ChatGPT的发布,大型语言模型(LLMs)席卷全球,并彻底 改变了我们许多人的工作方式。这些模型非常多功能,能够帮助我们完成诸如检 查语法、撰写电子邮件、总结长篇文档等任务。这一切都得益于它们解析和生成 类似人类文本的能力,这对于客户服务、内容创作甚至更技术性的领域如编程和 数据分析都非常重要。
正如其名,LLMs的一个显著特点是它们“大”——非常大——包含数百万到数十亿 个参数。(相比之下,使用更传统的机器学习或统计方法,可以用只有两个参数 的小型模型对Iris花数据集进行超过90%的准确分类。)然而,尽管LLMs的规模远 大于传统方法,它们并不一定是黑箱。 在本书中,您将逐步学习如何构建一个LLM。到结束时,您将对像ChatGPT中使 用的LLM如何在基础层面上工作有一个坚实的理解。我相信,掌握每个基本概念 和底层代码是成功的关键。这不仅有助于修复错误和提高性能,还使实验新想法 成为可能。 几年前,当我开始接触LLMs时,不得不通过研读大量研究论文和不完整的代码库 来艰难地理解它们。通过这本书,我希望通过开发和分享一个详细描述LLM所有 主要组件和发展阶段的逐步实现教程,使LLMs更加易于访问。 我坚信,理解LLMs的最佳方法是从头编写一个——并且你会发现这也可以很有 趣! 祝您阅读和编码愉快! 鸣谢 写一本书是一项重大的任务,我想向我的妻子Liza表达诚挚的感谢,感谢她在这 个过程中给予的耐心和支持。她的无条件的爱和不断的鼓励是必不可少的。 我非常感谢Daniel Kleine,他对正在进行的章节和代码提供了宝贵的反馈,超出了 预期。凭借他敏锐的细节眼光和深刻的建议,Daniel的贡献无疑使这本书变得更加 流畅和有趣的阅读体验。 我还想感谢Manning Publications的优秀员工,包括Michael Stephens,感谢他们多 次富有成效的讨论,帮助塑造了这本书的方向,以及Dustin Archibald,他的建设 性反馈和指导在遵守Manning指南方面至关重要。我也感谢你们在适应这种非传统 从头实现方法的独特要求方面的灵活性。特别感谢Aleksandar Dragosavljevic´、 Kari Lucke和Mike Beady的专业排版工作,以及Susan Honeywell和她的团队对图形 的优化和润色。 我想向Robin Campbell和她出色的营销团队表达衷心的感谢,感谢他们在整个写作 过程中的宝贵支持。
最后,我要感谢审稿人:Anandaganesh Balakrishnan、Anto Aravinth、Ayush Bi- hani、Bassam Ismail、Benjamin Muskalla、Bruno Sonnino、Christian Prokopp、 Daniel Kleine、David Curran、Dibyendu Roy Chowdhury、Gary Pass、Georg Som- mer、Giovanni Alzetta、Guillermo Alcántara、Jonathan Reeves、Kunal Ghosh、 Nicolas Modrzyk、Paul Silisteanu、Raul Ciotescu、Scott Ling、Sriram Macharla、 Sumit Pal、Vahid Mirjalili、Vaijanath Rao和Walter Reade,感谢他们对草稿的详尽 反馈。你们敏锐的眼光和深刻的评论对于提高本书的质量至关重要。 感谢每一位为这段旅程做出贡献的人。你们的支持、专业知识和奉献精神对于本 书的成功出版至关重要。谢谢! 关于本书 从零开始构建大型语言模型是为了帮助你理解和创建自己的类似GPT的大型语言 模型(LLMs)。本书首先专注于文本数据处理和编码注意力机制的基础知识,然 后引导你从头实现一个完整的GPT模型。书中还涵盖了预训练机制以及针对特定 任务(如文本分类和遵循指令)的微调。读完这本书后,你将深入了解LLMs的工 作原理,并具备构建自己模型的技能。虽然你创建的模型规模较小,但它们使用 相同的概念,作为掌握构建最先进的LLMs核心机制和技术的强大教育工具。 谁应该阅读这本书 《从零开始构建大型语言模型》适合机器学习爱好者、工程师、研究人员、学生 和实践者,他们希望深入了解LLM的工作原理,并学习如何从零开始构建自己的 模型。无论是初学者还是有经验的开发人员,都可以利用现有的技能和知识来掌 握创建LLM所使用概念和技术。 本书的独特之处在于其对构建LLM整个过程的全面覆盖,从处理数据集到实现模 型架构,再到在未标注数据上进行预训练以及针对特定任务进行微调。截至写作 时,还没有其他资源提供如此完整且动手实践的方法来从头构建LLM。 要理解本书中的代码示例,您需要具备扎实的Python编程基础。虽然对机器学 习、深度学习和人工智能有一定的了解会有所帮助,但这些领域的广泛背景并不 是必需的。LLM是AI的一个独特子集,因此即使您是这个领域的新人,也能够跟 上进度。
如果您有一些深度神经网络的经验,可能会发现某些概念更加熟悉,因为LLM是 基于这些架构构建的。然而,精通PyTorch并不是前提条件。附录A提供了PyTorch 的简明介绍,使您具备理解书中代码示例所需的技能。 高中水平的数学理解,特别是向量和矩阵的操作,可以帮助我们探索LLM的内部 工作原理。但是,高级数学知识并不是掌握本书中呈现的关键概念和思想所必需 的。 最重要的前提条件是对Python编程的坚实基础。有了这些知识,您将为探索LLM 的迷人世界做好准备,并理解本书中呈现的概念和代码示例。 本书的组织结构:路线图 本书设计为顺序阅读,因为每一章都建立在前一章引入的概念和技术之上。本书 分为七章,涵盖了LLM及其实现的基本方面。 第1章提供了关于LLM背后基本概念的高层次介绍。它探讨了Transformer架构,这 是ChatGPT平台等使用的LLM的基础。 第2章制定了从零开始构建LLM的计划。它涵盖了为LLM训练准备文本的过程,包 括将文本拆分为单词和子词标记,使用字节对编码进行高级标记化,使用滑动窗 口方法采样训练示例,以及将标记转换为输入LLM的向量。 第3章专注于LLM中使用的注意力机制。它介绍了基本的自注意力框架,并逐步发 展到增强的自注意力机制。本章还涵盖了因果注意力模块的实现,该模块使LLM 能够逐个生成标记,通过随机选择注意权重并使用dropout进行掩码以减少过拟 合,并将多个因果注意力模块堆叠成多头注意力模块。 第4章专注于编写类似GPT的LLM,可以训练生成类似人类的文本。它涵盖了诸如 规范化层激活以稳定神经网络训练的技术,在深度神经网络中添加捷径连接以更 有效地训练模型,实现Transformer块以创建不同大小的GPT模型,以及计算GPT模 型的参数数量和存储需求。 第5章实现了LLM的预训练过程。它涵盖了计算训练集和验证集损失以评估LLM生 成文本的质量,实现训练函数并预训练LLM,保存和加载模型权重以继续训练 LLM,以及从OpenAI加载预训练权重。
第6章介绍了不同的LLM微调方法。它涵盖了为文本分类准备数据集,修改预训练 的LLM以进行微调,微调LLM以识别垃圾邮件,并评估微调后的LLM分类器的准 确性。 第7章探讨了LLM指令微调的过程。它涵盖了为监督指令微调准备数据集,组织指 令数据以形成训练批次,加载预训练的LLM并微调其以遵循人类指令,提取LLM 生成的指令响应以供评估,以及评估指令微调后的LLM。 关于代码 为了尽可能方便您跟随,本书的所有代码示例均可在Manning网站上的 https://www.manning.com/books/build-a-large-language-model-from-scratch获取,也 可以在GitHub上的Jupyter笔记本格式获取,地址为https://github.com/rasbt/LLMs- from-scratch。不用担心卡住——所有代码练习的解决方案都可以在附录C中找 到。 本书包含许多源代码示例,既作为编号列表出现,也嵌入在普通文本中。在这两 种情况下,源代码均采用固定宽度字体格式化,以将其与普通文本区分开来。 在许多情况下,原始源代码已重新格式化;我们添加了换行符并调整了缩进,以 适应书中的可用页面空间。在少数情况下,即使这样做也不够,因此列表中包含 行延续标记(➥)。此外,当代码在文本中描述时,源代码中的注释通常已被删 除。代码注释伴随许多列表,突出重要概念。 本书的一个关键目标是易用性,因此代码示例经过精心设计,可以在普通笔记本 电脑上高效运行,而无需任何特殊硬件。但是,如果您有GPU访问权限,某些部 分提供了有用的提示,以扩展数据集和模型以充分利用额外的计算能力。 在本书中,我们将使用PyTorch作为我们的张量和深度学习库,从头实现LLM。如 果您是PyTorch的新手,我建议您从附录A开始,该附录提供了深入介绍,包括设 置建议。
liveBook讨论论坛 购买《从零开始构建大型语言模型》即免费获得对Manning在线阅读平台liveBook 的访问权限。使用liveBook的专属讨论功能,您可以在全球范围内或针对特定章节 或段落附加评论。做笔记、提问和回答技术问题、并从作者和其他用户那里获得 帮助都非常容易。要访问论坛,请访问https://livebook.manning.com/book/build-a- large-language-model-from-scratch/discussion。您还可以在https://livebook.man- ning.com/discussion了解更多关于Manning论坛和行为准则的信息。 Manning对读者的承诺是提供一个有意义的对话场所,使读者之间以及读者与作者 之间的交流成为可能。这并不意味着作者必须参与一定量的讨论,因为作者对论 坛的贡献是自愿的(且无偿)。我们建议您尝试向作者提出一些具有挑战性的问 题,以免他的兴趣分散!只要书籍仍在印刷中,论坛和以前讨论的存档都将可以 从出版商的网站访问。 其他在线资源 对最新的AI和LLM研究趋势感兴趣吗? 请访问我的博客https://magazine.sebastianraschka.com,我在那里定期讨论有关LLM 的最新AI研究。 需要快速掌握深度学习和PyTorch的帮助吗?  我的网站https://sebastianrasch- ka.com/teaching提供了几门免费课程。这些资源可以帮助您快速掌握最新技术。 寻找与本书相关的补充材料吗?  请访问本书的GitHub仓库https://github.com/ras- bt/LLMs-from-scratch,以查找额外资源和示例,以补充您的学习。 关于作者 SEBASTIAN RASCHKA,博士,已在机器学习和AI领域工作超过十年。除了是一 名研究员,Sebastian对教育充满热情。他以其畅销的Python机器学习书籍和对开源 的贡献而闻名。
Sebastian目前是Lightning AI的研究工程师,专注于LLM的实现和训练。在进入行 业之前,Sebastian是威斯康星大学麦迪逊分校统计系的助理教授,专注于深度学 习研究。您可以通过https://sebastianraschka.com了解更多关于Sebastian的信息。 关于封面插图 《从零开始构建大型语言模型》封面上的插图名为“Le duchesse”或“公爵夫人”,取 自Louis Curmer于1841年出版的一本书。每幅插图都是手工精细绘制和着色的。 在那个时代,人们很容易通过他们的着装识别出他们居住的地方以及他们的职业 或社会地位。Manning通过基于几个世纪前丰富多样的区域文化的图片,庆祝计算 机行业的创新和主动性,这些图片来自如这一类的收藏品,使这些文化重焕生 机。
1 理解大型语言模型 本章内容 对大型语言模型(LLMs)背后的基本概念进行高层次的解释 对派生出LLMs的Transformer架构的见解 从头构建LLM的计划 大型语言模型(LLMs),例如OpenAI的ChatGPT提供的模型,是过去几年中开发 的深度神经网络模型。它们为自然语言处理(NLP)带来了新的时代。在LLMs出 现之前,传统方法擅长于分类任务,如电子邮件垃圾邮件分类和可以通过手工编 写规则或更简单模型捕捉的简单模式识别。然而,它们通常在需要复杂理解和生 成能力的语言任务中表现不佳,例如解析详细指令、进行上下文分析以及创建连 贯且上下文适当的原创文本。例如,以前的语言模型无法根据关键词列表撰写电 子邮件——这是一项对于当代LLMs来说非常简单的任务。 LLMs具有理解、生成和解释人类语言的卓越能力。然而,重要的是要澄清当我们 说语言模型“理解”时,我们指的是它们能够以连贯且上下文相关的方式处理和生 成文本,而不是指它们具备类似人类的意识或理解能力。 得益于深度学习的进步,这是机器学习和人工智能(AI)的一个分支,专注于神 经网络,LLMs经过大量文本数据训练。这种大规模训练使LLMs能够捕捉比以前 的方法更深层次的上下文信息和人类语言的细微差别。因此,LLMs在广泛的NLP 任务中表现出显著改进,包括文本翻译、情感分析、问答等。 与早期的NLP模型相比,现代LLMs的重要区别在于,早期的NLP模型通常是为特 定任务设计的,如文本分类、语言翻译等。虽然这些早期的NLP模型在其狭窄的 应用中表现出色,但LLMs在广泛的NLP任务中展示了更广泛的专业能力。 LLMs的成功可以归功于支撑许多LLMs的Transformer架构以及用于训练LLMs的海 量数据,使它们能够捕捉到难以手动编码的各种语言细微差别、上下文和模式。 转向基于Transformer架构实现模型并使用大型训练数据集训练LLMs的转变从根本 上改变了NLP,提供了更强大的工具来理解和与人类语言互动。
以下讨论为实现本书的主要目标奠定了基础:通过逐步在代码中实现基于Trans- former架构的类似ChatGPT的LLM来理解LLMs。 1.1 什么是LLM? LLM是一种旨在理解和生成类人文本的神经网络。这些模型是经过大量文本数据 训练的深度神经网络,有时涵盖了整个公开可用文本的很大一部分。 “大型”语言模型中的“大型”指的是模型参数的数量和它所训练的庞大数据集。像 这样的模型通常有数十亿甚至数百亿个参数,这些参数是网络中的可调权重,在 训练过程中被优化以预测序列中的下一个词。下一个词预测是有意义的,因为它 利用了语言的固有序列性,以训练模型理解文本中的上下文、结构和关系。尽管 这是一个非常简单的任务,但许多研究人员对此感到惊讶,因为它能够产生如此 强大的模型。在后面的章节中,我们将讨论并逐步实现下一个词的训练过程。 LLMs使用一种称为Transformer的架构,使它们能够在进行预测时选择性地关注输 入的不同部分,使它们特别擅长处理人类语言的细微差别和复杂性。 由于大型语言模型(LLMs)能够生成文本,它们常被视为生成式人工智能(Genera- tive Artificial Intelligence)的一种形式,通常简称为生成式AI或GenAI。如图1.1所 示,人工智能涵盖更广泛的领域,旨在创建能够执行类人智能任务的机器系统, 包括理解语言、识别模式和做出决策,其下包含机器学习、深度学习等子领域。 图1.1 这个层次结构描绘了不同领域之间的关系,表明LLMs代表了深度学习技术 的具体应用,利用其处理和生成类人文本的能力。深度学习是机器学习的一个专 门分支,专注于使用多层神经网络。机器学习和深度学习旨在实施算法,使计算 机能够从数据中学习并执行通常需要人类智能的任务。
用于实现AI的算法是机器学习领域的重点。具体来说,机器学习涉及开发可以从 数据中学习并进行预测或决策的算法,而无需显式编程。为了说明这一点,想象 一个垃圾邮件过滤器作为机器学习的实际应用。与其手动编写规则来识别垃圾邮 件,不如将标记为垃圾邮件和合法邮件的示例输入机器学习算法。通过最小化其 在训练数据集上的预测误差,模型学会了识别垃圾邮件的模式和特征,从而能够 将新邮件分类为垃圾邮件或非垃圾邮件。 如图1.1所示,深度学习是机器学习的一个子集,专注于使用三层或更多层(也称 为深度神经网络)的神经网络来建模数据中的复杂模式和抽象。与深度学习不 同,传统机器学习需要手动特征提取。这意味着人类专家需要识别和选择最相关 的特征供模型使用。 虽然AI领域现在主要由机器学习和深度学习主导,但它还包括其他方法,例如基 于规则的系统、遗传算法、专家系统、模糊逻辑或符号推理。 回到垃圾邮件分类的例子,在传统机器学习中,人类专家可能会手动从电子邮件 文本中提取特征,例如某些触发词(如“奖品”、“赢取”、“免费”)的频率、感叹号 的数量、全大写字母的使用或可疑链接的存在。这个基于专家定义特征创建的数 据集随后将用于训练模型。与传统机器学习不同,深度学习不需要手动特征提 取。这意味着人类专家不需要为深度学习模型识别和选择最相关的特征。(但 是,无论是传统机器学习还是深度学习,垃圾邮件分类仍然需要收集标签,如垃 圾邮件或非垃圾邮件,这些标签需要由专家或用户收集。) 让我们看看LLMs今天可以解决的一些问题,LLMs面临的挑战,以及我们稍后将 实现的一般LLM架构。 1.2 LLMs的应用 由于其解析和理解非结构化文本数据的强大能力,LLMs在各个领域都有广泛的应 用。如今,LLMs被用于机器翻译、生成新文本(见图1.2)、情感分析、文本摘要 等任务。LLMs最近还被用于内容创作,如写作小说、文章,甚至是计算机代码。 LLMs还可以为复杂的聊天机器人和虚拟助手提供动力,如OpenAI的ChatGPT或 Google的Gemini(原名Bard),它们可以回答用户查询并增强传统的搜索引擎, 如Google搜索或Microsoft Bing。
此外,LLMs可用于从医学或法律等专业领域的大量文本中有效检索知识。这包括 筛选文档、总结长篇段落和回答技术问题。 简而言之,LLMs对于自动化任何涉及解析和生成文本的任务都极为宝贵。它们的 应用几乎是无限的,随着我们继续创新和探索使用这些模型的新方法,很明显 LLMs有潜力重新定义我们与技术的关系,使其更加对话化、直观和易于访问。 我们将专注于从头开始理解LLMs的工作原理,编写一个可以生成文本的LLM。您 还将学习使LLMs能够执行查询的技术,从回答问题到总结文本、翻译文本成不同 语言等。换句话说,您将通过逐步构建一个复杂的LLM助手(如ChatGPT)来了 解它是如何工作的。 图1.2 LLM接口使用户和AI系统之间能够进行自然语言通信。此截图显示ChatGPT 根据用户的规格编写了一首诗。
1.3 构建和使用大语言模型的阶段 为什么我们要构建自己的大语言模型(LLM)?从头开始编写一个 LLM 是理解其 机制和局限性的绝佳练习。此外,它使我们具备了必要的知识,可以对现有的开 源 LLM 架构进行预训练或微调,以适应我们特定领域的数据集或任务。 注:当前大多数 LLM 都是使用 PyTorch 深度学习库实现的,这也是我们将要使用 的工具。读者可以在附录 A 中找到关于 PyTorch 的详细介绍。 研究表明,在建模性能方面,为特定任务或领域定制的 LLM 可以优于通用 LLM,例如 ChatGPT 提供的那些为广泛应用程序设计的 LLM。这些例子包括 BloombergGPT(专门用于金融)和为医疗问题回答定制的 LLM(详见附录 B)。 使用自定义 LLM 有几个优势,特别是在数据隐私方面。例如,公司可能不愿意因 保密问题将敏感数据与 OpenAI 等第三方 LLM 提供商共享。此外,开发较小的自 定义 LLM 可以直接部署在客户设备上,如笔记本电脑和智能手机,这是 Apple 等 公司目前正在探索的方向。 这种本地实现可以显著减少延迟并降低服务器相关的成本。此外,自定义 LLM 使 开发者拥有完全的自主权,可以根据需要控制模型的更新和修改。 创建 LLM 的一般过程包括预训练和微调。“预”训练指的是初始阶段,其中像 LLM 这样的模型在大型、多样化的数据集上进行训练,以发展对语言的广泛理 解。这个预训练模型随后作为基础资源,可以通过微调进一步优化,即在更窄的 数据集上针对特定任务或领域进行训练。这种包含预训练和微调的两阶段训练方 法如图 1.3 所示。
图 1.3 预训练 LLM 包括在大型文本数据集上进行下一个词预测。预训练后的 LLM 可以使用较小的标注数据集进行微调。 创建 LLM 的第一步是在大量文本数据上对其进行训练,有时称为原始文本。这里 的“原始”指的是这些数据只是普通文本,没有任何标注信息。(可能会应用过 滤,例如去除格式字符或未知语言的文档。) 注:具有机器学习背景的读者可能注意到,传统机器学习模型和通过常规监督学 习范式训练的深度神经网络通常需要标注信息。然而,这并不适用于 LLM 的预训 练阶段。在这个阶段,LLM 使用自监督学习,模型根据输入数据生成自己的标 签。 LLM 的第一个训练阶段也称为预训练,创建一个初始的预训练 LLM,通常称为基 础模型或基础模型。一个典型的例子是 GPT-3 模型(ChatGPT 提供的原始模型的 前身)。该模型能够完成文本补全,即完成用户提供的半写句子。它还具有有限 的少样本能力,这意味着它可以基于少量示例学习执行新任务,而不需要大量的 训练数据。 在通过大规模文本数据集训练获得预训练 LLM 后,我们可以进一步在标注数据上 训练 LLM,这称为微调。
最流行的两类 LLM 微调是指令微调和分类微调。在指令微调中,标注数据集由指 令和答案对组成,例如翻译文本的查询及其正确翻译文本。在分类微调中,标注 数据集由文本及其关联的类别标签组成,例如带有“垃圾邮件”和“非垃圾邮件”标 签的电子邮件。 我们将涵盖预训练和微调 LLM 的代码实现,并将在预训练基础 LLM 后深入探讨 指令微调和分类微调的具体细节。 1.4 介绍 Transformer 架构 大多数现代 LLM 依赖于 Transformer 架构,这是一种在 2017 年论文《Attention Is All You Need》(https://arxiv.org/abs/1706.03762)中引入的深度神经网络架构。要 理解 LLM,我们必须了解最初的 Transformer,它最初是为机器翻译开发的,用于 将英语文本翻译成德语和法语。图 1.4 显示了一个简化的 Transformer 架构。 Transformer 架构由两个子模块组成:编码器和解码器。编码器模块处理输入文本 并将其编码为一系列数值表示或向量,这些向量捕捉输入的上下文信息。然后, 解码器模块接收这些编码的向量并生成输出文本。在翻译任务中,例如,编码器 会将源语言的文本编码为向量,解码器会解码这些向量以生成目标语言的文本。 编码器和解码器都由许多层组成,通过所谓的自注意力机制连接。您可能对输入 如何预处理和编码有很多疑问,这些问题将在后续章节中逐步解释。 Transformer 和 LLM 的一个关键组件是自注意力机制(未显示),它使模型能够 根据彼此之间的相对重要性来权衡序列中不同单词或标记的重要性。这种机制使 模型能够捕捉长距离依赖和输入数据中的上下文关系,增强其生成连贯且上下文 相关输出的能力。但由于其复杂性,我们将把进一步的解释推迟到第 3 章,在那 里我们将逐步讨论和实现它。
图 1.4 初始 Transformer 架构的简化描绘,这是一个用于语言翻译的深度学习模 型。Transformer 由两部分组成:(a) 编码器,处理输入文本并生成嵌入表示(一种 捕捉多个不同因素的数值表示),(b) 解码器,使用这些嵌入表示逐词生成翻译后 的文本。此图展示了翻译过程的最后阶段,解码器只需生成最后一个词 (“Beispiel”),给定原始输入文本(“This is an example”)和部分翻译的句子 (“Das ist ein”),以完成翻译。 后来的 Transformer 架构变体,如 BERT(双向编码器表示来自 Transformer 的缩 写)和各种 GPT 模型(生成预训练 Transformer 的缩写),在此基础上进行了改 进,以适应不同的任务。如果感兴趣,请参阅附录 B 获取更多阅读建议。 BERT 基于原始 Transformer 的编码器子模块构建,其训练方法与 GPT 不同。虽然 GPT 专为生成任务设计,但 BERT 及其变体专注于掩码词预测,即预测给定句子 中的掩码或隐藏词,如图 1.5 所示。这种独特的训练策略使 BERT 在文本分类任务 (包括情感预测和文档分类)中表现出色。作为一个应用实例,截至本文撰写 时,X(原 Twitter)使用 BERT 来检测有毒内容。
图 1.5 Transformer 编码器和解码器子模块的可视化表示。左侧的编码器部分展示 了类似 BERT 的 LLM,专注于掩码词预测,主要用于文本分类任务。右侧的解码 器部分展示了类似 GPT 的 LLM,专为生成任务设计,产生连贯的文本序列。 另一方面,GPT 专注于原始 Transformer 架构的解码部分,旨在执行生成文本的任 务。这包括机器翻译、文本摘要、小说写作、编写计算机代码等。 GPT 模型主要设计和训练用于执行文本补全任务,但也展示了其能力的多功能 性。这些模型擅长执行零样本和少样本学习任务。零样本学习是指在没有任何先 前特定示例的情况下泛化到完全未见过的任务的能力。另一方面,少样本学习涉 及从用户提供的少量示例中学习,如图 1.6 所示。
The above is a preview of the first 20 pages. Register to read the complete e-book.