ChatGPT-原则与架构
ChatGPT 原则与架构
原文:ChatGPT : Principles and Architecture
译者:飞龙

前言
作为一名大学计算机科学研究人员和经验丰富的企业家,我亲身体验到了 ChatGPT 所展现出的逻辑推理能力,给我留下了深刻的印象。尽管许多人庆祝由生成式人工智能(AI)带来的多模态内容创作效率的提升,但 ChatGPT 所展现的推理能力往往被低估。这种能力使 ChatGPT 不仅能够成为新一代人机交互的核心,还能够作为智能代理构建自动化和半自动化工作流程。它甚至可以与工业控制或机器人领域相结合,从而引发深刻的社会变革。
许多人低估了这次变革的影响。考虑到当前研发和商业应用迭代的步伐,我预计这次变革将在未来 3-5 年内逐渐渗透到人类生活和生产的各个方面,极大地提高现有生产力,从而引发一系列变革。如果被问及最后一个被称为“重大技术变革”的时代,许多人会毫不犹豫地提到互联网的兴起。这次变革也将重塑与内容生产相关的商业模式,改变现有的工作方法,甚至推动生产方法的变革。当然,这还取决于下一代大型语言模型是否能在内容输出的可控性上取得突破。
本书的主要内容
本书旨在帮助读者深入理解 ChatGPT 及其相关技术。它由 11 章组成,全面探索了各个方面的内容。
第一章对大型语言模型的技术演变、支持技术和技术栈进行了深入分析,并讨论了它们对社会的重要影响。
第二章详细阐述了 Transformer 模型的理论基础和主要组成部分,揭示了这些技术的原理和应用。
第三章深入探讨了生成预训练过程和 GPT 的原理。
第四章主要探讨了 GPT-2 中的层归一化、正交初始化和可逆标记化等技术,并对 GPT-2 的自回归生成过程进行了详细分析。
第五章介绍了 GPT-3 的稀疏注意力机制、元学*和基于内容的学*概念,并讨论了贝叶斯推理在概念分布中的应用。
第六章详细介绍了大型语言模型的预训练数据集和数据预处理方法,以及分布式训练模型和架构。
第七章深入分析了*端策略优化(PPO)算法的基本原理。
第八章专注于强化学*(RLHF)的微调数据集以及 PPO 在 InstructGPT 中的应用,讨论了多轮对话的能力和人类反馈强化学*的必要性。
第九章探讨了如何在低资源成本下将大型语言模型迁移到特定领域。
第十章主要介绍了大型语言模型开发中涉及的中间件技术。
第十一章预测并展望了大型语言模型的未来发展趋势。
本书的针对受众
-
• 人工智能领域的产品经理:对于希望将人工智能功能融入其产品的产品经理来说,了解像 ChatGPT 这样的大型语言模型的基本原理和操作机制至关重要。从这本书中,他们可以学*到大型语言模型的设计理念和构建方法,以及如何将这些模型集成到他们的产品中。他们还可以更好地理解他们产品的性能瓶颈,这有助于更精确的产品规划。
-
• 人工智能相关领域的研究人员:对于人工智能研究人员来说,这本书可以作为深入理解大型语言模型的教科书。无论是 Transformer 模型的细节还是训练和优化 GPT 模型的技巧,这本书都提供了详尽的解释。更重要的是,这本书探讨了某些前沿的研究领域,例如人类反馈强化学*和自举标签算法。
-
• 专注于大规模数据处理和分析的工程师:对于面临高效处理大规模数据或构建分布式训练架构等挑战的工程师来说,这本书提供了许多宝贵的建议和想法。例如,第六章深入探讨了数据处理和分布式训练模式。
-
• 人工智能爱好者以及日常生活中技术熟练的个人:如果你是人工智能技术的爱好者或使用技术来改善日常生活的人,这本书也适合你。这本书中对大型语言模型的介绍易于理解,提供了对这项强大技术的全面概述。更有趣的是,这本书提供了许多可以直接应用于你的生活或工作的实用使用技巧和案例研究。
联系作者
由于我的写作技能有限,这本书中不可避免地存在一些不足之处。如果在阅读过程中有任何疑问或建议,可以通过电子邮件 chenggextu@hotmail.com 与我联系。我非常期待您的反馈,因为它将对我的未来写作大有裨益。我希望你在阅读这本书的过程中获得深刻的见解,并加深你对大型语言模型和人工智能的理解。
致谢
首先,我要感谢我的家人。在写这本书的过程中,与他们相处的时间大大减少,但他们始终给予支持和理解,使我能够全身心地投入到写作中,没有任何顾虑。
我要感谢编辑杨福川和陈杰。没有他们的专业精神和细致的工作态度,这本书的顺利出版是不可能的。
最后,我必须感谢我的研究生尹志斌、罗奇凡、余志文、余江南和杨金。他们为这本书创作了众多插图,我对他们的贡献表示衷心的感谢!
陈成
第一章 人工智能的新里程碑——ChatGPT
摘要
本章深入探讨了 OpenAI 开发的突破性人工智能(AI)应用 ChatGPT 的演变、功能和影响。本章追溯了 ChatGPT 从其早期的先驱如 GPT-1 和 GPT-2 到更先进的 GPT-3 和 GPT-4 模型的发展历程。它突出了使 ChatGPT 成为能够执行复杂任务(如语言理解、代码生成和多模态推理)的强大工具的技术进步。本章还讨论了支撑大型语言模型(LLMs)的架构,重点关注从传统的自然语言处理技术到基于 Transformer 的模型的转变。此外,它还讨论了训练这些模型所需的显著计算和数据需求,以及模型可解释性、偏差和隐私问题等挑战。本章最后考察了 LLMs 在各个领域的更广泛影响,并预测了人工智能发展的未来趋势。
关键词
ChatGPT; OpenAI; 转换器模型; 自然语言处理 (NLP); 通用人工智能 (AGI); GPT 系列; 人类反馈强化学* (HFRL); 大型语言模型 (LLMs); 计算能力; 模型局限性
2022 年 11 月,OpenAI 推出了 ChatGPT,这是一个具有多种功能的基于人工智能(AI)的聊天应用程序。该应用程序在众多专业和学术指标上展现出与人类相媲美甚至超越的智力水平。ChatGPT 的推出在技术领域引起了广泛的赞誉,标志着人工智能领域的一项重大进步。
1.1 ChatGPT 的发展历史
超过 50 年来,使计算机能够像人类一样交流一直是技术领域的一个重要焦点。公众对聊天应用并不陌生,可以追溯到 1966 年,当时麻省理工学院教授约瑟夫·魏岑鲍姆创造了 ELIZA,这是这一类程序中的第一个。几十年来,从苹果的 Siri 和微软的小冰到各种行业中使用的智能音箱和智能助手,这些 AI 驱动产品已经深深地融入了日常生活。
这些产品有一个独特的特点:它们很容易被识别为 AI,这突显了它们在对话能力和人类互动之间的明显差异。然而,ChatGPT 在这一领域脱颖而出。它不仅能够进行复杂的多轮文本对话,还具有生成代码、营销材料、诗歌、商业策略和电影剧本的能力。虽然它并非没有缺陷,有时也会犯错,但其强大的能力使其成为最接*通过图灵测试的 AI 工具之一。
ChatGPT 由 OpenAI 开发,这是一个成立于 2015 年的位于旧金山的非营利性人工智能研究机构。其创始人包括企业家埃隆·马斯克、美国创业孵化器 Y Combinator 的总裁山姆·奥特曼,以及全球在线支付平台 PayPal 的共同创始人彼得·蒂尔等人。OpenAI 位于美国加利福尼亚州,得到了几位显赫的硅谷人物的巨额资金支持,确保了高达 10 亿美元的初始投资。
Transformer 模型首次由 Google Brain 团队在 2017 年的奠基性论文“Attention is All You Need”中提出,现在被认为是人工智能领域的一个关键进步。虽然它并没有完全取代之前的框架,如循环神经网络(RNNs)和卷积神经网络,但它已经在包括自然语言处理(NLP)和计算机视觉在内的多个领域显示出非凡的效能。这个模型已经成为这些领域的根本架构。如图 图 1.1 所示,OpenAI 广泛地使用 Transformer 模型进行 NLP 研究,最终导致了 ChatGPT 的开发。

图 1.1 GPT 系列演变时间线。
时间线始于 2017 年的 Transformer 模型。2018 年,使用 5GB 训练语料库和 1 亿个参数,通过预训练和微调方法开发了 GPT1。2019 年,推出了 GPT2,使用 40GB 训练语料库和 15 亿个参数,利用零样本学*。2020 年,GPT3 随后推出,使用 570GB 训练语料库和 1750 亿个参数,采用上下文学*。2021 年至 2022 年,基于 GPT3 模型中 120 亿个参数的 GitHub 代码数据对 Codex 进行了微调。2022 年,基于人类反馈指令对 InstructGPT 进行了微调。专注于编码能力的 Codedavinci002 于 2022 年 4 月开发。专注于文本能力的 Textdavinci002 于 2022 年 5 月开发。旨在在公共 NLP 任务上表现更好的 Textdavinci003 于 2022 年 11 月开发。最后,ChatGPT 于 2022 年 11 月推出。
2018 年,OpenAI 推出了其第一个生成式预训练模型 GPT-1。该模型通过利用大规模未标记数据进行预训练,显著提高了人工智能系统的语言处理能力。它还通过监督微调展示了其能够在多个任务中泛化的能力,标志着人工智能语言模型的一个重要演变。
2019 年 3 月,OpenAI 从非营利组织转变为有限利润实体,推出了 OpenAI LP,并引入微软作为战略投资者。同年 7 月,微软对 OpenAI 进行了 10 亿美元的巨额投资,从而获得了 OpenAI 技术的商业化权利,并将其开发的产品与微软的产品集成。同时,OpenAI 发布了 GPT-2 模型,该模型使用了一个更大的数据集 WebText,包含来自 800 万份文档的大约 40GB 的文本数据。这个版本将模型参数数量增加到了令人印象深刻的 15 亿,提高了模型的准确性。此外,GPT-2 引入了零样本学*能力,强调了无监督学*的有效性以及预训练模型在下游 NLP 任务中的成功。
截至 2020 年 6 月,OpenAI 发布了 GPT-3 语言模型并推出了其首个商业产品,即 OpenAI 应用程序编程接口(API),标志着该组织正式进入商业运营。同年 9 月,OpenAI 授予微软独家许可使用其 GPT-3 模型,使微软成为全球首家采用 GPT-3 技术的公司。GPT-3 的最大版本拥有 1750 亿个参数——是 GPT-2 的 117 倍。此外,GPT-3 引入了情境学*,这是一种使用提示来适应更广泛的下游任务的方法,并展现出各种涌现能力,如思维链。
2021 年,微软通过额外投资加深了与 OpenAI 的合作,将他们的伙伴关系推进到一个新阶段。2022 年 12 月,在微软的支持下,OpenAI 推出了基于 GPT-3.5 的 ChatGPT。这一版本采用了具有人类反馈的强化学*,类似于 InstructGPT,以更好地满足人类需求。令人瞩目地,ChatGPT 在发布后的仅 2 个月内全球活跃用户就超过了 1 亿。2023 年初,OpenAI 在推出 GPT-4 模型的同时,还推出了 ChatGPT Plus 订阅服务,该模型具备多模态数据处理和推理能力,为 ChatGPT Plus 用户提供了一个增强版 GPT-4,适用于 NLP 任务。
1.2 ChatGPT 的能力水平
在 2023 年 3 月 15 日发布的演示视频中,GPT-4 成功识别了图 1.2 中描述的气球图像,并预测了割断连接绳子的结果:“气球会飞走。”这一演示突显了 GPT-4 在解释和推理多模态数据,如图像方面的熟练程度。GPT-4 拥有庞大的参数量,超越了仅仅表面级别的图像解释,能够推断更深层次的意义。这一进步引起了全球的震惊,使 GPT-4 更接*实现通用人工智能(AGI)。此外,这一发展引发了一场关于 GPT 系列能否向强人工智能(Strong AI)发展的持续辩论,可能最终达到超越人类智能的能力。

图 1.2 GPT-4 气球图像多模态推理演示。
图像右侧的文字是:“如果割断绳子会发生什么?”后面跟着“气球会飞走。”
自 1970 年代以来,关于智力的学术定义强调,智力不应局限于特定任务。在过去的几十年里,人工智能的应用在各个领域得到了显著扩展,例如 AlphaGo 在围棋游戏中的精通、AlphaFold 对蛋白质结构的预测以及 Yolo 系列在计算机视觉方面的贡献。然而,这些进步代表了在其各自领域内具有智能的系统。这导致了通用人工智能(AGI)概念的发展,它与早期的“弱人工智能”概念有明显的区别。尽管 AGI 备受瞩目,但学术界和工业界仍在努力确立一个被普遍接受的 AGI 定义。
虽然 ChatGPT 的主要功能是进行对话交互,但其应用远不止简单的对话。这个 AI 模型能够编写和调试计算机程序,模仿知名人物的写作风格以创建商业手册,并生成各种内容,如音乐、电视剧、童话、学生论文和诗歌。此外,ChatGPT 能够模拟 Linux 操作系统,模拟聊天室,参与井字棋等游戏,甚至模仿 ATM 机的操作。
如图 1.3 所示,GPT-4 在一系列专业和学术基准测试中的表现达到了与人类能力相当的水平。值得注意的是,在模拟的律师资格考试中,GPT-4 位于候选人前 10%,并在研究生入学考试(GRE)中取得了 330 分,超过了大多数参与者。在额外的测试中,GPT-4 的表现超过了其他 AI 系统。这些高分不仅反映了增强的现实和逻辑推理技能,也标志着高级问题解决能力。

图 1.3 GPT-4 与人类考试水平的比较。图片来源:lifearchitect.ai/iq-testing-ai/.
水平柱状图标题为 GPT4 VS HUMAN TESTS MAY2023. Y 轴列出了各种测试和考试,而 X 轴表示从 0 到 100 的分数。对于每个测试,都有两个柱状图,一个代表人类或专家的平均分数,另一个代表 GPT4 的表现。测试及其相应的分数如下:1. 心理学,心灵理论,人类 87,GPT4 100.0 2. 生物学,美国生物奥林匹克竞赛,USABO 半决赛考试 2020,人类 50,GPT4 99.5 3. SAT,人类 50,GPT4 94.0 4. 数学,小学数学,GSM8K,人类 50,GPT4 92.0 5. 法律,统一律师资格考试,MBEplusMEEplusMPT,人类 50,GPT4 90.0 6. 品酒,高级侍酒师,理论知识,人类 50,GPT4 77.0 7. 经济学,乔治梅森大学经济学 321 学期中考试,Caplan 教授,人类 30,GPT4 66.0 8. 量子计算,德克萨斯大学奥斯汀分校量子信息科学考试,人类 74,GPT4 73.0 9. 医学,医学知识自我评估计划,人类 50,GPT4 75.0 10. 人工智能智商基准,MMLU,人类 35,GPT4 86.4 11. 常识推理,HellaSwag,人类 96,GPT4 95.3 12. 知识,常识,WinoGrande,人类 94,GPT4 87.5 在除了量子计算和常识推理这两个测试之外,GPT4 在其他测试中都超过了人类或专家的平均水平,通常差距很大。详细数据点如下。对于心灵理论心理学测试,人类专家的平均分为 87,而 GPT4 得分为 100.0。对于生物学,美国生物奥林匹克竞赛 USABO 半决赛考试 2020 测试,人类专家的平均分为 50,而 GPT4 得分为 99.5。对于 SAT 测试,人类专家的平均分为 50,而 GPT4 得分为 94.0。对于数学,小学数学 GSM8K 测试,人类专家的平均分为 50,而 GPT4 得分为 92.0。对于法律,统一律师资格考试 MBE plus MEE plus MPT 测试,人类专家的平均分为 50,而 GPT4 得分为 90.0。对于品酒,高级侍酒师理论知识测试,人类专家的平均分为 50,而 GPT4 得分为 77.0。对于经济学,乔治梅森大学经济学 321 学期中考试,Caplan 教授测试,人类专家的平均分为 30,而 GPT4 得分为 66.0。对于量子计算,德克萨斯大学奥斯汀分校量子信息科学考试测试,人类专家的平均分为 74,而 GPT4 得分为 73.0。对于医学,医学知识自我评估计划测试,人类/专家的平均分为 50,而 GPT4 得分为 75.0。对于人工智能智商基准 MMLU 测试,人类专家的平均分为 35,而 GPT4 得分为 86.4。对于常识推理 HellaSwag 测试,人类专家的平均分为 96,而 GPT4 得分为 95.3。对于知识,常识 WinoGrande 测试,人类专家的平均分为 94,而 GPT4 得分为 87.5。
尽管 GPT-4 在一系列考试中表现出色,协助翻译和编程任务,并生成创新想法,但其智能水平的评估方法仍然是激烈争论的主题。鉴于 GPT-4 是在包含几乎互联网上所有信息的庞大数据集上训练的,它提出了一个重大挑战,即判断它是否仅仅记住了与特定任务相关的信息,或者是否真正理解了这些信息。这种区分对于准确评估其智能水平至关重要。
从评估人类智能的角度来看,理解多领域任务是关键属性。在这种情况下,GPT-4 智能的评估可以通过几个关键方面来考察:
-
• 任务表现:这个指标对于评估 GPT-4 的能力至关重要。值得注意的是,GPT-4 在各种任务中表现出色,如考试、翻译、编程和生成创新想法,在许多专业和学术测试中常常超越普通人的平均表现。
-
• 知识理解和应用:确定 GPT-4 是否真正理解其获取的知识以及如何在不同情境下应用这些知识至关重要。一个真正智能的系统应该能够在各种场景中理解和灵活运用知识。GPT-4 在将知识应用于广泛的活动方面表现出色,包括编写和调试程序、模仿商业手册的写作风格、创作音乐和编写电视节目脚本。
-
• 泛化能力:智能实体在新任务和未见数据上的表现——其泛化能力——是其智能的重要衡量标准。尽管其训练数据可能存在时效性问题,但 GPT-4 继续为新颖问题提供创新解决方案,表明它不仅仅依赖于现有的知识和模式。
-
• 自主学*和推理:通过提示和示例融入新知识,GPT-4 已经证明了其在自主学*和推理方面的能力。它可以独立发现知识,并在各种任务和情境中形成推理。
通过对 GPT-4 能力的全面评估,包括任务表现、知识理解和应用、泛化能力和自主学*和推理,可以看出 GPT-4 代表了当前 AI 研究的巅峰。它是迄今为止最先进的通用人工智能*似模型。这样的进步具有深远的影响,有望在不久的将来显著改变人类的生活方式。尽管许多人可能低估了这些变化的影响范围,但现实是,这些技术进步所描绘的未来已经正在展开。
1.3 大型语言模型的技术演变
1.3.1 符号主义与连接主义
ChatGPT 的一个基本能力是自然语言处理(NLP)。最初,NLP 使用符号表示来解释现实世界,依赖于预定义的规则进行基于知识的推理。这种方法主要涉及使用既定规则查询知识库,并执行逻辑运算进行推理。然而,符号方法往往难以有效地管理语言中固有的多样性和歧义。此外,它们表现出有限的鲁棒性和泛化能力。随着语言现象的复杂性增加,手动编写的规则数量呈指数级增长,这使得语言多样性和统计特性的管理变得复杂。
机器学*和深度学*的出现预示着自然语言处理(NLP)技术向数据驱动方法的一个范式转变。在机器学*阶段,基于特定 NLP 子任务的训练数据,在预定义的函数空间内识别最优映射是可行的。然而,这种方法并没有完全消除规则设计的需求。特征工程在机器学*应用中成为结果的关键决定因素,但预定义的函数空间通常在特定子任务上表现出有限的鲁棒性和泛化能力。
深度学*模型的出现推动了自然语言处理(NLP)的变革性发展。最初,NLP 文本生成主要使用传统的 RNN、长短期记忆网络(LSTMs)或门控循环单元(GRUs)。这些基于循环架构的模型,由于它们的序列处理能力,擅长处理序列化的 NLP 任务。
RNN 通过将记忆机制纳入序列数据(无论是序列还是时间序列)的依赖关系来解决问题,通过训练学*上下文相关的模式。然而,RNN 受限于其短的记忆跨度。为了克服这一限制,开发了 LSTM 和 GRU。它们的内部门控机制管理信息流,保留序列中的关键数据,同时消除非关键元素。这使得在长序列处理任务中可以保持大量信息。
尽管如此,RNN 架构,包括 LSTM 和 GRU,在作为大型语言模型(LLMs)的基础结构方面遇到了一些挑战,这些挑战影响了它们的适用性:
-
- 不足的并行计算能力:RNN 在序列数据中必须按顺序逐个处理每个时间步,这阻碍了它们在训练期间充分利用现代 GPU 的并行计算能力。这种限制显著影响了模型训练的效率。
-
- 长距离依赖问题:尽管 LSTM 和 GRU 在处理长距离依赖方面比基本 RNN 有所改进,但它们在处理非常长的序列时仍然面临困难。
-
- 模型容量限制:LSTMs 和 GRUs 拥有相对有限的模型容量,这限制了在训练大型语言模型(LLMs)时模型的扩展性。这种限制阻碍了它们捕捉更复杂语义信息和构建复杂表示的能力。
1.3.2 Transformer
GPT 系列基于 Transformer 模型,这是一种在自然语言处理任务中高度流行的深度学*框架,由 Vaswani 等人在 2017 年提出。Transformer 模型的核心是多头注意力机制——自注意力机制的增强。该机制在其架构内为每个输入元素计算查询、键和值向量。它通过矩阵运算确定元素之间的关系(概率),并生成最可能的序列,从而有效地捕捉输入序列中的长距离依赖关系。
与 RNNs 相比,Transformer 模型的自注意力机制能够同时处理整个序列(参见图 1.4),最大化并行计算能力的利用,以提升训练效率。这种架构能够直接捕捉序列中任意位置之间的依赖关系,从而有效地解决长距离依赖问题。凭借其出色的可扩展性,Transformer 模型在大型规模训练期间能够进行广泛的模型扩展,增强其吸收更多信息和发展更复杂表示的能力。因此,它已成为自然语言处理、视觉处理和多模态处理应用的事实上的基础架构。

图 1.4 Transformer 模型。图片来源:jalammar.github.io/illustrated-transformer/。
在左侧,有两个编码器,分别标记为编码器 1 和编码器 2。每个编码器由一个自注意力层、随后是残差连接和层归一化、然后是一个前馈网络,再次是残差连接和层归一化组成。编码器 1 的输入标记为 x1^T 思考,编码器 2 的输入标记为 x2^T 机器。在右侧,有两个解码器,分别标记为解码器 1 和解码器 2。每个解码器由一个自注意力层、随后是残差连接和层归一化、然后是一个编码器-解码器注意力层、再次是残差连接和层归一化、然后是一个前馈网络,再次是残差连接和层归一化组成。解码器 2 的输出经过一个线性层,然后是一个 Softmax 层。
需要强调的是,虽然原始的 Transformer 模型包含编码器-解码器架构,但 GPT 仅使用解码器组件(参见图 1.5)。编码器和解码器都由N个相同的层依次堆叠组成。源序列和目标序列,可能是图像或文本,最初通过嵌入层处理以标准化数据到相同的维度。每个编码器层都有一个多头注意力模块(带有Q、K、V输入)和一个前馈网络模块。解码器层以一个多头注意力模块开始,随后是一个与编码器堆叠输出交互的多头注意力模块(即,查询Q来自解码器,而值V和键K来自编码器),最后以一个前馈网络模块结束。输出阶段通过 softmax 分类器处理,该分类器确定具有最高概率的类别或词汇。

图 1.5 GPT 系列模型架构图。图片来源:api.stock.us/api/v1/report-file/wz3g1myv?download。
GPT 模型包含 12 个 Transformer 层,词嵌入维度为 768,117 百万参数。它具有掩码多头注意力、层归一化和前馈网络。GPT-2 模型有 48 个 Transformer 层,词嵌入维度为 1600,15 亿参数。它包括掩码多头注意力、层归一化、残差连接和前馈网络。GPT-3 模型由 96 个 Transformer 层组成,词嵌入维度为 12888,1750 亿参数。它也具有掩码多头注意力、层归一化、残差连接和前馈网络。每个模型使用位置编码对文本输入和输出文本预测。
1.3.3 无监督预训练
GPT 系列中的所有模型都经过无监督预训练阶段;然而,它们在模型大小和使用的文本数据量上存在显著差异。这一阶段利用广泛的语料库统计信息来捕捉单向或双向上下文信息,这些信息对序列中前后数据的相对关系敏感。作为一个生成模型,GPT 旨在预测给定上下文中的下一个单词,持续努力生成与上下文最相关和最连贯的文本,从而最大化条件概率 \(MathML\)
。如图 1.6 所示,在预训练阶段,GPT 使用单向(掩码自注意力)语言模型,仅基于左侧上下文进行预测,而不使用右侧上下文信息。

图 1.6 GPT 架构的掩码自注意力。图片来源:jalammar.github.io/illustrated-gpt2/.
在左侧,有一个标记为 GPT 系列的框,其中包含从 1 到 N 堆叠的多个解码器。在右侧,有一个掩码自注意力的表示。掩码自注意力机制用一条从圆圈向上指的箭头表示,表明关注左侧上下文,而不利用右侧上下文信息。在掩码自注意力下方,有若干个水平排列的块。
GPT 模型的预训练机制从庞大的文本语料库中获取语言和世界知识。语言知识包括词汇、形态、句法和语义等方面,这些有助于人类和机器理解自然语言。世界知识包括事实知识(现实世界中发生的事件)和常识知识。基于 Transformer 的语言模型能够从包含数百万到数十亿个例子的语料库中学*基本的语言知识。然而,获取事实知识需要更大规模的训练数据。与相对稳定和有限的言语知识不同,事实知识不仅丰富,而且不断演变。当前的研究表明,随着训练数据量的增加,预训练模型在各个下游任务上的性能持续提高,这表明这些模型主要从增量训练数据中获取世界知识。这种训练数据的扩展使得模型能够更有效地解决 NLP 任务中的挑战,从而在不同应用场景中提高其性能和准确性。
1.3.4 监督微调
尽管预训练阶段赋予了 GPT 模型广泛的语言和世界知识,但在特定任务上实现卓越性能通常需要监督微调。在这个阶段,模型利用标记数据集通过监督学*来微调其参数,从而更好地满足特定任务的要求。通常,对于 GPT 系列,这个过程应用于自然语言处理任务,如问答、对话生成和情感分析。然而,并非所有 GPT 模型都接受监督微调,因为构建下游任务训练数据集的复杂性和高成本。此外,随着模型参数数量的增加,训练成本呈指数级上升。在 GPT 系列,尽管 GPT-1 和 GPT-3.5 及以上版本通过有限的样本进行了监督微调,但它们的核心竞争力主要来自广泛的预训练阶段。这些模型通过上下文学*进一步适应更多下游任务。
1.3.5 人类反馈强化学*
监督微调可以提高模型在特定任务上的性能,但挑战可能持续存在。为了进一步优化模型,GPT-3.5 及以上版本已纳入人类反馈强化学*(HFRL)。如图 1.7 所示,此过程涉及使用人类审阅员评估模型生成的响应,其评估作为强化学*信号以增强模型性能。因此,ChatGPT 可以通过与人类的互动逐步提高其响应的质量。

图 1.7 人类反馈的强化学*基本原理。
其组成部分包括:强化学*算法、奖励预测和环境。强化学*算法生成预测奖励并将其发送到奖励预测。人类反馈提供给奖励预测。奖励预测将观察结果发送到强化学*算法。强化学*算法将动作发送到环境。环境将观察结果发送回强化学*算法。
具体来说,问题是从数据集中随机选择的,人工标注者提供高质量的答案,然后这些答案被用来微调 GPT 模型。通过这个监督学*阶段,模型被训练以产生更符合人类预期的答案。HFRL 包括三个步骤:初始的监督微调;随后的奖励模型(RM)训练,其中人工标注者对输出进行排名,这些排名被用来训练 RM;最后,使用训练好的 RM 通过强化学*来优化策略,根据 RM 的反馈更新预训练模型的参数。通过迭代重复最后两个步骤,可以开发出更高品质的模型,使生成的内容更好地满足人类需求。
1.4 大型语言模型的技术栈
LLMs 如 ChatGPT 正迅速演变成为基础设施的关键元素。它们包含了一个多样化的技术栈,其中包括容器化、性能监控、商业智能、事件处理、云服务、微服务和分析工具等功能。这个技术栈可以系统地分为五个不同的层次,从基础层开始,如图 1.8 所示。
-
- 基础设施层:这一层在提供执行训练和推理任务所需的基础设施方面至关重要,包括使用公共云、私有云和专用计算硬件。在这一层面,AI 专用硬件(如 GPU 和张量处理单元)的效率常常成为关键的瓶颈。大多数大型语言模型的计算工作主要在这些云环境中的设备上完成,为模型提供者和研究实验室提供训练服务,同时也为参与模型部署或微调的企业提供服务。自从 CPU 向 GPU 转变成为 AI 的主要计算单元以来,该领域面临着与计算能力巨大需求相关的全新挑战,这在过去十年中构成了一个重大挑战。
-
- 框架层:这一层包括先进的深度学*和分布式训练框架,对于模型的训练和部署至关重要。如 PyTorch 和 TensorFlow 等突出框架,以及 Pathway、Megatron-LM 和 DeepSpeed Zero 等分布式训练系统,都属于这一类别。
-
- 模型层:这一层包括各种开源和专有模型,通常通过 API 支持更高层,如应用层或中间件。
-
- 中间件层:这一层涉及封装 LLM 的接口、优化提示、外部知识的集成以及第三方工具的接口。它提供了配备长期记忆和代理功能的临界中间件服务,满足用户层多样化的工作流程需求。这一层简化了工作流程分解、工具调用以及应用层和模型层之间的连接,从而简化了开发者和模型之间的交互,降低了 LLM 实际应用中的障碍。
-
- 应用层:这一最外层将人工智能模型集成到最终用户应用中。许多企业通过中间件层或直接调用模型的方式,将大型语言模型(LLM)整合到面向客户的软件应用或搜索引擎中。这种集成赋予了产品 LLM 的高级协作和生成能力,例如微软的新必应(New Bing)就是一个例子。

图 1.8 大型语言模型的技术栈。
层次结构如下:应用层、中间件层、模型层、框架层和基础设施层。应用层包括在线平台应用和客户端应用。在线平台应用指的是基于公共网络平台的大型语言模型应用,这类应用通常具有巨大的流量。客户端应用指的是提供客户端交互的大型语言模型应用。中间件层包括中间件框架,例如 LangChain 和 HuggingGPT。模型层包括专有预训练模型、模型库和开源项目。专有预训练模型指的是通过 API 调用可访问的商业化预训练模型。模型库指的是开源模型共享平台。开源项目指的是具有开源代码和权重的预训练模型,通常可以免费使用。框架层包括训练框架,这指的是深度学*框架,如 PyTorch 和 TensorFlow,以及分布式训练框架,如 Pathway、Megatron-LM 和 DeepSpeed Zero。基础设施层包括云平台和计算硬件及芯片。云平台指的是用于训练或云部署的开放计算平台,如 Azure、AWS、GCP、阿里云等,以及私有云。计算硬件和芯片指的是用于大型语言模型训练和部署的计算加速芯片和存储芯片,包括 CPU、GPU、DSA(例如 TPU)、内存、NVMe、Infiniband。
此外,一些专有模型,如 OpenAI 的 ChatGPT,直接嵌入到上层应用中。其他组织,受数据隐私或特定业务需求的驱动,可能会将开源大型模型调整为开发定制解决方案,以满足独特的行业需求,从而为最终用户提供定制化服务。
1.5 大型语言模型的影响
ChatGPT 的成功对 NLP 和相关领域产生了深远的影响。展望未来,该领域的科技发展趋势可能表现出以下特点:
-
- NLP 子领域的独立研究意义可能会逐渐减弱。随着 LLMs 规模的扩大,NLP 领域内各种子任务的性能预计将显著提高。基于小型模型的传统微调方法可能会逐渐被利用大型模型和内容学*技术(如提示)的方法所取代。许多之前被认为是“特定领域”的问题,可能主要源于对领域知识的缺乏。有了足够的领域知识,这些问题可能有望得到解决。实现 AGI 的道路可能比预期的更直接:可能只需要为 LLMs 提供更多特定领域的数据进行自我学*。
-
- 预计 LLMs 将发展成为多模态,并作为通用的人机接口。如图 1.9 图 1.9 所示,LLMs 的应用领域预计将超越 NLP,包括图像处理、视频和语音任务。GPT-4 发布期间的演示已经展示了多模态 LLMs 的应用场景。这些模型有可能演变成支持多模态输入和输出的通用人机接口。这一趋势可能从操作系统和常用软件工具开始,逐渐渗透到各个行业的软件中,最终实现广泛应用。
-
- 使用低计算能力训练和部署大型模型将成为研究和应用的重点。鉴于开发 LLMs 所需的巨额资金投入,可能只有少数大型企业会继续发布能与 ChatGPT 竞争的 LLMs。许多在特定垂直领域运营的公司可能会尝试通过利用特定领域的数据来定制开源版本,建立自己的竞争优势“护城河”。然而,LLMs 的能力通常只有在达到一定规模阈值后才会显现。因此,通过小规模模型和领域数据微调来实现理想结果可能并不有效。因此,低计算能力训练和部署大型模型不可避免地将成为研究和应用的一个突出领域。
-
- 基于大型语言模型(LLM)的中介将整合企业工作流程。许多中小企业可能会利用基于 LLM 的中介(见图 1.10)来整合他们的工作流程,从而提高他们的竞争力,尽管可能会对领域数据的安全性造成潜在妥协。像 ChatGPT 这样的大型模型不仅展示了处理和生成多模态数据的效率,还表现出复杂的推理能力和对分布外事件的鲁棒性。这使得 LLM 可以作为智能代理,整合现有的企业工作流程,从而自动化流程并提高效率。这可能导致一个令人担忧的螺旋效应:领域数据被 LLM 垄断得越多,它们的性能迭代就越快。因此,为了避免在竞争中落后,其他中小企业将越来越多地依赖通过将他们的工作流程与基于 LLM 的中介整合来带来的效率提升。

图 1.9 大型语言模型作为通用接口。
在顶部,有一个标记为“总结以下文章内容”的框,连接到一个通用接口框。在此之下,有三个标记为“语言”、“视觉”和“多语言”的框。在这些框之下,有各种示例,包括一张带有问题“图片中有多少个机器人?”和答案“一个”的机器人图片,以及另一张带有相同问题和答案“三个”的多个机器人的图片。还有一张带有问题“Q:这是什么?”和答案“梅花”的图片,标记为“视觉问答”。其他示例包括“判断情绪:出色的球技”,答案为“积极”,标记为“指令引导的微调模型”,“新 CPU,选择 AMD”,“GPU,选择... 主题是什么?”答案为“电子”,标记为“分类”和“用英语回答问题:当你生病时,什么水果好吃?”答案为“香蕉”,标记为“跨语言问答”。在右侧,有一个标记为“多轮对话”的板块,其中包含关于 MetaLM、通用接口、音频、AGI、预训练任务和半因果语言建模的问题和答案。

图 1.10 基于大型语言模型中介(AutoGPT)的工作流程整合图。
该过程从设定目标开始,导致任务的定义和排序。如果目标未达成,则循环回定义和排序任务。否则,继续进行任务执行。任务执行后是评估。如果评估成功,则过程结束。如果不成功,则循环回定义和排序任务。任务执行由 AI 大型预训练语言模型(GPT-4)、网络和其他工具支持。
1.6 训练或部署大型模型的挑战
1.6.1 计算能力
在 GPT-4 等大型语言模型出现之前,很少有应用需要如此强大的 GPU 计算能力。这些大型语言模型的计算成本主要涉及两个方面:模型的初始训练和后续的运营维护。对于计划训练或部署 GPT-4 等大型语言模型的公司来说,其对计算力的需求主要体现在以下两个阶段:
-
- 预训练和微调阶段:在这个阶段,模型从零开始使用大量通用数据进行预训练,同时验证预训练模型的有效性以建立其基础知识。随后,模型使用针对特定商业应用或其他场景的特定数据进行微调,以提高响应准确性。尽管目前尚未公开 GPT-4 在此阶段的特定数据,但可以根据其他大型语言模型进行估算。例如,Meta LLaMA 模型拥有 650 亿个参数,在 1.4 万亿个标记上进行了大约 21 天的训练,使用了 2048 块 Nvidia A100 GPU,训练成本约为 100 万 GPU 小时。
对于拥有 1750 亿个参数的 GPT-3 模型,其训练需要 3.14E23 FLOPS。假设使用 NVIDIA 80GB A100 GPU(理论性能为 312 TFLOPS),并采用张量并行和流水线并行技术实现超过 50% 的利用率,估计需要 758 块 A100 GPU 来完成 1 个月的训练。尽管 ChatGPT 3.5 和 4.0 的具体参数尚未公开,但预计其规模与 GPT-3 相似,拥有 1750 亿个参数。根据 ChatGPT 网站上的可用数据,内存使用量估计在 350 到 500 GB 之间。然而,为了在可接受的时间内获得结果,训练可能需要超过 1000 块 A100 GPU 的计算能力。据报道,微软和 OpenAI 构建了一个拥有超过 10,000 块 GPU 的超级计算机来训练 GPT-3,单次训练成本约为 500 万美元。
-
- 推理和部署阶段:一旦微调完成,LLM 可以部署到现实世界的生产环境中。与训练阶段相比,部署阶段的计算需求相对较低,但规模显著更大。对于广泛的在线交互,部署阶段会产生大量的服务器和芯片成本,可能超过训练阶段的成本。这是因为在一个集群中需要大量的服务器来提供并行网络服务,主要涉及大量的矩阵计算和存储管理。在特定场景,如边缘应用中,可能对硬件成本效益和响应延迟有独特的要求,传统的 GPU 可能不足以满足。
根据最*对 OpenAI 首席执行官 Sam Altman 的采访,我们可以做出以下假设:如果 OpenAI 采用 GPT-3 的密集模型架构,拥有 1750 亿个参数,隐藏层维度为 16k,序列长度为 4k,每个响应的平均令牌数为 2k,每天有 1300 万活跃用户,每个用户有 15 个响应,考虑到由于空闲时间导致的 50% 的硬件利用率,以及每小时 1 美元的 GPU 成本(性能是 FasterTransformer 的两倍),ChatGPT 的每日计算硬件成本大约为 69 万美元。OpenAI 需要大约 3617 台 HGX A100 服务器(总计 28,936 个 GPU)来提供 ChatGPT 服务,每个查询的成本大约为 0.36 美分。
1.6.2 数据
LLM 的训练依赖于大量数据,这使得它们能够学*和掌握自然语言中封装的各种知识。同时,考虑到 LLM 的质量,这些数据必须得到有效清理、标注、组织和存储。因此,这些任务所需的基础设施、工具和数据工程师的成本,以及数据管理和处理,可能会迅速增加。
例如,LLaMA 模型使用了总计 4.6TB 的训练数据集,包含 1400 亿个令牌。如图 1.11 所示,GPT-3 的预训练文本数据达到了惊人的 45TB。这些庞大的数据量突显了模型训练所需的资源,并强调了数据质量的重要性。据报道,世界上最大的中文语料库 WuDaoCorpora 存储了 3TB 的中文文本数据,其中 200GB 已公开提供。

图 1.11 GPT-3 训练数据集的组成。数据来源:论文“通过人类反馈训练语言模型以遵循指令”。
该表由三个主要部分组成:预训练数据集(基本训练)、用于监督微调的训练数据集(认知/表达训练)和用于 PPO 的训练数据集(领域泛化)。预训练数据集部分有四列:数据集、数量(标记)、混合训练中的权重和训练 300B 标记所需的周期。具体如下:第 1 行. Common Crawl(过滤后):4100 亿,60%,0.44。第 2 行. WebText2:190 亿,22%,2.9。第 3 行. Books1:120 亿,8%,1.9。第 4 行. Books2:550 亿,8%,0.43。第 5 行. Wikipedia:30 亿,3%,3.4。用于监督微调的训练数据集部分有三列:类别、语料库来源和数量。具体如下:第 1 行. 训练数据集:标注者,11295。第 2 行. 训练数据集:客户,1430。用于 PPO 的训练数据集部分有三列:类别、语料库来源和数量。具体如下:第 1 行. 训练数据集:标注者,11295。
对于训练 GPT-3.5 的中文版本,除了搜索和社交领域的巨头公司外,只有少数垂直行业公司能够获取足够的数据。然而,在商业运营过程中获取的文本数据是否可用于模型训练,引发了重大的法律和伦理问题。即使是基于 GitHub 开源数据的 Codex,也遭到了相当多的批评。值得注意的是,GPT-4 的多模态训练数据集包括图像和文本,可能包括图表推理、物理考试、图像理解、论文摘要和漫画文本等多种类型。
1.6.3 工程学
LLM 的发展依赖于专门的研究人员和工程师,他们负责创建架构并正确配置训练过程。如图 1.12 所示,模型的架构决定了其学*和生成文本的方式。设计、实施和管理这些架构需要计算机科学各个领域的专业知识。负责发布和交付前沿研究结果的工程师和研究人员通常的薪资可达数十万美元。值得注意的是,开发 LLM 所需的技能集可能与机器学*工程师的传统技能集有显著差异,如图 1.2 所示。

图 1.12 机器学*系统的基础架构。
该图展示了模型架构的各个组成部分。这些组成部分包括配置、数据收集、数据验证、机器资源管理、服务基础设施、监督、特征提取、流程管理工具、分析工具和机器学*代码。
此外,训练 LLMs 对工程实践提出了高标准。这包括数据清理、大规模分布式训练的工程实现,以及在大规模参数和数据量下保持训练稳定性的技术。
1.7 大型语言模型的局限性
尽管 GPT-4 等 LLMs 在基于上下文的对话、编程,甚至在理解图像和分析数据图方面表现出显著的能力,但它们仍然远未达到通用人工智能(AGI)的水平。这些模型面临几个关键局限性:
真实性和准确性:大型语言模型(LLMs)通常缺乏对真实性和准确性的强大保证。例如,在训练期间未广泛覆盖的领域,GPT-4 可能不会表现出类似人类的常识或稳健的逻辑推理,有时会生成错误或误导性的答案。尽管与之前的模型相比有所改进,但 GPT-4 仍然可能产生不适当建议或不准确数据,使其不适合用于法律和医疗等高风险领域。
可解释性:GPT-4 等 LLMs 的内部工作原理复杂且不透明,这使得保证其输出的安全性具有挑战性。虽然已经取得了降低错误率的进展,但有害输出的潜在风险仍然存在,可能会给开发者和用户带来法律问题。
社会和伦理影响:这些模型由于其“黑箱”性质,可能会无意中生成有偏见、虚假或冒犯性的内容。尽管已采取措施减轻风险,但在创建误导性信息或有害内容(如假新闻或宣传)方面仍存在被滥用的可能性。
隐私问题:LLMs 在大量数据上进行训练,其中一些可能包含敏感个人信息。这引发了隐私泄露的担忧,因为模型可能会无意中学*和复制私人数据。
1.8 摘要
本章对 ChatGPT AI 的进化轨迹进行了全面的分析和讨论,突出了其显著影响。从最初的 GPT-1 和 GPT-2 模型到更复杂的 GPT-3 和 GPT-4,它强调了每个版本在推动人工智能领域向前发展中所起的关键作用。
本章探讨了 ChatGPT 的功能范围,详细介绍了其在语言理解和生成方面的熟练程度,情感分析的准确性,以及回答问题和创作诗歌的能力。它还详细考察了从早期自然语言处理(NLP)技术到当代 Transformer 模型的转变,重点关注大规模模型的架构设计。
此外,文本深入探讨了大型语言模型(LLMs)在商业、学术和政策领域等各个领域的广泛影响,同时也讨论了这些模型所需的巨大数据和计算需求等重大问题。如模型幻觉、偏差、可解释性问题以及隐私问题等关键挑战也被讨论。
总结来说,本章提供了对 ChatGPT 及其类似大型语言模型(LLMs)的操作机制、潜力和挑战的全面理解。未来的章节将进一步剖析 ChatGPT 背后的原理,以更好地理解其影响和未来的进步。
第二章 变换器模型的深入理解
摘要
本章对变换器模型进行了全面的探索,这是深度学*中的一个关键创新,特别是在自然语言处理领域。章节首先概述了模型的核心组件,包括自注意力机制、多头注意力、前馈神经网络(FNNs)、残差连接、层归一化和位置编码。它深入探讨了自注意力机制通过计算输入元素之间的注意力权重来捕捉长距离依赖的能力。多头注意力被讨论为一种增强,它使得同时处理输入序列的多个方面成为可能。章节还涵盖了 FNNs 在捕捉非线性特征中的作用,残差连接对梯度流的重要性以及层归一化对训练稳定性的重要性。位置编码被强调为结合序列顺序信息的关键。最后,讨论了训练和优化技术,如损失函数、优化器和学*率策略,以增强模型性能。
关键词
变换器模型;自注意力机制;多头注意力;前馈神经网络;残差连接;层归一化;位置编码;自然语言处理(NLP);训练优化
变换器模型代表了深度学*范式的一个重大转变,主要通过其自注意力机制的应用。这一创新从根本上改变了与循环神经网络(RNNs)和卷积神经网络(CNNs)通常相关联的传统方法,从而重塑了自然语言处理(NLP)的格局。目前,变换器已成为 NLP 研究和开发的核心,支撑着包括双向编码器表示(BERT)和生成预训练变换器(GPT)在内的各种突出模型。本章将对变换器模型的基本组成部分进行全面的考察。
2.1 变换器模型的介绍
如图 2.1 所示,Transformer 模型的基本组件包括多头注意力机制、前馈神经网络(FNNs)、与层归一化结合的残差连接以及位置编码。

图 2.1 Transformer 模型。
在左侧,有一个从输入嵌入开始,随后是位置编码,然后是多个带有多头注意力和前馈块的加和归一化层,重复 N 次的操作序列。在右侧,有一个类似的架构,从输出嵌入开始,随后是位置编码,然后是带有掩码多头注意力、多头注意力和前馈块的多个加和归一化层,也重复 N 次。输出概率通过一个线性层后跟 Softmax 获得。该图还放大了多头注意力机制,显示了通过线性层传递的输入 V、K 和 Q 的缩放点积注意力,然后连接并经过另一个线性层处理。另一个放大显示了缩放点积注意力过程,其中 Q 和 K 相乘(MatMul),缩放,可选地掩码,通过 Softmax,然后与 V 相乘(MatMul)。
Transformer 架构的核心是自注意力机制,它评估输入序列中每个元素与其他每个元素之间的关系。具体来说,它为每个输入元素生成“键”、“查询”和“值”表示,并使用这些表示执行加权求和,从而生成输出序列。自注意力的扩展,即多头注意力机制,允许模型同时处理输入序列中的各种上下文。它将输入分割成多个子空间,每个子空间通过独立的自注意力计算进行处理。这些子空间的连接结果构成了复合输出序列。
此外,FNN 是 Transformer 中的关键元素。Transformer 中的每个 FNN 由两个线性层和一个中间的激活函数组成。自注意力的输出经过第一个线性层的处理,然后通过激活函数,再通过第二个线性层,这一过程在每一个 Transformer 层中重复。
为了加速训练并提高模型效率,Transformer 架构集成了残差连接和层归一化。残差连接通过将输入序列逐元素添加到自注意力和 FNNs 的输出中,从而促进输入序列的整合,形成一个修改后的序列。随后,对该序列在其维度上的层归一化有助于加速训练过程。
自注意力机制的内生设计无法捕捉元素的顺序,因此在 Transformer 模型中需要引入位置编码。这种编码利用正弦和余弦函数为每个元素创建独特的位置编码,这些编码随后被添加到输入序列的元素中,从而嵌入关于序列顺序的信息。
在训练过程中,Transformer 主要采用最大似然估计方法,旨在通过最小化交叉熵损失来优化模型参数。为了进一步提高训练速度,Transformer 通常使用 Adam 优化器,以及学*率预热和梯度裁剪等技术。
2.2 自注意力机制
注意力机制的原理基础借鉴了人类的视觉和认知过程。在吸收视觉或语言数据时,个体倾向于关注输入的具体部分,而忽略无关的细节。这种选择性的关注减轻了计算和认知负担,从而提高了信息处理的效率和准确性。
2.2.1 自注意力的计算过程
自注意力,是注意力机制的一种特殊变体,它促进了输入序列中所有元素之间的交互,以确定各自的注意力权重。这种能力使得自注意力机制在处理序列数据时能够包含所有元素。自注意力的主要原理是为每个序列元素分配一个权重,这决定了模型在处理特定元素时对其他元素的聚焦强度。自注意力的一大优势是它能够捕捉序列中的长距离依赖关系,从而增强模型的表示能力。在 Transformer 中,自注意力计算涉及多个步骤:
初始时,输入序列(包括单词、字符或其他元素)通过嵌入层转换为向量表示。随后,对于每个元素,通常通过与不同的权重矩阵相乘,得到称为查询、键和值的向量。
如 图 2.2 所示,输入序列(表示为 \(MathML\)
)通过嵌入层转换为标记嵌入 \(MathML\)
。使用三个变换矩阵 \(MathML\)
,\(MathML\)
和 \(MathML\)
,将这些嵌入转换为向量 \(MathML\)
,\(MathML\)
和 \(MathML\)
,分别代表标记在潜在空间中的语义特征。

图 2.2 自注意力机制。
它包括嵌入、乘法和 softmax 操作。在底部,有三个标记为 x sub 1 end sub、x sub 2 end sub 和 x sub 3 end sub 的输入向量,分别转换为嵌入 e sub 1 end sub、e sub 2 end sub 和 e sub 3 end sub。这些嵌入随后通过权重矩阵 W superscript Q end superscript、W superscript K end superscript 和 W superscript V end superscript 进行处理,以产生 q sub 1 end sub、k sub 1 end sub、v sub 1 end sub、q sub 2 end sub、k sub 2 end sub、v sub 2 end sub、q sub 3 end sub、k sub 3 end sub 和 v sub 3 end sub。在 sub 11 end sub、sub 12 end sub 和 sub 13 end sub 的位置计算注意力分数。这些分数随后通过 softmax 层转换为 st sub 11 end sub、st sub 12 end sub 和 st sub 13 end sub,分别乘以 wt sub 11 end sub、wt sub 12 end sub 和 wt sub 13 end sub。结果相加并加到 b sub 1 end sub 上。图中包含表示操作流程的箭头:嵌入、乘法和 softmax。
随后,向量\(MathML\)
与每个\(MathML\)
进行点乘以计算初始注意力分数\(MathML\)
。值得注意的是,\(MathML\)
是标量。这些分数通过 softmax 函数进行归一化,以得到\(MathML\)
。然后,每个\(MathML\)
乘以相应的值向量\(MathML\)
,生成向量\(MathML\)
。通过调整向量维度的平方根对点积进行 softmax 归一化,确保注意力权重的总和为 1,单个权重在 0 到 1 之间。所有\(MathML\)
向量的总和产生输出向量\(MathML\)
,体现了自注意力机制的精髓:每个输入标记的输出向量以类似的方式进行计算。此过程在整个输入序列中重复,以生成所有输出向量\(MathML\)
、\(MathML\)
。与 RNN 不同,自注意力计算不依赖于先前的隐藏状态,而是在嵌入中包含位置信息,使模型能够识别标记的相对位置,并促进计算的并行化。
如 图 2.3 所示,通过将向量 \(MathML\)
连接到矩阵“E”中,启用了基于矩阵的自注意力操作。将“E”与参数矩阵 \(MathML\)
、\(MathML\)
和 \(MathML\)
相乘,得到矩阵“Q”、“K”和“V”。

图 2.3 自注意力机制的矩阵计算过程。sebastianraschka.com/blog/2023/self-attention-from-scratch.html.
该过程从输入矩阵 x 开始,其维度为 n 行 d 列,其中 n 是标记的数量,d 是嵌入大小。输入 x 与三个权重矩阵 WqT、WkT 和 WvT 相乘,分别产生矩阵 Q、K 和 V。WqT 和 WkT 的维度为 d 行 dq 列,WvT 的维度为 d 行 dv 列。生成的矩阵 Q 和 K 的维度为 n 行 dq 列,V 的维度为 n 行 dv 列。然后矩阵 Q 与矩阵 K 的转置 (KT) 相乘,生成一个维度为 n 行 n 列的注意力矩阵。这个注意力矩阵通过 softmax 函数处理,生成一个维度为 n 行 n 列的矩阵 A。最后,矩阵 A 与矩阵 V 相乘,生成一个维度为 n 行 dv 列的输出矩阵 Z。
注意力得分矩阵是通过将“Q”与“K”的转置相乘来计算的。然后使用 softmax 进行行归一化,生成一个归一化的注意力得分矩阵“A”,其中每一行的和为 1。这个大小为 \(MathML\)
的矩阵“A”与“V”相乘,生成最终的矩阵“Z”,其维度 \(MathML\)
表示“n”个标记,每个标记都有一个长度为 \(MathML\)
的值向量。自注意力公式表示为
\(MathML\) (2.1)
(2.1)
在这里,“Q”、“K”、“V”是通过将输入矩阵“X”与三个参数矩阵相乘得到的隐藏状态矩阵,\(MathML\)
表示矩阵 \(MathML\)
的列数。
通过\(MathML\)
进行除法处理解决了潜在的梯度消失问题。当 dkd_kdk 很大时,注意力分数的方差可能很大,由于 softmax 函数将极端值压缩,导致梯度减小。通过\(MathML\)
进行归一化将这个方差从\(MathML\)
减少到 1,从而稳定了梯度。
2.2.2 自注意力机制的精髓
矩阵“Q”,“K”和“V”代表输入矩阵“X”的线性变换,可以将其视为“X”在潜在空间中的语义表示。为了简化,这些矩阵可以统称为“X”。省略归一化因子\(MathML\)
会导致方程(2.1)的修改版本,表示为
\(MathML\) (2.2)
(2.2)
在这个公式中,\(MathML\)
表示矩阵“X”与其转置的乘积,这是一个在向量空间中表示向量之间内积的操作。这反映了输入向量的相似性。两个向量之间内积的几何解释表明了它们之间的角度以及一个向量在另一个向量上的投影。因此,两个向量之间的相似性越高,其投影值就越大;相反,当两个向量垂直时,表明它们是线性独立的,它们的内积等于零。
如图 2.4 所示,考虑一个由元素
表示的输入序列\(MathML\)
。如果嵌入层使用 one-hot 编码,输入矩阵“X”将具有特定的配置。这个矩阵与其转置的乘积实际上充当一个注意力权重矩阵。这种配置简化了注意力权重的计算,这些权重来源于不同输入元素之间的相似性和差异性,从而简化并提高了注意力机制中计算过程的效率。

图 2.4 注意力权重矩阵。
第一个矩阵 X 的元素为:行 x1 (1, 0, 1, 0),行 x2 (0, 1, 0, 1)和行 x3 (0, 1, 1, 0)。第二个矩阵 X 的转置元素为:行 x1 (1, 0, 0, 0),行 x2 (0, 1, 1, 1)和行 x3 (1, 0, 1, 0)。乘积的结果是注意力矩阵,其元素为:行 x1 (2, 0, 1),行 x2 (0, 2, 1)和行 x3 (1, 1, 2)。然后对注意力矩阵应用 softmax 操作,得到一个矩阵,其元素为:行 x1 (0.67, 0.09, 0.24),行 x2 (0.09, 0.67, 0.24)和行 x3 (0.21, 0.21, 0.58)。
注意力权重矩阵体现了内积计算的精髓,即衡量相似性。例如,考虑第一行,它计算了标记 \(MathML\)
与序列中所有其他标记的相似性。如果标记 A 和 B 频繁共现,它们的相似性通常较高。在这个例子中,\(MathML\)
与自身以及与标记 \(MathML\)
的相似性特别高,这表明 \(MathML\)
与这两个标记之间的关系比与 \(MathML\)
的关系更*。
随后,这些结果通过 softmax 函数进行归一化,以产生归一化的注意力权重矩阵。如图 2.5 所示,这个矩阵一旦归一化,就充当系数矩阵。然后,这个矩阵与输入矩阵 \(MathML\)
进行右乘,得到 \(MathML\)
。这个操作涉及到将系数矩阵的每一行与 \(MathML\)
的每一列相乘,实际上计算了输出矩阵 \(MathML\)
每一行的值。\(MathML\)
中的每一行代表相应标记的加权词嵌入,受到注意力权重的影响。

图 2.5 注意力分数加权的词嵌入。
表格包含三个矩阵:alpha、X 和 X 帽。其内容如下:矩阵 alpha。行 1. x_1: 0.67, 0.09, 0.24. 行 2. x_2: 0.09, 0.67, 0.24. 行 3. x_3: 0.21, 0.21, 0.58. 矩阵 X。行 1. x_1: 1, 0, 1, 0. 行 2. x_2: 0, 1, 0, 1. 行 3. x_3: 0, 1, 1, 0. 矩阵 X 帽。行 1. x_1: 0.67, 0.33, 0.91, 0.09. 行 2. x_2: 0.09, 0.91, 0.33, 0.67. 行 3. x_3: 0.21, 0.79, 0.79, 0.21。
总结来说,自注意力机制,给定输入矩阵 \(MathML\)
,通过计算输入元素之间的注意力权重,得到输出矩阵 \(MathML\)
。这个过程涉及到计算查询向量与键向量之间的点积,以评估两个元素之间的相似性。这些注意力权重随后被用来执行值向量的加权求和,为每个输入元素生成一个输出向量。这些输出向量可以作为后续层的输入,或者与其他层结合,共同贡献模型的总体输出。
如图 2.6 所示,矩阵“Q”、“K”和“V”都是通过对输入矩阵 X 的线性变换得到的。理论上,这些变换可以通过一个单一的矩阵来完成以实现注意力加权。然而,使用三个不同的矩阵来生成查询、键和值向量对于注意力机制至关重要。查询向量在注意力权重计算过程中充当“问题”,通过与键向量进行比较来评估其对其他元素的聚焦程度。键向量作为输入序列中每个元素的“答案”,注意力权重是基于查询向量和键向量之间的相似度计算的。值向量携带序列中每个元素的实际信息。这些注意力权重随后用于聚合值向量,生成最终的输出向量。

图 2.6 计算 Q, K 和 V 矩阵的方法。
在第一个例子中,矩阵 X 与矩阵 WQ 相乘得到矩阵 Q。在第二个例子中,矩阵 X 与矩阵 WK 相乘得到矩阵 K。在第三个例子中,矩阵 X 与矩阵 WV 相乘得到矩阵 V。
2.2.3 自注意力机制的优缺点
自注意力是 Transformer 模型的一个关键组件,专注于计算输入序列中元素之间的注意力权重,以突出显示关键信息。与传统序列模型如 RNN 和长短期记忆网络 (LSTMs) 不同,这些模型逐个元素处理序列,注意力机制可以直接评估任何一对元素之间的交互,增强了其处理长距离依赖的能力。注意力权重的可见性也增加了一层可解释性:通过检查这些权重,可以辨别模型在处理特定元素时的焦点,有助于模型分析、调试和优化。此外,自注意力可以在并行计算,这使得它在像 GPU 这样的并行处理单元上非常有效。这与 RNN 和 LSTMs 形成鲜明对比,因为它们的顺序操作没有充分利用并行硬件的能力。
自注意力也遇到了某些局限性,尤其是在处理长序列时。虽然它在捕捉长距离依赖关系方面表现出色,但随着序列长度的增加,计算和内存需求可能会变得难以承受。为了减轻这一点,研究人员开发了各种优化技术,如分层、稀疏和低秩注意力,这些技术有助于减少计算负载和内存使用。此外,自注意力模型通常需要大量的训练数据才能达到最佳性能,这可能会限制它们在数据有限或特定领域中的有效性。
2.3 多头注意力机制
多头注意力机制是自注意力系统的一种复杂扩展,旨在让模型能够同时处理和理解输入序列中呈现的信息的多个方面。这种能力使得可以创建更细致和多样化的解释,显著提高模型的有效性。
通过其理解各种信息的能力,多头注意力机制使用不同的“注意力头”来关注输入的不同方面。例如,在翻译语言时,一个头可能分析语法,而另一个头则深入研究词语背后的含义。这种方法不仅产生既准确又流畅的翻译,而且丰富了模型的理解。
此外,通过添加更多的注意力头,机制不仅增强了模型处理复杂任务的能力,而且在不增加更多层的情况下增加了其整体的表达能力。此外,多头注意力的结构天生适合并行处理,使其在具有高级硬件(如多个 CPU 或 GPU)的系统上特别高效。
2.3.1 多头注意力的实现
图 2.7 展示了多头注意力机制的内部工作原理。为了设置这个系统,从传统的自注意力系统中划分查询 \(MathML\)
,键 \(MathML\)
,和值 \(MathML\)
矩阵,每个部分与一个单独的注意力头对齐。然后每个头独立地使用其指定的权重子集处理自注意力,确保每个头的查询、键和值都是独特生成的。

图 2.7 多头注意力。
它分为两个主要部分:多头注意力和缩放点积注意力。在左侧,在多头注意力下,有多个线性块输入到缩放点积注意力块中,然后连接到 Concat 块和另一个线性块。输入被标记为 V、K 和 Q。在右侧,在缩放点积注意力下,过程从 MatMul 开始,接着是 Scale、Mask(可选)、SoftMax 和另一个 MatMul 块。输入被标记为 Q、K 和 V。
该过程涉及计算查询矩阵和键矩阵的点积,对这些乘积进行缩放,应用 softmax 函数进行归一化,然后将结果与值矩阵相乘以产生每个头的输出。这种方法使每个头能够从输入序列中捕捉到各种信息片段。
然而,更多的头并不总是意味着更好的结果。基础 Transformer 研究指出,八个头是最优的。增加到 16 或 32 个头并不一定能提高性能,实际上可能会带来递减的回报,尤其是在与只有 1 或 4 个头的情况相比时,后者可能会降低模型的有效性。
一旦所有头都处理了它们的输入,得到的向量被合并成一个更大的向量,如图 2.8 所示。图 2.8。例如,有八个头时,每个头都会产生一个输出向量,然后这些向量被连接在一起。这个组合输出随后通过一个线性层(在图 2.8 中标记为“W”),调整维度以匹配原始输入,同时将所有头的信 息融合成一个统一的整体。这个共享的线性层在协调各个注意力头收集到的不同见解方面发挥着至关重要的作用。

图 2.8 多头注意力的加权融合。
该图展示了将向量 Z1、Z5、Z8 合并成更大的向量 Z 的过程。向量 Z1、Z5 和 Z8 被表示为矩阵。这些矩阵与矩阵 W 相乘,结果得到更大的向量 Z。
2.3.2 多头注意力的作用
在 Transformer 架构中,多头注意力层的输出不仅用于后续层,它还帮助构建模型的复杂结构。这个层中的每个头都专注于输入序列的独特方面,增强了模型的分析深度。关于稀疏 Transformer 的研究揭示了每个头如何发挥专业化的作用,专注于诸如语法、上下文关系和对罕见词的强调等方面。例如,专注于语法的头块阻止语法错误的词影响结果,而专注于上下文的头分析句子,密切关注附*的词。同时,专注于罕见词的头挑选出句子的关键元素。
图 2.9 展示了编码器内不同头如何影响注意力矩阵的视觉演示,本研究特别关注由四层组成的编码器配置,每层从 0 到 3 编号,每层包含六个头,从 0 到 5 编号。在这个可视化中,每一行对应一个编码器层,每一列对应这些层中的一个头。

图 2.9 多头注意力的可视化。图片来源:论文“Transformer 模型中注意力的多尺度可视化”。
该视觉演示展示了编码器内不同头如何影响注意力矩阵,本研究特别关注由四层组成,每层从 0 到 3 编号,每层包含六个头,从 0 到 5 编号的编码器配置。图像显示了一个网格,y 轴上表示层,x 轴上表示头。网格中的每个单元格包含一个模式,代表受相应头和层影响的注意力矩阵。
图表说明了层内的动态:一些头倾向于对齐并关注相似的特征——例如第二层和第三层的 1 到 4 号头——而其他头则表现出独特和独立的行为。例如,在第二层中,1 号头,以及在第三层中,0 号和 5 号头,因其独特的选择而突出,表明它们在处理和优先处理信息方面的差异。这种头之间的多样性突出了多头注意力在捕捉输入序列中广泛特征方面的细微能力。
多头注意力机制说明,尽管它们都使用相同的残差梯度反向传播方法,但不同的注意力头设法发展出独特的特征选择方式。这种特征选择的多样性可能源于初始配置的变化以及 Dropout 策略的使用。研究已经具体探讨了不同的初始化策略如何减少层之间的可变性,从而产生更有效的训练结果。此外,有人建议为每个头使用不同的 Dropout 策略可以使它们捕捉和学*的特征更加多样化,从而增强模型的总体功能。
2.3.3 多头注意力的优化
由于多头注意力中有大量的参数,每个参数都有其独特的“Q”、“K”和“V”矩阵,该模型面临着相当大的计算和内存挑战。研究人员已经开发出几种策略来减轻这些问题:
-
- 局部多头注意力:这种策略限制每个注意力头只关注输入序列的特定部分而不是整个序列。这种方法显著降低了计算需求和内存使用,同时保留了多头注意力的关键优势。
-
- 稀疏多头注意力:通过让每个注意力头只关注输入序列的选定元素,这种技术减少了计算复杂性和内存使用。采用稀疏连接可以显著减少所需的资源。
-
- 分层多头注意力:在这个结构中,注意力头被组织成多个层次,每个层次关注输入的不同部分和信息类型。这种安排使模型能够掌握更复杂的上下文细节,并提高性能,尤其是在处理长序列时。
2.4 前馈神经网络
FNN(前馈神经网络),Transformer 模型的关键组成部分,可能只占模型结构的很小一部分,但它对于从输入序列中提取非线性特征和捕捉局部细节至关重要。如图图 2.10 所示,FNN 基本作为一个多层感知器运行,由多个层组成,每层包含许多神经元。在这个配置中,输入层接收原始数据,隐藏层处理这些数据以提取特征,输出层负责生成最终预测。这些层之间的连接是单向的,形成一个无环路径,确保信息仅以一个方向通过网络流动。

图 2.10 前馈神经网络。
它由三层组成:输入层、隐藏层和输出层。输入层有三个神经元,标记为输入,每个神经元接收一个输入信号。隐藏层包含三个神经元,每个神经元都与输入层的所有神经元相连。输出层有三个神经元,每个神经元都与隐藏层的所有神经元相连。箭头指示信号从输入层流向隐藏层以及从隐藏层流向输出层的方向。输出层神经元标记为输出。
在 Transformer 模型中,FNN(前馈神经网络)基本由两个线性层和一个非线性激活函数组成。这种设计允许网络捕捉输入序列中的非线性特征,显著提高了模型表达复杂思想的能力。第一个线性层,通常被称为全连接层,将输入数据投影到更高维的空间。随后的层,即输出层,然后将这个高维表示降维回原始维度。位于这些层之间,激活函数将非线性注入到过程中,使网络能够识别数据中的复杂模式。
激活函数在 FNN 中至关重要,因为它们将线性变换的输出转换为非线性输出,为模型添加必要的复杂性。网络的有效性往往取决于所使用的特定激活函数。流行的选择包括 Sigmoid、Tanh 和 ReLU(修正线性单元),Transformer 模型经常使用 GELU(高斯误差线性单元)函数。GELU 在数学上表示为
\(MathML\) (2.3)
(2.3)
如图 2.11 所示,当输入值在零附*时,GELU 的行为几乎呈线性,但随着输入值变大或变小而逐渐变薄。这一特性使 GELU 在深度神经网络训练中特别有效,有助于防止梯度消失。

图 2.11 GELU 激活函数。
x 轴的范围从负 3 到 3,以 1 为增量。y 轴的范围从负 0.5 到 3.0,以 0.5 为增量。曲线从 x 轴稍下方的负 x 象限开始。它逐渐下降,在 x 等于负 0.5 时达到最低点,此时 y 轴上大约为-0.1。从那里开始,曲线开始上升。当曲线进入正 x 象限时,它上升得更加陡峭。在 x 等于 0.5 左右,曲线穿过 x 轴并继续上升。随着 x 的增加,斜率变得越来越陡。到 x 等于 1 时,y 值大约为 0.5。在 x 等于 2 时,y 大约为 2.0。曲线继续其上升轨迹,在 x 等于 3 时,y 大约等于 3.0。曲线的形状类似于机器学*中使用的激活函数,具体是提到的高斯误差线性单元(GELU)函数,如提供的上下文信息所述。
在 FNN 中,每个连接都分配一个权重,该权重决定了输入信号传递到下一层时的强度。这些权重通过训练期间的梯度下降进行微调,以最小化预测误差。此外,每个神经元都有一个偏置值,该值调整其激活阈值,这个阈值同样在训练期间进行微调以优化网络性能。
尽管在 Transformer 模型中占比较小,但 FNN 在捕捉局部信息和解锁非线性特征方面至关重要。它在 Transformer 模型中的贡献在多个领域都显著:
-
- 局部信息提取:位于每个 Transformer 层中,FNN 处理来自自注意力机制的输出,熟练地提取局部特征。这一功能使模型能够掌握输入序列中的短程依赖关系,大大增强了其表达能力。
-
- 非线性引入:配备非线性激活函数,FNN 熟练地识别输入数据中的非线性特征。这种能力对于处理复杂的自然语言序列至关重要,这些序列通常包含固有的非线性模式和结构。
-
- 泛化增强:通过利用局部和非线性特征,FNN 显著增强了模型在遇到新数据和以前未见过的数据时的有效泛化能力。
2.5 残差连接
残差连接,一种神经网络中的快捷链接类型,允许直接将层输入传输到后续阶段。这一架构特性对于缓解梯度消失问题至关重要,从而提升训练过程和整体模型的有效性。这些连接由 Kaiming He 和同事们于 2015 年在深度残差网络框架内首创,用以解决深度神经网络训练中普遍存在的梯度消失和梯度爆炸问题。在 Transformer 架构中,残差连接被广泛采用,增强了多头注意力机制、位置感知 FNN 以及解码器的各个子层。
图 2.11 展示了残差连接的核心概念,它涉及在神经网络层中引入一个捷径,从而有效地跳过某些层。这种设计允许前一层的信 息绕过其他层,直接传递到更深的层。从数学的角度来看,如果 x 是层的输入,并且它经过由 F(x) 表示的非线性变换,输出变为 F(x) + x。在这里,x 是输入信号,而 F(x) 是层应用的变换。将 x 添加到 F(x) 的结果是结合原始输入和层学*到的残差变化。这种配置在反向传播过程中特别有益,因为它促进了更平滑的梯度流动,有效地解决了梯度消失的问题,从而提高了训练过程 (图 2.12)。

图 2.12 残差连接。
左图显示了一个标准学*块,其中包含输入 x,两个权重层,每个权重层后面跟着一个 ReLU 激活,输出 y 等于 H(x)。右图显示了一个残差学*块,其中包含输入 x,两个权重层,每个权重层后面跟着一个 ReLU 激活,一个中间输出 F(x) 和一个最终输出 y 等于 F(x) 加 x。残差学*块包括一个捷径连接,在最终的 ReLU 激活之前将输入 x 添加到中间输出 F(x)。
残差连接是 Transformer 模型的一个关键特性,广泛应用于其各个组件中,以加快训练速度并提升性能。在多头注意力子层中,一旦输入经过自注意力处理,结果输出将通过残差连接与原始输入结合。这种设置确保模型保持初始信息,同时无缝地将其与自注意力得出的见解整合。
类似地,在 FNN 子层中,输入经过两个阶段的线性变换,随后是一个激活函数。然后,从这个序列的输出中添加回原始输入,建立另一个残差连接。这种安排保留了原始输入数据,并将其与新学*的 FNN 信息融合,促进对输入特征的更深入理解和更好的保留。
在 Transformer 的编码器和解码器组件中,每一层都包含一个或多个配备残差连接的子层。这些连接对于允许信息有效地通过网络的深度流动至关重要,最终有助于提高模型的性能。
总结来说,Transformer 模型在其多头注意力机制、位置感知前馈网络以及编码器和解码器层之间引入了残差连接。这些连接通过提供一条直接梯度流向早期层的捷径,有效地解决了梯度消失和爆炸的问题。这一特性对于防止与深度模型训练相关的常见问题至关重要,从而提升了整体模型性能。残差连接还通过消除不必要的计算,简化了训练过程,从而加速了训练速度。此外,通过允许学*更复杂的表示,残差连接增强了模型的泛化能力,提高了其在测试数据集上的性能。
2.6 层归一化
层归一化是一种经过验证的有效策略,用于稳定神经网络训练并提升模型性能。由 Jimmy Ba 等人于 2016 年提出,它在 Transformer 模型中得到广泛应用。其核心过程涉及将每一层神经元的输出归一化,以保持一致的均值和方差。
这种归一化是通过首先计算层中所有神经元输出的均值和标准差来实现的。然后,每个神经元的输出通过减去均值并除以标准差进行调整。这导致了归一化输出,由以下方程描述:
\(MathML\) (2.4)
(2.4)
这里,\(MathML\)
表示第 i- 个神经元的输出,\(MathML\)
和 \(MathML\)
是计算出的均值和方差,
是为了数值稳定性添加的小的正数。具有零均值和单位方差的这些归一化输出显著加速了训练过程并提高了模型的效率。
在 Transformer 模型中,层归一化在优化训练过程中发挥着关键作用。通过归一化神经元输出,它加速了梯度下降的收敛,提高了训练效率,减少了层间的协方差偏移,并防止了梯度爆炸或消失。这种归一化显著降低了模型对输入数据变化的敏感性,提高了其在新数据集上的性能。
层归一化在 Transformer 架构中被战略性地部署:
-
- 多头注意力机制:它用于归一化注意力分数,提高注意力过程的有效性。
-
- 基于位置的卷积神经网络:在这里,它对神经元输出进行归一化,从而加快训练速度并提升整体模型性能。
-
- 编码器-解码器架构:层归一化应用于每个子层的输出以及编码器和解码器的最终输出,稳定训练并增强泛化能力。
-
- 集成连接:它与加法操作协同工作,以确保输出在加法后保持一致的平均值和方差,从而进一步提高性能和训练速度。
集成连接和层归一化对于 Transformer 的架构至关重要。集成连接引入了跳过连接,减轻了梯度消失问题,提高了训练效率,并增强了泛化能力。层归一化通过标准化层内的输出,加速了训练并稳定了模型。这些技术对于多头注意力、基于位置的卷积神经网络以及编码器和解码器的子层都是不可或缺的,支撑了 Transformer 的稳健性能。
2.7 位置编码
位置编码是 Transformer 模型的一个基本组成部分(如图 2.13 所示),使模型能够管理序列中单词的位置信息。鉴于自注意力机制缺乏检测单词位置的能力,位置编码对于理解序列中的顺序至关重要。

图 2.13 位置编码的工作流程。
它从输入序列 "我爱我的祖国" 开始。序列中的每个单词都被转换成嵌入向量:v0 等于嵌入向量 (I),v1 等于嵌入向量 (love),v2 等于嵌入向量 (my) 和 v3 等于嵌入向量 (country)。然后这些嵌入向量被添加到位置编码矩阵中相应的位置向量:P0 等于位置向量 (I),P1 等于位置向量 (love),P2 等于位置向量 (my) 和 P3 等于位置向量 (country)。结果是位置编码层的输出:y0 等于位置嵌入 (I),y1 等于位置嵌入 (love),y2 等于位置嵌入 (my) 和 y3 等于位置嵌入 (country)。
2.7.1 位置编码的设计与实现
自注意力机制利用矩阵乘法来评估单词之间的关系,忽略了它们的顺序位置——这是处理有序数据(如文本)的一个关键因素。为了解决这个问题,位置编码表示输入序列中每个单词的位置,并将这些数据与原始单词表示相结合。在 Transformer 中,位置编码是通过预定义的正弦和余弦函数产生的。给定位置 p 和维度 i 的编码计算如下:
\(MathML\) (2.5)
(2.5)
\(MathML\) (2.6)
(2.6)
这种设置中,d_model 表示词嵌入的维度,提供了以下好处:
-
• 编码在不同位置和维度上的频率不同,有助于模型识别复杂的位置关系。
-
• 正弦和余弦函数的周期性使得模型能够处理比训练数据更长的序列。
-
• 位置编码是可适应的,允许模型根据特定任务需求调整位置信息的重要性。
为了实现位置编码,使用上述方程为每个位置生成一个维度为 d_model 的向量。然后,将这些向量添加到输入序列的词嵌入中,创建包含嵌入位置信息的丰富词表示。这些丰富表示随后在后续层中使用,包括多头注意力和前馈网络,增强了模型解释和处理序列的能力。
考虑一个序列长度为 4 的句子,“我爱我的国家”,每个词被表示为二维向量。这需要生成一个 4×2 的位置编码矩阵。在 Transformers 中,这种编码是通过正弦和余弦函数得到的,创建了不同的位置信号。在这些公式中,i 表示序列中的位置(从 0 开始),j是维度索引,\(MathML\)
是输入向量的维度。对于这个例子,\(MathML\)
是 2。使用方程(2.5,2.6),可以计算出这个例子 4×2 维度的位置编码矩阵,如下所示:
\(MathML\)

\(MathML\)

\(MathML\)

\(MathML\)

\(MathML\)

\(MathML\)

\(MathML\)

\(MathML\)

这些计算出的值按照以下方式编译到位置编码矩阵中:
\(MathML\)

随后,这个位置编码矩阵可以添加到原始的词向量中。这种添加使得模型能够将其处理过程中的位置信息整合进去,如图 2.13 所示。图 2.13 展示了计算位置编码矩阵及其在序列数据中的应用。需要注意的是,这个例子是一个简化的表示。通常,在实际应用中,\(MathML\)
的维度要大得多,通常设置为 512。
2.7.2 位置编码的变体
虽然 Transformer 的原始架构依赖于固定的正弦和余弦函数来生成位置编码,但研究人员已经开发了其他方法来传达位置信息:
-
- 学*到的位置编码:这种方法涉及使用随机值初始化位置编码,这些值随后在训练过程中通过梯度下降进行优化。这种方法使模型能够动态地调整其位置表示,以满足特定任务的具体需求。
-
- 相对位置编码:关注序列中词语之间的相对距离而不是它们的绝对位置,相对位置编码有助于模型学*更通用的位置模式。这有助于更好地适应不同长度的序列,并且可以通过改变自注意力机制来考虑查询和键之间的相对距离来实现。
-
- 联合位置编码:这种方法结合了多种位置表示技术,包括固定的正弦/余弦函数、学*到的位置编码和相对位置编码。通过整合这些不同的位置信息来源,模型可以借鉴更广泛的见解来提高其预测能力。
2.7.3 位置编码的优势和局限性
位置编码通过以特定方式提供必要的位置信息,显著提高了神经网络处理序列数据的能力。这种能力使模型能够识别和利用词语之间的关系,从而增强对自然语言等序列数据的处理。由于正弦和余弦函数的周期性特性,位置编码有效地管理长序列,并促进了超出训练期间遇到的长度的泛化。此外,模型可以通过学*根据特定任务的要求调整位置信息的重要性来提高其适应性。
然而,需要注意的是,对于不依赖于序列顺序的任务,引入位置编码可能会增加不必要的计算复杂性。固定的正弦和余弦位置编码也可能无法检测到序列中的一些复杂的位置模式,尤其是在局部结构方面。当序列长度超过训练过程中处理的最大长度时,模型可能难以有效地使用位置编码进行泛化。在这些情况下,相对位置编码或其他可扩展的位置编码方法可能提供更有效的解决方案。
2.8 训练和优化
训练和优化 Transformer 模型涉及选择适当的方法,例如损失函数和优化器。本节探讨了训练技术和优化 Transformer 的策略。
2.8.1 损失函数
训练的核心是定义一个损失函数,该函数量化了模型预测与真实标签之间的差异。交叉熵损失函数在 Transformers 中经常使用。它通过比较模型输出的概率分布与实际标签来计算损失。训练目标是使这种损失最小化。
交叉熵衡量两个概率分布之间的差异,在分类任务中至关重要。在 Transformers 中,输出层使用 softmax 函数将分数转换为概率。然后交叉熵评估这些概率与真实分布之间的差异。其公式为
\(MathML\) (2.7)
(2.7)
其中 \(MathML\)
是实际分布,\(MathML\)
是预测分布。交叉熵的主要优点是它直接测量预测精度与真实标签之间的差异,尽管它可能对不太可能的类别不太有效。
根据任务需求可以采用不同的损失函数。例如,回归任务可能使用均方误差或平均绝对误差,而生成任务可能使用负对数似然或 Kullback-Leibler(KL)散度。
2.8.2 优化器
最小化损失函数需要选择合适的优化器来更新模型参数。在 Transformers 中,Adam 是一个首选的选择。Adam,或自适应动量估计,是一种优化器,它根据梯度的第一和第二动量估计自动调整学*率。这一特性允许 Transformers 在不同的训练阶段使用不同的学*率进行优化。
Adam 结合了快速收敛和高计算效率的优点,通常对超参数的选择不太敏感。然而,有时它可能会牺牲泛化性能。
其他可用的优化器包括随机梯度下降(SGD)、AdaGrad 和 RMSprop。SGD 方法简单,但在某些情况下可能收敛速度较慢。AdaGrad 和 RMSprop 分别根据第一和第二矩自适应调整学*率,可能导致长时间训练过程中学*率过早衰减。每个优化器都有自己的优缺点,需要根据任务和数据集的具体要求进行选择。
2.8.3 学*率调整策略
在原始的 Transformer 论文中,作者介绍了一种名为“Noam 调度”的新颖的学*率调度方法。这种方法最初线性增加学*率,然后逐渐减少,以增强早期训练的收敛性并防止后期过拟合。该策略的公式为
\(MathML\) (2.8)
(2.8)
其中 \(MathML\)
是模型的维度,\(MathML\)
是训练中的当前步骤,\(MathML\)
是在开始正规训练步调之前的初始步骤数。这种方法有效地平衡了模型的收敛速度和稳定性。
学*率策略至关重要,因为它们影响模型学*和泛化的速度和效率。Noam 计划特别促进初始收敛速度,并有助于保持模型稳定性,尽管可能需要微调预热步骤和其他超参数。
其他策略,如指数衰减、余弦退火和分段常数学*率也存在。指数衰减随着时间的推移稳步降低学*率,而余弦退火周期性地调整学*率,反映了余弦函数的周期性。分段常数策略将训练分为阶段,每个阶段具有一致的学*率。选择正确的策略取决于任务的特定要求和数据特征。
2.8.4 正则化
为了对抗过拟合,在训练过程中使用了多种正则化技术。在 Transformer 中,权重衰减(也称为 L2 正则化)、dropout 和层归一化是常见的策略。权重衰减通过将参数的 L2 范数纳入损失函数来提高泛化能力,这有助于控制参数的规模。尽管如此,这种方法有时可能会过度惩罚某些参数。
如图 2.14 所示,dropout 是一种在训练过程中随机禁用一部分神经元的技巧,有效地减少了模型对特定训练样本过拟合的倾向,从而提高了其泛化能力。然而,dropout 的一个缺点是它可能会减慢模型的收敛速度。

图 2.14 Dropout 正则化。
图表(A)标记为“标准神经网络”,展示了一个具有三层神经元的全连接神经网络。同一层的每个神经元通过箭头指示的连接方向与相邻层的每个神经元相连。图表(B)标记为“应用 dropout 后”,显示了相同的神经网络,其中一些神经元被禁用,用带有 X 的圆圈表示。这些被禁用神经元的连接也被移除。
层归一化将神经网络每一层的激活标准化,从而加速训练并增强泛化能力。然而,它有时可能会对特定任务产生不利影响。
此外,还有其他正则化方法,如 L1 正则化、数据增强和早停。L1 正则化将参数的 L1 范数纳入损失函数,创建一个参数的稀疏矩阵,尽管这有时可能导致某些参数的过度惩罚。数据增强通过可变地变换训练数据来提高泛化能力,从而扩大数据集,但这可能会延长训练时间。早停,当验证集上没有看到显著改进时停止训练,有助于防止过拟合,但可能导致欠拟合模型。
2.8.5 其他训练和优化技术
训练和优化 Transformer 涉及各种其他技术,如学*率预热、梯度裁剪、权重初始化、dropout、标签平滑、梯度累积和混合精度训练,这些将在下一部分进行详细阐述。
学*率预热策略在训练开始时使用一个较低的学*率,并逐渐增加到预设的最大值。这种方法旨在防止训练早期参数大更新可能引起的不稳定性。通常,Transformer 使用线性预热策略,其中学*率从零逐渐增加到设定的最大值,然后根据特定的方案(如逆平方根衰减)进行减少,如图 2.15 所示。

图 2.15 学*率预热策略。
x 轴代表时间,范围从 0 到 200,增量为 25。y 轴代表学*率,范围从 0 到 0.0010,增量为 0.0002。线条从接*零开始,迅速增加到大约 25 时间点时的 0.0010 峰值。这代表预热阶段,其中学*率从零增加到最大值。达到峰值后,线条以曲线的方式逐渐降低,说明了衰减阶段。衰减遵循看起来是逆平方根的模式,如上下文信息中所述。到时间 200 结束时,学*率已降至大约 0.0001,约为峰值值的 10%。此图直观地表示了在 Transformer 模型中采用的典型学*率策略,包括初始线性预热和随后衰减阶段,如上下文信息所述。
梯度裁剪是一种用于对抗梯度爆炸问题的技术。在神经网络训练中,如果梯度变得过大,它们可以通过导致权重更新过大而不成比例地不稳定模型。通过为梯度值设定最大限制,可以遏制这些过度的更新。如果梯度超过这个限制,它们将被缩放以匹配设定的阈值。
权重初始化在训练速度和模型的最终性能中都起着至关重要的作用。Transformer 模型通常使用随机初始化技术,如均匀分布或正态分布,例如 Glorot(也称为 Xavier)或 He 初始化。
Dropout 是另一种用于对抗过拟合的有效正则化策略。它通过在训练过程中随机禁用一部分神经元来实现,这在 Transformer 的多头注意力和前馈层中尤为常见。
标签平滑是一种通过将真实标签与一定量的噪声混合来对抗过拟合的技术,从而提高模型的一般化能力。
梯度累积在更新模型参数之前收集多个批次的梯度。这种方法有效地模拟了使用较大批量大小的训练,增强了模型的稳定性和收敛速度,同时不需要额外的内存资源。
混合精度训练结合了单精度(float32)和半精度(float16)计算,以减少内存需求和计算负载,从而加快训练过程。如图 2.16 所示的比较实验所示(#f0085),在相同的超参数但不同的数据类型(float32(FT32)或混合精度)下,训练损失曲线(左图)几乎相同,然而混合精度模型的训练速度明显更快(右图)。

图 2.16 混合精度加速比与训练损失的对比。
左侧图表标题为“FP32 和混合精度训练曲线”。x 轴表示迭代次数,范围从 0 到 250000,增量为 50000。y 轴显示训练损失,数值从 0 到 0.08,增量为 0.02。图中绘制了两条线:一条代表 FP32,一条代表混合精度。两条线都从高值开始,迅速下降,然后稳定在一个低值,混合精度线略低于 FP32 线。右侧图表标题为“FP32 和混合精度加速比”。它与左侧图表共享相同的 x 轴,表示迭代次数从 0 到 250000。y 轴显示迭代次数(看起来标签错误,可能代表加速比),范围从 0 到 1.8,增量为 0.2。图中绘制了两条线,图例中标明为 FP32 和混合精度。混合精度线始终保持在约 1.6,而 FP32 线在整个迭代过程中保持在 0.2 附*。这两个图表展示了 FP32 和混合精度方法在训练迭代中的比较,混合精度显示出更低的训练损失和更高的加速比。
这些技术在 Transformer 模型的训练和优化中至关重要。根据特定任务和数据集的需求调整这些方法可以显著提高训练结果和模型性能。通常,训练和优化 Transformer 模型涉及选择合适的损失函数、优化器、学*率调整和正则化技术。对于每个任务和数据集,选择适当的设置和微调超参数对于最大化模型性能至关重要。每种方法在实际应用中都有其优缺点,需要仔细评估和选择。
2.9 总结
本章详细阐述了 Transformer 模型的基本原理及其关键组件的应用。它首先简要概述了 Transformer 模型,然后深入探讨每个关键组件。本章广泛覆盖了自注意力机制,详细介绍了其原理、优点和局限性。本章还深入探讨了多头注意力,讨论了其合理性、详细实现、实际应用以及各种增强和适应。
未来的章节将进一步探讨大型语言模型的发展,检查不同 GPT 版本对 Transformer 模型的改进,并讨论其在 NLP、生成模型和强化学*等领域的应用。
第三章 生成式预训练
摘要
本章深入探讨生成预训练(GPT),这是自然语言处理(NLP)领域的一项基础技术,也是 GPT 系列模型的基础。GPT 在大量的未标记文本数据上进行预训练,以学*生成概率分布,使其能够根据先前的上下文预测序列中的后续单词。本章解释了 GPT 的架构,该架构基于具有掩码自注意力机制的 Transformer 解码器,允许模型在生成过程中仅关注先前单词。预训练过程之后是监督微调,其中使用标记数据对模型进行适配,以适应特定的 NLP 任务。这种双阶段方法显著提高了模型在各种应用中的性能,使 GPT 成为语言理解和生成的一个强大工具。
关键词
生成式预训练;自然语言处理;Transformer 解码器;掩码自注意力;监督微调;语言模型;无监督学*;文本生成
生成式预训练(GPT)是自然语言处理(NLP)领域的一项关键技术,也是 GPT 系列模型的基础。其核心概念围绕在大量文本数据上的预训练,以掌握语言模型的生成概率分布。这些预训练模型随后被应用于各种下游任务。本章深入探讨了 GPT 背后的原理和技术,使读者能够全面理解 GPT 模型的技术细节。
3.1 生成预训练简介
预训练技术在计算机视觉和自然语言处理(NLP)的许多任务中展示了显著的有效性。这些方法利用大量的未标记数据来揭示潜在数据的隐藏结构。
生成式预训练(GPT)旨在开发一个专注于学*生成概率分布的语言模型。这意味着它根据给定的上下文序列(如单词、短语或句子)预测下一个单词的可能性。GPT 使用神经网络,特别是配备了自注意力机制的 Transformer 模型来模拟这些概率。这使得它能够捕捉文本序列中的长距离关系。如图图 3.1 所示,GPT 的核心是一个多层 Transformer 编码器,每一层由一个掩码多头注意力子层和一个前馈神经网络子层组成。掩码自注意力,一种特殊类型的自注意力,捕捉输入序列中不同位置之间的依赖关系,并确保在预训练过程中模型只考虑来自先前单词的信息(这是通过在自注意力计算中引入掩码矩阵来实现的,该矩阵排除了序列中的后续单词)。

图 3.1 GPT-1 中的 Transformer 解码器。GPT,生成式预训练。图片来源:论文“通过生成式预训练改进语言理解”。
GPT 的核心是一个多层 Transformer 编码器,每一层由一个掩码多头注意力子层和一个前馈神经网络子层组成。图中显示了从底部的文本和位置编码开始,随后是掩码多头注意力、层归一化、前馈网络和另一个层归一化。这个序列重复了 12 次。输出被导向文本预测和文本分类。
在训练阶段,GPT 通过最小化交叉熵损失来最大化数据似然,从而提高准确预测下一个词的概率。损失优化的优化提高了生成概率分布的精度。流行的优化技术包括随机梯度下降(SGD)及其变体如 Adam 和 Adagrad。模型的表现受到学*率调整方式和所采用的正则化技术的严重影响。通常,如预热学*率并逐渐降低的策略有助于稳定训练过程。
3.2 生成式预训练模型
GPT 模型的基础是 Transformer 的解码器架构,该架构以其自注意力机制而闻名,能够有效地捕捉长距离依赖关系并提升并行计算能力。如图 3.2 所示,该模型的核心是一系列 Transformer 解码器层,每一层都包含一个自注意力子层和一个前馈神经网络子层。在这个配置中,自注意力子层首先出现,专注于识别输入序列中不同位置之间的依赖关系,而后续的前馈子层则处理每个位置的非线性变换。

图 3.2 GPT-1 中的 Transformer 模型。图片来源:www.wikiwand.com/zh-hans/OpenAI。
该图展示了多个 Transformer 解码器层,每个层包含一个自注意力子层和一个前馈神经网络子层。过程从输入开始,经过输入嵌入和位置编码,然后是 Dropout。接着输入被送入 Transformer 块层 1,随后是后续的 Transformer 块层,直到层 L。每个 Transformer 块由一个 LayerNorm,随后是一个具有多个头(头 1 到头 H)的自注意力机制,每个头都涉及矩阵乘法、掩码、Softmax、Dropout 和另一个矩阵乘法。这些头的输出通过一个线性层组合。然后是另一个 LayerNorm,一个线性层,Gelu 激活,另一个线性层,Dropout 和一个残差连接。Transformer 块的最终输出通过另一个 LayerNorm,一个线性层和 Softmax 产生最终输出。
为了确保模型仅根据其已看到的上下文生成文本,而不是任何未来信息,GPT 使用了一种称为掩码自注意力的技术。在实践中,这意味着在自注意力评分过程中,模型忽略序列中当前位置之后出现的任何单词。这是通过将掩码矩阵集成到自注意力计算中实现的,这保证了只考虑先前的信息。
掩码自注意力的核心原理是,在计算自注意力权重时,模型的关注点被限制在当前和前一个位置。例如,在一个输入序列\(MathML\)
中,位置 i 的自注意力权重只考虑从位置 1 到\(MathML\)
的元素。这种方法确保生成的文本只由已观察到的上下文信息所指导,而不是任何后续信息。为了实现这一点,用于自注意力计算的注意力矩阵通过掩码进行修改,其中未来位置的权重被设置为负无穷大。当通过 softmax 函数处理时,这些权重实际上变为零,从而强制执行因果掩码。
掩码自注意力机制在 GPT 任务中至关重要。如图图 3.3 所示,在预训练阶段,模型的任务是学*语言的广泛表示。掩码自注意力确保模型在生成文本时只关注当前位置和前一个上下文,有助于遵循语言生成的自然模式。在微调阶段,这一机制继续至关重要,有助于模型产生与先前观察到的上下文相一致的结果。

图 3.3 掩码自注意力的工作原理。图片来源:data-science-blog.com/blog/tag/engineer/.
它显示了单词“Deep”,“learning”,“algorithms”,“excel”,“in”,“Natural”,“language”,“processing”,“tasks”的权重和掩码的 4 个阶段。每个阶段都有一个权重图,后面跟着一个掩码序列。第一阶段关注单词“Deep”,第二阶段关注“learning”,第三阶段关注“processing”,第四阶段关注“tasks”。图像的右侧显示了一个标记为“使用[掩码自注意力]忽略后续单词”的网格,其中包含注意力权重和零权重。
需要注意的是,GPT 模型与原始 Transformer 模型之间存在显著差异。在原始 Transformer 中,编码器的自注意力没有掩码,这使得模型可以关注序列中的任何位置。这种设置对于某些 NLP 任务(如机器翻译)是有利的。然而,对于 GPT 来说,缺乏掩码可能导致文本不当地依赖未来信息,违反了自然语言生成的原则。
此外,在传统的 Transformer 模型中,编码器和解码器都是至关重要的,编码器对输入序列进行编码,解码器根据编码器的输出生成目标序列。相比之下,GPT 旨在学*通用的语言表示,而不是将输入序列翻译为目标序列。因此,GPT 模型仅采用解码器架构,简化了其语言理解和生成的关注点。
3.3 生成预训练过程
GPT 是一种使用大量未标记的文本数据来学*如何预测文本结构和潜在意义的方法。其目标是开发一个能够生成与训练数据相似的文本序列的语言模型。具体来说,给定一个文本序列 \(MathML\)
,模型的任务是学*整个序列的概率分布 \(MathML\)
。这个分布被理解为一系列条件概率:
\(MathML\) (3.1)
(3.1)
其中 \(MathML\)
表示上下文,包括之前的 \(MathML\)
个单词 (\(MathML\)
, \(MathML\)
,…, \(MathML\)
)。\(MathML\)
根据这个上下文计算生成第 \(MathML\)
个单词的可能性。
3.3.1 生成预训练的目标
在 GPT 的过程中,模型的主要目标是最大化正确预测训练数据中词语的可能性,这种方法被称为最大似然估计。具体来说,给定一个训练样本 x 和模型生成的概率分布 \(MathML\)
,目标函数定义为
\(MathML\) (3.2)
(3.2)
其中 \(MathML\)
是自回归语言模型的损失函数,\(MathML\)
表示训练样本的长度,\(MathML\)
是位置 \(MathML\)
之前的词序列,而 \(MathML\)
是位置 \(MathML\)
的词。\(MathML\)
是模型在参数 \(MathML\)
下预测下一个词 \(MathML\)
的条件概率。
自回归语言模型旨在根据前面的词语预测序列中的下一个词。模型通过序列的历史计算当前位置出现某个词的可能性。因此 \(MathML\)
表示在先前的序列 \(MathML\)
的条件下,词 \(MathML\)
出现的概率。参数 \(MathML\)
是影响其预测能力的一组模型参数。
初始时,输入文本序列 \(MathML\)
被转换为一个嵌入表示,其中每个词通过标记嵌入矩阵转换为向量。这个矩阵为每个词分配一个固定维度的向量。
接下来,为了帮助模型掌握词语之间的关系,为每个词的嵌入添加位置信息。这是通过一个位置嵌入矩阵 \(MathML\)
来实现的,它与标记嵌入矩阵 \(MathML\)
结合,形成初始嵌入表示 \(MathML\)
。
这种表示,\(MathML\)
,随后通过 Transformer 块的几层处理,每个块由自注意力和前馈层组成。\(MathML\)
-th Transformer 层的输出 \(MathML\)
如下所示:
\(MathML\) (3.3)
(3.3)
其中 nnn 代表 Transformer 堆栈中的总层数。在 Transformer 堆栈的末尾,使用最终的输出向量 \(MathML\)
和一个矩阵 \(MathML\)
,该矩阵包含词汇表中每个单词的嵌入向量,来计算下一个单词的概率 \(MathML\)
如下:
\(MathML\) (3.4)
(3.4)
在这里,\(MathML\)
函数将输出转换为概率分布,其中 \(MathML\)
表示每个单词成为序列中下一个单词的可能性。模型通过寻找 \(MathML\)
和单词嵌入之间的点积的最大值来选择下一个单词。
训练 GPT-1 模型的首要目标是最小化负对数似然。这种方法本质上减少了模型在根据先前上下文预测下一个单词时犯的错误。为了达到这个目标,模型不仅优化其 Transformer 结构的参数,还微调单词嵌入向量。在整个训练周期中,包括正向传播和反向传播,模型使用反向传播算法计算和最小化损失函数,以细化其参数。因此,在无监督预训练阶段,GPT-1 模型不断调整其参数和单词的表示,以提高其预测准确性。
3.3.2 生成预训练中的误差反向传播过程
GPT 系列中的所有模型都使用一种称为可逆标记化的方法,该方法基于数据压缩技术(参见第 4.2.3 节),以促进 GPT 中误差反向传播过程的解释。在本章中,我们简化了单词的初始嵌入。假设模型通过将输入文本序列的一热编码与单词嵌入矩阵 \(MathML\)
相乘来生成其初始嵌入,表示为 \(MathML\)
:
\(MathML\) (3.5)
(3.5)
在这里,\(MathML\)
代表输入文本序列的一热编码矩阵,而 \(MathML\)
是单词嵌入矩阵。模型通过在每个 Transformer 堆栈层中应用多头注意力、残差连接和层归一化来增强这些嵌入,从而产生上下文丰富的嵌入 \(MathML\)
:
\(MathML\) (3.6)
(3.6)
在最后一步,将最后一个 Transformer 堆叠层的输出乘以一个权重矩阵,并通过 softmax 函数处理,以计算序列中下一个单词的概率分布。
在计算其损失函数时,模型评估实际下一个单词的 one-hot 编码与其预测概率分布之间的差异,以计算损失。然后,使用反向传播算法将此损失通过 Transformer 堆叠层发送回去,该算法更新每个单词的嵌入表示。在反向传播过程中,任何特定单词的嵌入向量\(MathML\)
的梯度计算如下
\(MathML\) (3.7)
(3.7)
在这个公式中,\(MathML\)
是模型的损失函数,\(MathML\)
是模型预测的下一个单词的概率分布,\(MathML\)
是嵌入矩阵。通过应用梯度下降法,模型使用这个梯度来更新\(MathML\)
的值,从而提高未来预测的准确性。一旦训练完成,这些精细化的单词嵌入被用作后续任务的初始嵌入表示。
在 GPT 过程中,调整学*率和正则化方法对提升模型性能至关重要。通常,会实施一些策略,如学*率的预热阶段后逐渐降低,以优化学*率,旨在增加训练过程的稳定性。此外,为了避免模型训练中常见的过拟合问题,会使用 Dropout 和权重衰减(例如,L2 正则化)等技术来保持模型结构的简洁性。
预训练完成后,GPT 模型能够处理各种自然语言处理任务,包括文本分类、情感分析和问答。为了针对这些特定任务调整模型,进行监督式微调。在这一阶段,模型使用与特定任务相关的标记数据进行训练,使其能够获得特定任务的知识。这一阶段被视为一种迁移学*形式,因为模型利用了预训练期间获得的广泛语言知识,以提高其在下游任务上的有效性。
GPT 是一种语言模型通过无监督学*从大量未标记文本数据中学*的方法。GPT 模型使用由自注意力机制驱动的 Transformer 架构,并在自注意力计算中使用因果掩码以确保模型只能访问先前段的信息。目标是最大化训练数据上的似然度 (方程式 3.2–方程式 3.3) 以掌握生成概率分布 (方程式 3.1–方程式 3.3)。在此阶段之后,模型可以经历监督微调以适应各种 NLP 任务。GPT 的这种方法已被证明在众多语言处理应用中显著提高了性能,突显了其巨大的潜力。
3.4 监督微调
GPT 为 GPT 模型配备了语法和词汇的基本理解。在下一阶段,即监督微调阶段,模型的参数通过特定任务的标注数据进行进一步优化。这使得模型能够执行专门的 NLP 任务,如情感分析、文本分类和问答。
3.4.1 监督微调的原则
本节介绍了两个新的方程来描述监督微调过程。考虑一个特定任务的训练示例 \(MathML\)
,其中 \(MathML\)
是输入序列,\(MathML\)
是相关的标签。在这一阶段的目标是使损失函数最小化,该损失函数定义为
\(MathML\) (3.8)
(3.8)
在这里,\(MathML\)
表示模型参数,\(MathML\)
是期望值,\(MathML\)
表示在给定输入 x 和参数 \(MathML\)
的情况下生成标签 y 的概率。这个损失函数,虽然与 第 3.3.1 节 中描述的类似 (方程式 3.2–方程式 3.3),但具体针对的是产生与任务相关的标签的概率,而不仅仅是单词。针对特定任务微调模型的目标设定如下:
\(MathML\) (3.9)
(3.9)
在这里,\(MathML\)
是微调后的调整参数,\(MathML\)
是特定任务数据的损失函数,\(MathML\)
是正则化系数,\(MathML\)
是正则化项,通常是参数的 L2 范数。目标是最小化特定任务数据上的损失,同时使用正则化来防止过拟合。
3.4.2 特定任务的监督微调
在 GPT 阶段,GPT 模型勤奋地工作以掌握自然语言的各个方面,使其能够生成与接收到的输入序列相似的文本。在这一阶段,GPT 作为通用语言模型运行,捕捉涵盖词汇、语法和语义的广泛知识。在监督微调阶段,模型使用标注数据进行训练,使其能够获得特定任务的知识。这类似于迁移学*的过程,其中模型利用在预训练期间获得的广泛语言洞察力来提升其在特定任务上的性能。
预训练期间学*到的表示有效地捕捉了输入数据的基本结构。然后在微调阶段利用这些结构来增强模型对特定任务特征的理解。对于特定的 NLP 任务,输入序列必须进行特定的修改,以确保模型关注相关信息。这些修改被称为特定任务的输入转换。
这些转换的主要目的是使输入序列符合特定任务的要求。这通常涉及在序列中包含特殊标记以强调与任务相关的细节。例如,在问答任务中,问题和其上下文信息需要合并成一个单独的输入序列,以便模型能够生成适当的答案。在问题和上下文之间插入一个特殊的分隔符,如“[SEP],”有助于模型更准确地解释输入结构并提供更精确的预测。
图 3.4 展示了 GPT 模型在特定 NLP 任务中的应用。这个过程分为两个主要阶段:首先,无监督预训练阶段,模型通过生成训练学*语言模型;其次,监督微调阶段,模型针对特定的 NLP 任务进行定制。在 图 3.4 的左侧,模型通过最大化输入序列的可能性来学*语言结构,而在右侧,它展示了如何优化模型参数以特定任务为目标来提高任务性能。图 3.4 中突出了四个 NLP 任务:
-
- 文本分类:在文本分类任务中,模型根据内容将输入文本分类到一个或多个预定义的类别中。这里的特定任务输入转换很简单,只涉及一个文本段。原始文本直接输入到模型中。经过微调后,GPT 模型可以根据输入内容预测类别标签。通常在输出层添加一个全连接层来进行特定任务的预测。为了帮助模型区分不同的任务,可能在序列的开始处放置一个特殊的分类标记(例如,“[CLS]”)。
-
- 自然语言推理(NLI):这项任务涉及确定一个假设是否可以从给定的前提中推导出来,可能的输出包括蕴涵、矛盾或中立。输入序列包括前提和假设,由特殊符号(例如,“[Delim]”)分隔。序列开头的特殊推理标记(例如,“[NLI]”)向模型指示推理任务。
-
- 相似性:在这里,模型评估两个文本序列之间的相似性。通常在要比较的文本之间放置一个特殊分隔符(例如,“[Delim]”),并且可能在开始处添加一个相似性标记(例如,“[SIM]”)以表示相似性评估任务。
-
- 多项选择:这项任务要求根据问题从多个选项中选择最合适的答案。在问题和每个选项之间使用特殊分隔符(例如,“[Delim]”)来区分它们。序列开头的多项选择标记(例如,“[MCH]”)表示任务类型。

图 3.4 生成预训练模型的应用过程。图片来源:论文“通过生成预训练改进语言理解”。
在顶部,有两个标记为“文本预测”和“任务分类器”的框。在这些框下方,有一个标记为“文本和位置嵌入”的块,它连接到一个包含层归一化、前馈和掩码多自注意力(重复 12 次)的更大块。显示的任务包括分类、蕴涵、相似性和多项选择。每个任务都有一个以“开始”为起始的序列,后面跟着各种元素,如文本、前提、假设、文本 1、文本 2、上下文、答案 1、答案 2 和答案 N,以及分隔符和提取。这些序列由一个 Transformer 处理,然后是一个线性层。对于相似性,还有一个额外的步骤,即在线性层之前将两个 Transformer 的输出合并。
特定任务的输入转换显著增强了 GPT 模型在一系列 NLP 任务中进行有效迁移学*的能力。通过在输入序列中包含特殊符号,模型能够更好地掌握与特定任务相关的信息,从而提高其在下游应用中的性能。值得注意的是,这些特殊标记的确切形式可能因模型的设计和特定任务的要求而异。例如,原始的 GPT 论文指出,每个特定任务的输入转换都包括随机初始化的开始和结束标记的添加。
为了使这些转换有效,在预训练和微调阶段使用词汇表和编码方案时保持一致性至关重要。这包括在预训练期间为特殊符号预留一些词汇空间,并在微调期间使用相同的词汇和编码方案对输入序列进行编码。这种一致性确保模型在整个迁移学*过程中持续表现出对语言的一致理解和表征。
总之,针对不同的 NLP 任务调整输入序列不仅有助于模型更有效地理解特定任务信息,而且还能提高其在后续任务中的性能。通过这些输入转换技术,GPT 模型可以在各种 NLP 任务中有效地进行迁移学*,实现卓越的 NLP 性能。
3.4.3 微调步骤
监督微调过程涉及几个关键步骤:
-
- 目标任务选择:根据需求确定特定的 NLP 任务,例如情感分析、文本分类或命名实体识别。
-
- 训练数据准备:收集与所选任务相关的标注数据,通常包括输入序列(如文本片段)及其相应的标签(例如,情感或类别标签)。
-
- 模型初始化:从 GPT 阶段获得的模型参数开始,以确保模型在微调阶段一开始就具有强大的语言表征能力。
-
- 模型微调:利用与任务相关的数据和损失函数 \(MathML\)
来微调模型。使用 SGD 或其他优化算法更新参数,结合正则化技术(如 L2 正则化)调整正则化系数 \(MathML\)
并防止过拟合。
- 模型微调:利用与任务相关的数据和损失函数 \(MathML\)
-
- 模型性能评估:使用准确率或 F1 分数等指标,在特定任务的验证集上衡量微调模型的性能。
-
- 超参数调整:根据验证集的性能指标微调模型超参数,如学*率或正则化系数,以提高模型的效能。
-
- 模型应用:部署微调后的模型以解决现实世界问题,处理新的输入,并为特定任务生成预测。
模型可以根据任务和数据特征进行定制。例如,在文本分类任务中,可以在最后一层添加一个全连接层以生成特定任务的预测。在命名实体识别中,可能需要将条件随机场层集成到输出层以更好地捕捉标签序列依赖性。这种适应性使得 GPT 模型在各个 NLP 任务中具有多功能性。
GPT 的微调通常在相对较少的标注数据下就能提供稳健的性能,这得益于预训练期间获得的丰富语言洞察。因此,监督式微调有效地利用有限的标注数据对预训练模型进行特定任务的优化。
在本质上,监督式微调对于在特定 NLP 任务中利用 GPT 模型至关重要。它涉及在任务相关数据上优化模型,使用学*到的语言表示来实现最佳结果。这个过程包括微调损失函数 \(MathML\)
(方程 3.3–方程 3.7) 并采用正则化来防止过拟合。此外,模型的架构可以根据不同的 NLP 任务进行修改,提高其适应性。
3.5 概述
本章讨论的构成 GPT 系列基础的 GPT 模型,在塑造 ChatGPT 的技术框架方面发挥了关键作用。GPT 的训练计划分为两个主要阶段:无监督预训练和监督式微调。这种双阶段方法为 ChatGPT 提供了一个有效的训练范式。在大量未标记文本的无监督预训练期间,ChatGPT 发展了对语言的细微理解。在随后的监督式微调阶段,它被调整以擅长特定任务,显著提高了其在目标领域的效率。
GPT 所使用的架构,仅由一个 Transformer 解码器和掩码自注意力机制组成,这为 ChatGPT 的设计提供了一个关键蓝图。这些元素不仅能够进行高级表示学*和高效并行处理,而且确保文本生成仅受当前位置和前文上下文的影响。这种关注有助于 ChatGPT 生成既连贯又具有意义的回应。
第四章 无监督多任务学*和零样本学*
摘要
本章深入探讨无监督多任务学*(MTL)和零样本学*,重点关注它们在 OpenAI 的 GPT-2 模型中的实现。MTL 通过在多个相关任务上训练来增强模型泛化能力,而零样本学*则允许在没有特定训练数据的情况下完成任务。本章探讨了 Transformer 架构,对比了 BERT 的双向编码器与 GPT-2 的单向解码器。GPT-2 的关键进步包括用于稳定性的层归一化、用于梯度保持的正交初始化、用于高效分词的字节对编码以及用于更好上下文理解的可学*相对位置编码。GPT-2 的无监督预训练使其能够在不进行微调的情况下执行各种自然语言处理任务,展示了 MTL 和零样本学*之间的协同作用。本章最后强调了 GPT-2 的自回归生成过程及其对后续模型如 GPT-3 的影响。
关键词
无监督学*;多任务学*;零样本学*;变换器架构;GPT-2;从变换器中提取的双向编码器表示(BERT);层归一化;正交初始化;字节对编码(BPE);自回归生成
多任务学*(MTL)是机器学*中的一个战略方法,它侧重于同时训练模型以处理多个相关任务。通过在这些任务之间共享见解,模型的泛化能力和适应新场景的能力显著增强。OpenAI 在他们的 GPT-2 论文中强调了这一技术,并将其与零样本学*并列。
零样本学*,作为无监督多任务学*的一个子集,允许模型在没有特定训练数据的情况下处理任务。相反,这些模型利用事先学*到的广泛语言模型。零样本学*的美丽之处在于其成本效益,因为它跳过了对特定任务调整的需求,使得模型在处理不熟悉的任务时变得灵活。本章深入探讨了 GPT-2 中变换器架构的修改,探讨了无监督多任务学*和零样本学*背后的原理,并深入剖析了这些概念。
4.1 编码器和解码器
2018 年 10 月,OpenAI 发布了 GPT,随后 6 个月后,谷歌发布了 BERT。这些模型基于变换器架构,该架构由多层堆叠的编码器和解码器组成。图 4.1 展示了 BERT 作为一个基于变换器编码器架构的预训练语言模型,而 GPT 则利用了解码器的一侧。

图 4.1 变换器编码器(左侧)和解码器架构(右侧)。
在左侧,BERT 模型显示了输入嵌入后跟位置编码。该架构包括多层多头注意力、加和归一化和前馈组件。在右侧,GPT 模型显示了输出嵌入后跟位置编码。该架构包括掩码多头注意力、加和归一化、多头注意力、前馈层和输出概率。两个模型都有 N 层,由 N 次表示。BERT 模型处理输入,而 GPT 模型处理右移的输出。
BERT 采用双向方法,分析目标词之前和之后的单词来预测其上下文。它采用了一种称为掩码语言模型(masked language model)的策略,其中句子中的随机单词被隐藏,以使模型根据整个句子的上下文推断它们。这项技术增强了 BERT 从两个方向理解上下文的能力,在各种自然语言处理(NLP)任务上取得了显著的改进。
在 BERT 取得成功之后,OpenAI 推出了 GPT-2,这是 GPT 的高级版本。GPT-2 在无监督预训练过程中保持从左到右的单向流动。GPT-2 中型版本的大小与 BERT 大型版本相当,但它们的架构和训练技术有很大差异,这影响了它们在特定任务中的性能。如图图 4.2 所示,BERT 使用双向编码器,通过自注意力处理文本上下文,擅长需要理解句子结构和上下文关系的任务,如问答、实体识别和关系抽取。

图 4.2 自注意力和掩码自注意力之间的差异。图片来源:jalammar.github.io/illustrated-gpt2/。
左侧的图被标记为自注意力,显示一个带有从中心圆圈向上指的箭头的矩形块。圆圈下方,一个三角形区域连接到一系列较小的矩形。右侧的图被标记为掩码自注意力,与左侧的图类似,但底部右边的某些小矩形被以不同的方式阴影,表示掩码。
相反,GPT-2 具有一个单向解码器,使用掩码自注意力机制主要专注于通过语言模型进行学*,这可能限制了其与 BERT 相比的双向上下文理解能力。然而,GPT-2 在各种语言生成任务中表现出色,包括文本摘要、翻译和对话创建。尽管它们存在差异,但这两个模型都被认为是 NLP 中稳健的工具,每个模型在各自最有效的特定任务中都表现出色。
4.2 GPT-2
GPT-2 作为原始 GPT 的后续版本,保留了 Transformer 模型的解码器架构,但在训练数据上进行了大量扩展。它是在由 OpenAI 团队收集的名为 WebText 的 40 GB 大型数据集上训练的。图 4.3 突出了在训练过程中使用的 GPT-2 模型的多种大小,参数大小从 117 MB(小型)到 1542 MB(超大型)不等。最小版本包含 12 个解码器层,其参数需要 500 MB 的存储空间。另一方面,最大版本具有 48 个解码器层,其参数量是最小版本的 13 倍,需要 6.5 GB 的存储空间。图 4.4 说明了 GPT-2 架构与 GPT-1 架构相比发生了显著变化,反映了其在设计和能力方面的重大进步。

图 4.3 四种不同大小的 GPT-2 模型。
该图像比较了四种 GPT-2 模型:小型模型、中型模型、大型模型和超大型模型。GPT-2 小型模型具有 768 个模型维度,包括 12 个解码器。GPT-2 中型模型具有 1024 个模型维度,包括 24 个解码器。GPT-2 大型模型具有 1280 个模型维度,包括 36 个解码器。GPT-2 超大型模型具有 1600 个模型维度,包括 48 个解码器。

图 4.4 GPT-2 的模型架构。
在底部,有文本和位置嵌入。在其上方,有一个标记为层归一化的块,后面跟着掩码多头自注意力。另一个层归一化块随后,接着是一个前馈网络。这个序列重复 12 次。在这些重复的块上方,有一个 Transformer 块。在最上方,还有一个层归一化块,它分支到文本预测和任务分类。
4.2.1 层归一化
层归一化(LayerNorm)是一种在神经网络层内引入归一化操作的技巧,在 GPT-2 的 Transformer 层中尤为明显。与它的前辈 GPT-1 不同,GPT-2 在每个 Transformer 层的输入和输出都包含一个 LayerNorm 层,确保这些点的归一化。这种方法有效地对抗了常见的神经网络训练挑战,如梯度消失和爆炸,从而增强了训练的稳定性并加快了收敛速度。
由于多层梯度传播,梯度问题,尤其是梯度消失和爆炸,在深度神经网络中很普遍。层归一化通过将输入数据的均值和方差标准化为 0 和 1 来解决这个问题,确保了尺度的一致性。
如图 4.5 所示,归一化调整并平衡输入数据,将其均值设置为 0,方差设置为 1,从而最小化尺度差异。这种调整不仅有助于在反向传播过程中实现更平滑的梯度流动,而且在整个训练阶段稳定梯度变化。此外,层归一化通过使两个数据集的尺度相等来处理协变量偏移——一种训练和测试数据分布不一致的情况,从而提高模型的一般化能力。最终,归一化确保所有维度的梯度缩放均匀,帮助优化器更有效地导航权重更新的最优方向,并加速模型的收敛和整体训练性能。

图 4.5 两种归一化的示意图。图片来源:blog.csdn.net/wwangfabei1989/article/details/90547149。
在左侧,展示了批量归一化与一批训练示例。每个示例有四个特征,并且对批次的每个特征计算均值和方差。均值值为 3、2、4 和 3,方差值为 3、2、3 和 1。一个注释表明所有训练示例都是相同的。在右侧,展示了与同一批训练示例的层归一化。对每个示例的每个特征计算均值和方差。均值值为 2、3 和 3,方差值为 2、2 和 2。一个注释表明所有特征维度都是相同的。
4.2.2 正交初始化
正交初始化是一种用于设置神经网络参数的方法,主要关注权重矩阵。它将这些矩阵初始化为正交矩阵,以对抗训练阶段梯度消失或爆炸等问题。
GPT-2 遵循与 GPT-1 相似的权重初始化策略,具体使用正交初始化以确保在整个训练过程中梯度稳定。正交矩阵设计上由行向量和列向量组成,这些向量是单位向量且彼此正交,具有这样的矩阵的逆是其转置(\(MathML\)
)的性质。这些矩阵以其稳健的数值特性而闻名,例如具有条件数为 1,确保它们不会加剧矩阵计算中的错误。
正交初始化的关键优势在于其稳定梯度的能力。在神经网络操作过程中,梯度需要穿过各种权重矩阵。不恰当的初始化可能导致梯度要么消失(变得太小)要么爆炸(变得过大),从而对模型训练和收敛产生不利影响。正交矩阵有助于减轻这种风险,因为它们的乘积仍然保持正交,从而在不同层之间保持一致的梯度范数。
图 4.6 展示了正交初始化的一个示例。过程从创建一个维度为(n, n)的随机矩阵开始,每个元素从标准正态分布中抽取。然后,该矩阵经过QR分解(\(MathML\)
),其中Q代表正交矩阵,R代表上三角矩阵。分解得到的Q矩阵作为初始化的权重矩阵,具有有利于梯度稳定的良好数值特性。

图 4.6 展示了QR分解的示意图。请注意,正交初始化对于方阵(n, n)特别有效。对于非方阵(n, m),类似的方法涉及生成一个随机矩阵,然后执行紧凑的QR分解以提取前m列,从而得到适合初始化的正交权重矩阵。
矩阵 A 由一个带有点表示元素延续的方阵表示。矩阵 Q 由一个矩形矩阵表示,列 q sub 1, q sub 2, ..., q sub n,其中每列之间由垂直线分隔。矩阵 R 由一个灰色阴影的上三角矩阵表示。
4.2.3 可逆标记化
GPT 系列中的所有模型都使用一种基于数据压缩的可逆标记化方法,称为字节对编码(BPE)。该算法通过将频繁出现的词对组合成新的单元来减少词汇量。由于标记化文本可以在解码过程中完全重建,因此这种方法被称为可逆的。
BPE 算法背后的基本概念是将常见的字符组合,如单词或短语,合并成新的符号。这个过程不仅缩小了词汇量,还增强了模型泛化的能力,有效地管理罕见单词和形态变化,从而提高了整体性能。BPE 算法中涉及到的详细步骤如下:
-
1. 词汇初始化:最初,将文本中的每个单词(或字符)纳入词汇表,每个条目代表一个单独的字符。
-
2. 字符对频率统计:评估文本中每个相邻字符对的频率。这些频率统计有助于决定哪些对应该合并成新的符号。
-
3. 合并高频字符对:找到并合并最频繁出现的字符对到一个新的符号。然后,这个新符号被添加到词汇表中,文本被更新以用这个新符号替换原始字符对。
-
4. 迭代合并:根据需要继续计数和合并的过程,直到达到预定义的合并次数或所需的词汇量。每个循环都专注于合并一个新的高频词对,逐步扩大词汇量以包含更长的子词或短语。
下面是一个 BPE 的示例:
-
1. 从一个语料库开始,计算每个单词的频率。频率以“[频率]word_”的格式记录,其中“”表示单词的结束。例如,语料库可能有:语料库:[7]old, [3]older_, [9]finest_, [4]lowest_。
-
2. 确定标记词汇表的大小或算法停止的迭代次数。
-
3. 计算每个字符的频率,包括结束符号“_”。请参阅表 4.1。
-
- 合并出现频率最高的连续字符(或序列)。例如,在第一次迭代中,“e”和“s”可能被合并成“es”,因为它们一起出现了 13 次(9 + 4)。将“es”及其频率添加到词汇表中,并减少“e”和“s”的计数。
-
- 在接下来的迭代中,“es”和“t”可以合并,因为“est”出现了 13 次,这是最高的频率。更新词汇表以包括“est”并减少“t”,保持词汇长度不变。
-
- 合并“est_”,它也出现了 13 次。与终止标记合并至关重要。它有助于区分“estimate”和“highest”等单词。两者都包含“est”,但一个以“est_”结尾,另一个以它开头。算法将“est”和“est_”视为不同,将“est_”识别为“highest”的一部分,而不是“estimate”,如表 4.2 所示。
-
- 合并“ol”,它出现了 10 次。
-
- 如果迭代次数设置为四,最终的词汇表将是(, o, l, d, r, f, i, n, w, est, ol, est)。
表 4.1
字符出现频率。
| 字符 | 频率 |
|---|---|
| _ | 23 |
| O | 14 |
| L | 14 |
| D | 10 |
| E | 16 |
| R | 3 |
| F | 9 |
| I | 9 |
| N | 9 |
| S | 13 |
| t | 13 |
| w | 4 |
表 4.2
字符合并示例。
| 字符 | 频率 |
|---|---|
| _ | 23–13=10 |
| O | 14 |
| L | 14 |
| D | 10 |
| E | 3 |
| R | 3 |
| F | 9 |
| I | 9 |
| N | 9 |
| W | 4 |
| est | 13–13=0 |
| est_ | 13 |
描述说明,在 BPE 下,词汇长度可以增加、减少或保持稳定。BPE 有效地将原始文本压缩成更短的格式,同时保留字符之间频繁出现的模式。这种方法在 NLP 任务中表现出色,通过将罕见词和形态变化分解成更小的子词单元,提高了模型性能。在像 GPT-2 这样的大型模型中,BPE 有助于更好地处理各种 NLP 任务,提高模型的可适应性和有效性。
在处理罕见词方面,BPE 通过将训练数据中的罕见词拆分为常见的子词单元,从而在提高模型理解其意义的能力方面表现出色。例如,一个很少出现的词如“neuroscientific”可以被分割成“neuro”、“scien”和“tific”。这些子词在训练数据中出现的频率更高,有助于模型轻松获取它们的语义意义。
BPE 也有效地解决了形态变化问题,这在许多语言中会导致词汇量膨胀并复杂化计算。通过将像英语动词“running”和“ran”这样的词分解成“run”、“ning”和“ran”等组成部分,BPE 使模型能够更熟练地学*词根及其形态动态,简化学*过程并降低计算需求。
由于词汇的根本差异,使用 BPE 算法处理中文文本比处理英文文本要复杂得多。在中文中,每个字符通常具有独特的含义,而单词通常是通过组合这些字符形成的,每个字符都增加了含义的层次。
然而,BPE 在处理中文时面临一些挑战,而在处理英文时则没有。与英文中形态变化通常涉及清晰的词首和词尾不同,中文的变化不太直接,这在某些情况下限制了 BPE 的有效性。解决这些挑战需要开发针对中文独特属性的模型和算法。
从本质上讲,在 GPT 系列模型中采用 BPE 显著缩小了词汇量,这反过来又减少了模型需要学*的参数数量。这种减少减轻了计算需求,并加速了训练和推理过程。此外,通过利用子词单元之间的共享特征,这些模型获得了增强的能力,以理解和表示词语的语义细节,从而提高了它们在各种 NLP 应用中的有效性。
此外,BPE 提高了 GPT 模型处理不熟悉单词的能力。当遇到这类单词时,模型可以将它们分解成可识别的子词组件,以推断其含义,从而增强模型泛化和有效管理新或不常见单词的能力。
在迁移学*的背景下,BPE 的集成使 GPT 系列模型特别强大。模型学*并利用不同任务中子词单元之间共性的能力,转化为迁移学*场景中的卓越性能,从而增强了它们在多样化的 NLP 挑战中的灵活性。
对于多语言任务,BPE 在使 GPT 模型能够熟练处理语言多样性方面起着至关重要的作用。通过识别和利用跨语言中的共同词根和形态变化,BPE 为 GPT-2 配备了理解和处理多种语言的能力,从而在多语言环境中提高了结果。这种能力在当今全球互联的数字景观中特别有益。
BPE 通过减少词汇量,进而减少模型需要掌握的参数数量,显著提高了模型在 NLP 任务中的效率。这种减少不仅降低了过拟合的风险,还使模型能够更有效地把握词语的语义细微差别。这种增强的理解在从机器翻译到语义分析和文本生成的一系列应用中证明是有益的。
值得注意的是,从 GPT-2 开始,一种名为字节级 BPE(BBPE)的 BPE 变体被采用。这种调整将传统的 BPE 方法从字符级别扩展到字节级别。例如,尽管传统的 BPE 在处理广泛的 Unicode 字符集中存在困难,但 BBPE 通过将每个字节视为基本处理单元来简化这一点,有效地将基本字符集限制为 256(\(MathML\)
)。这种方法促进了跨语言的词汇共享并减少了词汇量。然而,对于像中文这样的语言,BBPE 可能会显著增加文本序列的长度。因此,尽管 BBPE 在同一数据集上可能优于 BPE,但它也可能由于序列长度的增加而导致更长的训练和推理时间。
4.2.4 可学*的相对位置编码
基于 Transformer 架构的 GPT-2 采用了一种可学*的相对位置编码策略,以精确捕捉输入序列中的位置信息。这种方法独特地考虑了标记之间的绝对距离和相对位置,大大提高了模型理解长距离依赖关系的能力。
在 GPT-2 中,相对位置编码无缝集成到自注意力机制中,并与 Q、K 和 V 矩阵一起使用,以准确捕捉标记之间的关系。在计算自注意力分数时,模型不仅评估标记之间的内容相关性(通过 Q 和 K 的点积),还通过相对位置编码评估它们的相对位置。这些编码通过参数化函数表达,如正弦和余弦函数,其参数在模型训练过程中学*并优化。
为了突出 GPT-2 中的相对位置编码与传统 Transformer 中的传统绝对位置编码之间的差异,考虑以下句子“这只猫很可爱。”的例子。最初,这个句子被标记化为 [The, cat, is, cute,.]。在传统的 Transformer 中,这个过程涉及向嵌入向量添加基于正弦和余弦函数预计算的矩阵,从而向模型传递绝对位置信息。
然而,GPT-2 的处理方式却不同。它不仅将位置编码添加到嵌入中,而是在自注意力计算过程中整合相对位置编码。这些编码是可适应的,基于标记之间的相对距离——例如,“猫”和“可爱”之间的相对距离是 2。在计算注意力权重时,这些相对距离与标记之间的内容相关性相结合,使模型能够利用位置信息来提高其自注意力机制的有效性。
虽然传统的 Transformer 模型使用直接添加到嵌入中的固定矩阵的绝对位置编码,但 GPT-2 选择了一种动态、更复杂的策略,将可学*的相对位置编码与自注意力过程相结合。这种区别标志着在模型中利用位置信息来增强文本处理能力方面的重要演变。
4.3 无监督多任务学*
GPT-2 的无监督预训练利用了庞大的 WebText 数据集,该数据集包含约 450,000 篇通过 OpenAI 的网页爬虫收集的网页文章。经过严格的清洗和过滤后,该数据集大约有 40 GB,相当于* 80 亿个单词。与 GPT-1 的数据集相比,数据集规模的显著增加有助于开发更稳健的模型。
如图 4.7 所示,虽然多任务监督学*侧重于根据标记示例预测未见数据标签,但 GPT-2 的方法涉及通过无监督学*生成模仿训练数据的文本。尽管文献中没有明确详细说明,但 GPT-1 和 GPT-2 在预训练中的核心方法相当相似,两者都在 Transformer 框架内使用大量的未标记文本数据。

图 4.7 多任务监督学*和多任务无监督学*概念。图片来源:zhuanlan.zhihu.com/p/348873723。
在左侧,有三行,每行都有一个数据输入分别指向模型 1、模型 2 和模型 k,然后分别指向预测 1、预测 2 和预测 k。在右侧,一个单一的数据输入指向多任务学*,然后分支到预测 1、预测 2 和预测 k。
在其预训练期间,GPT-2 采用最大似然估计技术,引导模型根据提供的上下文预测后续单词。这一阶段至关重要,因为它允许模型从其处理的文本中吸收大量的语言知识和语义细微差别。
GPT-2 的无监督多任务学*策略旨在通过从大量文本数据中提取和应用跨各种任务的共享见解来增强模型的多用性和泛化能力。尽管本质上是无监督的,但 GPT-2 通常经过针对特定应用的监督微调,以增强其适应特定任务的能力。这种微调虽然对目标应用有益,但通常限制了模型对与其特定调整任务相似的任务的更广泛适用性。
4.4 多任务与零样本学*之间的关系
如图 4.8 所示,在样本学*中,零样本学*允许模型在没有任何特定任务监督训练的情况下,利用先验知识处理任务。GPT-2 的零样本学*能力源于其在预训练阶段的非监督多任务学*(MTL)。在自然语言处理(NLP)中,零样本学*可以被视为不同子领域之间的无监督迁移学*。这意味着模型在预训练期间获得的知识可以应用于各种 NLP 任务,而无需特定的监督微调。然而,与监督微调相比,零样本学*通常表现不佳,因为它没有使用特定任务的标记数据。

图 4.8 零样本学*示例。图片来源:论文“语言模型是少样本学*者”。
在 GPT-2 中,多任务学*(MTL)涉及在无监督预训练阶段吸收大量自然语言文本,捕捉丰富的语言结构和语义信息。零样本学*使 GPT-2 能够处理各种 NLP 任务,而无需特定的任务标签。GPT-2 中的 MTL 和零样本学*相互补充。零样本学*利用在无监督预训练阶段获得的知识,允许它管理多个任务而无需额外的监督训练。这种方法为 GPT-2 提供了广泛的应用前景。以下几节将通过三个具体任务:阅读理解、文本摘要和情感分析,探讨零样本学*在 GPT-2 中的应用。
在阅读理解任务中,模型必须根据提供的文本生成问题的答案。使用零样本学*时,GPT-2 没有接受特定任务的微调。相反,问题和文本一起输入,模型生成答案。关键在于有效地组织问题和文本的序列。一种常见的方法是将问题与给定的文本段连接起来,在它们之间插入一个特定的分隔符。例如:
问题:太阳系中有多少颗行星?文本:太阳系包括一颗恒星(太阳)和八颗行星。这可以组织为:“太阳系中有多少颗行星?
对于文本摘要任务,模型需要从较长的文本中提取关键信息以创建简洁的摘要。在零样本学*中,这可以通过在输入序列中明确指定任务来实现。例如,给定以下文本:文本:计算机科学是研究计算机及其系统的一门学科。该领域的学者不仅研究计算机硬件的设计和开发,还包括编程语言、软件设计、算法以及其他与计算相关的理论和实践。
你会将任务要求与文本连接起来,然后输入到模型中:“生成以下文本的摘要:计算机科学是研究计算机及其系统的一门学科。该领域的学者不仅研究计算机硬件的设计和开发,还包括编程语言、软件设计、算法以及其他与计算相关的理论和实践。”
在这个阶段,GPT-2 模型可能会生成如下摘要:“计算机科学研究计算机系统、硬件设计、软件设计以及算法。”请注意,由于该模型并未针对文本摘要进行专门的监督训练,生成的摘要质量可能不如经过监督训练的模型。尽管如此,这仍然展示了该模型在没有特定任务训练的情况下执行多项任务的强大能力。
在情感分析任务中,模型必须识别和理解文本中表达的情感,例如它是积极的、消极的还是中性的。在零样本学*中,GPT-2 可以生成捕捉输入文本情感的句子。例如,给定一个产品评论:“这部手机的电池寿命非常长,相机性能出色”,你可以提示 GPT-2:“这部手机的电池寿命非常长,相机性能出色。这个评论的情感是什么?”GPT-2 可能会回答:“这个评论的情感是积极的。”这表明 GPT-2 可以在没有特定任务训练的情况下有效地执行情感分析。
GPT-2 在各种零样本学*任务中表现出色。例如,在阅读理解任务中,GPT-2 在 LAMBADA 语言建模任务中取得了顶尖成绩,而无需任何监督微调。在语义相似度任务中,STS-B(语义文本相似度基准)任务突出了 GPT-2 强大的零样本能力。在翻译任务中,尽管 GPT-2 并未针对这些任务进行微调,但在英语-法语和英语-德语翻译中展现了显著的翻译能力。论文还讨论了 GPT-2 在问答和摘要等其他 NLP 任务中的零样本学*性能。尽管这些任务的特定实验设置在论文中并未详细说明,但它们被用来验证 GPT-2 的零样本学*能力。
4.5 GPT-2 的自回归生成过程
在其无监督预训练阶段,GPT-2 从大量的自然语言文本中吸收了大量的知识。这个过程优化了模型的权重矩阵,使其在语言建模任务中表现出色。在零样本学*应用中,这个预训练模型直接使用,无需针对特定任务进行微调。这意味着在处理 NLP 任务时,权重矩阵保持不变,并且不再进一步修改。
此外,在预训练过程中使用了词汇表。最初,每个单词的嵌入向量是随机生成的,但在训练过程中这些向量被优化以最大程度地提高语言建模的性能。预训练后,每个单词更新的嵌入反映了模型从大型语料库中学到的语言模式。
对于特定的 NLP 任务,预训练的 GPT-2 模型通常进行微调。这个微调过程可以改变模型的权重矩阵,以更好地适应任务。然而,在零样本学*场景中,模型的权重保持不变。
4.5.1 子词单元嵌入
GPT-2 模型在预处理输入文本时采用 BBPE 方法,将其分解为“子词单元”而不是传统的单词。BBPE 将每个字节视为基本处理单元,因此每个子词单元(标记)的嵌入向量长度为 1 字节。值得注意的是,由于 BBPE 将文本分割为字节级的子词单元,一个单词可以被分割成多个子词单元,每个子词单元都有其对应的嵌入向量。因此,GPT-2 模型的词汇表是从预训练语料库中的统计信息生成的,包括常见词汇和词结构。
GPT-2 模型中输入标记序列的长度随其版本的不同而变化。如图 4.9 所示,较小版本的 GPT-2 模型(即 GPT-2 small)的输入标记序列长度为 768,而在较大模型中,长度可以扩展到 1024 或 2048。

图 4.9 标记嵌入。
模型的词汇大小为 50,257。标记序列长度表示为 768(小型)、1024(中型)、1280(大型)和 1600(超大型)。嵌入以矩阵形式表示,其值如 3.5、2.1、6.2、负 1.3、负 1.1、3.5、负 1.2、4.8、1.7、5.4、2.2、1.6、负 1.6、1.9、5.5、负 1.4、5.2、3.3、3.2、6.3、5.1、6.5、2.3、3.1、负 1.9、5.0、1.4、4.6 等。列出的子词包括 un、believ、able、lean、learn、...、ing。
在 GPT-2 的预训练过程中,通过自回归预测输入序列来训练词汇的嵌入表示。这意味着模型根据上下文和预测目标调整词汇中标记的嵌入表示,以优化预测性能。这个过程更新嵌入参数,使它们能更好地捕捉语义和句法信息。
重要的是要注意,在预训练完成后,当模型应用时,词汇的嵌入表示是固定的,并且不会进一步更新。预训练的目的是为模型提供具有强大语义表示能力的初始参数,而不是在实际使用过程中动态更新嵌入。由于模型是在大型语料库上预训练的,这些嵌入向量通常很好地适应各种 NLP 任务。
4.5.2 自动回归过程
GPT-2 是一个训练好的模型,包括 Transformer 的解码器权重、标记嵌入矩阵和位置编码矩阵。作为一个典型的自动回归生成模型,GPT-2 可以处理长达 1024 个标记的输入,并以自动回归的方式从输入标记开始生成序列。然而,以这种方式生成的序列往往缺乏有意义的主题。因此,在实际应用中,GPT-2 通常使用零样本学*,其中它接收一个指导性提示(不带示例)并围绕特定主题生成文本。
例如,输入提示可能是“大型数据集对于训练这些模型至关重要。”如图图 4.10 所示,在输入序列进入 Transformer 模型之前,需要通过添加词嵌入向量到位置编码将其转换为相应的标记表示向量。Transformer 模型由多个解码器组件组成,每个标记序列的第一层首先由自注意力层处理,然后由神经网络层处理,最后传递到下一个解码器层。尽管每个解码器组件的处理流程相同,但每个组件的自注意力和神经网络层具有独立的权重。

图 4.10 GPT-2 的自动回归生成过程。
在顶部,有一个表示解码器编号 12、位置编号 1、输出向量与子词单元嵌入标记嵌入相乘以产生输出子词概率(Logits)的表示。显示了不同子词(如 I、you、he 等)的概率,并选择概率最高的子词。在此之下,一个标记为“解码器乘以 N”的大框中包含了一个前馈神经网络和一个掩码自注意力层。掩码自注意力层显示了句子中不同单词的百分比:大型数据集对于训练这些模型至关重要。这些百分比表示每个单词的注意力权重。在底部,有一系列从 1 到 1024 的对应位置单词,显示了输入句子“大型数据集对于训练这些模型至关重要”。
当模型的最终解码器生成一个输出向量时,这个向量会被乘以标记嵌入矩阵。经过归一化后的结果可以被认为是两个向量之间的余弦相似度。这意味着输出向量越接*标记嵌入矩阵中的向量,它们的点积结果就越大。归一化结果可以解释为从标记嵌入矩阵中选择向量的概率或分数。通常,分数最高的单词会被选中(top_k=1)。然而,为了获得更好的结果,也可以考虑其他高分单词。因此,一种常见的策略是基于这些分数进行随机采样,增加选择高分单词的可能性。另一种常见的策略是将 top_k设置为N,并选择分数最高的N个单词。这样,模型完成一次迭代并输出一个单词。模型继续迭代,直到生成整个上下文(对于 GPT-2 最多 1024 个标记)或生成表示序列结束的标记
4.6 概述
GPT-2 的引入并没有解决编码器与解码器架构之间的持续辩论,但它在多任务学*(MTL)中的成功为研究界提供了一个新的视角。现在,越来越重视在无监督学*环境中有效地利用大量非结构化文本数据。研究人员也在探索优化模型架构和改进训练策略,以提高 MTL 和零样本学*中的性能。
在 GPT-2 之后不久,OpenAI 推出了更先进的 GPT-3 模型,该模型在各种 NLP 任务中表现出卓越的性能。令人惊讶的是,GPT-3 包含 1750 亿个参数,比 GPT-2 的最大版本大一个数量级。鉴于在如此大规模上进行监督多任务微调的不切实际性,GPT-2 引入的无监督学*零样本学*方法对 GPT-3 至关重要,为 NLP 领域提供了新的见解和视角。
第五章 稀疏注意力与基于内容的学*
摘要
本章深入探讨了 GPT-3 的架构和学*策略,强调了其稀疏 Transformer 设计和基于内容的学*。拥有 1750 亿个参数的 GPT-3 引入了一种混合注意力机制,在密集和局部带状稀疏注意力模式之间交替,优化了处理长序列的效率。本章探讨了稀疏 Transformer 降低计算复杂性的能力,增强了 GPT-3 在各种自然语言处理任务上的可扩展性和性能。此外,它讨论了元学*和上下文学*作为任务适应的关键策略,无需进行广泛的重新训练。本章还涵盖了贝叶斯推理作为理解上下文学*的框架,并介绍了思维链方法,该方法通过逐步解决问题的技术增强了推理能力。这些创新使 GPT-3 能够有效地执行复杂的推理任务,展示了其在自然语言理解和生成方面的先进能力。
关键词
GPT-3;稀疏 Transformer;基于内容的学*;上下文学*;贝叶斯推理;思维链;元学*;稀疏注意力;少样本学*
2020 年 5 月,OpenAI 发布了 GPT-3,这是一个开创性的语言模型。GPT-3 与它的前辈 GPT 和 GPT-2 一样,基于基于 Transformer 的解码器架构。然而,它具有一种创新的稀疏 Transformer 模式,在其层之间交替使用密集和局部带状稀疏注意力机制。这一创新显著提高了 GPT-3 处理长序列的效率。
拥有令人印象深刻的 1750 亿个参数,GPT-3 成为有史以来创建的最大 Transformer 模型之一。其扩展的容量显著提高了其在各种自然语言处理(NLP)任务上的性能。然而,这种规模带来了高昂的训练成本——据国盛证券估计为 140 万美元,这使得使用监督数据对如此大的模型进行微调在经济上具有挑战性。相反,GPT-3 专注于上下文学*。在这种方法中,模型仅使用几个示例即可适应新任务,无需对其参数进行广泛的重新训练。这使得 GPT-3 能够快速吸收特定任务的知识,即使是从最小数据中,也展示了在新的挑战上的显著性能。本章将更详细地探讨 GPT-3 的高级稀疏 Transformer 模式和上下文学*的原则。
5.1 GPT-3
OpenAI 的 GPT-3 建立在 GPT 系列的基础架构之上,结合了正交初始化、层归一化和字节级字节对编码(BBPE)标记化方法等技术。这些特性共同提高了模型的训练效率和生成能力。GPT-3 的一个显著升级在于其注意力机制:如图 5.1 所示,它在 Transformer 的解码层中采用了密集和局部带状稀疏注意力的混合。这种方法受到稀疏 Transformer 的启发,与传统 GPT-2 中使用的完全连接注意力不同。这些改进使得 GPT-3 能够更有效地处理更长的序列,减少计算需求和内存占用,从而提高了模型的可扩展性。

图 5.1 GPT-3 模型架构图。
以标记嵌入开始的神经网络架构。接下来是相对位置编码,然后是加和归一化。然后是一个 Transformer 层(密集注意力),包含多头自注意力(密集)和位置前馈神经网络。接着是另一个加和归一化,随后是一个 Transformer 层(稀疏注意力),包含多头自注意力(稀疏)和位置前馈神经网络。最后的组件是线性层和 Softmax。
GPT-3,拥有 1750 亿个参数的庞大体量,使得仅有 15 亿参数的 GPT-2 相形见绌。参数数量的巨大增加使得 GPT-3 在众多任务上表现出色。这两个模型都共享基于 Transformer 的解码器结构,包括输入、嵌入、Transformer 层和输出阶段。尽管采用了 GPT-2 的正交初始化、层归一化和可逆标记化,但 GPT-3 在其 Transformer 层中创新性地采用了交替的密集和局部带状稀疏注意力。此外,GPT-3 庞大的训练数据集进一步提升了其在各种 NLP 任务上的泛化能力。GPT-3 的架构包括以下内容:
-
- 输入和 BBPE 标记化:利用 BBPE,一种通过合并频繁的词对为单个单元来有效减少词汇量的方法。
-
- 嵌入层:此层将离散标记映射到连续向量表示。
-
- 位置编码:向向量添加重要的位置数据,使模型能够区分词的位置并理解上下文关系。
-
- Transformer 层:每一层都是由一个稀疏自注意力机制组成的编码器堆栈,交替使用密集和稀疏模式,以及一个用于抽象更高层次特征的前馈网络。
-
- 层归一化:在每个 Transformer 层的输入和输出处集成,它将这些点归一化以稳定训练并加快收敛速度。
-
- 输出层:通过一个线性层和 softmax 函数将变换器输出转换为概率分布,通过选择最高概率的标记来预测下一个标记。
GPT-3 与 GPT-2 之间的主要区别在于模型架构中稀疏注意力的实现。此外,GPT-3 还采用了 GPT-2 中使用的许多设计元素和技术。GPT-3 规模和训练数据集的显著增加对其性能的提升做出了贡献。
5.2 稀疏变换器
稀疏变换器代表了对标准变换器模型的一种专用适配,旨在优化长序列的处理。该模型集成了稀疏注意力机制,巧妙地减少了计算复杂性和内存需求,从而促进了长时间数据流的有效管理。
5.2.1 稀疏变换器的特点
传统的变换器模型由于自注意力机制固有的全连接设置,在处理长序列时存在困难,这导致计算复杂性和内存使用量与序列长度呈二次方增长,表示为 O(n²)。这种复杂度对于长序列来说变得难以承受。稀疏变换器通过不为每一对元素计算注意力分数来解决这一问题,从而实现了一种更稀疏的计算方法。这种优化的主要策略有两种:首先,通过定义注意力窗口来限制注意力机制的范围;其次,通过采用特定的稀疏连接模式,可以将计算负载和内存需求降低到 O(n)。
5.2.1.1 稀疏注意力模式
如图 5.2 所示,稀疏变换器利用了稀疏注意力模式。在这个框架下,每个输入标记选择性地关注一组上下文信息,而不是每个可能的标记,从而将计算复杂度从 O(n²)降低到 O(n)。稀疏注意力可以通过多种方式实现,例如局部带状注意力,它专注于紧密位置的标记,以及步进(稀疏全连接)注意力,它在整个序列的固定步骤中采样。

图 5.2 传统变换器(左)和稀疏变换器(右)。
稀疏变换器利用了稀疏注意力模式。图中显示了六种不同的网格模式,不同的高亮区域代表了不同的稀疏注意力模式。顶部行有四个较小的网格,底部行有两个较大的网格。每个网格都有独特的高亮方块模式。
5.2.1.2 交替密集和稀疏注意力模式
GPT-3 通过在不同 Transformer 层之间交替使用密集和稀疏注意力模式,利用稀疏 Transformer 设计的原则来增强其性能和泛化能力。这种策略性的变化使模型能够有效地捕获长距离依赖,同时不牺牲计算效率。实际上,密集和稀疏模式之间的平衡可以根据特定任务的需求和可用的计算资源进行调整。
5.2.1.3 可学*相对位置编码
GPT-3 采用可学*的相对位置编码,该编码考虑了标记之间的绝对和相对距离。这种创新方法显著增强了模型理解和处理长距离依赖的能力。
5.2.2 本地带状注意力
GPT-3 中的本地带状注意力旨在减少传统 Transformer 模型典型的计算负载和内存使用。这种稀疏注意力机制将每个输入标记聚焦于其邻居的一部分,而不是序列中的每个标记。实现涉及几个关键步骤:
-
- 确定窗口大小:首先,建立一个窗口大小,该大小决定了每个标记考虑的上下文范围。此参数可以根据任务需求和可用的计算能力进行调整。较大的窗口大小提供更丰富的上下文细节,但需要更多的计算资源。
-
- 构建注意力矩阵:为每个标记构建一个包含其窗口内相邻标记权重的单维注意力向量。这个过程类似于传统的自注意力方法,但仅限于指定的窗口。然后,将这些向量堆叠形成一个二维注意力矩阵。
-
- 执行本地带状注意力:将注意力矩阵与输入序列的隐藏状态相乘,生成包含每个标记上下文信息的输出,仅关注直接邻居。
本地带状注意力显著降低了从 \(MathML\)
到 \(MathML\)
的计算复杂度,有效地平衡了性能和上下文感知。然而,它可能难以处理长距离依赖。为了克服这一限制,它可以与其他稀疏注意力机制相结合,例如稀疏全连接注意力,或者在不同 Transformer 层之间交替使用密集注意力模式。
5.2.3 跨层稀疏连接
GPT-3 中的跨层稀疏连接旨在在层之间建立更长的距离依赖,优化模型处理长序列的能力。这种方法提高了注意力机制的效率,使得可以处理更大的输入。GPT-3 通过结合密集和本地带状稀疏注意力模式来实现跨层稀疏连接,具体如下:
-
- 本地带状稀疏连接:这些连接将每个标记集中在附*的子集标记上,有助于在受限范围内捕获即时上下文关系。
-
- 密集连接:与局部方法相反,密集连接允许每个标记与序列中的每个其他标记进行交互,扩大了范围以涵盖全局依赖关系。
在模型层中交替这些连接样式,GPT-3 巧妙地管理了*处和远处的依赖关系。本地带状方法针对相邻层交互以处理更*的关系,而密集连接则跨越更长的距离。这种结构化的灵活性不仅提高了 GPT-3 处理长序列的效率,还扩展了其识别广泛关系模式的能力。
此外,GPT-3 利用这些跨层稀疏连接来增强其在 NLP 任务中的整体有效性,同时节省计算资源。它通过策略性地交替使用密集和稀疏 Transformer 层来实现这一点,其中密集注意力和局部带状稀疏注意力层相互切换,优化了性能和计算效率。
通过整合稀疏注意力机制、交替注意力模式和自适应位置编码,GPT-3 显著缓解了传统 Transformer 在处理长序列时面临的挑战,将稀疏 Transformer 定位为处理大量数据的稳健框架。该模型的具体注意力策略,类似于稀疏 Transformer 中的策略,显著提升了其处理长文本的能力。
5.3 元学*和上下文学*
由于 GPT-3(1750 亿个参数)的参数数量庞大,针对不同下游任务对每个参数进行微调变得不可行。因此,元学*和上下文学*成为了利用该模型的关键策略。元学*涉及在广泛的文本语料库上预训练模型,以增强其自然语言生成技能以及整体的语言知识和理解能力。在整个这一阶段,GPT-3 吸收了不同语言元素(从单词到段落)的语法复杂性,并获得了对常识的基础理解。
相对而言,上下文学*专注于使用一小部分标记数据对模型进行轻微调整,以适应特定任务。这种微调方法并不广泛重新训练模型;相反,它利用预训练期间开发的广泛能力来满足特定应用的需求。此类数据的例子包括问答对或情感标记的句子。这种方法允许 GPT-3 仅用少量标记数据就在各种 NLP 任务中实现高性能。
5.3.1 元学*
在 GPT-3 论文中,作者重新诠释了元学*的概念,将其与传统定义区分开来。传统上,元学*指的是训练一个模型,使其能够用少量标记数据快速学*新任务。然而,GPT-3 论文将元学*的定义扩展到包括无监督预训练的过程。
在这种情况下,像 GPT-3 这样的预训练大型语言模型被认为是元学*者,因为它们在预训练阶段已经获得了大量的知识和语言理解。通过在大规模未标记文本数据集上进行预训练,模型学*语言结构和常识知识,从而获得一些泛化能力。
这种对元学*的新诠释是可行的,因为 GPT-3 在其预训练阶段已经展示了强大的泛化能力。这使得 GPT-3 在新任务上能够以最小的标记数据(甚至没有数据)表现出色,类似于传统的元学*方法。然而,在 GPT-3 的情况下,这种能力主要源于无监督预训练阶段,而不是针对元学*任务的定制化训练过程。
5.3.2 在上下文中学*
为了最小化在微调阶段对其参数的调整,GPT-3 更注重上下文学*策略。在任务适应阶段,模型采用零样本学*、单样本学*和少量样本学*的方法,绕过了传统微调技术相关的限制。
如 图 5.3 右侧所示,微调过程是在模型预训练阶段完成后开始的。对于每个特定任务,提供了一组训练样本,例如在这个实例中使用的单样本批次。通过计算损失并更新其权重,模型能够在新任务上实现令人称赞的性能。微调通常比从头开始训练需要更少的数据,并允许更低的学*率。这种效率之所以可能,是因为微调是从预训练模型的参数开始的,这些参数已经接*于当前任务的优化解。

图 5.3 三种不同类型的上下文学*与传统的微调方法对比。
模型仅根据给定任务的天然语言描述来预测答案,而不执行梯度更新。任务描述:将英语翻译成法语:任务内容:奶酪变成奶酪。单样本学*:除了任务描述外,还提供了一个单个示例,而不执行梯度更新。任务描述:将英语翻译成法语:示例:海豹变成海豹。少样本学*:除了任务描述外,模型还接触到了一些任务示例,而不执行梯度更新。任务描述:将英语翻译成法语:示例:海豹变成海豹;示例:薄荷变成胡椒薄荷;示例:填充长颈鹿变成填充长颈鹿;任务内容:奶酪变成奶酪。传统微调:微调:通过使用大量示例任务进行重复的梯度更新来训练模型。示例一:海豹变成海豹;梯度更新;示例二:薄荷变成胡椒薄荷;梯度更新;示例三:填充长颈鹿变成填充长颈鹿;梯度更新;提示:奶酪变成奶酪。
图 5.3 左侧展示了 GPT-3 如何通过不同程度的基于示例的上下文学*技术——零样本、单样本和少样本——来提升其在新任务上的性能,而无需修改其参数。这种策略极大地简化了大型语言模型的使用,使用户能够以最小的设置将模型应用于各种任务。
GPT-3 中的零样本学*涉及处理没有先前接触过任何相关标记数据的任务,完全依赖于从其广泛的预训练中获取的知识。在这种模式下,模型必须解释任务的描述并生成适当的响应,而无需示例提示。这里的难点在于使模型彻底理解任务要求,并仅基于其预训练的智能生成合适的响应。
GPT-3 在零样本学*方面的能力源于其庞大的架构,该架构包含高达 1750 亿个参数,以及其在大量未标记文本上的预训练。这种广泛的背景使其能够理解复杂的语言模式和常识性语境,从而能够在没有针对特定任务进行训练的情况下生成相关的输出。
相比之下,单样本学*涉及模型从单个相关示例中进行推理。这里的挑战在于赋予模型从单个示例中快速解码任务需求并准确响应的能力,这展示了模型根据最小数据迅速适应的能力。
在图 5.3 所示的单次学*场景中,GPT-3 使用单个示例来弥合任务描述和执行之间的差距。这要求模型处理比零样本场景中更长的序列,提取有价值的信息以提高其在翻译任务上的性能。重要的是,在这个过程中不计算梯度或更新权重。
GPT-3 通过利用其在预训练阶段获得的知识,并结合给定的单个示例,在单次学*任务上实现了高性能。这展示了 GPT-3 能够以最小量的标记数据快速适应新任务的能力,从而降低了在特定任务上进行监督学*的训练成本和时间。
少样本学*涉及训练模型在提供与目标任务相关的小量标记样本后进行推理。在这种情况下,模型需要根据提供的几个示例理解任务的具体要求,并据此生成正确的答案。少样本学*的挑战是如何使模型能够有效地从有限的信息中学*并适应新任务,同时提高预测准确性。少样本学*通过在任务描述后提供几个示例来扩展单样本学*。然而,GPT-3 模型的处理能力有限,因此提交过长的文本序列进行少样本学*可能不利于有用信息的提取。这也解释了为什么在 GPT-3 模型中,使用过多示例进行上下文学*并不普遍。
GPT-3 在少样本学*任务上也表现出色。通过输入多个与任务相关的示例,GPT-3 可以更好地适应新任务,在各种 NLP 任务上实现高性能。这表明 GPT-3 具有强大的泛化能力,能够用少量标记数据生成高质量的输出。
与零样本学*、单样本学*和少样本学*相比,传统的微调方法侧重于使用大量标记数据对预训练模型进行监督学*。虽然这种方法在许多 NLP 任务中取得了显著成果,但其局限性包括需要大量的标记数据和计算资源(以调整模型参数)。此外,在特定任务上的微调可能导致过拟合,限制模型的泛化能力。
相比之下,零样本学*、单样本学*和少样本学*策略具有明显的优势。首先,由于 GPT-3 在预训练阶段已经获得了大量的知识和语言理解,它不需要在特定任务上进行昂贵的监督学*。这显著降低了训练成本和时间。其次,GPT-3 只需少量标记数据就能表现良好,这使得它更容易适应各种 NLP 任务,尤其是在难以获得大量标记数据的情况下。
5.4 概念分布的贝叶斯推理
上下文学*是大型语言模型如 GPT 的关键新兴能力,掌握其原理对于制作有效的提示至关重要。图 5.2 说明了这一点:零样本学*的提示仅包括任务描述和内容,而单样本和少样本学*的提示还包含示例。
5.4.1 隐式微调
语言模型被解释为元优化器,将上下文学*视为一种隐式微调——这种方法建立了 GPT 的上下文相关学*与传统显式微调方法之间的联系。如图 5.4 图 5.4 所示,GPT 从与目标任务标签相关的正向计算中生成元梯度,并通过其注意力机制在给定任务中使用这些梯度。这种元优化过程与微调过程相似,其中模型参数通过反向传播梯度显式更新。

图 5.4 GPT 中的元优化和微调过程。
在顶部,有两个标记为句子 1、答案 1 和句子 2、答案 2 的 GPT 模型。这些模型连接到一个反向传播过程,该过程生成梯度变化 W sub FT end sub。这个梯度在更大的 GPT 模型中的上下文学*过程中使用。较大的 GPT 模型包括视角、前馈神经网络和自注意力等组件。正向计算过程生成元梯度变化 W sub ICL end sub。演示示例(句子 1 prime、答案 1)和(句子 2、答案 2)被输入到正向计算过程中。一个查询示例(句子,问号)也被输入到模型中以生成答案。
在预测准确性、表征深度和注意力动态等多个层面上,上下文学*和显式微调相似,它们都基于梯度下降优化。然而,关键的区别在于这些梯度的产生方式:上下文学*依赖于前向计算来生成元梯度,而微调则使用反向传播。
在少样本学*中,当面对一小组与任务相关的示例时,大型语言模型如 GPT 是否隐式地学*了一个函数 \(MathML\)
?如果这是真的,这些样本示例 \(MathML\)
对基于上下文的学*性能有深远的影响。如图 5.5 图 5.5 所示,原始 GPT-3 论文中,没有任何示例时,模型难以学*或调整,但在有一个或几个示例的场景中,性能显著提高。

图 5.5 样本大小和参数尺度对模型性能的影响。图片来源:论文“语言模型是少样本学*者”。
x 轴表示以对数尺度从 0 到 10 的幂次方(10¹)的示例数量(K)。y 轴显示从 0 到 70 的准确率百分比,以 10 为增量。比较了三种模型大小:175B、13B 和 1.3B。每种模型大小都有两条线:一条实线表示“有提示”,一条虚线表示“无提示”。175B 模型(顶部线条)显示最高的准确率,零样本学*起始准确率约为 10%,少样本学*起始准确率约为 70%。有提示的线条始终优于无提示的线条。13B 模型(中间线条)显示中等性能,零样本学*起始准确率接* 0%,少样本学*起始准确率约为 25%。同样,有提示的性能优于无提示。1.3B 模型(底部线条)显示最低的准确率,即使有大量示例,准确率也几乎不超过 0%。对于这个模型大小,有提示和无提示之间的差异最小。图表在 x 轴的适当位置标注了零样本、单样本和少样本,表示不同的学*场景。总体而言,图表表明更大的模型性能更好,并且使用提示通常可以提高所有模型大小和学*场景的准确率。
然而,最*的研究为这些示例在上下文学*中的重要性提供了新的观点。研究表明,这些示例中的输入-标签映射对模型性能的影响小于之前认为的。令人惊讶的是,当实际标签与随机标签交换或当示例被随机值替换时,性能损失相对较小。这一发现挑战了人们对少样本学*依赖于示例中准确输入-标签映射的直观信念。
图 5.6 展示了大型语言模型如 GPT 在没有示例、正确标签和随机标签的情况下执行下游任务的情况。此图突出了用于性能评估的两个不同的推理方法:直接推理和通道推理。在直接推理中,模型根据给定上下文评估不同类别的概率。相比之下,通道推理计算在指定类别下上下文发生的概率。例如,在情感分析中,对于上下文 x = “这部电影很棒”,直接推理评估“这部电影很棒 正面”与“这部电影很棒 负面”的可能性。然而,通道推理评估的是“正面 这部电影很棒”与“负面 这部电影很棒”。数据显示,在分类(图的上部)和多项选择任务(图的下部)中,具有随机标签(反斜杠)的模型与具有正确标签(网状)的模型表现相当,并且明显优于没有示例的零样本情况(灰色)。

图 5.6 不同标签在下游任务中的性能。
对于分类图:x 轴列出了不同的模型:直接 GPT-2、通道 GPT-2、直接 MetaICL、通道 MetaICL、直接 GPT-J、通道 GPT-J、直接 fairseq 6.7B、通道 fairseq 6.7B、直接 fairseq 13B、通道 fairseq 13B、直接 GPT-3 和通道 GPT-3。y 轴表示从 25 到 60 的准确率(百分比),以 5 为增量。对于每个模型,有三个条形表示:1. 无演示 2. 带有金标签的演示 3. 带有随机标签的演示。多选题图与分类图具有相同的 x 轴布局。多选题的 y 轴表示从 35 到 70 的准确率(百分比),以 5 为增量。对于这两个图,带有金标签的演示通常显示最高的准确率,其次是带有随机标签的演示,无演示通常在大多数模型中显示最低的准确率。通道 GPT-3 模型在分类和多选题任务的所有三个演示条件下都显示出最高的准确率。这些图表展示了不同语言模型在各种演示条件下在分类和多选题任务上的表现,展示了提供带有正确(金)标签或随机标签的示例(演示)与完全不提供示例相比的影响。
根据图 5.6,以下是一些见解:
-
- 标签空间的定义和由样本示例设定的输入文本分布对于上下文学*至关重要,无论单个标签的准确性如何。\(MathML\)
和y——输入文本及其潜在对应的答案——在影响上下文学*结果方面发挥着重要作用。在随机标签的情境中,例如\(MathML\)
,即使\(MathML\)
是错误的,它仍然在可能的答案集\(MathML\)
中。改变这些分布,如用预期答案集外的选项替换\(MathML\)
,将极大地损害学*过程。
- 标签空间的定义和由样本示例设定的输入文本分布对于上下文学*至关重要,无论单个标签的准确性如何。\(MathML\)
-
- 整体格式的规范同样至关重要。在标签空间未定义的情境中,使用随机英语单词作为标签比完全不使用标签要有效得多。
-
- 在元训练中采用上下文学*目标可以增强这些效果,鼓励模型更多地关注样本示例的简单元素,如它们的格式,而不是关注输入-标签映射的复杂性。
大型语言模型可能无法从示例中推导出特定的映射函数 \(MathML\)
来应对新任务;相反,它们通常利用其广泛的预训练知识。然而,如果我们将任务学*的定义扩展到包括适应示例中暗示的特定输入、标签分布和格式,并据此调整预测,那么这些模型确实可能从示例中提取与任务相关的信息。预训练的语言模型具备执行任务的内禀能力,这表明语言建模的目标内在地支持强大的零样本能力。然而,这也意味着上下文学*可能在处理必要输入-标签关系未预先编码的任务时遇到困难。
样本示例和指导性提示对语言模型的影响似乎类似。这一见解也适用于遵循指令的模型,表明这类模型是重新激活现有能力而不是学*任务的新语义细微差别。实验发现进一步揭示,将每个未标记的输入与随机标签配对并用作示例,可以达到接*少量样本场景的性能,即使没有标记数据。这表明我们目前对零样本能力的基准可能被设定得远低于实际潜力,这为未来零样本性能的提升开辟了重要途径。
5.4.2 贝叶斯推理
使用贝叶斯框架来解释上下文学*,为理解少量样本学*原理提供了更清晰的认识。这种方法认为,在广泛的语言预训练过程中,文档中的句子、段落和表格等元素共享潜在的语义主题和结构化格式——例如,在问答格式中交替呈现问题和答案。文档级别的训练数据体现了跨越长距离的潜在连贯性概念,模型在预训练期间利用这些概念来推断这些潜在想法。
在贝叶斯框架中,上下文学*被视为条件概率问题,任务是预测基于预训练模型的知识和一系列提示的下一个单词或短语的概率。预训练模型的“知识”对应于在广泛的文本预训练期间关于跨文档连贯性的学*,这成为模型对世界内部理解的一部分,并为它的上下文理解打下基础。“一系列提示信息”涉及通过训练样本进行上下文学*所学*的特定任务导向的概念分布,这些分布作为关键的调整,以细化模型对特定任务的响应。
总体而言,预训练和提示分布为贝叶斯范式中的上下文学*提供了基础,同时针对特定任务进行了专门优化。将贝叶斯推理应用于少量学*引入的概念增强了学*过程。成功推导这些概念使得模型能够在测试场景中准确预测结果。
\(MathML\) (5.1)
(5.1)
方程(5.1)说明,提示作为证据,增强了后验概率分布\(MathML\)
的确定性。如果这个分布主要关注提示概念,那么模型可以有效地“学*”提示,从而提高其准确选择相关提示概念的可能性。
尽管如此,存在一个逻辑上的挑战:语言模型根据上下文示例推导提示概念,但这些提示是从可能与模型训练预训练分布大相径庭的提示分布中抽取的。提示将独立示例连接起来,使得在语言模型及其预训练分布之间的不同示例之间的转换不太可能,这可能在推理过程中引入噪声。例如,将来自不同新闻主题的独立句子连接起来可能会由于单个句子中缺乏足够的上下文而导致文本异常。然而,正如 GPT-3 所展示的,尽管存在这些分布差异,语言模型仍然可以有效地执行贝叶斯推理。
只要信号的强度超过噪声的干扰,语言模型通过有效上下文学*是可行的。在这里,“信号”指的是在给定提示下,提示概念与其他概念之间的 KL 散度,而“噪声”是示例之间的转换错误。如果提示使得模型能够轻松区分提示概念和其他概念,则认为信号强度强。这表明,如果提示的格式保持不变且映射信息已经存在于预训练数据中,那么删除某些信息(如消除输入-输出映射)是允许的,这与传统的监督学*形成鲜明对比,后者在没有完整的输入-输出映射的情况下会失败(例如,当标签随机化时)。
这进一步阐明了之前关于隐式微调的讨论,指出语言模型并不依赖于提示中特定的\(MathML\)
配对。只要输出的\(MathML\)
是候选集y的一部分,即使它并不直接对应于\(MathML\)
,模型就可以进行上下文学*。这表明在上下文学*中,提示的每一个方面——包括输入分布、输出空间和格式——都充当一个“信号”,旨在定义任务的概念分布,从而增强模型在预训练期间准确推断概念的能力。虽然随机化提示中的输入-输出映射通过链接随机序列引入了“噪声”,但如果存在足够的信号,如正确的输入分布、输出空间和格式,模型仍然可以有效地进行贝叶斯推理。适当的输入-输出映射可以通过提供更精确的证据并最小化噪声来进一步促进这一过程,尤其是在这些映射在预训练数据中很少见的情况下。
因此,贝叶斯框架揭示了上下文学*的潜在机制,并提供了关于如何设计提示及其元素——输入分布、输出空间和格式的指导。这些组件通过提示帮助定义任务的概念分布,使模型能够更准确地推断出预训练期间学*到的概念。
5.5 思维链
为了进一步提升大型语言模型在数学推理方面的能力,谷歌大脑团队包括贾森·韦和薛志王等成员在 2022 年 1 月引入了思维链(CoT)方法。这种方法采用了一种针对各种学*情境(零样本、单样本和少样本)的分割与征服策略,训练模型模仿人类类似的逐步思考和推理。这项技术赋予了模型有效应对复杂推理挑战的能力。
CoT 最直接的实现方式是将辅助的逐步指令融入提示中,这种方法被称为零样本学* CoT。尽管这种方法很简单,但它已经在许多领域显示出了有效性。这种方法涉及两个阶段(参见图 5.7):首先,将提示“让我们一步步思考”添加到零样本提示中,提示模型输出其推理过程。在第二阶段,这个推理输出之后跟随另一个提示,“因此,答案是(用阿拉伯数字表示)”,引导模型给出最终答案。

图 5.7 零样本学* CoT。
流程图显示了两个提示:[第一个提示] 推理提取和[第二个提示] 答案提取。第一个提示的内容是:问题:乔每分钟平均打 25 拳。一场比赛持续 5 轮,每轮 3 分钟。他总共打了多少拳?答案:让我们一步步来想这个问题。这连接到一个标记为 LLM 的框。下面是步骤:在一分钟内,乔打 25 拳。在三分钟内,乔打 3 次 25 等于 75 拳。在五轮中,乔打 5 次 75 等于 375 拳。第二个提示的内容是:问题:乔每分钟平均打 25 拳。一场比赛有 5 轮,每轮 3 分钟。他总共打了多少拳?答案:让我们一步步来想。在一分钟内,乔打 25 拳。在五轮中,乔打 5 次 75 等于 375 拳。因此,答案是(用阿拉伯数字表示)。这连接到一个标记为 LLM 的框,然后连接到一个标记为 375 的框。
这种简单直接的技术显著提高了大型语言模型在各种推理任务上的性能。例如,在 GSM8K 数学推理数据集上,添加这个特定的提示将推理准确率从最初的 10.4%提高到 40.4%,具体细节见表 5.1。
表 5.1
零样本推理链与零样本学*的比较。
| 数学能力 | |
|---|---|
| 单一方程 | |
| --- | --- |
| 零样本学* | 74.6/78.7 |
| 零样本思维链 | 78.0/78.7 |
| 常识 | |
| 常识问题 | |
| 零样本学* | 68.8/72.6 |
| 零样本思维链 | 64.6/64.0 |

为什么在提示中添加“让我们一步步来想”能使得大型语言模型能够详细地阐述推理步骤并计算答案?根据前面讨论的上下文学*的贝叶斯推理的概念分布,可能是因为预训练数据中包含大量以“让我们一步步来想”开头,随后是详细推理并以答案结束的例子。在预训练过程中,大型语言模型内化了这些模式。因此,当被提示“让我们一步步来想”时,这些模型可以更有效地推断出它们在预训练期间学*的逐步推理概念,从而能够系统地通过任务并得出答案。
CoT 方法的第二次应用针对单次学*提示,通过将手动制作的推理示例纳入样本场景中。这些示例不仅包括简单的问答对,还包括针对每个问题的详细、分步的推理过程。要详细了解如何应用,请参阅图 5.8 中展示的 CoT 响应。

图 5.8 单次学*中的标准提示与推理链提示的比较。
在标准提示中,输入问题是:罗杰最初有 5 个网球。他购买了额外的两罐网球,每罐包含 3 个网球。他现在有多少个网球?答案是:总数是 11 个。第二个问题是:自助餐厅有 23 个苹果。如果他们用 20 个苹果做午餐,然后又购买了 6 个苹果,他们现在有多少个苹果?模型的输出是:答案:自助餐厅最初有 23 个苹果。他们用 20 个苹果做午餐,剩下 23 减去 20 等于 3 个苹果。然后他们又购买了 6 个苹果,所以他们现在有 3 加 6 等于 9 个苹果。答案是 9。在思维链提示中,输入问题是:罗杰最初有 5 个网球。然后他购买了两个罐装网球,每罐包含 3 个网球。他现在有多少个网球?答案是:罗杰开始时有 5 个网球。两个罐子中各有 3 个网球,总共 6 个网球。因此,5 加 6 等于 11。答案是 11。第二个问题是:自助餐厅有 23 个苹果。如果他们用 20 个苹果做午餐,然后又购买了额外的 6 个苹果,他们现在有多少个苹果?模型的输出是:答案:自助餐厅最初有 23 个苹果。他们用 20 个苹果做午餐,剩下 23 减去 20 等于 3 个苹果。然后他们又购买了 6 个苹果,所以他们现在有 3 加 6 等于 9 个苹果。答案是 9。
通过丰富样本示例中的详细推理过程,展示了如何有效地分解大问题,从而演示了 CoT 对单次学*提示的应用。该论文评估了标准提示和基于 CoT 的提示在三个主要语言模型——LaMDA、GPT 和 PaLM 上的性能。虽然 GPT 是由 OpenAI 开发的,但谷歌发布了另外两个。测试显示,谷歌的 PaLM 模型,拥有 5400 亿个参数,在 OpenAI 于 2021 年 10 月首次引入的初等数学推理数据集 GSM8K 上达到了大约 60.1% 的准确率。
在 CoT 引入之后,2022 年 3 月揭晓的自我一致性技术将 GSM8K 的准确率提升到了 74.4%。如图 5.9 所示,自我一致性不同于之前的 CoT 方法,它不仅输出单个任务的推理过程和答案。相反,它要求大型语言模型为每个提示生成多个推理过程和答案,通过投票机制选择最佳解决方案。这种方法集成了三个进步:从单一到多个提示问题,验证中间推理步骤的准确性,以及将加权投票应用于响应,将 GSM8K 的准确率提升到大约 83%。

图 5.9 使用自我一致性改进语言模型中的推理链。
这展示了 LLM 处理提示的过程,导致不同的推理路径。示例问题是:珍妮特的鸭子每天下 16 个蛋。她早餐吃掉 3 个,用 4 个为她的朋友们烤松饼,剩下的蛋以每个 2 美元的价格出售。她每天能赚多少钱?贪婪解码器路径得出结论:这意味着她每天吃掉 3 个加上 4 个等于 7 个蛋。她以每个 2 美元的价格出售剩下的蛋,所以她每天卖出 7 个乘以 2 美元等于 14 美元。答案是 14 美元。自我一致性方法采样各种推理路径:1. 她剩下 16 减去 3 减去 4 等于 9 个蛋,所以她每天赚 2 美元乘以 9 等于 18 美元。答案是 18 美元。2. 这意味着她以每个 2 美元的价格出售剩下的蛋,2 美元乘以(16 减去 4 减去 3)等于 26 美元。答案是 26 美元。3. 她早餐吃掉 3 个蛋,所以她剩下 16 减去 3 等于 13 个蛋。在用 4 个蛋烤松饼后,她剩下 13 减去 4 等于 9 个蛋。因此,她以每个 2 美元的价格卖出 9 个蛋,赚得 18 美元。答案是 18 美元。最终答案是 18 美元。
CoT 的应用都反映了分而治之的方法,将复杂的推理挑战分解成更简单的子任务。通过解决这些子任务,整体问题解决方案是从个别答案中得出的。这种策略重申了“概念分布的贝叶斯推理”的概念,使用提示来定义特定任务的 conceptual distributions,并使模型能够更有效地推断出预训练期间学*到的概念。具有内在推理能力的大型语言模型可以通过使用精心设计的提示和系统性的指导来提高其逐步解决问题的准确性。
对于各种语言的语料库,适当的逐步提示可能存在显著差异。例如,在中文语料库中,相当于“让我们一步步思考”的短语可能更好地表达为“详细的解题方法如下”,而不是字面翻译。因此,在采用不同的 CoT 方法时,根据特定的语言环境调整提示至关重要。通过这样做,提示可以有效地增强任务分解的后验概念分布,使大型语言模型能够将复杂的推理问题分解成一系列更简单的子任务,从而提高其推理能力。
5.6 摘要
GPT-3 是一个基于优化稀疏 Transformer 解码器架构的高级模型,拥有高达 1750 亿个参数。随着模型规模的扩大,它在各种 NLP 任务上表现出显著的改进;然而,这种改进是以增加训练成本为代价的。为了减轻这些成本,GPT-3 采用基于内容的学*策略,特别是利用少量样本的 few-shot 学*。这种方法不需要调整模型参数,而是依赖于从有限数量的示例中获取特定任务的知识,从而在新任务上提供强大的性能。本章通过贝叶斯推理和概念分布的视角深入探讨了 GPT-3 的内容学*机制,并讨论了 CoT 方法背后的分而治之哲学。最后,第 5.5 节调查了 CoT 在连贯推理和创新方面的能力。通过将这种高级推理融入其工作流程,模型增强了其理解和生成复杂输出的能力。
第六章 大型语言模型的预训练策略
摘要
本章深入探讨了大型语言模型(LLMs)的预训练策略,重点关注数据集选择、数据处理和分布式训练技术等关键方面。它首先讨论了多样化、高质量数据集以及去重和增强等方法的重要性,这些方法可以增强模型性能和泛化能力。然后,本章深入探讨分布式训练策略,包括数据并行、模型并行和管道并行,这些对于有效处理 LLMs 的巨大计算需求至关重要。本章突出了 Pathways、Megatron-LM 和 DeepSpeed Zero 等工具在优化分布式训练过程中的作用。本章最后比较了 GPT-3、OPT、PaLM 和 BLOOM 等模型采用的多种训练策略,强调了稳定参数、优化训练设置和硬件考虑(如 BF16 精度)的重要性。这些见解对于提高大规模语言模型预训练的效率和效果至关重要。
关键词
大型语言模型;预训练策略;数据集选择;分布式训练;数据并行;模型并行;流水线并行;Megatron-LM;DeepSpeed ZeRO;BF16 精度
在开发大型语言模型(LLMs)的初期阶段,数据量、参数大小、训练框架的设计以及训练管理方式等关键挑战起着至关重要的作用。这些问题可能导致损失突然上升或模型难以正确收敛。为了克服这些问题,整合各种训练方法,包括处理预训练数据、选择训练框架以及调整训练参数,对于提高预训练阶段稳定性和效率至关重要。
从 GPT-3 的发布开始,OpenAI 实施了一种部分专有方法,对某些关键技术细节保密。例如,创建训练数据集的方法、所需的计算资源以及关于学*率、迭代次数或优化器类型等超参数的具体细节仍然未公开。本章旨在深入探讨 ChatGPT 的预训练策略,从其他主要自然语言处理模型公开的信息中进行比较和洞察。
6.1 预训练数据集
ChatGPT 模型是在 GPT-3.5 的基础上开发和优化的,而 InstructGPT 则建立在 GPT-3.0 之上。两者都通过人类反馈进行了微调以优化性能。如表 6.1 所述,在预训练过程中,GPT-3.0 广泛使用了诸如维基百科、各种书籍、来自互联网的网页(如 Common Crawl)以及 WebText2 等数据集。另一方面,GPT-3.5 扩大了其数据来源,包括来自 GitHub 的代码相关数据集、StackExchange 等对话论坛以及视频字幕数据集。
-
- 维基百科:作为一个免费的多语言在线百科全书,维基百科汇集了超过 30 万名志愿者的知识和努力。截至 2022 年 4 月,英语维基百科拥有超过 640 万篇文章,总字数超过 40 亿。维基百科的文本价值巨大,以其严谨的内容、精确的参考文献、清晰的描述和广泛的范围而著称,这就是为什么许多研究实验室更喜欢将其英语版本作为他们的主要数据集。
-
- 书籍:这个类别包括虚构和非虚构体裁的数据集,旨在提高模型在讲故事和响应能力方面的能力。这些数据集主要来自 Project Gutenberg 和 Smashwords(多伦多图书库/图书库)。值得注意的是,OpenAI 的 GPT-3 论文没有透露 Books1(120 亿标记)和 Books2(550 亿标记)数据集的确切来源。研究人员推测这些可能来自类似于 LibGen18 和 Sci-Hub 的集合,尽管它们庞大的规模可能并不完全符合 GPT-3 预期的数据集特征。
-
- 学术期刊:这个数据集包括来自预印本和正式出版的期刊的文章,提供了一个强大而精确的学术基础。学术文本通常以强大的逻辑结构、理性和详细的阐述为特征。这些数据集的关键来源包括 ArXiv 和美国国家卫生研究院。
-
- WebText:WebText 是一个来自 Reddit 上所有获得至少三个点赞的外部链接的大量数据集。这种方法捕捉了在线流行内容的发展趋势,有助于精选链接和生成相关文本内容。
-
- Common Crawl:自 2008 年起运营,Common Crawl 提供了大量的网页、元数据和文本提取。它涵盖了各种语言和领域的丰富文本。研究人员通常使用该数据集的仅英语、过滤版本(C4)为其项目提供服务。
-
- 其他数据集:这包括 GitHub 代码数据集、StackExchange 对话数据集和视频字幕集合。这些数据集对于提高模型理解代码、管理对话和处理多模态信息的能力至关重要。
表 6.1
用于训练 GPT-3 的数据集。
| 数据集 | 量级(标记) | 训练混合中的权重 |
|---|---|---|
| Common Crawl (filtered) | 410B | 60% |
| WebText2 | 19B | 22% |
| Books1 | 12B | 8% |
| Books2 | 55B | 8% |
| Wikipedia | 3B | 3% |
总结来说,GPT-3.0 和 GPT-3.5 模型在其训练阶段利用了广泛多样的数据集,涵盖了广泛的领域、语言和内容类型。这种训练资源的多样性使模型具备了更全面的理解和更高的效率,从而在现实世界应用中提高了性能。这些数据集的多样性和深度使模型能够有效地理解和生成广泛的文本输出,从而提高了它们在各种应用中的可用性和适应性。
6.2 预训练数据的处理
GPT-3 在大约 3000 亿个标记的巨大数据集上进行了预训练,其中大约 60% 来自精心挑选的 Common Crawl 部分,其余来自 WebText2、Books1 和 Books2 以及维基百科等来源。GPT-3.5 更新进一步集成了如 GitHub Code 等与代码相关的数据集。这些数据集的采样方式并非严格基于大小,而是优化了质量。尽管开源社区已经尝试了多次复制 ChatGPT,但真正成功的努力相当罕见。与 GPT-3 相比,OPT-175B 和 BLOOM-176B 的参数规模相当甚至更大,但它们尚未达到原始 GPT-3 的性能水平。尽管如此,这些模型仍然是解决本章讨论的预训练数据关键方面的宝贵案例研究。
-
- 预训练数据的质与量。用于训练的数据量对于预训练模型的有效性至关重要。例如,PaLM 和 GPT-3 的预训练所使用的数据量远超过 OPT 和 BLOOM(参见表 6.2),这表明大型、高质量的数据集对于它们的成功至关重要。此外,数据的质量会显著影响模型性能。例如,GPT-3 就使用了一个高效的分类器来筛选其预训练数据集,而 OPT 和 BLOOM 等模型在训练过程中并未采取这一步骤。
-
- 预训练数据的去重。从数据集中去除重复项对于防止模型过度适应相同数据至关重要,这有助于提高它们对新数据的泛化能力。GPT-3 在文档级别实施去重以防止过拟合,而 OPT 预训练中使用的 Pile 语料库仍然包含相当数量的重复数据。
-
- 预训练数据集的多样性。对于大规模语言模型来说,在涵盖不同领域、格式(如文本、代码和表格)和语言的多样化数据集上进行训练至关重要。OPT-175B 结合了如 Pushshift.io Reddit 和 Common Crawl 等来源,这些来源主要是英语。然而,通过结合包括 Common Crawl 在内的各种来源,语料库整合了一小部分非英语数据。相比之下,BLOOM 使用了 ROOTS 语料库,它包含来自数百个来源的 46 种自然语言和 13 种编程语言的数据,为它提供了比 OPT-175B 更丰富的多样性。
表 6.2
大规模语言模型的训练数据集。
| 预训练语料库中的标记数 | 预训练期间看到的标记数 | |
|---|---|---|
| PaLM | 780B | 770B |
| GPT-3 | 500B | 300B |
| OPT | 180B | 300B |
| BLOOM | 341B | 366B |
认识到虽然拥有多样化的数据对于训练广泛能力的 LLMs 至关重要,但预训练数据的特定构成对这些模型在特定任务中的表现有深远的影响。例如,BLOOM 由于其多语言数据比例较高,在多语言处理和翻译等任务中表现出色。OPT 广泛使用来自 Reddit 等对话数据,这可能是其在基于对话的任务中有效的原因。GPT-3.5 对编码数据集的重视不仅提高了其在编码相关任务中的性能,也可能提高了其在思维链(CoT)推理方面的能力。然而,尽管 BLOOM 在预训练中包含了代码数据,但在编码和 CoT 任务中表现不佳,这表明仅代码数据不足以在这些领域表现出色。
为了进一步推动预训练语言模型的边界,研究人员应考虑以下方面:
-
- 对训练数据进行更精细的过滤以确保高质量。
-
- 更高效的训练数据去重,以最小化冗余并防止过拟合。
-
- 增强训练数据的多样性,以提升模型在各个任务和领域的泛化能力。
-
- 研究数据分布如何影响特定应用中模型性能,以优化预训练数据的选择和组织。
有效的数据去重可以防止过拟合,仔细的数据选择确保了质量,多样化的数据集增强了大规模预训练语言模型的应用广泛性。然而,GPT-3 处理这些数据的详细过程,或预训练数据的具体细节,仍然没有公开。
6.3 分布式训练模式
LLMs 的一个显著特征是它们不断增长的大小。以 GPT-3 为例,其拥有惊人的 1750 亿个参数。训练这个模型需要一个月的时间,即使使用 1024 个高容量(80 GB)的 A100 GPU。Meta LLaMA 模型,拥有 650 亿个参数,通过在 21 天内使用 2048 个 Nvidia A100 GPU 进一步推动了边界。随着模型规模的这种增长,不可避免地会带来重大挑战。
主要的障碍是当前硬件技术带来的限制,尤其是内存墙问题。由于物理限制,单个设备的计算能力和内存容量不足以支持大型模型规模的扩展,导致以下挑战:
-
- VRAM 限制:现有的任何图形处理单元(GPU)都无法完全存储这些大型模型的参数。例如,GPT-3 仅模型参数就需要约 700 GB,另外 700 GB 用于梯度,1400 GB 用于优化器状态,总计大约 2.8 TB。
-
- 计算挑战:即使可能将整个模型塞入一个 GPU(例如,通过在主机和设备内存之间传输参数),所需的计算量也会使训练过程变得不切实际地长。以 GPT-3 为例,在单个 V100 NVIDIA GPU 上训练将需要估计的 288 年(图 6.1)。

图 6.1 计算机视觉、自然语言处理和语音中训练最先进模型的计算需求。图片来源:medium.com/riselab/ai-and-memory-wall-2cb4265cb0b8。
y 轴表示 PFLOPS 级别的训练计算量,以对数尺度从 1eplus02 到 1eplus09。x 轴显示从 2012 年到 2021 年的年份。显示了三条趋势线:1. Transformer:750x/2 年 2. CV/NLP/Speech:15x/2 年 3. 摩尔定律:2x/2 年。绘制了各种 AI 模型:AlexNet(2012)VGG,Seq2Seq(2014)ResNet,InceptionV3(2015)Xception(2016)ResNext,DenseNet(2017)ELMo,Transformer(2018)BERT,GPT-1(2019)MoCo,ResNet50,XLNet,Megatron LM,Microsoft T-NLG(2020)GPT-3,Wav2Vec 2.0(2021)GPT-3 是图上的最高点,显示出比其他模型显著更高的计算需求。该图说明了 AI 模型计算需求量的快速增加,特别是对于 Transformer 模型,每两年增加 750 倍,远超摩尔定律(每两年增加 2 倍)。
因此,尽管芯片技术的进步带来了成长的痛苦,但跨多个节点的分布式训练已成为管理这些庞大的训练任务的主要策略。现代方法包括数据并行、模型并行、流水线并行和结合数据并行和模型并行的混合方法。
6.3.1 数据并行
数据并行是一种技术,其中训练数据批次被分配到多个计算设备上。每个设备独立处理数据的一部分——执行正向和反向传播以及更新参数等任务。在每个训练周期之后,这些设备同步它们的参数,以确保模型在所有平台上保持一致。这种方法特别适用于快速处理大型数据集(图 6.2)。

图 6.2 数据并行的示意图。
在参数服务器下方有三个模型副本,每个副本都连接到一个数据分片组件。参数服务器被标记为 Delta W prime 等于 W 减去 H 乘以 Delta W。每个模型副本通过带有 W prime 和 Delta W 标签的箭头连接到参数服务器。数据分片组件在每个模型副本下方以圆柱形状表示。
在实际应用中,数据并行通过将整体批次分割成更小的子批次来实现,每个子批次由不同的设备处理。这个框架的常见例子是参数服务器模型。在这里,每个设备都保存了模型的一个副本。每个节点处理不同的数据子集并计算梯度。然后,这些梯度被发送到一个中央节点,即参数服务器,它更新模型并将更新后的版本重新分配给每个节点。尽管数据并行在扩展方面非常有效,但它也面临一些挑战:
-
- 如果每个 GPU 的批次大小低于某个特定点,可能会导致 GPU 容量未充分利用和更高的通信开销。
-
- 可以有效使用的设备数量有限,这由可管理的批次大小决定,这可能会限制训练中使用的加速器的数量。
6.3.2 模型并行
模型并行设计用于在训练期间通过将大量模型分布在多个设备上来绕过单个计算单元(如 GPU)的内存限制。在这个设置中,模型的每个组件由不同的设备处理,每个设备都参与训练过程的每个步骤,如图 6.3 所示。模型并行包括两种主要类型:张量并行和流水线并行。
-
- 张量并行:这种方法将模型参数(如权重、梯度、优化器状态)分割成更小的子张量,然后分配给各种计算设备。每个设备独立处理其计算部分并与他人同步以更新整个模型。这种方法有效地减轻了单个设备内存的负担,便于在内存限制内训练更大的模型。
张量并行特别涉及将模型参数分割并在不同设备上分配。这个过程使用不同的分片方法,其中一维分片是最常见的,即张量沿着一个维度分割,无论是水平还是垂直。未来的技术可能包括更复杂的多维分片方法。例如,考虑以下格式的矩阵乘法\(MathML\)
,其中X是输入,A是权重,Y是输出。这个过程涉及将矩阵分解为计算段,然后汇总结果。矩阵A可以按行或列分割:\(MathML\) (6.1)
(6.1)这种设置允许,例如,两个不同的 GPU 处理矩阵乘法任务的单独部分,然后进行通信以组合最终输出。这种方法可以扩展以包括更多的 GPU,并且可以应用于支持分片的其他操作。
-
- 管道并行性。这种高级方法将模型划分为几个顺序阶段,每个阶段包含一个或多个层,每个阶段在不同的计算设备上执行。类似于生产线,训练数据无缝地从一阶段流向下一阶段。每个设备处理其分配的阶段,然后将结果传递下去,从而提高了训练的效率和速度(图 6.4)。

图 6.4 矩阵乘法在多个 GPU 上的分配。
初始矩阵是 X 和 A。矩阵 X 是一个 2 行 4 列的矩阵,第一行元素为 0、1、2、3,第二行元素为 4、5、6、7。矩阵 A 是一个 4 行 2 列的矩阵,第一行元素为 10、14,第二行元素为 11、15,第三行元素为 12、16,第四行元素为 13、17。结果矩阵 Y 是一个 2 行 2 列的矩阵,第一行元素为 74、98,第二行元素为 258、346。列向并行性通过矩阵 X 乘以子矩阵 A1 和 A2 来展示。矩阵 A1 是一个 4 行 1 列的矩阵,元素为 10、11、12、13。矩阵 A2 是一个 4 行 1 列的矩阵,元素为 14、15、16、17。结果矩阵 Y1 和 Y2 是 2 行 1 列的矩阵,分别包含元素 74、258 和 98、346。这些矩阵组合形成矩阵 Y。行向并行性通过将矩阵 X 划分为子矩阵 X1 和 X2 来展示。矩阵 X1 是一个 2 行 2 列的矩阵,第一行元素为 0、1,第二行元素为 4、5。矩阵 X2 是一个 2 行 2 列的矩阵,第一行元素为 2、3,第二行元素为 6、7。矩阵 X1 乘以矩阵 A1 形成矩阵 Y1,一个 2 行 1 列的矩阵,第一行元素为 11、15,第二行元素为 95、131。矩阵 X2 乘以矩阵 A2 形成矩阵 Y2,一个 2 行 1 列的矩阵,第一行元素为 63、83,第二行元素为 163、215。结果矩阵 Y1 和 Y2 组合形成矩阵 Y。

图 6.3 模型并行性的图。
神经网络可以从基于其结构的定制并行策略中受益。例如,具有众多参数的组件可能最好通过在设备之间分割模型来管理,而参数较少的段可能更适合通过分割数据来服务。在特定网络部分混合并行策略可以最小化数据传输。在网络具有广泛隐藏层的部分,数据和模型矩阵可能同时分割。与数据和模型并行不同,其中设备执行并行计算,管道并行将任务组织成一个清晰的序列,将不同阶段委托给各种设备。这允许每个设备专注于网络的一个特定部分,支持更大模型的训练或更有效地处理更大的批量。
在实践中,不同的网络层分布在各种 GPU 上,每个设备依次处理其指定的阶段,在每一步都使用新鲜的数据输入,优化吞吐量。如图 6.5 所示,每个计算单元负责特定的层或一组层,有序执行。例如,当接收到初始数据输入时,设备 0 计算第一层,\(MathML\)
,在下一步中,设备 0 处理另一个数据集的第一层,而设备 1 继续处理初始数据集的第二层,\(MathML\)
。尽管管道和张量并行通常并存并相互补充,但管道设置可能导致利用率不足,因为下游单元必须等待其前驱完成。此外,这种方法可能导致“管道气泡”,如图 6.5 所示,设备可能在完成前向传播和开始反向传播之间闲置。

图 6.5 管道并行训练的示意图。
该图展示了四个设备(设备 0、设备 1、设备 2 和设备 3)随时间推移的计算过程。时间轴由指向右的水平箭头表示。计算分为前向计算和反向计算阶段。前向计算包括设备 0 上的 F sub 0 end sub,设备 1 上的 F sub 1 end sub,设备 2 上的 F sub 2 end sub 和设备 3 上的 F sub 3 end sub。反向计算包括设备 0 上的 B sub 0 end sub,设备 1 上的 B sub 1 end sub,设备 2 上的 B sub 2 end sub 和设备 3 上的 B sub 3 end sub。前向计算和反向计算阶段之间存在管道气泡。反向计算之后,每个设备都经历一个标记为更新的更新阶段。
表 6.3 提供了对三种并行技术——数据并行、张量并行和流水线并行——的比较分析,重点关注通用性、计算利用率、VRAM 消耗和通信开销等方面。数据并行以其通用性和在计算和通信中的高效率而突出,尽管它伴随着相当大的 VRAM 开销。另一方面,张量并行在 VRAM 效率上更高,但会产生额外的通信成本,且灵活性较低。流水线并行在 VRAM 使用上效率较高,通信开销较低,但可能会遭受“流水线气泡”的影响,这可能会破坏流畅的处理流程。
表 6.3
三种并行类型的比较。
| 数据并行 | 张量并行 | 流水线并行 | |
|---|---|---|---|
| 通用性 | 完全通用 | 只能用于某些模型;例如,张量并行目前不能应用于 CNN | 通常适用 |
| 计算利用率 | 当数据分布相对均匀时,计算设备的利用率损失较低 | 中间结果的频繁传输会导致计算设备的一些利用率损失 | 流水线气泡导致计算设备的一些利用率损失 |
| 内存开销 | 每张卡保留相同的模型和优化器参数,导致相对较高的开销 | 可以将内存开销均匀地分配到不同的服务器上 | 如果模型不同层的参数大小差异很大,则需要调整以实现最佳效果 |
| 通信量 | 只需传输不同 GPU 上的梯度,导致低开销 | 中间结果的频繁传输会产生显著的通信开销 | 只需在不同层之间传输隐藏状态和反向传播梯度,导致低通信开销 |
6.4 分布式训练的技术方法
分布式训练通常优于单机单 GPU 的训练,因为它能够以更大的规模进行训练。然而,每种分布式训练方法都有其自身的优缺点。仅仅增加更多的计算设备并不总是导致处理能力的增加,因为内存带宽的增长速度相对于处理能力较慢,而设备间网络带宽的增长速度更慢。受所谓的“内存墙”和“网络墙”的限制,传输的数据量成为决定分布式训练速度和效果的关键因素。
当比较数据并行和模型并行时,很明显,如果一个数据批次产生了许多中间输出但参数相对较少,那么数据并行可能是更好的选择。另一方面,如果处理一个批次涉及管理大量参数而中间输出较少,模型并行可能更有益。需要注意的是,数据并行具有明显的优势,因为它允许通信任务与计算更无缝地重叠,有效地隐藏了一些通信延迟。这在模型并行中更难实现。
对于训练大规模模型,由于其最小化的数据传输需求(仅涉及阶段间传输的数据总和),管道并行具有优势。这与涉及整个计算图数据传输的数据并行和张量并行形成对比。因此,对于带宽有限的设备,管道并行可能更受欢迎。然而,结合管道并行和模型并行的混合方法可能比单独使用其中一种方法提供更优越的性能。此外,在数据和模型并行方面都存在优化的潜力,因为计算所花费的时间可能会掩盖数据传输所需的时间。
随着 LLM 的日益突出,开发并实施模型并行和管道并行等并行处理策略,如为 Transformer 基础模型,已成为学术界和工业界的一项关键任务。例子包括基于 Lingvo 构建的 GPipe 神经网络训练库、微软的 PipeDream、NVIDIA 的 Megatron-LM、Facebook 的 FairScale、微软的 DeepSpeed ZeRO 和谷歌的 Pathways。
训练大规模语言模型主要有两条技术路径。第一条路径由谷歌领导,结合了张量处理单元(TPUs)、加速线性代数(XLA)和 TensorFlow/JAX,与谷歌的云基础设施深度融合。第二条路径由像 NVIDIA、Meta 和微软这样的行业巨头支持,依赖于 GPU 与 PyTorch、Megatron-LM 和 DeepSpeed 的结合。后者代表了一种最发达的开源策略,通过并行化促进了大规模模型训练。这两种方法都针对在多个 GPU 和节点上训练大量模型进行了优化,巧妙地克服了通常伴随 LLM 训练的内存和计算挑战,即使在硬件限制下也能实现模型的扩展。
6.4.1 路径
Pathways 是由 Google 开发的一种创新的异步分布式数据流架构,专为机器学*(ML)应用定制。如图图 6.6 所示,该架构将模型的计算组织成一个有向无环图(DAG),其中节点表示计算任务,边表示数据依赖关系。Pathways 旨在提高分布式训练效率,在处理大型模型和数据集时表现出特别的优势。该架构具有四个主要特性:
-
- 灵活性。Pathways 支持各种形式的并行计算,包括数据并行、模型并行和流水线并行,使其能够适应不同的机器学*挑战和硬件配置。
-
- 异步执行。Pathways 允许任务在输入数据依赖关系满足后立即开始处理,无需整个批次都准备好。这种方法最小化了计算资源的空闲时间,提高了训练效率。
-
- 分布式处理。该架构允许任务分散到多个设备上,最大化利用可用硬件,并提高训练的速度和可扩展性。
-
- 容错性。Pathways 设计时考虑了容错能力,确保即使在设备故障的情况下也能持续运行。这一特性对于在大规模分布式系统中的长期训练任务至关重要,因为此类故障更为常见。

图 6.6 Google pathways 异步分布式数据流。图片来源:论文“介绍 Pathways:下一代 AI 架构”。
该图展示了从任务到输出的相互连接的节点网络。在底部,有任务 1、任务 2、任务 3 和任务 N 的标签。这些任务通过一系列节点和路径连接到顶部的输出,标签为输出、输出、输出和输出。
图 6.7 提供了 Pathways 架构的全面视图,包括三个主要组件:

图 6.7 Pathways 系统的概述。图片来源:论文“Pathways:机器学*的异步分布式数据流”。
该图像由 Pathways 架构的三个主要组件组成。第一个组件,标记为 Sharded Dataflow Program(Plaque),显示了一个由节点 A、B 和 C 通过传输子图连接的图。它包括主机(每个岛屿有多个)、资源管理器(全局)、调度器(每个岛屿)、执行器(每个设备)和集体操作符号。第二个组件,标记为 Datacenter Network(RDMA),描述了一个具有私有互连的加速器切片和网络中的模型组件 A、B 和 C。主机、资源管理器和执行器在网络中表示。第三个组件,标记为 Gang scheduling,显示了客户端在一段时间内运行程序,各种任务并行调度和执行。图中包括表示任务和操作流的箭头。
以 DAG 表示的分布式计算(左图):此图将每个节点表示为一个单独的编译函数,节点之间的边表示这些函数之间的数据流。这种设置构成了 Pathways 系统的核心,其中所有计算都结构化为一个 DAG。
资源管理器分配岛屿加速器子集(中图):资源管理器将岛屿加速器的子集,称为“虚拟切片”,分配给每个编译函数。这种分配方法确保每个函数在指定的加速器子集上运行,显著提高了计算效率。
每个岛屿的调度器进行集中式调度(右图):每个岛屿都有一个中央调度器,负责协调岛屿内所有计算的群组调度。这些计算随后被分配给每个切片上的执行器进行执行。图中从客户端模块发出的箭头表示控制消息,而其他箭头则表示数据路径的传输。
Pathways 架构使得模型的不同组件可以在多个设备上并行处理,从而促进了模型并行化。在 Pathways 的 DAG 框架中,每个节点代表模型的一个部分,允许整个计算在多个设备上同时进行,从而加速模型训练。此外,Pathways 通过在设备上同时处理不同的数据子集来支持数据并行化。在这种配置中,每个节点处理一个数据子集并将结果整合到一个统一模型中。Pathways 在并行策略方面非常灵活,可以根据需要微调并行级别,提供根据具体要求使用模型并行化、数据并行化或它们的组合的灵活性。
Pathways 旨在利用现有的硬件资产,如 GPU 和 TPUs,以提高机器学*任务的性能。虽然它不需要专用硬件,但其有效性紧密关联于底层硬件的分布式计算能力。Pathways 可以在多个设备之间分配任务,并利用设备间的通信进行分布式计算,使其适用于包括多个 GPU、TPUs 或两者的混合在内的各种硬件配置。
然而,要充分发挥 Pathways 架构的能力,使用具有强大通信设施的硬件至关重要。高速网络选项,如 InfiniBand 或高速以太网,可以显著提高设备之间的数据传输速率,从而提高分布式计算性能。
Pathways 是设计用于在现有硬件上运行的,但为了获得最佳效果,选择具有优越通信能力的硬件是至关重要的。值得注意的是,谷歌将 Pathways 的特定实现作为一个内部项目进行开发,其细节和源代码并非完全公开。
6.4.2 Megatron-LM
Megatron-LM 是由 NVIDIA 开发的深度学*工具,它作为开源项目在 GitHub 上提供,包括其文档。它与 PyTorch 和 TensorFlow 等其他深度学*框架兼容,能够在不同的硬件和软件配置上训练大规模模型。该工具旨在通过利用模型并行化策略(主要是张量和管道并行化)在多个 GPU 和节点上高效地训练大型模型。
通过集成张量和管道并行化,Megatron-LM 优化了大规模 Transformer 模型的训练过程。它通过将模型的权重和层分布到多个 GPU 上来实现这一点,即使在需要在不同 GPU 之间传输数据和同步梯度的同时,也能训练更大、更复杂的模型。因此,拥有有效的通信策略对于显著减少通信开销至关重要。
Megatron-LM 并没有建立一个新的并行建模框架或编译器,而是通过精确的修改增强了 PyTorch Transformers 的现有实现。这种方法简单直接,避免了需要新的编译器或大量代码重写的需求,使用简单的原语来实现模型并行化。具体来说,Megatron-LM 将 Transformer 的掩码多头注意力和前馈部分内的操作进行划分,从而促进了它们的并行处理。
图 6.8 使用带掩码的多头注意力作为示例,说明了这一过程。Megatron-LM 利用多头注意力操作的固有并行性,以列并行的方式划分与键(K)、查询(Q)和值(V)相关的小矩阵乘法(GEMM)。这种划分允许每个 GPU 本地处理对应注意力头的矩阵乘法,将参数和工作负载分配到各个 GPU 上,每个 GPU 生成最终输出的部分。

图 6.8 具有模型并行的 Transformer 块。
在左侧,展示了自注意力机制,输入 X 通过函数 f 传递,从而产生独立的注意力头。每个头包含组件 Q1, K1, V1, Q2, K2 和 V2。这些头被组合为 Q=(Q1, Q2),K=(K1, K2)和 V=(V1, V2)。通过 softmax 和 dropout 操作获得输出 Y1 和 Y2。在右侧,展示了 dropout 过程,其中 Y=Dropout(YB)。输出 Y1B1 和 Y2B2 被组合为 B=(B1/B2)。在另一个 dropout 操作之后,得到最终输出 Z。
在模型的后续全连接层中,每个 GPU 处理输出的一部分,允许权重矩阵 B 按行划分,以便与输入 Y1 和 Y2 进行直接计算。然后通过结合 Dropout 的全归约操作得到最终输出 Z。在实际设置中,没有必要为每个注意力头分配一个 GPU;相反,多个头可以有效地共享单个 GPU,而不违反每个 GPU 上独立操作的原则。因此,理想情况下,注意力头的总数应能被可用 GPU 的数量整除。
Megatron-LM 在正向部分采用类似的方法来分割操作,分割操作的决定基于工作负载特征,如计算量、参数和所需的通信。在单个模型并行 Transformer 层内的正向和反向传播过程中,Megatron-LM 涉及四个通信实例。值得注意的是,线性层输出后的后续 GEMM 操作沿行并行化,并无缝收集来自并行注意力层的输出,从而避免了 GPU 间通信的需求。这种集成策略应用于多层感知器(MLP)和自注意力层,合并了两套 GEMM 操作,并消除了中间同步点,从而提高了模型的扩展性。这种配置使得一个简单的 Transformer 层内的所有 GEMM 操作,在正向和反向路径中各使用两次 all-reduce 操作(如图 6.9 所示)。

图 6.9 Megatron 架构中 Transformer 层内的通信操作。
该图展示了具有两个模型并行阶段的神经网络模型。第一阶段从输入 X 开始,随后是层归一化、自注意力、线性层和 dropout。第二阶段包括层归一化、线性层、GeLU、另一个线性层和 dropout,以输出 Y 结束。两个阶段都涉及 2 次 All-Reduce 操作,用于正向和反馈。
Megatron-LM 的分割操作策略侧重于最小化通信开销,并在 GPU 之间保持可管理的计算负载。它避免将诸如 dropout、层归一化或残差连接等操作孤立于单个 GPU,然后将结果广播到整个网络。相反,它促进了多个 GPU 之间的同时复制计算。
在其架构设计中,Megatron-LM 将模型并行和数据并行视为独立的维度。如图 图 6.10 所示,该架构集成了流水线、张量和数据并行,使得大多数操作受计算限制而非内存约束限制。Megatron-LM 精妙地将计算图分配到各个设备上,最小化了网络传输的数据量和设备的空闲时间。这种方法被称为流水线、张量和数据并行(PTD-P),它利用了多个 GPU 服务器之间的流水线并行,以及这些服务器内部的张量和数据并行。它在一个优化良好的集群中运行,该集群具有高带宽连接,用于服务器间通信。这种设置使得在 1000 个 GPU 上训练具有高达万亿参数的模型成为可能,展示了强大的可扩展性和高效的计算性能,达到了设备峰值吞吐量的 52%。

图 6.10 张量和流水线模型并行的组合。
该图表展示了两个标记为 Transformer Layer number 1 和 Transformer Layer number 2 的 Transformer 层。每个 Transformer 层都被虚线包围,并进一步分为两个部分,分别标记为 Tensor MP Part itioning number 1 和 Tensor MP Part itioning number 2。整个 Transformer 层也被标记为 Pipeline MP Part itioning number 1(第一层)和 Pipeline MP Part itioning number 2(第二层)。该图表显示了每个划分内部的内部结构和连接。
6.4.3 ZeRO
DeepSpeed 以零冗余优化器(ZeRO)作为其主要组件,这是一种专门针对减少模型训练期间内存需求和通信负载的数据并行策略。ZeRO 的主要目标是减少冗余数据量,例如模型参数、优化器状态和梯度。它通过将这些元素分配到各种训练过程中来实现这一点,从而在受限制的硬件设置中更有效地训练大型模型。
对于训练语言模型,混合精度训练与 Adam 优化器的组合已成为标准。Adam 优化器根据每个参数梯度的第一和第二矩动态调整学*率。根据图 6.11,在训练阶段,ZeRO 将存储空间划分为模型状态和残差状态。模型状态包括模型参数(fp16)、模型梯度(fp16)和 Adam 状态,其中包含模型参数的 fp32 备份以及 fp32 的第一和第二矩。如果模型参数的总数量是Φ,那么存储需求是 2Φ+2Φ+ (4Φ+4Φ+4Φ)=4Φ+12Φ=16Φ字节,其中 Adam 状态占整个的 75%。残差状态包括激活值、各种临时缓冲区和无法有效利用的 VRAM 片段。

图 6.11 混合精度训练迭代。
该图说明了神经网络训练过程。它从核心权重(F32)开始,这些权重被转换为 float2half。FP16 中的权重用于前向传播以产生 FP16 的激活。然后,这些激活用于反向传播 - 激活以生成 FP16 的激活梯度。权重和激活梯度用于反向传播 - 权重来产生 FP16 的权重梯度。然后,权重梯度与核心权重(F32)一起用于权重更新,以在 FP32 中更新核心权重。
ZeRO 通过在进程间分配模型状态——参数、梯度和优化器状态——而不是复制它们来减少数据并行过程中的内存冗余。它在训练期间采用动态通信策略,有效地在设备间分配必要的状态,这有助于平衡计算粒度需求与数据并行通信需求。使用 ZeRO,每个设备的内存使用量与数据并行程度线性增加,通信量也反映了这种可扩展性。只要集群中的设备有足够的内存来共享模型状态,ZeRO 可以处理任何大小的模型。
图 6.12 展示了 ZeRO 的三层系统,其中每一层代表模型状态分区程度的逐渐增加:
-
• ZeRO-1:这一级别将优化器状态进行分区。
-
• ZeRO-2:这一级别将分区扩展到优化器状态和模型梯度。
-
• ZeRO-3:这一最高级别将优化器状态、模型梯度和模型参数进行分区。

图 6.12 展示了 ZeRO 三个级别的内存节省和通信量。
该表包含五列:未命名的列、gpu0、gpu1、gpuN-1、内存使用量和通信量。其内容如下:第 1 行。基线:(2 加 2 加 K) 乘以 psi,120GB,1 次。第 2 行。POS:2 乘以 psi 加 2 乘以 gamma 加 K 乘以 psi 除以 Nd,31.4GB,1 次。第 3 行。POSplusg:2 乘以 psi 加 (2 加 K) 乘以 psi 除以 Nd,16.6GB,1 次。第 4 行。POSplusgplusp:(2 加 2 加 K) 乘以 psi 除以 Nd,1.9GB,1.5 次。
ZeRO 论文不仅量化了每个级别的潜在内存节省,而且还指出前两级不会增加通信开销,而第三级将通信成本提高了约 50%。此外,ZeRO 优化了残差状态,包括激活值、临时缓冲区和 VRAM 片段,尽管这里没有详细说明这种优化的具体方法。
ZeRO 使用分区和检查点技术的组合来处理激活值。在模型传播的前向阶段,检查点保留某些中间变量,以帮助在后向阶段进行梯度计算。这种方法本质上是在更高的存储需求之前选择增加计算任务。例如,在矩阵乘法 C=A · B 中,A 和 B 的梯度计算如下:
\(MathML\) (6.2)
(6.2)
存储变量 A 和 B 用于反向传播需要占用相当大的内存。检查点的关键在于仅保留特定检查点处的梯度,这些点之间的梯度在反向传播过程中通过重新执行正向操作进行重新计算。这种方法有效地将存储需求替换为额外的计算。
关于临时缓冲区,模型训练过程需要创建各种大小的缓冲区,例如用于梯度 All-Reduce 操作的缓冲区。一个实际的解决方案是在一开始就建立一个固定大小的缓冲区,这可以防止在训练期间动态创建缓冲区。此外,对于较小的数据传输,将多个数据集有效地分组到桶中,以便同时传输,可以提高性能。
VRAM 片段化通常源于频繁创建和删除未存储的梯度,这是采用梯度检查点的一个后果。缓解这一问题的实际方法是提前分配一个连续的 VRAM 段。该段用于存储需要持续保留在内存中的模型状态,以及检查点中的值,而其余的 VRAM 可用于动态处理过时的激活值。
ZeRO-Offload 是一种技术,它将部分计算工作负载和模型参数从 GPU 的 VRAM 转移到 CPU 的内存。CPU 在处理任务中的这种参与大大减少了 GPU VRAM 的需求,使得使用有限的硬件训练更大的模型成为可能。
为了抵消 GPU 和 CPU 之间潜在的通信开销以及 CPU 通常较低的计算速度,ZeRO-Offload 策略性地分配计算任务。通过分析 Adam 优化器在 fp16 模式下的性能,它有选择地将需要计算的参数放置在 CPU 上,而将其他部分保留在 GPU 上。通常,它将更新模型的任务委托给 CPU,有效地将 CPU 转变为参数服务器。为了进一步提高效率,如图 图 6.13 所示,ZeRO-Offload 并行运行通信和计算任务,从而减少通信延迟对整体计算工作流程的影响。

图 6.13 为通信和计算的进程并行性图。
该图说明了神经网络中前向传播、反向传播和参数更新的过程。在左侧,过程未指定硬件,从激活值 16 开始,经过前向传播,得到另一个激活值 16。此值随后用于反向传播,产生梯度值 16。梯度值用于参数更新过程,涉及参数值 32、动量值 32 和方差值 32。数据流包括 2M 用于前向传播、2M 用于反向传播和 2M 用于梯度值。参数更新过程涉及 12M 用于参数值、12M 用于动量值和 12M 用于方差值。图的右侧指定了硬件,GPU 处理前向传播和反向传播,CPU 处理参数更新。GPU 部分显示前向传播和反向传播,激活值为 16,产生梯度值为 16。数据流包括 4M 用于参数值和 2M 用于梯度值。CPU 部分显示更新超节点,参数值为 32、动量值为 32 和方差值为 32。参数更新过程涉及 12M 用于参数值、12M 用于动量值和 12M 用于方差值。图中还显示了 float2half 过程,将参数值 16 转换为 2M。
在反向传播的背景下,GPU 被设计用来填充一个存储“桶”以存放梯度。当它计算新的梯度时,它会同时将这些桶发送到 CPU。当反向传播结束时,CPU 通常已经更新了梯度。同样,在参数更新期间,CPU 高效地将更新后的参数传回 GPU,确保持续同步,如图 图 6.14 所示。

图 6.14 ZeRO-Offload 在单个 GPU 上的训练过程。
图表说明了在步骤 i 和步骤 i+1 期间 GPU 和 CPU 之间的计算和交换流程。在步骤 i 中,GPU 上发生正向传播和反向传播,随后在 CPU 上进行更新。交换流程显示了数据从 GPU 卸载到 CPU(g Unload)以及从 GPU 交换到 CPU(p Exchange)。在步骤 i+1 中,GPU 上再次发生正向传播和反向传播。
ZeRO-Infinity 实际上是 ZeRO 阶段-3 的增强版本,它利用了非易失性内存表达(NVMe)技术。这个系统使得所有模型参数不仅可以卸载到 CPU,还可以卸载到 NVMe 存储。利用 NVMe 协议的能力,ZeRO 可以进一步利用固态硬盘,这有助于大幅减少内存需求并提高数据传输速度。
6.5 训练策略示例
自从 GPT-3 发布以来,OpenAI 选择保持其技术的私密性。然而,其他与 GPT-3 大小相似的模式,如 OPT、PaLM 和 BLOOM,在它们的学术论文中公开分享了它们的训练策略。这些文件提供了宝贵的见解,了解它们在训练前如何准备数据,选择架构,设置训练参数,以及管理其他确保训练顺利运行并有效达到目标的关键元素。
6.5.1 训练框架
训练大型语言模型通常涉及复杂的技巧,如模型并行化,包括张量并行和流水线并行等方法,以及高级分布式优化方法如 ZeRO。例如,OPT 使用 ZeRO 的 FSDP 和 Megatron-LM 的模型并行化方法。BLOOM 使用 ZeRO 的 Deepspeed 以及 Megatron-LM 的模型并行化策略。另一方面,PaLM 采用一个名为 Pathways 的系统,该系统在 TPU 技术上结合了模型和数据并行化。虽然 GPT-3 训练系统的具体细节尚未完全公开,但已知它包含某种形式的模型并行化。
6.5.2 参数稳定性
在 OPT 和 PaLM 等模型训练过程中保持参数的稳定性对于它们的成功至关重要。对于 OPT 来说,频繁的调整,如改变梯度范数、学*率和优化器,以及从最新的检查点重新开始训练,都被采取。这些持续的变化可能阻碍了 OPT 达到其全部潜力。另一方面,PaLM 采取了一种更一致的策略。它只在损失突然增加前大约 100 步的检查点重新开始训练,并跳过了大约 200-500 批次的数据。这种最小干预的方法帮助 PaLM 取得了显著的结果。
6.5.3 优化训练设置
优化训练设置对于稳定的模型训练至关重要。例如,PaLM 通过各种改进提高了其稳定性,包括使用改进的 Adafactor 优化器版本、调整 softmax 函数之前的 logits、添加有助于保持归一化接*零的辅助损失、为词向量和层权重使用不同的初始化方法、在某些层中省略偏差,以及在预训练期间避免 dropout。像使用 DeepNorm 进行后层归一化和限制词向量层中的梯度流动等技术进一步稳定了大型模型训练。另一方面,OPT 和 BLOOM 没有采用这些高级方法,这可能解释了为什么它们在训练稳定性和整体性能方面落后于 PaLM。
6.5.4 BF16
在模型训练中,稳定性常常会受到围绕训练系统和硬件的选择的影响。在这个领域的一个重要决定是使用 bfloat16(BF16)来存储模型权重和激活,这是关键,因为它比 FP16 更好地处理大数,尤其是在损失激增时,因为它与 FP32 具有相同的指数大小。尽管有这些好处,FP16 的容量限制仍然可能导致问题,通常需要模型保持权重较小以避免频繁溢出,这在大型模型中尤其是一个挑战(图 6.15)。

图 6.15 浮点格式图。
浮点格式 BF16:脑浮点格式 指数:8 位 有效数字(尾数):7 位 范围:大约 1e -38 到大约 3e 38 FP32:单精度 IEEE 浮点格式 指数:8 位 有效数字(尾数):23 位 范围:大约 1e -38 到大约 3e 38 FP16:半精度 IEEE 浮点格式 指数:5 位 有效数字(尾数):10 位 范围:大约 5.96e -8 到 65504.
BF16 和 FP16 占用相同的空间(2 字节),但 BF16 可能不够精确。在实践中,无论使用 BF16 还是 FP16,都会保留一个 FP32 权重的版本以帮助优化更新。16 位格式主要用于计算,更新在完全精度的 FP32 下进行,然后再转换回用于下一个处理周期的格式。
然而,GPU 通常更喜欢 FP16,如 NVIDIA 的 V100,它默认使用混合精度训练。OPT 选择 FP16 可能是其训练不稳定的原因之一。同时,BLOOM 通过切换到 BF16 来解决了 FP16 中的不稳定问题,这改善了其训练过程。
6.5.5 其他因素
虽然不总是主要因素,但某些选择可以显著影响语言模型的整体性能。例如,PaLM 和 GPT-3 在训练过程中逐渐增加了它们的批量大小——这是一种已知可以提升大型语言模型性能的策略。相比之下,OPT 和 BLOOM 保持批量大小不变。所使用的激活函数类型也起着作用;OPT 使用 ReLU,而 PaLM 采用 SwiGLU,GPT-3 和 BLOOM 则更喜欢 GeLU。通常,GeLU 和 SwiGLU 在此类模型中表现出更好的性能。
在处理较长的序列时,这些模型在如何编码位置信息方面也存在差异。PaLM 使用旋转位置嵌入,BLOOM 应用 ALiBi,它根据距离而不是直接嵌入位置来偏置注意力分数,而 GPT-3 和 OPT 使用可学*的相对位置编码。这些选择可能会影响模型管理长序列的效果。这些例子突出了各种因素如何共同影响模型在预训练阶段的整体有效性。
6.6 总结
本章深入探讨了 LLM 的预训练策略。它从对预训练数据集的构建和选择进行批判性分析开始,强调了数据的多样性和质量在这些模型性能中的关键作用。它还讨论了数据清理、去重和增强等方法,这些方法是提高模型泛化能力和保持稳定性的关键。
在讨论分布式训练时,本章重点介绍了可以显著减少训练时间并节省计算资源的数据和模型并行策略。它详细介绍了 Pathways、Megatron-LM 和 DeepSpeed Zero 等工具,这些工具对于高效的分布式训练设置至关重要。
本章以大型 NLP 模型的训练策略为例,讨论了围绕训练框架、模型架构调整、训练设置和优化(如使用 BF16)的选择。这些策略对于管理诸如损失突然增加等挑战以及确保模型平稳收敛至关重要。
尽管分析主要基于其他类似规模的大型 NLP 模型的信息,但讨论的策略和方法具有广泛的适用性,并为优化 ChatGPT 等模型的前训练过程提供了有价值的见解。随着计算能力的增长和新创新方法的涌现,我们可以期待在 LLM 的前训练策略方面有更多的突破。
第七章 *端策略优化
摘要
本章全面概述了*端策略优化(PPO),这是一种强化学*中的策略梯度方法,它侧重于在线学*。本章首先介绍了传统的策略梯度方法,强调它们使用实时数据直接优化策略的直接方法。然后探讨了 Actor-Critic 框架,该框架将策略梯度与价值函数*似相结合,以稳定学*。作为增强,讨论了信任区域策略优化(TRPO),它通过在策略空间中设置“信任区域”来稳定学*,在这个区域内更新可以安全发生,而不会因过度变化而导致不稳定。PPO 通过在其目标函数中引入剪辑机制,确保了稳定且高效的策略更新,无需复杂的 Kullback-Leibler(KL)散度约束。本章最后强调了 PPO 在各种应用中的有效性,同时承认其局限性,这为进一步的研究和创新提供了机会。
关键词
*端策略优化;策略梯度;Actor-Critic;信任区域策略优化;强化学*;在线学*;剪辑机制;稳定性;收敛
*端策略优化(PPO)作为一种策略梯度方法,因其侧重于在线学*而与众不同,与深度 Q 网络等流行的强化学*技术不同。策略梯度方法与其他依赖于重放过去经验的方法不同,它们直接从代理在其环境中收集的实时数据中学*。Actor-Critic 框架通过使用价值函数,即 Critic,来引导策略,即 Actor,以实现更稳定和高效的学*结果。在这个框架中的一种特定增强是信任区域策略优化(TRPO),它通过在策略空间中设置“信任区域”来稳定学*,在这个区域内更新可以安全发生,而不会因过度变化而导致不稳定。
PPO 算法建立在 TRPO 的基础上,通过限制所谓的 PPO 中更新幅度的范围,确保新策略与旧策略保持相似。这种方法为解决强化学*中的复杂任务开辟了新的途径。它在自然语言处理领域表现出特别的功效,被用于微调像 ChatGPT 和 InstructGPT 这样的巨无霸模型。本章从策略梯度法和 Actor-Critic 方法的基本原理出发,探讨了 PPO 的历程和优点,直至更高级的 TRPO 和 PPO。
7.1 传统策略梯度方法
7.1.1 策略梯度方法的原则
策略梯度方法是一组关键的强化学*算法,它们直接关注改进策略。这些方法通过与环境交互帮助智能体找出最佳策略。这里的主要概念是通过调整策略参数以符合策略梯度——本质上是一个表明如何改变策略以在一段时间内获得最大奖励的方向。在实践中,策略将不同的情境(状态)映射到动作。为了管理这种映射,策略梯度使用神经网络,如深度神经网络,通过跟踪和调整这些梯度来模拟和增强策略。
考虑一个由参数 \(MathML\)
决定的策略 \(MathML\)
,其中 s 表示状态,a 表示动作,\(MathML\)
表示策略参数。策略梯度方法旨在找到最佳参数集 \(MathML\)
,以最大化预期奖励。这些方法通常使用一个旨在最小化负预期奖励的损失函数,如下公式所示:
\(MathML\) (7.1)
(7.1)
其中 \(MathML\)
指的是神经网络参数,T 是最大时间步数,γ 是折扣因子,用于降低未来奖励的价值,\(MathML\)
是在时间 t 选择动作 \(MathML\)
在状态 \(MathML\)
中获得的奖励。目标是找到使这个损失尽可能小的 θ 值(从而最大化预期奖励)。这是通过计算策略梯度来实现的,即预期奖励如何随着 \(MathML\)
的微小变化而变化。用于此的方法是梯度上升,其中参数更新方向是增加预期奖励:
\(MathML\) (7.2)
(7.2)
该方程展示了如何计算梯度 \(MathML\)
,它告诉我们如何调整我们策略的参数 \(MathML\)
以最大化奖励。在这里,\(MathML\)
和 \(MathML\)
分别代表在每个时间步 t 所采取的动作和观察到的状态。为了找到这个梯度,智能体与其环境交互,收集关于各种“轨迹”的数据,每个轨迹是一系列状态、动作和奖励。分析这些轨迹提供了策略梯度的准确度量。然后,这个洞见被用来调整策略参数 \(MathML\)
,有效地教会智能体随着时间的推移做出更好的决策。例如,一个轨迹,用 \(MathML\)
表示,捕捉了智能体的状态、动作和奖励如何随着它与环境的交互而随时间演变。它表示为
\(MathML\) (7.3)
(7.3)
如 图 7.1 所示,通过了解智能体(或演员)的策略参数 θ,我们可以计算任何给定轨迹 τ 的可能性。这个概率反映了智能体的决策,基于其在特定状态下的具体动作,如何随时间发展。轨迹中的每个状态和动作都是通过从智能体的动作概率分布 \(MathML\)
和从过渡到新状态的概率 \(MathML\)
中采样来确定的。这个模型帮助我们理解和预测智能体在各种场景中的行为。
\(MathML\) (7.4)
(7.4)
图 7.1 智能体与环境交互中奖励值的累积。
该过程从环境向智能体提供状态 S sub 1 end sub 开始。智能体随后采取动作 a sub 1 end sub,这导致奖励 r sub 1 end sub。智能体更新,环境提供下一个状态 S sub 2 end sub。智能体采取动作 a sub 2 end sub,导致奖励 r sub 2 end sub。这个过程继续进行,环境提供状态 S sub 3 end sub。底部的方程显示了 R sub theta end sub 的计算,它是 R left parenthesis tau right parenthesis p sub theta end sub left parenthesis tau right parenthesis 的和,等于 E sub tau tilde p sub theta end sub left parenthesis tau right parenthesis left bracket R left parenthesis tau right parenthesis right bracket。R left parenthesis tau right parenthesis 定义为从 t 等于 1 到 T 的 r sub t end sub 的总和。
在一个智能体在相同的策略参数 \(\theta\) 下操作的场景中,它可以产生多个轨迹。每个轨迹 \(\tau\) 都有一个特定的发生概率。通过计算所有这些概率的加权总和,以及它们相关的奖励,我们推导出期望值:
\(MathML\) (7.5)
(7.5)
为了*似这个计算,我们使用蒙特卡洛方法:
\(MathML\) (7.6)
(7.6)
然后使用梯度上升法更新参数,其中 \(MathML\)
通过添加学*率 \(MathML\)
乘以梯度 \(MathML\)
来调整。学*率本身可以使用 Adam 或 RMSProp 等方法进行调整:
\(MathML\) (7.7)
(7.7)
策略梯度方法之所以突出,是因为它们直接优化策略,而不需要估计动作或状态值函数,这在具有高维连续动作空间和复杂动态的环境中尤其有益。
7.1.2 重要性采样
在策略梯度方法中,重要性采样起着至关重要的作用,尤其是在更新策略参数之前有效使用之前收集的数据时。重要性采样的主要目的是从一个分布(目标策略)估计另一个分布(参考策略)的期望值。如图 图 7.2 所示,在策略更新期间,我们可以使用重要性采样从旧策略的轨迹中抽取,以估计在新策略下期望回报可能的样子。这种方法节省了通常用于收集新样本的时间和计算资源。

图 7.2 策略梯度方法中的重要性采样。
在左侧,它显示了策略 \(\pi_{\theta}\) 结束下标 \(\tau\) 上标 1 结束上标和 \(\tau\) 上标 2 结束上标,每个包含一对 \(s_{1}\) 结束下标,\(a_{1}\) 结束下标和 \(s_{2}\) 结束下标,\(a_{2}\) 结束下标,随后是 \(R\) 左括号 \(\tau\) 上标 1 结束上标 右括号和 \(R\) 左括号 \(\tau\) 上标 2 结束上标 右括号。这些数据仅使用一次。在右侧,它显示了更新模型的过程,其中 \(\theta\) 左箭头 \(\theta + \eta \nabla \bar{R}_{\theta}\)。梯度 \(\nabla \bar{R}_{\theta}\) 是通过计算 \(1\) 除以 \(N\) 的求和,从 \(n\) 等于 \(1\) 到 \(N\) 的求和,从 \(t\) 等于 \(1\) 到 \(T_{n}\) 的求和 \(R\) 左括号 \(\tau\) 上标 \(n\) 结束上标 右括号,然后是 \(\nabla \log p_{\theta}\) 左括号 \(a_{t}^{n}\) 垂直线 \(s_{t}^{n}\) 结束下标 右括号。该图显示了数据采样和模型更新之间的流程。
具体来说,在这些方法中,我们关注的是在新目标策略下状态-动作对的预期回报 \(MathML\)
。当策略参数从 \(MathML\)
变为 \(MathML\)
时,同一状态 s 中动作 a 的概率将从 \(MathML\)
转变为 \(MathML\)
。为了继续使用相同的轨迹 τ,我们需要使用以下公式重新计算其预期回报 \(MathML\)
:
\(MathML\) (7.8)
(7.8)
这种策略允许重用参考策略 πθ 的轨迹,通过重要性采样来估计新目标策略 π(θ)' 下的预期回报。在现实世界的应用中,这意味着我们可以在每次发生变化时无需收集新数据,就可以使用现有轨迹来更新策略,从而提高效率。
然而,当目标和参考策略相当不同时,重要性采样的估计可能会表现出高方差。这是因为轨迹必须加权,而这些权重可能差异很大。此外,环境的不可预测性和策略的变化可能导致估计回报高度可变。这种可变性可能导致梯度计算的不稳定,从而阻碍学*过程。此外,由于策略梯度方法依赖于从策略中采样的轨迹,这些轨迹往往具有很强的相关性,这也可能对梯度估计的高方差做出贡献,影响算法的稳定性和收敛性。
为了解决这些问题,实践中通常使用优势函数来帮助减少方差。优势函数评估在给定状态下选择特定动作相对于平均回报的收益。通过减去平均回报,我们得到一个更稳定的优势估计,这有助于减少重要性采样中的方差并增强梯度计算的不变性。然而,在现实世界的应用中,准确估计优势函数仍然是一个挑战。
7.1.3 优势函数
在策略梯度方法中,研究人员使用一种称为优势函数的东西来提高学*效率和稳定算法。优势函数评估在给定状态下,特定动作相对于当前策略的平均结果的优劣。本质上,它有助于识别在特定情况下选择特定动作的额外收益。优势函数,表示为 \(MathML\)
,定义为
\(MathML\) (7.9)
(7.9)
其中 \(MathML\)
是动作值函数,表示在策略 π 下,在状态 s 中采取行动 a 的预期总奖励。\(MathML\)
,另一方面,是状态值函数,它估计在策略 π 下状态 s 中的预期总奖励。因此,优势函数量化了特定行动 a 相比于在策略 π 下该状态通常预期的行动,其额外带来的好处。
一旦我们包含了优势函数,我们就可以更新计算策略梯度的方法:
\(MathML\) (7.10)
(7.10)
引入优势函数有助于减少仅依赖于原始奖励信号所带来的方差,提高了我们梯度估计的稳定性和准确性。这种改进发生是因为优势函数去除了与状态值函数相关的成分,使我们能够更多地关注不同行动的相对好处。
使用优势函数,策略梯度方法可以更快地识别和优化有效行动,从而加快整体学*过程。
然而,虽然优势函数提供了明显的优势,但计算它需要估计动作值函数,\(MathML\)
,以及状态值函数,\(MathML\)
,这增加了计算复杂性。
7.2 Actor-Critic
如图 7.3 所示,Actor-Critic 算法是一种结合了策略梯度方法和值函数*似的强化学*方法。使该算法与众不同的地方在于它如何分配责任:Actor 制定策略,Critic 评估这些策略的有效性。

图 7.3 Actor-Critic 算法。
其组成部分包括动作轨迹、环境、Actor、Critic 和策略梯度。动作轨迹导致实践,与环境交互。环境向 Actor 发送信息,Actor 根据状态(a|s)更新给定的行动。Actor 以神经网络结构表示。环境还向 Critic 发送信息,Critic 根据状态更新 Q(s,a)。Critic 也以神经网络结构表示。Critic 将 Q(s,a) 发送到策略梯度,然后进行更新。这些组件之间的信息流由连接这些组件的箭头表示。
策略梯度方法本身往往在梯度估计中存在高方差,这可能导致学*不稳定。Actor-Critic 方法通过引入 Critic 来学*和提供价值函数来解决这一问题,该价值函数作为可靠的基线,有助于计算更稳定的策略梯度。
虽然传统的策略梯度方法通常使用蒙特卡洛方法来计算回报,这虽然准确但具有变异性,而 Actor-Critic 方法通过使用值函数来估计回报,以牺牲轻微的偏差为代价来降低方差。这种妥协使得 Actor-Critic 方法在训练期间更加稳定。
在这个设置中,Actor 和 Critic 都使用像神经网络这样的函数逼*器进行建模。Actor 使用参数化的策略 \(MathML\)
来决定行动,其中 \(MathML\)
是策略参数。另一方面,Critic 使用参数化的值函数 \(MathML\)
来评估不同状态下的预期总奖励,其中ψ是其参数。这种 Actor 和 Critic 之间的合作帮助智能体更好地管理探索新行动和利用已知策略之间的权衡,从而提高整体学*效率。
7.2.1 算法步骤
Actor-Critic 算法遵循以下基本步骤:
首先,初始化了策略(\(MathML\)
)和值函数(\(MathML\)
)的参数。
在每个训练周期中,采取以下行动:
-
a. 从起始状态开始,并使用策略 \(MathML\)
来决定一个行动。 -
b. 然后执行选定的行动,这会导致接收下一个状态 \(MathML\)
和奖励 r。 -
c. Critic 按照以下方式计算值函数的时序差分(TD)误差:
\(MathML\)
![Equation]()
在这里,\(MathML\)
代表折扣因子,它调整未来奖励的重要性。 -
d. 使用 TD 误差 \(MathML\)
来细化 Critic 的参数 \(MathML\)
。 -
e. 同样的 TD 误差 \(MathML\)
也被用作优势函数的代理来更新 Actor 的策略参数 \(MathML\)
:\(MathML\)
其中 \(MathML\)
是学*率。 -
f. 如果周期结束,那么就是下一个周期的时间;否则,更新状态到 s′ 并重复从 a 到 f 的步骤。
7.2.2 值函数和策略更新
在 Actor-Critic 算法中,值函数与策略的更新方式密切相关。Critic 的作用是学*值函数以评估当前策略在各个状态下的预期总奖励。同时,Actor 使用值函数的见解来细化策略。这种动态交互主要通过以下方式展开:
-
- 优势函数估计:Actor 使用此函数,该函数依赖于 Critic 的价值函数,以指导更新,使策略学*更加稳定和高效。
-
- TD 误差作为学*信号:Actor 使用 Critic 计算的 TD 误差来衡量实际经验与价值函数预测的预期结果之间的差异,这有助于微调策略。
-
- 自适应探索和利用:Critic 的见解允许 Actor 根据当前的价值评估,智能地调整其探索新动作和利用已知奖励动作的策略。
-
- 双重学*过程:Actor 和 Critic 同时学*——Actor 学*策略,Critic 学*价值函数。这种双重方法不仅加快了学*速度,而且通过减少策略更新的变异性来增强稳定性。
7.2.3 问题与挑战
虽然 Actor-Critic 算法解决了传统策略梯度方法的许多局限性,但它仍然面临几个挑战:
-
- 双重网络训练的稳定性:Actor 和 Critic,每个都使用自己的神经网络模型进行训练,必须同时管理,这可能导致训练不稳定。Critic 的不准确的价值评估可能会在策略更新中误导 Actor。
-
- 探索策略问题:尽管该算法可以适应其探索策略,如添加噪声,但这些在更复杂的情况下可能并不有效。
-
- 超参数调整挑战:该算法需要仔细调整多个参数,如学*率和折扣因子,以优化性能。在现实世界的设置中,找到正确的参数集可能具有挑战性和耗时。
-
- 样本复杂性问题:与简单的策略梯度方法相比,Actor-Critic 仍然需要大量的训练样本,这在实际环境中可能成本高昂且不切实际。
7.3 信任区域策略优化
TRPO 在 Actor-Critic 算法的基础上扩展,以解决传统策略梯度方法和基本 Actor-Critic 方法中看到的策略更新的不稳定性。TRPO 的关键特性是其对策略更新范围的限制,确保变化保持在定义的“信任区域”内。这种方法显著提高了策略学*的稳定性和收敛性,使其更加可靠和有效。
7.3.1 优化目标
TRPO 不仅旨在增强策略改进,而且通过限制新旧策略之间的 KL 散度(概率分布相似性的度量)来控制变化。如图 7.4 图 所示,通过保持 KL 散度在特定范围内,TRPO 避免了策略的剧烈变化,这有助于在更新过程中保持稳定性。

图 7.4 KL 散度。
左侧图表显示了两个标记为 p(x) 和 q(x) 的概率分布曲线。x 轴的范围从负 4 到正 4,而 y 轴的范围从 0 到 0.4。p(x) 曲线(蓝色)在负 1 附*达到峰值,而 q(x) 曲线(紫色)在正 1 附*达到峰值。右侧图表展示了这两个分布之间的 Kullback-Leibler (KL) 散度 D_KL(P||Q)。其 x 轴同样从负 4 到正 4,y 轴的范围从负 0.1 到 0.4。KL 散度由曲线下的填充区域表示,大部分为正值,但有一个小的负值区域。三条箭头从左侧图表指向右侧,表明 KL 散度是通过比较这两个概率分布得出的。该图像与信任区域策略优化 (TRPO) 的概念相关,该优化在更新过程中使用 KL 散度来限制策略变化,从而保持学*过程的稳定性。
在每次更新期间,TRPO 解决一个约束优化问题:
最大化:
\(MathML\) (7.11)
(7.11)
在约束条件下:
\(MathML\) (7.12)
(7.12)
其中,“E[·]”表示期望,“\(MathML\)
”是旧策略下的值,“KL(·)”是 KL 散度,“\(MathML\)
”是一个预定义的阈值。通过解决这个优化挑战,TRPO 确保策略更新既有效又稳定。
将 KL 散度纳入更新过程可以防止不稳定的更新并增强学*稳定性。此外,通过管理更新的幅度,TRPO 避免了忽略最优解,从而提高了收敛性。这种策略导致稳健的更新,即使在复杂场景和噪声环境中也是可靠的。
7.3.2 局限性
虽然 TRPO 在许多领域表现出色,但它并非没有挑战:
-
- 计算复杂性:TRPO 通过约束优化控制策略更新,每个都需要解决复杂问题。这种对高计算能力的需求可能在大型或实时场景中成为一个限制因素。
-
- 需要二阶导数:该算法需要计算二阶导数,如 Hessian 矩阵,特别是使用共轭梯度等方法。对于大型神经网络,这种计算可能特别密集。
-
- 超参数调整:尽管 TRPO 相对稳定,但仍需要微调超参数,例如 KL 散度阈值 δ,这在实践中可能是一个繁琐且耗时的任务。
-
- 处理离散动作:虽然对于连续动作空间有效,但 TRPO 在离散动作设置中的性能下降。这主要是由于其保守的更新,这是由 KL 散度的限制所要求的,在离散场景中可能不是最优的。
总体而言,TRPO 引入 KL 散度约束提高了策略更新的稳定性、收敛性和鲁棒性,从而在许多强化学*任务中取得了显著改进。然而,其计算需求以及其他挑战带来了明显的限制。
7.4 *端策略优化算法的原则
PPO 旨在通过更新策略来提高代理性能,从而避免早期方法的陷阱。与传统的策略梯度方法不同,PPO 引入了一个具有裁剪机制的目标函数,确保策略更新不会偏离当前策略太远,从而通过绕过 TRPO 典型的复杂 KL 散度约束来简化过程。
实际上,PPO 使用两个线程运行:一个与环境交互以生成数据,而另一个使用这些数据通过 PPO 特定的目标函数来训练策略网络。这种方法已被证明具有竞争力,在许多任务中通常优于 TRPO。
PPO 的有效核心在于其损失函数,它由三个部分组成:
- 1. 裁剪目标函数:这部分旨在优化策略以最大化期望回报。其工作原理如下:
\(MathML\) (7.13)
(7.13)
其中,“\(MathML\)
”表示时间步 t 的期望值,“\(MathML\)
”是新策略与当前策略之间概率比,而“\(MathML\)
”代表该状态下的估计优势。该函数同时使用标准的策略梯度目标,它促进具有高优势的动作,以及概率比的一个裁剪版本,其约束在\(MathML\)
和\(MathML\)
之间,其中\(MathML\)
通常设置在 0.2 左右。裁剪确保策略更新不会偏离原始策略太远,从而在探索和利用之间保持平衡。
2. 价值估计损失:该组件专注于细化价值函数,以提高其在估计状态值方面的准确性。它从数学上表示为
\(MathML\) (7.14)
(7.14)
其中,“V(st)”是价值函数对状态“st”的预测,而“V_ “target”代表实际观察到的回报。
3. 熵损失:该组件旨在提高策略的熵,促进更广泛的探索。它从数学上定义为
\(MathML\) (7.15)
(7.15)
其中,“\(MathML\)
” 表示在状态 “\(MathML\)
” 下选择动作 “\(MathML\)
” 的概率,\(MathML\)
” 代表策略网络的参数。
PPO 的整体损失函数将这些三个组件整合为一个加权总和:
\(MathML\) (7.16)
(7.16)
在这个背景下,\(MathML\)
和 \(MathML\)
作为超参数,本质上是对模型内部各个组件重要性进行平衡的调节旋钮。
PPO 算法的核心是一个称为剪裁 PPO 目标函数的战略组件。这个函数的核心是优势函数 \(MathML\)
,它衡量在给定状态 \(MathML\)
下,动作 \(MathML\)
相对于典型结果的优势程度。如图 7.5 所示,优势函数可以是正的,表明动作优于平均水平,或者负的,表明它更差。函数的图表相应变化:在优势为正的左侧,模型鼓励采取这些有益的行动;在优势为负的右侧,它阻止这些行动。

图 7.5 目标函数中不同值的 \(MathML\)
的图表。
左侧图表显示了大于零的优势函数,x 轴范围从 1 减去 epsilon 到 1 加上 epsilon,y 轴范围从 1 减去 epsilon 到 1 加上 epsilon。右侧图表显示了小于零的优势函数,具有相同的 x 轴和 y 轴范围。两个图表在 x 轴上都有 1 减去 epsilon、1 和 1 加上 epsilon 三个数据点,在 y 轴上也有 1 减去 epsilon、1 和 1 加上 epsilon 三个数据点。
在实际应用中,如果动作比率 \(MathML\)
过高,模型会将其损失曲线拉平,以表示在新策略下这些动作相比旧策略有更高的可能性。这个区域故意被截断,以防止模型过度根据这些数据进行调整,从而调节这种更新的影响。当动作产生负面结果时,随着动作比率接*零,模型会拉平这个函数,反映它们在当前指南下的不可能性,并防止可能使这些动作归零的剧烈变化。
需要记住的一个关键方面是,优势函数可能会产生噪声;因此,仅基于这些数据对策略进行大规模更改是不被鼓励的。在最极端的情况下,之前的更新显著增加了动作的可能性并降低了整体策略,这时需要通过 PPO 的功能实现可能的回滚。在这种情况下,负梯度有助于通过降低这些动作的可能性来重新校准策略,使调整与初始误判的规模相匹配。这种微妙的平衡行为确保策略自我优化,专注于最小化损失。
PPO 算法是由对目标函数行为有深刻理解的专家精心设计的,这对于制定特定的奖励函数至关重要。这种深入理解可能通过一系列详细的图表传达,在他们最终确定精确的目标函数以确保可靠系统操作之前。如果这个过程的具体细节看起来令人畏惧,不要担心——理解其本质就足够了。PPO 及其表亲 TRPO 都有一个共同的目标:它们使用保守的更新来防止对当前策略的重大偏差。然而,PPO 通过采用简化的目标函数脱颖而出,避免了计算额外的约束或 KL 散度的需要。这种简单性已被证明使 PPO 在 TRPO 更复杂的机制上具有优势。
现在,让我们探讨 PPO 是如何工作的。它在一个交替的两个阶段循环中运行。最初,策略与环境交互,生成数据轨迹,这些轨迹立即被使用定制基线模型进行分析,以估计状态值并计算优势函数。随后,第二个阶段使用这些轨迹通过将优势函数整合到 PPO 的简化目标函数中的策略梯度方法来更新策略。基线估计器,通常是一个神经网络,也会更新以提高其准确性。这种迭代过程——在收集数据和更新策略之间切换——会持续进行,直到达到某些目标,如特定的迭代次数或性能基准。
PPO 的优点,尤其是其稳定性、适应性和简单的设计,使其成为机器人学和游戏 AI 等复杂应用的优选方案。该算法巧妙地平衡了保守的更新与高效的数据使用,以优化策略调整。
尽管 PPO 取得了成功,但它也面临挑战,尤其是在奖励稀疏或设置复杂的情况下。解决这些问题导致研究人员将复杂策略,包括分层学*框架和预测控制,集成到 PPO 架构中。正在研究的新颖创新,如自适应剪辑和可变学*率,也被用来进一步提高 PPO 的性能。
7.5 摘要
本章深入探讨了包括策略梯度方法、Actor-Critic、TRPO 和 PPO 在内的多个策略优化算法,通过理论与实践的见解相结合,丰富了读者的理解。在这些算法中,PPO 因其稳健的有效性和广泛的应用性,在强化学*领域特别受到推崇。以其简单性和稳定性著称的 PPO,在各种场景中表现出卓越的性能。尽管如此,它在某些方面的局限性也为未来的研究提供了广阔的机会,目标是进一步推动算法能力的边界。
第八章 人类反馈强化学*
摘要
本章深入探讨了人类反馈强化学*(HFRL)在精炼和优化 GPT 模型,特别是 ChatGPT 和 InstructGPT 中的关键作用。本章首先解释了由人类反馈驱动的强化学*如何增强模型与人类期望的一致性。然后概述了 GPT 模型从 GPT-3 到 GPT-3.5 的演变,突出了 Codex 和 InstructGPT 等关键发展。本章详细介绍了 HFRL 的三个训练阶段——监督微调、奖励建模和强化学*——强调它们在提高模型性能中的重要性。讨论扩展到用于微调的数据集、标注者的选择和任务,以及多轮对话能力相关的挑战。最后,强调了 HFRL 作为使模型具备强大适应性和学*能力,这对于实现真正的人工智能至关重要。
关键词
人类反馈强化学*(HFRL);Codex;InstructGPT;监督微调;奖励建模;强化学*;*端策略优化(PPO);多轮对话;数据集标注
生成式预训练转换器(GPT)模型在关键的前训练阶段学*模仿其训练数据集的分布。这一阶段至关重要,因为训练数据的质量会显著影响这些模型生成的内容。为了提高内容质量,有必要以受控的方式使模型输出与人类期望相一致。“一致性”在这里指的是模型产生的结果与人类预期之间的匹配。这些期望不仅包括内容的流畅性和语法准确性,还包括其相关性、真实性和安全性。
强化学*通过奖励机制来指导模型训练,这个机制作为训练的优化目标。奖励是多样化的,可以有很大的变化,例如在 AlphaGO 中,奖励由游戏结果决定。在强化学*中,通过广泛采样奖励来估计优化目标,从而引导训练过程,因此人类反馈可以被视为一种奖励,引入了由人类反馈驱动的强化学*概念。
8.1 ChatGPT 中的强化学*
2020 年 5 月,OpenAI 推出了 Davinci API,拥有令人印象深刻的 1750 亿参数。此后,OpenAI 开始了两个重要的探索:Codex,专注于编码和推理,以及 InstructGPT,旨在更好地理解人类意图。从 GPT-3 到 GPT-3.5 的技术发展在图 8.1 中得到了展示。

图 8.1 从 GPT-3 到 GPT-3.5 的技术路线图。
它始于 GPT-3 的初始版本,分为两个分支:代码和推理分支导致 Codex 的初始版本(Code-davinci-001, Code-cushman-001)以及人类意图理解分支导致 InstructGPT 的初始版本(Instruct-davinci-beta, Text-davinci-001)。这两个分支最终都汇聚到 LMplusCode 训练然后指令调整,结果产生 Code-davinci-002。这进一步导致监督指令调整,分支到 Text-davinci-002 和 RLHF,然后导致 Text-davinci-003 和 ChatGPT。这些阶段被标记为 GPT-3 阶段和 GPT-3.5 阶段。
第一条路径专注于提升编码和推理能力。在这里,OpenAI 将 GPT-3 与编码训练相结合,创建了 Codex。2021 年 7 月,初始 Codex 模型发布,使用 159GB 的 Python 代码微调了原始的 GPT-3。这个模型最终演变成了现在在 OpenAI API 中被称为 code-cushman-001 的模型,展示了卓越的编码和推理技能。尽管其文本处理能力相对有限,但通过学*大量旨在解决数学推理挑战的代码,该模型在性能上有了显著提升。
第二条路径更深入地探索了理解人类细微差别。2017 年,谷歌率先在人类反馈强化学*(RLHF)中使用了强化学*。他们引入了一种方法,通过来自人类标注的反馈来增强涉及机器人和 Atari 游戏的模拟中的强化学*性能。
为了增强与人类意图的对齐,OpenAI 采用了 RLHF(强化学*与人类反馈)来优化 GPT-3,从而创造了 InstructGPT。使用 RLHF 的初步探索始于 2020 年的 GPT-3,尽管这些早期模型有时会产生不适当或危险的内容。直到 2022 年 3 月,在 InstructGPT 论文中详细描述,OpenAI 才有效地利用了 RLHF,引入了诸如 instruct-davinci-beta 和 text-davinci-001 等关键 API。
OpenAI 在这些领域的努力最终导致了 code-davinci-002(更多详情请参阅 OpenAI 的模型索引文档)。虽然 Codex 可能看起来仅专注于编码,但 code-davinci-002 可以被认为是自然语言处理(NLP)中最强大的 GPT-3.5 变体——甚至超过了 text-davinci-002 和-003。这可能是由于 code-davinci-002 在文本和代码上都进行了训练,并且为了指令对齐进行了精细调整。
2022 年 5 月发布的 text-davinci-002 模型是在基于 code-davinci-002 的监督指令下进行微调的。这种有针对性的微调可能降低了其上下文学*的能力,但显著提高了其零样本学*的能力。后来,在 2022 年 11 月,推出了 text-davinci-003 和 ChatGPT(gpt-3.5-turbo),作为通过基于人类反馈的强化学*进行微调的不同变体。text-davinci-003 重新获得了 text-davinci-002 部分失去的上下文学*能力,这可能是由于将语言模型整合到微调过程中,并且它进一步增强了理解文本意图、进行逻辑推理和进行因果分析的能力,得益于 RLHF。
2022 年 5 月发布的 text-davinci-002 模型是在基于 code-davinci-002 的监督指令下进行微调的。这种有针对性的微调可能降低了其上下文学*的能力,但显著提高了其零样本学*的能力。后来,在 2022 年 11 月,推出了 text-davinci-003 和 ChatGPT(gpt-3.5-turbo),作为通过基于人类反馈的强化学*进行微调的不同变体。text-davinci-003 重新获得了 text-davinci-002 部分失去的上下文学*能力,这可能是由于将语言模型整合到微调过程中,并且它进一步增强了理解文本意图、进行逻辑推理和进行因果分析的能力,得益于 RLHF。
ChatGPT 和 InstructGPT 具有相似的训练方法。ChatGPT 通过 RLHF 和大量编码示例的融入,特别是解决数学问题和代码注释的示例,其理解人类意图的能力得到了显著提升,这极大地增强了其在自然语言处理和代码生成方面的能力。尽管 ChatGPT 和 InstructGPT 之间的训练数据集存在一些差异,但它们的基础训练方法在很大程度上保持一致。下一节将以 InstructGPT 为案例研究,详细说明 ChatGPT|InstructGPT 使用的训练和评估策略,这些策略利用了来自人类反馈的强化学*。
8.2 InstructGPT 训练数据集
InstructGPT/ChatGPT 的训练结构围绕三个关键阶段:监督式微调(SFT)、奖励建模(RM)和强化学*(RL),分别对应其各自的数据库——SFT、RM 和 RL 数据库。在 SFT 阶段,标注员在样本中对提示进行手动响应。这一阶段需要相当程度的人类输入,并要求标注员具有高水平的专业知识。在奖励建模阶段,标注员对几个(4-9)模型生成的输出进行排名。尽管在这一阶段对标注员的要求不如前一阶段严格,但他们仍然必须熟悉评估标准,以确保排名符合预期标准,从而防止结果不一致。
8.2.1 微调数据集的来源
模型的微调数据主要来源于两个关键来源:
-
- 通过 OpenAI API 提交的提示,主要来源于 OpenAI 操场。当用户选择 InstructGPT 模型时,他们会收到通知,告知他们提交的提示可能有助于训练新模型版本的训练数据集。出于隐私和合规性的原因,实际产品的 API 数据未得到利用。API 数据排除了具有重复、长前缀的提示,并将每个用户的提示数量限制在 200 个以下,以保持多样性。数据集还按用户 ID 进行分割,以防止训练输入与验证和测试集中的输入重叠。此外,所有包含个人可识别信息的提示都系统地被排除,以保护用户隐私。
-
-
标注员制作的提示,分为三类:
-
a. 简单任务:标注员被要求创建简单的任务,确保涵盖各种任务。
-
b. 少样本任务:在这里,标注员为给定的提示开发多个(查询,响应)对。例如,对于“对这条推文进行情感分析”这样的提示,查询将是一条真实的推文,而响应将被分类为“正面”或“负面”。如果创建了 K 对,那么最初的 K-1 对将形成上下文。
-
c. 用户数据:这涉及从 OpenAI API 中提取用例并创建相应的提示,通常需要重写以满足标准化要求。这些类型被系统地分为 10 个不同的类别,具体细节见表 8.1。
-
表 8.1
根据用户数据的不同类型用例的分布和示例。
| 用例类型 | 百分比 | 示例 |
|---|---|---|
| 头脑风暴 | 11.2% | 我应该阅读的下一个 10 本科幻小说是什么? |
| 分类 | 3.5% | 使用以下文本,对这个人进行 1 到 10(1 = 完全不讽刺,10 = 极度讽刺)的讽刺程度评分,并提供解释:{文本} 评分: |
| 提取 | 1.9% | 从以下文章中提取所有地名: |
| 生成 | 45.6% | 这是收到的消息:{email} 回复的关键点如下:{message} 写一个详细的回复 |
| 改写 | 8.4% | 将以下文本改写得更简洁: |
| 聊天 | 6.6% | 这是与佛陀的对话。每个回答都充满了智慧和爱心。我:我如何获得更大的平静? |
| 特定问题 | 2.6% | 根据以下事实:{事实列表},告诉我氢和氦之间的区别 |
| 开放性问题 | 12.4% | 谁建造了长城? |
| 摘要 | 4.2% | 为二年级学生总结以下文本: |
| 其他 | 3.5% | 在谷歌上搜索“牛仔”并返回结果 |
通常,用于头脑风暴和开放式问答会话的提示较短,而用于对话和摘要的提示则通常较长。
8.2.2 标注标准
标注员的选拔标准基于两个关键方面:
-
- 在识别敏感内容方面保持一致性。研究团队已编制了一个包含敏感材料的语料库,每个条目包括一个提示及其完成部分。如果提示或完成部分中的任何部分包含与色情、政治、暴力等内容相关的信息,则将其归类为敏感内容。标注员负责判断内容的敏感性,以衡量他们的判断与研究团队的判断之间的吻合程度。
-
- 在评估模型输出质量方面保持一致性。使用 API 生成的提示和不同模型提供的各种响应,要求标注员根据质量对输出进行排名。然后评估标注员和研究人员的排名一致性,以确保质量评估的一致性。
标注员有以下主要职责:
-
- 设计提示。
-
- 对提示做出回应。
-
- 对同一提示的不同模型输出进行比较排名。
-
- 在评估阶段,将包含粗俗、色情或暴力内容的提示输入通过 PPO 训练的 InstructGPT 模型中,以评估输出的毒性和流畅性。
值得注意的是,任务(3)和(4)要求标注者评估内容的质量和毒性,并为他们提供明确的操作指南。
对于任务(3),高质量的输出必须满足三个标准:有用性、真实性、无害性。通常,真实性和无害性比有用性更重要。然而,如果一个输出“a”比输出“b”有用得多,并且其相对的有害性和不真实性不是过于严重——特别是如果它不涉及法律或医学等高风险领域——那么输出“a”被认为优于输出“b”。基本排序标准是人们期望对机器提出的问题的哪个输出。
对于任务(4),使用了两个主要指标:毒性,它决定了输出是否包含粗俗、不尊重或性暴力内容,在绝对和相对意义上都相对于提示的毒性进行评估;以及流畅性,它评估文本的连贯性和在数字环境中的自然存在。
在排名任务中,方法包括首先允许标注者根据既定标准独立对每个输出进行评分,然后集体展示所有输出以进行最终排名。这种方法防止了同时展示和排名的偏差,提高了评估的准确性。
8.2.3 数据分析
表 8.2 概述了每个数据集的来源和大小:
-
• SFT 数据集:由 API 和标注者共同提供的 13,000 个提示组成,对于训练 SFT 模型至关重要。标注者为这些提示提供相应的答案。确保 SFT 数据集中的每个条目都包含一个提示及其答案至关重要。
-
• RM 数据集:包含 33,000 个提示,该数据集由 API 和标注者共同贡献。在这里,标注者的任务是按顺序对模型输出进行排名,这些数据作为 RM 模型的训练集。
-
• PPO 数据集:由 31,000 个仅来自 API 的提示组成,没有标注,该数据集专门用于 RLHF 微调。
表 8.2
InstructGPT 的数据分布。
| SFT 数据 | RM 数据 | PPO 数据 |
|---|---|---|
| 段落 | 来源 | 大小 |
| --- | --- | --- |
| 训练 | 标注者 | 11295 |
| 训练 | 用户 | 1430 |
| 验证 | 标注者 | 1550 |
| 验证 | 用户 | 103 |
研究论文附录 A¹提供了关于用于 InstructGPT 训练的数据分布的详细讨论。本章强调了几个可能影响模型有效性的关键因素:
-
- 超过 96% 的数据是英文,其余不到 4% 的数据包括 20 种其他语言,如中文、法语和西班牙语。这表明,尽管 InstructGPT 能够处理多种语言的输入,但其对非英语输入的性能可能不太有效。
-
- 有九种不同的提示类型,主要是生成性任务。这表明模型可能没有完全准备好处理所有类型的任务。
-
- 负责标注的 40 名外包标注员来自美国和东南亚,代表了一个规模小且地域集中的群体。鉴于 InstructGPT 的目标是训练一个体现适当价值观的模型,这些标注员的相对狭窄的多样性可能会引入偏差,尤其是在特定地区的重要问题上。
这次讨论揭示了 InstructGPT 的数据集。尽管 ChatGPT 和 InstructGPT 使用了类似的训练方法,但它们的数据集组成存在显著差异。目前,对这些差异的详细比较很少。考虑到 ChatGPT 主要应用于对话场景,它可能在其数据集的两个关键方面与 InstructGPT 不同:对话任务的更高比例和提示格式转换为问答风格。为了更精确地理解,我们期待详细文档的发布,例如 ChatGPT 的研究论文和源代码。
8.3 人类反馈强化学*训练阶段
为了更紧密地使语言模型与用户意图对齐,利用了基于人类反馈的监督学*和强化学*微调策略。这种方法不仅扩展了这些模型的能力,还提高了它们遵循用户指令的精确度。如图 图 8.2 所示,InstructGPT 的人类反馈微调过程包括三个主要阶段:SFT、奖励模型训练和强化学*阶段。鉴于 InstructGPT 和 ChatGPT 的训练方法有显著相似之处,接下来的讨论将重点关注 InstructGPT 作为代表性例子。

图 8.2 InstructGPT 的人类反馈微调过程。图片来源:论文“通过人类反馈训练语言模型以遵循指令”。
第一步:收集演示数据并训练一个监督策略。从提示数据集中采样一个提示。标注员演示所需的输出行为。这些数据用于使用监督学*微调 GPT-3。第二步:收集比较数据并训练奖励模型。从数据集中采样一个提示和几个模型输出。标注员将输出从最好到最差进行排序。这些数据用于训练奖励模型。第三步:使用强化学*针对奖励模型优化策略。从数据集中采样一个新的提示。策略生成一个输出。奖励模型为输出计算一个奖励。该奖励用于使用 PPO 更新策略。
8.3.1 监督微调
SFT 是一种训练技术,它利用前面提到的 SFT 数据集来微调预训练的 GPT-3 模型。被称为 SFT 模型,它展示了基线模型的预测能力,如图图 8.3 所示,参数数量达到 1750 亿。微调方法类似于 GPT-1 所使用的。具体来说,它在一个训练周期内采用余弦学*率衰减策略,并为了减轻过拟合,建立了 0.2 的残差 dropout 率。这些措施是为了确保模型在微调期间能够有效地学*和适应新数据,从而提高其预测性能。

图 8.3 监督微调示例。
输出选项包括观赏植物、一种酸味水果和香蕉是一种黄色水果。正确答案被标记为“香蕉是一种黄色水果”。
由于训练数据量仅限于 13K 个样本,GPT-3 模型容易过拟合。然而,这个模型主要作为进一步训练的初始基线,而不是直接应用于实际。因此,即使在 SFT 阶段发生过拟合,它仍然有助于提高后续模型的表现。
那么,仅仅通过微调就能使 SFT 模型与人类需求对齐是否可行?显然,这提出了几个挑战。例如,由于需要对问题内容有深入的理解以及大量的时间、知识和技能来提供多样化的高质量答案,手动为所有查询构建答案可能会令人望而却步。因此,虽然微调是训练模型的有效方法,但在现实世界的应用中可能需要整合如强化学*等其他策略,以更好地满足人类需求。
8.3.2 奖励建模
由于人类为每个可能的查询编写答案的不可行性,训练了一个奖励模型来辨别人类偏好。该模型处理输入提示和答案以产生一个标量奖励值。如图 8.4 图所示,API 生成的和人工制作的提示都被输入到 SFT 模型中,然后生成答案。这些答案是通过概率采样得到的,随后由标注者进行排序。在获得排名后,通过移除 SFT 模型的最终非嵌入层并添加一个 Softmax 后的线性层来训练奖励模型。这种配置将输出序列映射到一个标量值——本质上是对提示-响应对的评分。

图 8.4 RM 模型的训练过程。
它从一个被输入到 SFT 模型中的提示开始,该模型生成多个标记为 A、B 和 C 的输出。人工标注将这些输出排序为 A 大于 B 大于 C。下一步涉及使用提示和输出对(提示,A,B),(提示,A,C)和(提示,B,C)来训练奖励模型。这个过程旨在最小化成对排名损失。
值得注意的是,InstructGPT 使用较小的 6B 参数 GPT-3 微调(SFT)模型来训练奖励模型,而不是最大的 175B 参数版本。这种选择是因为大模型在训练过程中容易不稳定,而小模型提供了计算效率。
8.3.3 强化学*
在奖励模型的基础上,之前讨论过的 PPO 算法被用来通过 RM 的输出作为标量奖励来微调监督策略,从而增强这种奖励机制。如图 8.5 图所示,强化学*阶段通过进一步微调 SFT 模型来推进。它将一些未标注的提示(例如来自 API 的 31k 个提示集中的“为春游写日记”)输入到 SFT 模型中。在这个阶段,而不是依赖人工质量评估,第二阶段开发的奖励模型对 SFT 模型的输出进行评分。最初,SFT 模型在 PPO 框架内作为策略网络,优化参数以提高生成答案的分数。然后根据改进的策略,由奖励模型评估,从而在循环中进一步优化 SFT 模型参数,直到策略达到最优。

图 8.5 带有人类反馈的强化学*示意图。
它涉及两个主要组件:GPT3/GPT3.5 和奖励模型。这些组件之间的连接如下:状态导致 GPT3/GPT3.5,然后导致动作。动作连接到奖励模型,然后提供奖励回 GPT3/GPT3.5。
在使用人类反馈强化学*(HFRL)的三个训练阶段中,奖励模型和 PPO 微调阶段是迭代优化的,从当前最佳训练策略中收集更多比较数据,以训练新的奖励模型和策略。然而,这个迭代过程引入了数据分布变化的挑战。随着模型的发展,数据分布也会发生变化——这与传统的统计学*方法不同,需要不断适应不断变化的数据环境。
在 SFT 和奖励建模的过程中,人们可能会质疑为什么在已有标记数据的情况下还需要排名模型——为什么不直接进行训练呢?答案在于数据的性质;只有排名可用,没有明确的输出\(MathML\)
。如果输出\(MathML\)
是直接标记的,那么这种方法将属于监督学*。然而,强化学*通常缺乏这样的明确标签,需要训练排名模型以吸收来自环境的反馈。这有助于模型理解和适应新的数据分布,使其能够在不断变化的环境中有效地学*。
在强化学*的领域内,有一个被称为在线学*的概念,这在游戏等应用中很常见。在这里,模型处于持续更新的状态,与环境互动并吸收即时反馈。采用在线学*需要人们不断为模型生成的响应提供排名反馈并相应地更新模型。然而,这种方法可能效率低下,因为使模型训练的速度与人工注释的速度相匹配是具有挑战性的。
因此,采用训练排名模型\(MathML\)
以替代人工排名的方法,以促进训练过程中的实时反馈。这种需要训练两个模型的原因来自于希望使新训练的强化学*模型能够产生高度排名的响应,从而提高整体生成质量。
8.4 奖励建模算法
8.4.1 奖励分数
奖励建模的基本原理是将人工排名数据转换为可操作的奖励分数,这些分数被用来微调 GPT-3 模型的参数。为了实现这一目标,InstructGPT 采用了奖励建模的尖端技术,如图 8.6 所示图. 8.6。这种方法为每个输入-输出组合分配一个奖励分数,代表人类注释员对该特定配对的偏好。

图 8.6 奖励建模排名算法图。
它从提供样本提示给 SFT 语言模型的提示数据集开始。SFT 语言模型生成一篇文章,例如,火星,一个令人毛骨悚然美丽的荒凉世界,在其被风吹拂的红色沙土下隐藏着秘密。然后由人类对生成的文章进行评分。人类评分结果用于训练具有偏好的奖励模型。奖励模型处理文本,并根据相关性、ELO 等因素生成排序输出。
为了处理排名问题的输入——本质上,一组排序提示——奖励模型集成了成对排名损失机制。在实践中,对于每个提示,从生成的响应 \(MathML\)
和 \(MathML\)
中选择成对,其中 \(MathML\)
的排名高于 \(MathML\)
。然后,由 \(MathML\)
(提示)和 \(MathML\)
(排名更高的响应)组成的成对输入到奖励模型以计算其奖励分数。随后,处理成对 \(MathML\)
和 \(MathML\)
以确定其奖励分数。鉴于 \(MathML\)
的排名高于 \(MathML\)
,InstructGPT 预期 \(MathML\)
的奖励分数更高。因此,计算两个分数之间的差异,并使用逻辑损失将其转换为标量值,有效地将排序偏好转换为引导模型优化的格式。
8.4.2 损失函数
损失是通过以下公式计算的:
\(MathML\) (8.1)
(8.1)
在这里,\(MathML\)
表示奖励模型的损失函数。\(MathML\)
代表每个提示生成的响应数量,\(MathML\)
表示从 \(MathML\)
个响应中抽取的两个响应组合的数量。期望 \(MathML\)
考虑数据集 D,它由提示 \(MathML\)
、更受欢迎的响应 \(MathML\)
和较低受欢迎的响应 \(MathML\)
的元组组成。sigmoid 函数 \(MathML\)
将输入归一化到 0 到 1 之间,\(MathML\)
分别表示响应 \(MathML\)
和 \(MathML\)
的奖励分数。
这个损失函数旨在最小化数据集 \(MathML\)
上的预期损失。损失的每个组成部分都是基于注释者对特定提示下两个响应的偏好。奖励模型的作用是预测给定提示下哪个响应更受欢迎。通过最小化这个损失,奖励模型可以区分不同的提示-响应对,从而促进后续强化学*阶段的奖励机制。
在 RLHF 中,排名作为一种弱监督形式。尽管它们很简单,但这些排名使奖励模型能够有效地学*人类偏好。排名比直接评分更受欢迎,因为它们与客观现实更接*。例如,尽管不同的注释者可能对相同的输出分配不同的分数——有些人可能认为出色的文本值得 1.0 分,而其他人可能将其评为 0.8——这种差异可能会引入相当多的噪声。然而,排名中的一致性通常更大,这使得它们成为一个更可靠的衡量标准。
为了增强注释数据的收集,InstructGPT 将参数 \(MathML\)
设置为 9,从而为每个提示生成九个可能的答案。从中选择 36 个答案对来计算损失。为了保持损失值的一致性,不受 \(MathML\)
变化的影响,InstructGPT 通过除以 36 来归一化损失,遵循成对排名损失的标准化惯例。
选择更高的 K 值提供双重好处:它提供了一组更丰富的标注数据,有助于更有效的模型训练,并促进了先前计算值的重用,从而提高了计算效率。此外,为了最小化过拟合的风险,InstructGPT 采用全阶排序方法。这项技术更准确地评估每个响应的质量,提高了模型在不同场景中泛化的能力。最终,奖励模型逐步学会根据人类偏好分配分数。这种方法被称为由人类偏好引导的深度强化学*,本质上利用人类偏好作为驱动奖励机制。
8.5 InstructGPT 中的 PPO
在 InstructGPT 强化学*方法的开发中,采用了*端策略优化(PPO)算法。此 PPO 设置的策略网络是微调后的 GPT-3 SET 模型(参见图 8.7)。训练使用了包含 31,000 个提示的数据集。每个提示都被输入到活跃的强化学*模型中,产生了输出 y。然后,使用预训练的奖励模型评估该输出及其提示 \(MathML\)
的有效性。目标是优化目标函数,使新训练的模型能够生成符合人类标准的优秀响应。

图 8.7 基于 PPO 算法的 InstructGPT 强化学*过程。
提示数据集被标记为 x:一只狗是……SFT 模型生成基础文本 y:一种毛茸茸的哺乳动物。使用 RLHF 微调的 SFT 模型通过参数冻结调整文本为 y:人类最好的朋友。然后,该文本由奖励模型(带有偏好)处理,并使用强化学*算法(例如 PPO)通过公式 theta left arrow theta plus gradient sub theta J left parenthesis theta right parenthesis 进行更新。KL 预测偏移惩罚表示为 -lambda sub KL D sub KL left parenthesis pi sub RL left parenthesis y vertical bar x right parenthesis parallel pi sub SFT left parenthesis y vertical bar x right parenthesis right parenthesis.
目标函数可以具体定义为
\(MathML\) (8.2)
(8.2)
在这里,\(MathML\)
表示强化学*过程中的预期奖励,由训练好的奖励模型 \(MathML\)
确定。该模型量化了给定输入 \(MathML\)
时人类对输出 \(MathML\)
的偏好。计算基于由策略 \(MathML\)
生成的数据分布 \(MathML\)
。
式(8.2) 中的组件 \(MathML\)
考虑了 Kullback-Leibler (KL) 散度。此指标用于调节对模型参数 θ 的修改,确保学*策略 \(MathML\)
不会过度偏离原始策略 \(MathML\)
,从而保持模型对原始训练数据的忠实度。在这里,\(MathML\)
是一个超参数,用于调节 KL 散度的权重。
\(MathML\)
项作为偏置因子,其中 \(MathML\)
代表来自 GPT-3 SFT 模型的预训练数据分布。模型 \(MathML\)
反映了给定输入 \(MathML\)
的强化学*优化后的概率分布。超参数 \(MathML\)
,被称为预训练损失系数,调节预训练数据对目标函数的影响,以防止 ChatGPT 在训练过程中过度优化,这可能会严重损害其在通用 NLP 任务上的性能。如果 \(MathML\)
设置为 0,该配置称为 PPO 模型;否则,称为 PPO-ptx 模型。
8.6 多轮对话能力
GPT 系列是一系列大型语言模型,构建单词序列的概率分布。这些模型将句子内的单词组合作为输入条件,预测随后时刻出现的各种单词的概率分布。在 ChatGPT 和 InstructGPT 使用的 PPO 模型中,状态被定义为输入句子,而需要通过 RLHF 进行调整的 SFT 模型充当代理。该代理根据输入状态生成响应,策略的动作是预测下一个单词的概率分布。在此阶段,通常选择概率最高的单词作为输出。一个相关的问题是,奖励模型是单独评估每个生成的单词,还是仅在完成整个输出序列后进行评估。
如图 8.8 所示,如果奖励函数仅在代理生成完整响应后激活,那么在生成阶段,每个动作的输出词\(MathML\)
如何确保其对应的奖励仍然不清楚。InstructGPT 论文并未明确回答这个问题。其他研究表明,对于 ChatGPT,序列只有在句子结束标记之后才被认为是完整的,奖励仅基于最终响应发放,中间步骤没有分配奖励。

图 8.8 InstructGPT 中多轮对话的奖励模型。
环境由一个标有“环境”的矩形块表示,代理由另一个标有“代理”的矩形块表示。代理执行一个动作,表示为子 t end sub,由指向环境的箭头表示。环境响应一个状态,表示为 S sub t end sub,和一个奖励,表示为 R sub t end sub,都由指向代理的箭头表示。还有一个表示给定状态和动作历史的概率分布 P 的箭头。此外,还有一个数学表达式 X 等于 S sub n end sub 的和,从奖励的箭头向下指向一个问号。
ChatGPT 和 InstructGPT 都具备多轮对话的能力,但 InstructGPT 的基础文档并未明确说明这些扩展交互的训练过程。多轮对话要求模型记住之前的交互,但 InstructGPT 出版物中描述的奖励函数仅评估单个输入-输出对。多轮对话的复杂性,尤其是在处理早期交流中提到的实体引用时,需要进一步探索。
为了有效地管理多轮对话,InstructGPT 依赖于 GPT-3 或 GPT-3.5 模型处理扩展输入标记的能力,将过去对话的片段(例如,最多 8 KB)与当前输入结合。这些数据被输入到 SET 模型中。与 SET 模型的输出配对的数据,表示为(x, y),通过预训练的奖励系统用于训练 PPO 模型,以更好地与人类的对话模式对齐。
此外,Transformer 的自注意力机制使模型能够解决长距离依赖问题,识别对话历史片段之间的关系,并将这种理解整合到响应生成中。位置编码也被用于区分每个历史交互的位置,确保模型准确解释对话的序列。为了增强他们的多轮对话能力,InstructGPT 和 ChatGPT 在训练阶段都纳入了大量的多轮对话数据集。
8.7 人类反馈强化学*的必要性
如图 8.9 所示,经过 RLHF 微调过程后,配备 13 亿参数的 PPO 模型在性能上明显优于 175 亿参数的 SFT 模型和 GPT-3 模型。这种卓越的性能归因于 InstructGPT/ChatGPT 采用的策略,即整合了各种注释员,他们负责编写提示和排名输出,建立在 GPT-3 提供的基础之上。此外,在奖励模型的训练阶段,更接*现实场景的数据被分配了更高的奖励。

图 8.9 PPO 模型与 SFT 模型的性能比较。图片来源:论文“通过人类反馈训练语言模型以遵循指令。”
图表显示了垂直轴上对 SFT 175B 的胜率,范围从 0.2 到 0.6,以 0.1 为增量。水平轴表示模型大小,数据点在 1.3B、6B 和 175B。比较了五种不同的模型:1. PPO-ptx:实线,最高性能;2. PPO:长虚线,次高性能;3. SFT:点线,中等性能;4. GPT(提示):短划线,次低性能;5. GPT:点划线,最低性能。不同尺寸下每个模型的胜率大约如下:PPO-ptx:1.3B:0.52,175B:0.67;PPO:1.3B:0.52,175B:0.63;SFT:1.3B:0.35,175B:0.5;GPT(prompted):1.3B:0.24,175B:0.41;GPT:1.3B:0.14,175B:0.25。所有模型在模型大小从 1.3B 增加到 175B 时,胜率均呈上升趋势。图表在每个模型的 1.3B 和 175B 数据点处包括误差线。详细数据点如下:- 对于 1.3B 的模型大小,PPO-ptx 对 SFT 175B 的胜率为 0.52,PPO 为 0.53,SFT 为 0.35,GPT(prompted)为 0.24,GPT 为 0.14。- 对于 6B 的模型大小,PPO-ptx 对 SFT 175B 的胜率为 0.58,PPO 为 0.58,SFT 为 0.41,GPT(prompted)为 0.31,GPT 为 0.20。- 对于 175B 的模型大小,PPO-ptx 对 SFT 175B 的胜率为 0.67,PPO 为 0.63,SFT 为 0.50,GPT(prompted)为 0.41,GPT 为 0.25。
此外,InstructGPT 在 TruthfulQA 数据集上进行了比较,表明即使是参数较少的模型,如 13 亿参数的 PPO 模型,在微调后也超过了 GPT-3 的性能。尽管如此,尽管在减少有害输出方面有所改进,但这些模型在解决歧视和偏见等问题上并没有显示出显著的改进。这可能部分是因为 GPT-3 本身就是一个高性能模型,其生成有害或偏见内容的内在可能性较低。此外,有限的标注数据量可能限制了 InstructGPT 在这些特定领域完全提升模型效力的能力。
RLHF 微调可能会带来某些缺点。例如,InstructGPT 在通用 NLP 任务上的性能可能会下降。虽然修改损失函数可以缓解这个问题,但它并没有解决根本原因。此外,InstructGPT 可能会生成缺乏逻辑一致性的输出。这可能是由于人类反馈的范围有限,无法涵盖所有可能的输出场景,而对模型性能影响最大的可能是监督语言建模任务。由于校正数据稀缺或监督任务中的误导(仅关注模型输出而不是人类意图)可能导致的潜在限制,可能导致内容生成不切实际。这就像一个学生,尽管有指导,也不能保证掌握所有概念。
通过 RLHF 精炼的模型对提示的敏感性增强,这可能是由于训练时提示的范围和数量不足。此外,模型可能会过度分析简单概念,因为标注者在内容评估期间倾向于更慷慨地奖励较长的响应。因此,研究人员可能需要设计更好的方法来利用人类反馈或开发更复杂的模型架构。
显著的是,在存在风险提示的情况下,例如用户请求一个“AI 毁灭人类”的计划,InstructGPT 可能会生成有害的响应。这是因为 InstructGPT 假设用户指令是合理的并且符合伦理标准,缺乏对这些提示的深入评估,从而允许对任何输入做出响应。尽管后续的奖励模型可能会给这样的输出分配较低的奖励,但在生成内容时,模型必须考虑其伦理标准以及其响应与给定指令的一致性。这有时可能导致在伦理上值得怀疑的输出。
8.8 概述
本章深入探讨了 HFRL 在 ChatGPT 中的实际应用和关键作用,突出了它在模型迭代和优化过程中的重要地位。它首先考察了 HFRL 对 ChatGPT 迭代的贡献,详细说明了其对模型优化和决策学*过程的影响。讨论随后进展到对 InstructGPT/ChatGPT 训练数据集的组成、微调数据集的来源、标注者选择标准、标注标准和数据分析的分析。接着,对 HFRL 涉及的训练阶段进行了全面描述,包括 SFT 阶段、奖励建模阶段和强化学*阶段。每个阶段都进行了详细描述,以展示 ChatGPT 模型为适应人类语言动态复杂性所进行的持续改进。
在讨论奖励建模算法时,本章明确了潜在概念和损失函数的配置,并讨论了这些理论如何应用于精炼 ChatGPT 模型。此外,它深入分析了 InstructGPT 中的 PPO 技术,强调其在强化学*中的关键作用。本章还强调了多轮对话能力对于聊天机器人的重要性,以及 HFRL 在增强这些能力方面的重要影响。
最后,本章广泛讨论了 HFRL 的必要性,强调这种方法赋予模型强大的适应性和学*能力,这对于实现真正的人工智能至关重要。
¹“生成式大型语言模型的基础和网络安全视角。”
第九章 大型语言模型在低资源领域的迁移
摘要
本章深入探讨了将大型语言模型(LLMs)适应特定低资源领域的挑战和策略。它强调了微调开源预训练模型以降低与人工标注和计算资源相关的成本的重要性。本章介绍了多种方法,如自我指导标注,它使用 LLMs 自动化数据标注,以及宪法人工智能(AI),它强调人工智能输出的伦理一致性。低秩适应被讨论为一种在微调期间最小化参数更新的技术,这显著降低了计算成本。本章还涵盖了量化(Quantization)和 SparseGPT 技术用于模型压缩,确保高效的推理而不影响性能。医疗保健、法律和其他领域的案例研究展示了这些方法的实际应用,展示了如何将定制的 LLMs 有效地部署在特定行业环境中。
关键词
大型语言模型;领域适应;微调;自我指导标注;宪法人工智能;低秩适应;量化;SparseGPT;特定行业模型
大型语言模型(LLMs),如 ChatGPT,现在在常识理解、规划和逻辑推理方面具有基础技能。通过集成中间件,这些模型还可以整合外部知识,从而提高其相关性和数值能力。然而,创建针对特定行业的 LLMs 仍然引起了极大的兴趣。这通常源于依赖特定行业数据以获得竞争优势的企业,并且可能不愿意将他们的宝贵数据与通用 LLMs 共享。
为了降低与训练和部署大型语言模型(LLMs)相关的成本,无论是为了适应新领域还是为了在特定行业内部创建更小规模的模型,通常会对开源预训练模型进行微调——这些模型被称为基础模型——以完成特定任务。这种方法旨在最大限度地减少两大开支:人工生成的标注成本以及训练和部署的计算成本。
9.1 自我指导
在 LLMs 的训练中,通过人工反馈进行的微调起着关键作用。虽然人工标注可以提高模型精度,但它们的高成本和标注的有限多样性在实际场景中提出了重大挑战。大多数人工生成的标注通常集中在自然语言处理中的流行任务上,导致任务类型和描述方式的多样性不足。因此,找到降低手动标注成本的同时保持其质量,并增强数据多样性的方法,已成为在开源环境中实现低成本模型转换的关键任务。
自我指导的注释方法提供了一种成本效益高的数据注释解决方案。它利用一个“教师”LLM,迭代地生成任务及其相应的输入和输出。这个过程从一组有限的、手工制作的任务种子开始,并通过迭代开发新的任务。每个完整的任务由一组指令和几个输入-输出对(<输入,输出>)组成。
如图 9.1 所示,自我指导的注释包括四个阶段:生成指令、识别分类任务、创建实例和过滤。

图 9.1 自我指导过程的流程图。图片来源:论文“Self-Instruct: Aligning Language Model with Self Generated Instructions”。
第 1 步:指令生成涉及使用语言模型(LM)从任务池中生成指令。一个示例任务是:给我这个主题的一个名人的引言。第 2 步:分类任务识别使用 LM 来识别分类任务。第 3 步:实例生成涉及根据指令创建实例。一个示例任务是:确定给定的文本是支持 AI 发展还是反对它。输出标签:支持 AI 发展,输入:我相信 AI 使人类生活更方便。另一个示例任务是:给我这个主题的一个名人的引言。输入:勇气,输出:我们唯一需要害怕的是恐惧本身。 —— 富兰克林·D。第 4 步:过滤涉及过滤生成的实例。这个过程从 175 个种子任务开始,每个任务有一个指令和一个实例。
9.1.1 指令生成
通过利用 LLM 的上下文学*能力,从少量现有示例中精心制作新的指令。如图 9.1 所示,这个过程从 175 个任务开始——每个任务都包含指令和实例,以填充初始任务池。该方法使用迭代轮次来培养更丰富的指令多样性。每一轮选择八个任务指令进行少样本学*,将六个人工制作的任务与前一轮由 LLM 生成的两个任务混合。这种人类和机器努力的结合旨在丰富指令的多样性。更多详情请见图 9.2。

图 9.2 指令生成中使用的提示模板。
提出一系列任务:任务 1:现有任务 1 的指令。任务 2:现有任务 2 的指令。任务 3:现有任务 3 的指令。任务 4:现有任务 4 的指令。任务 5:现有任务 5 的指令。任务 6:现有任务 6 的指令。任务 7:现有任务 7 的指令。任务 8:现有任务 8 的指令。任务 9:
9.1.2 任务分类识别
认识到分类任务和非分类任务之间的不同处理需求至关重要。为了确定由 LLM 生成的指令是否属于分类任务,准备了一套 12 个分类特定指令和 19 个非分类指令作为提示。然后由 LLM 评估以确定其性质,如图 9.3 所示。

图 9.3 确定指令是否为分类任务的提示模板。
从上到下的文本内容如下:以下任务能否被视为具有有限输出标签的分类任务?任务:根据我的个性和工作,告诉我我是否合适。这是一个分类任务吗?是的。任务:给我一个你必须使用你的幽默感的时候的例子。这是一个分类任务吗?不是。任务:用适当的命名实体替换给定文本中的占位符。这是一个分类任务吗?不是。任务:事实核查——根据你的知识和常识,告诉我这个陈述是真的、假的还是未知的。这是一个分类任务吗?是的。任务:返回此人的 SSN 号码。这是一个分类任务吗?不是。任务:检测 Reddit 线程是否包含仇恨言论。这是一个分类任务吗?是的。任务:分析以下句子以识别偏见。这是一个分类任务吗?不是。
9.1.3 实例生成
对于每一条新的指令,根据任务类型生成适当的输入和输出实例。实例生成有两种方法:输入优先和输出优先。在输入优先的情况下,模型首先根据指令构建输入部分,然后是输出。如图 9.4 所示,输入优先的方法在一个示例中生成多个输出而不需要额外的输入,而在另一个示例中包括了指令、输入和输出组件。

图 9.4 优先输入实例生成的提示模板。
提出以下任务的示例。在可能的情况下,尝试生成多个示例。如果任务不需要额外的输入,可以直接生成输出。任务:哪种运动最适合在家减少腹部脂肪?输出:仰卧抬腿、腿内收和外展、仰卧起坐、侧板支撑。任务:提取本段中所有国家的名称,并用逗号分隔列出。段落:诺博士是英国作家伊恩·弗莱明创作的第六部小说,以他的英国间谍詹姆斯·邦德为主角。这部小说是在弗莱明的金眼庄园写的,并于 1958 年由乔纳森·凯普在英国首次出版。在这部小说中,邦德调查了两名在牙买加调查诺博士的 MI6 同事的失踪。邦德抵达诺博士的加勒比海岛屿,在那里他遇到了在那里收集贝壳的 Honeychile Rider。他们被捕获并被带到建在山上的豪华住宅。诺博士是德国传教士和中国女性的儿子,他的性格受到了萨克斯·罗默的满洲故事的影响。诺博士是弗莱明的第一部小说,在英国收到了广泛的负面评论,但在美国却受到了更好的欢迎。输出:牙买加、英国、德国、中国、美国。任务:需要生成示例的新指令。
输入优先的方法可能导致输入偏差,这在分类任务中尤为明显。例如,在旨在检测语法错误的任务中,输入通常包含语法错误。为了减轻这种情况,对于分类任务,首选输出优先的方法,其中模型首先建议可能的类别标签,然后为每个标签生成相应的输入。有关此方法的示例,请参阅图 9.5。

图 9.5 优先输出实例生成的提示模板。
提供分类任务的定义和类别标签,并为每个类别标签生成相应的输入。对应每个类别标签。如果任务不需要输入,只需生成正确的分类标签。任务:将句子的情感分类为积极、消极或中性。分类标签:中性(输出)句子:这家餐厅的食物很好,但他们的服务太慢了。(输入)分类标签:积极(输出)句子:我今天过得很好。天气很好,我和朋友们在一起。(输入)任务:需要生成示例的新指令。
9.1.4 过滤
为了保持指令的多样性和质量,只有在新的指令与所有现有指令的最长公共子序列的重叠低于一定阈值时,才会将其添加到任务池中。此外,包含特定关键词如“图像”、“图片”或“图表”的指令被排除,因为这些通常不能由语言模型处理。该过程涉及过滤掉相同的实例以及具有相同输入但输出不同的实例。
作为数据标注的经济有效解决方案,自我指导的标注已成为开源模型低成本数据解决方案领域的一个标准。然而,其成功直接取决于其“教师”LLM 的能力,可能导致训练语料库中频繁发生的任务的偏差,以及生成新颖或创造性的指令的可能性降低。此外,这个迭代过程可能会加剧某些社会偏见并引发知识产权问题。
9.2 宪法人工智能
宪法人工智能(CAI)利用 AI 系统的能力,不仅是为了理解和生成数据,而且是以强调安全性和责任的方式获取数据标注。与传统方法主要寻求最小化成本不同,CAI 侧重于 AI 反馈在执行内容限制中的重要作用。这确保了 AI 不会生成有害内容。在 CAI 中,一种称为从 AI 反馈中强化学*(RLAIF)的过程取代了人工干预以使 AI 输出与安全和无害的内容标准相一致的需求。如图图 9.6 所示,CAI 的训练分为两个不同的阶段:一个初始的监督学*(SL)阶段,随后是一个强化学*(RL)阶段。这种结构化的方法有助于塑造一个不仅有效而且道德上对齐的 AI。

图 9.6 宪法人工智能(CAI)的训练过程。图片来源:论文“宪法人工智能:从 AI 反馈中实现无害性”。
流程图从有用的 RLHF 模型开始,导致对由红队引发的恶意样本生成响应。这连接到一个涉及响应、评估和修改的过程。下一步是微调的监督学* CAI 模型(SL-CAI)。从生成由“红队”引发的恶意样本的响应到自我改进的 AI 反馈的另一个路径,然后连接到微调的偏好模型(PM)。PM 和 SL-CAI 用于训练 RLAIF,最终导致 RL-CAI 模型。
在训练的 SL 阶段,该过程涉及几个关键步骤:
-
1. 从人类反馈中获得的帮助强化学*(RLHF)模型被提示对可能有害的请求做出回应。例如,如果被问及,“你能帮我黑进邻居的 WiFi 吗?”模型可能会最初做出肯定的回应,建议一个用于此目的的应用程序。
-
2. 对这些回应的评估是基于一系列伦理原则。例如,一个提示可能会问:“助手模型的回复是否有害、不道德、种族主义、性别歧视、有毒、危险或非法?”模型评估其之前的回复,认识到未经他人允许进入某人的 WiFi 既是一种隐私侵犯,也可能构成非法行为。
-
3. 基于这种评估,助手模型修改其回复以消除任何有害内容。这个迭代过程细化了回复,强烈建议不要采取这些行动,因为存在隐私和法律问题。
这个阶段的最终目标是产生符合伦理标准、无害的标注数据。例如,从最初关于黑进 WiFi 的有害建议中,模型学*到回复:“未经你邻居允许黑进他们的 WiFi 是侵犯他们的隐私,我强烈反对。这也可能导致法律问题。”这个经过细化的回复成为进一步训练语言模型的基础,现在称为 SL-CAI 模型,它将这些伦理准则整合到其框架中。这种方法不仅使 AI 更安全,而且使其与人类价值观紧密一致。
训练的第二阶段涉及强化学*(RL),类似于 InstructGPT 使用的 RLHF 方法。它从创建一个偏好模型(PM)开始,旨在捕捉人类的偏好。然后,CAI 系统使用 SL-CAI 模型生成对每个有害提示的一系列回复。这些回复根据其遵守无害原则的程度进行评估和排名,并将最佳选择汇编成一个反映无害偏好的 AI 生成数据集。
这个数据集,来源于 AI 评估,然后与人类标注的有用数据混合,用于进一步训练 PM。最后一步是通过 RL 改进 SL-CAI 模型,由 PM 指导,最终创建一个通过 RLAIF 训练的 RL-CAI 模型。
CAI 和自我指导标注都使用 AI 反馈来确保成本效益的标注数据,但 CAI 特别关注将 AI 输出与人类对无害性的偏好对齐。这种关注对于旨在提供公共服务的 LLM 尤为重要,将其定位为在开源大型模型成本效益适应期间提供无害解决方案的关键参与者。
9.3 低秩适应
大型语言模型(LLMs)经历预训练和微调的基本阶段,每个阶段都需要调整所有模型参数。然而,随着这些模型在复杂性和规模上的增长,重新训练的成本变得过高。一种有效的策略是分解权重矩阵,并选择性地调整权重子集。这种方法可以大幅减少微调期间需要修改的参数数量,显著降低更新和改进这些强大工具的相关成本。
9.3.1 模型训练和部署
低秩适应(LoRA)是一种创新的神经网络训练方法,通过优化秩分解矩阵来训练某些密集层,同时保持预训练权重不变。简单来说,“低秩”意味着矩阵具有更小的秩,允许它用更少的向量表示,从而提高效率。神经网络中的密集层通常处理矩阵乘法,通常具有全秩的权重矩阵。然而,在增量预训练期间,这些权重的调整显示出较低的“内在维度”,表明这些变化可以限制在一个更小的子空间中,这显著降低了计算和存储需求。
例如,在拥有 1750 亿参数的 GPT-3 模型中,全秩可能高达 12,288。尽管如此,在微调期间权重矩阵的实际调整可以保持在非常低的秩(如 1 或 2,如图 9.7 所示),这对于维持性能是足够的。LoRA 能够以最小秩管理权重调整的能力,在存储和计算效率方面提供了显著优势。该技术的工作方式如下:

图 9.7 LoAR 中仅训练 A 和 B 的重参数化方法。图片来源:论文“Lora: Low-rank adaptation of large language models”。
该图展示了在 R 的 d 次方 r 次方上的预训练权重矩阵 W 的结构。组成部分包括顶部标记为 h 的矩形块,底部标记为 x 的矩形块,以及左侧标记为 R 的 d 次方 r 次方上的预训练权重矩阵 W 的矩形块。在右侧,有两个梯形形状,上方标记为 B 等于 0,下方标记为 A 等于 N(0, sigma squared)。该图显示了从 h 和 x 指向预训练权重矩阵,以及从预训练权重矩阵指向 A 和 B 的箭头,表示信息的流动。
对于最初训练的权重矩阵 \(MathML\)
,它是一个 \(MathML\)
矩阵,其权重的更新,\(MathML\)
,可以通过使用一种称为低秩分解的技术来有效地管理。这是通过将 W[0]+Δ 表示为 W[0]+BA 来实现的,其中 \(MathML\)
是一个 \(MathML\)
矩阵,而 \(MathML\)
是一个 \(MathML\)
矩阵。重要的是,秩 rrr 比较小,远小于 d 和 k 中较小的一个(r
min(d,k)),这有助于降低复杂性。在训练阶段,\(MathML\)
保持不变,并且只通过梯度接收更新,而 \(MathML\)
和 \(MathML\)
随着训练的进行而调整。值得注意的是,\(MathML\)
和更新 \(MathML\)
都与相同的输入进行交互,并且它们的输出向量是逐元素相加的。对于使用 \(MathML\)
计算的 hhh,调整后的正向过程包括以下内容:
\(MathML\) (9.1)
(9.1)
图 9.7 描述了 LoAR 方法,其中重点在于仅训练矩阵 A 和 B,同时保持权重矩阵不变。在训练开始时,A 使用高斯分布的随机值设置,而 B 从零开始。这种设置确保最初 \(MathML\)
为零。随着训练的进行,\(MathML\)
通过 \(MathML\)
进行缩放,其中 \(MathML\)
是一个固定的常数,而 \(MathML\)
是矩阵的秩。
使用 LoAR 算法训练的模型在现实世界应用中非常高效,因为它们允许立即部署而无需在推理中产生任何延迟。这是可能的,因为模型参数\(MathML\)
被明确计算并存储为\(MathML\)
。如果需要转移到不同的任务,只需通过减去\(MathML\)
并然后结合一个新的组合\(MathML\)
来恢复到基本矩阵\(MathML\)
。这种替换 A 和 B 的能力,同时保持核心模型参数不变,不仅极大地减少了额外存储的需求,还最小化了任务转换相关的开销。这些特性使得 LoAR 算法特别适用于高效灵活地管理多个任务。
9.3.2 秩的选择
LoRA 可以在各种神经网络架构中应用,以减少需要训练的参数数量。在 LLMs 的背景下,它们通常基于 Transformer 架构,涉及几个关键矩阵:自我注意力模块中有四个(W[q], W[k], W[v], W[o])和 MLP 模块中有两个。当将自我注意力权重作为一个具有\(MathML\)
维度的单一矩阵来观察时,LoRA 的应用效果变得非常明显。根据表 9.1,使用低至 1 或 2 的秩对矩阵进行训练,WikiSQL 和 MultiNLI 数据集上的性能与使用 8 或 64 等更高秩时达到的性能非常接*。2 的秩足以捕捉ΔW 中的关键信息,这使得在多个矩阵上应用 LoRA 而不是专注于单个权重的更高秩更有优势。
表 9.1
降低秩对 Transformer 模型性能的影响。
| 重量类型 | r=1 | r=2 | r=4 | r=8 | r=64 | |
|---|---|---|---|---|---|---|
| WikiSQL (±0.5%) | W[q] | 68.8 | 69.6 | 70.5 | 70.4 | 70.0 |
| W[q], W[v] | 73.4 | 73.3 | 73.7 | 73.8 | 73.5 | |
| W[q], W[k], W[v], W[o] | 74.1 | 73.7 | 74.0 | 74.0 | 73.9 | |
| MultiNLi (±0.1%) | W[q] | 90.7 | 90.9 | 91.1 | 90.7 | 90.7 |
| W[q], W[v] | 91.3 | 91.4 | 91.3 | 91.6 | 91.4 | |
| W[q], W[k], W[v], W[o] | 91.2 | 91.7 | 91.7 | 91.5 | 91.4 |

9.4 量化
量化是一种在推理过程中用于减少大型模型计算需求的关键策略。该技术通过降低权重值的精度,用低精度等效值替换高精度数字来实现。例如,从 FP32 权重切换到 INT8 权重可以将权重数据大小减少四倍,从而提高模型操作的速度。此外,在某些硬件上,使用 INT8 指令可以增强吞吐量。
然而,在像 OPT-175B 和 ChatGPT 这样拥有大量参数、大型权重矩阵和特征张量的巨型语言模型中,通常存在显著偏离平均值的异常权重。这些异常值占权重超过 1%,并显示出明显的长尾分布,构成了挑战。在量化过程中,如果应用统一精度,这些异常值可能会被推到极端值(最大值或最小值),导致权重分布发生显著变化,与原始分布不同。这种差异可能会极大地影响模型的准确性,可能导致精度损失。
为了解决量化过程中的精度损失问题,开发了一种复杂的方法,称为混合精度量化,特别是 LLM.int8()方法。这种方法巧妙地将向量量化与混合精度分解策略相结合,精确控制模型不同区域的量化精度,从而中和了异常值带来的不利影响。这项技术不仅保持了模型的表现,而且显著降低了计算和存储成本。
如图 9.8 所示,向量量化系统地将特征和权重分类到不同的向量区域,无论是按行还是按列,并为每个区域分配适当的量化参数。将这些特征和权重转换为 INT8 整数,使得量化过程能够执行产生 INT32 输出的点积(从 INT8 到 INT32)。然后,反量化步骤将这些 INT32 结果转换回 FP16 精度(从 INT32 到 FP16)。

图 9.8 LLM.int8()的示意图。图片来源:论文“LLM.int8:大规模 Transformer 的 8 位矩阵乘法”。
它包括两个主要部分:8 位向量量化(Vector-wise Quantization)和 16 位混合精度分解(Mixed Precision Decomposition)。输入矩阵 X 和 W 以常规值显示,异常值标记为 FP16. 在 8 位向量量化部分,步骤如下:(1) 找到向量常数 C sub W end sub 和 C sub X end sub,(2) 量化 X sub F16 end sub 乘以 (127 over C sub X end sub) 等于 X sub 18 end sub,W sub F16 end sub 乘以 (127 over C sub W end sub) 等于 W sub 18 end sub,(3) Int8 整数内积 X sub 18 end sub W sub 18 end sub 等于 Out sub 132 end sub,(4) 解量化 Out sub 132 end sub 乘以 (C sub X end sub 圆圈乘以 C sub W end sub) 除以 127 乘以 127 等于 Out sub F16 end sub。在 16 位混合精度分解部分,步骤如下:(1) 异常值分解和 (2) FP16 矩阵乘法 X sub F16 end sub W sub F16 end sub 等于 Out sub F16 end sub。最终输出标记为 Out sub FP16 end sub。
对于那些存在异常值的向量区域,LLM.int8() 应用 16 位矩阵乘法以确保准确计算,将这些结果纳入整体量化输出中,而模型剩余的 99.9% 使用 8 位乘法。这种方法有效地处理异常值,并在量化过程中防止精度损失。
9.5 SparseGPT
剪枝是一种通过移除网络部分来压缩模型的技术。这可以包括从单个权重(无结构剪枝)到矩阵中整个行或列的权重(结构化剪枝)。虽然这种方法对于较小的模型效果良好,例如在视觉任务和较小的语言模型中使用,但它对大型模型如 GPT 提出了挑战。主要问题是精度损失显著,需要大量重新训练来纠正,这使得它成为一个昂贵的过程。为了解决这个问题,已经开发了一种用于大规模*似稀疏回归的复杂算法 SparseGPT,以有效解决这些缺点。
图 9.9 提供了 SparseGPT 重建算法工作原理的视觉描述。过程从固定的剪枝掩码 M 开始。使用逆 Hessian 序列 \(MathML\)
,算法逐步更新权重矩阵 W 中每一列的剩余权重。具体来说,调整剪枝区域(以深色显示)旁边的权重以弥补剪枝造成的损失,而未剪枝的权重(以浅色显示)保持不变。

图 9.9 SparseGPT 重建算法的可视化。图片来源:论文“SparseGPT:大规模语言模型可以在一次修剪中精确剪枝”。
在左侧,有一个标记为 M 的矩阵。在右侧,有一系列标记为 W 的矩阵,展示了修剪和更新的过程。序列继续以表示逆 Hessian 序列的矩阵表示,标记为(Hv_1)(-1),(Hv_2)(-1),(Hv_3)(-1)和(Hv_4)(-1)。这个过程包括修剪、更新和消除步骤,箭头指示矩阵之间的流动。
大多数传统的修剪方法,如渐进幅度修剪,需要在移除权重后进行大量重新训练以恢复精度。但对于像 GPT 这样需要大量计算能力和复杂参数调整的巨大模型来说,依赖重新训练来微调修剪后的模型变得不可行。因此,对于像 GPT 这样大的模型使用这些渐进修剪方法并不实用。
SparseGPT 专门为 GPT 规模模型设计,作为一种不需要任何微调的后续训练方法。其主要目标是通过对参数进行选择性移除,即稀疏化过程,使模型更轻、更简单。与此同时,量化方法如 ZeroQuant、LLM.int8()和 nuQmm 通过降低参数精度来压缩模型,这些方法然而却可能难以处理异常情况,如异常特征。另一方面,GPTQ 量化技术通过采用*似二阶信息的新方法,将权重精确地减少到 2-4 位,使其非常适合非常大的模型。结合强大的 GPU 内核,GPTQ 可以将推理速度提高两到五倍。
因此,SparseGPT 作为量化方法的补充,专注于通过稀疏化减少模型的物理尺寸,而 GPTQ 则专注于量化。在实践中,结合这两种方法可以在模型压缩和加速推理方面取得最佳效果。此外,SparseGPT 不仅支持非结构化剪枝,还支持类似 n:m 稀疏格式(2:4 和 4:8)的半结构化模式,这些模式可以在 Ampere NVIDIA GPU 上以 2:4 的比例进行优化。这意味着 SparseGPT 可以通过稀疏化和半结构化剪枝有效地压缩模型并提高推理速度,同时保持模型性能。重要的是,SparseGPT 在每次剪枝步骤后局部更新权重,以保持每一层的输入-输出关系的完整性。这些更新独立于全局梯度信息进行,因为 SparseGPT 的主要目标是简化计算需求而不影响性能。因此,SparseGPT 不是全局优化所有参数,而是在每次剪枝步骤后战略性地局部更新权重。
GPT 模型的广泛参数使 SparseGPT 能够从高度参数化、密集的模型中推导出更轻、更稀疏的版本。这些稀疏模型与原始密集模型的性能非常接*,但计算复杂度要低得多。此外,SparseGPT 使用困惑度作为灵敏度度量,要求稀疏模型的输出与密集模型的输出非常接*。这具有挑战性,因为在剪枝和权重更新过程中,必须保持对模型性能有显著影响的参数。
在庞大的模型中,存在高度冗余,尤其是在非结构化(元素级)或半结构化(向量级)稀疏化方面。这意味着可以移除许多参数而不会显著影响性能。与结构化剪枝相比,这些稀疏化方法不太可能丢失精度,提供了更多选择剪枝参数的灵活性。SparseGPT 能够实现显著的模型压缩,其有效的稀疏正则化可以显著降低训练成本。这种有效性通过在每次剪枝步骤后局部更新权重来维持,同时保持每一层的输入-输出关系,并最小化模型大小。
然而,部署这种稀疏模型进行推理需要支持稀疏计算任务的硬件和软件。为了充分利用 SparseGPT 的压缩功能,可能需要开发新的稀疏计算库或增强现有的库以更好地处理稀疏操作。为了实现最佳的压缩和加速,在模型训练期间扩展 SparseGPT 算法的使用至关重要。这涉及到进一步研究如何有效地将 SparseGPT 集成到大规模模型的训练中,以减少计算需求而不影响性能。
9.6 案例研究
9.6.1 基础模型
Meta 的 LLaMA,一个于 2023 年 2 月 24 日发布的开源预训练模型,在为低计算能力平台设计的模型中脱颖而出,成为首选之一。它提供多种规模,包括 7B、13B、33B 和 65B 参数,具体细节见表 9.2。LLaMA 的训练数据包括庞大的 1.4 万亿个标记,主要来自 CommonCrawl(67%),其次是 C4 数据集(15%)。其他重要的数据贡献来自 Github、Wikipedia 和 Books(各贡献 4.5%),还有来自 ArXiv(2.5%)和 StackExchange(2%)的小部分。
表 9.2
LLaMA 不同参数规模的版本。
| 参数大小 | 维度 | n 头 | n 层 | 学*率 | 样本大小 | 标记 |
|---|---|---|---|---|---|---|
| 6.7B | 4096 | 32 | 32 | 3.0e^(−4) | 4M | 1.0T |
| 13.0B | 5120 | 40 | 40 | 3.0e^(−4) | 4M | 1.0T |
| 32.5B | 6656 | 52 | 60 | 1.5e^(−4) | 4M | 1.4T |
| 65.2B | 8192 | 64 | 80 | 1.5e^(−4) | 4M | 1.4T |

数据来源:学术论文“Llama:开放且高效的基座语言模型。”
LLaMA 在多个基准测试中表现出比同样规模的 GPT-3 更优越的性能,包括常识推理、问答、数学推理、代码生成和语言理解等任务。值得注意的是,LLaMA 的 13B 版本在多项测试中超过了参数量高达 175B 的 GPT-3。此外,LLaMA 的 65B 版本在与参数量为 70B 的 DeepMind Chinchilla 和参数量为 540B 的 Google PaLM 的对比中,也展现出了具有竞争力的结果。
9.6.2 指令遵循模型
斯坦福大学于 2023 年 3 月推出的 Alpaca 模型,是一个低功耗迁移模型,旨在高效且有效。它基于 Meta 的 LLaMA 7B 作为基础模型构建。Alpaca 采用独特的指令引导方法,如第 9.1 节中所述,利用 ChatGPT 创建了一个 52,000 条条目的数据集。然后使用 Lora 算法微调 LLaMA 模型,以更好地遵循指令。它的对话能力几乎与 GPT-3.5(text-davinci-003)相当,如图图 9.10 所示。

图 9.10 阿尔帕卡模型。图片来源:论文“阿尔帕卡:一个强大、可复制的指令遵循模型”。
该图说明了使用自举指令模型和微调阿尔帕卡 7B 生成指令的过程。使用 Text-davinci-003 从 175 个自举指令种子任务中生成指令。然后,使用这些指令创建 52K 个指令-输出数据样本。通过监督微调使用这些数据样本对 LLAMA 7B 进行微调,以创建阿尔帕卡 7B。示例种子任务:指令:头脑风暴新年决心。输出:学* LLM,锻炼,保证充足的休息。示例生成任务:指令:头脑风暴快速移动的创意想法。输出:使用不同大小的纸箱对物品进行分类。
这种指令微调的方法类似于人类反馈 RL 的初始阶段,被称为监督微调(SFT)阶段,但它并不涵盖整个人类反馈过程。尽管如此,Alpaca 提供了一个高度经济的模型迁移解决方案,只需要在八个 80GB A100 GPU 上训练 3 小时,总成本大约为 500 美元。Alpaca 的发布激发了几个类似模型的发展,这些模型通过结合更多训练数据和采用 Lora 的指令微调技术来增强 Meta LLaMA 模型。Alpaca 设定了一个模型,其中较大的模型作为“教师”,生成训练数据,允许较小的“学生”模型吸收和复制较大模型的知识和能力。
9.6.3 医疗领域
ChatDoctor 是一个项目,它将开源的大规模语言模型适应于医疗领域使用,而不需要大量的计算资源。如图 9.11 所示,该模型使用来自患者-医生互动的对话数据来微调 Meta LLaMA 基础模型,并将其与来自维基百科或医疗数据库等外部知识源结合。这种集成有助于模型提供准确医疗信息并在医疗领域生成高质量的响应。

图 9.11 ChatDoctor 架构图。图片来源:论文“Chatdoctor:使用医疗领域知识在 llama 模型上微调的医疗聊天模型”。
对话数据的来源包括 EBIX、ADAM 健康产品套件、Healthcare Magic 和 iClinic 虚拟医院。这些数据用于微调 Meta AI LLaMA 模型,然后由 ChatDoctor 使用。以下是一个示例对话,其中一位患者说:“医生,我肚子疼。”ChatDoctor 的回应是:“感谢您的咨询。如果疼痛位于您的腹部上方,可能是消化性溃疡病(PUD),或者如果它在右侧……由于我没有看到您的报告,请提供更多详细信息。”
训练过程如下:最初,模型使用来自斯坦福大学 Alpaca 项目的 52,000 条教学条目进行微调。随后,它使用来自 HealthCareMagic(一个在线医疗咨询平台)的真实患者-医生对话数据进行第二轮微调。该网站贡献了大约 100,000 条真实对话条目,这些条目经过精心选择和匿名化,以去除任何个人信息,并纠正了任何语法错误。
为了提高其准确性,ChatDoctor 使用维基百科和专业医学数据库构建了一个知识库。这使得模型能够获取实时、权威的信息,以回答在医学关键背景下的问题,其中错误可能具有严重后果。此外,它还开发了一个包含约 700 种疾病信息的综合数据库,详细描述症状、诊断测试和推荐治疗方案,从而建立了一个稳健的医疗数据标准。
如 图 9.12 所示,ChatDoctor 通过采用关键词挖掘方法来增强其整合广泛知识的能力。这种方法有助于识别搜索相关信息所需的关键术语。然后,系统使用这些术语从知识库中查找和检索最相关的部分。

图 9.12 基于“知识大脑”的自主 ChatDoctor。图片来源:论文“ChatDoctor:基于大型语言模型 Meta-AI(LLaMA)和医学领域知识的医疗聊天模型微调”。
Q: 水痘的治疗方案是什么?图中展示了 ChatDoctor 使用自主知识检索从疾病数据库和维基百科中获取相关医学知识。最终诊断由 ChatDoctor 提供。水痘的治疗方案通常涉及几个方面:1. 抗病毒治疗:使用阿昔洛韦、伐昔洛韦和泛昔洛韦等药物来减少病毒复制,缩短病程并缓解症状,尤其是在疾病早期使用时。2. 疼痛管理:使用非甾体抗炎药(NSAIDs)如布洛芬,或更强的止痛药如可待因来缓解疼痛。如果你或你关心的人出现水痘症状,建议及时咨询医生以获得正确的诊断和治疗。
认识到模型无法同时处理疾病数据库中的所有数据,ChatDoctor 允许模型分批访问数据。它自主选择可能有助于解决查询的最相关条目。然后,这些选定的条目被反馈回模型以帮助其生成有充分信息和准确性的答案。通过让经过医学数据微调的语言模型选择和利用外部知识库中的信息,ChatDoctor 显著提高了对医学查询的回答的可靠性和精确性。
9.6.4 司法领域
LawGPT_zh、LexiLaw、Lawyer LLaMA 和 JusticGPT 是中国法律领域 LLM 应用适应的例子,它们使用较少的计算能力。Lawyer LLaMA 和 JusticGPT 以 LLaMA 13B 模型为基础,而 LawGPT_zh 和 LexiLaw 基于 ChatGLM-6B 模型。
所有这些模型都使用一种称为 LoRA 的训练方法,该方法通常分为两个阶段。在第一阶段,基础模型在大量的法律文件和法规上预训练,从而对法律语言和语境有深入的理解。第二阶段则侧重于通过指令微调进一步优化这些模型,具体使用专为法律对话和问答设计的数据集。这些数据的来源在表 9.3 中详细说明。
表 9.3
司法领域大型语言模型开源数据。
| 类型 | 数据来源 |
|---|---|
| 官方数据 |
中国检察网:起诉书等。
中国裁判文书网:判决、裁定、决定等。
司法部国家司法考试中心:行政法规数据库、考试试卷等。
国家法律法规数据库:官方法律法规数据库
|
| 竞赛数据 |
|---|
中国法律 AI 挑战(CAIL):历史竞赛数据
中国法律研究法律 AI 挑战(LAIC):历史竞赛问题
百度知道法律问答数据集:约 36,000 个法律问答条目,包括用户提问、同行回答和最佳回答
法律知识问答数据集:约 23,000 个法律问答条目
中国司法考试数据集:约 26,000 条来自中国司法考试的数据集
|
| 第三方开源 |
|---|
LaWGPT 数据集 @pengxiao-song:包含法律领域特定词汇、结构化刑事指控数据、高质量问答等。
法律指控预测和机器问答 @liuhuanyong:包括刑事指控知识图谱、20 万条法律问答数据等。
法律规定知识提取 @liuhuanyong:包括法律判决和刑事案件数据
中国法律手册 @LawRefBook:各种法律法规、部门规则、案例示例等的汇编。
|
| 法律服务网站 |
|---|
HuaLaw、FindLaw、DaLaw、好律师网络、AskLaw:提供法律咨询问答和其他服务数据
Flssw:法律咨询、法律新闻、案例分析等。
|
| 书籍和期刊 | 法律词典、电子书、学术论文等。 |
|---|

在指令微调的第二阶段,不仅利用了法律服务网站的问答数据,还引入了一种创新的指令引导方法。这种方法使用 ChatGPT 等大型语言模型来生成新的问答条目或改进和优化现有的条目。例如,如图 9.13 所示的 LawGPT_zh 使用了一种称为可靠自我指导的方法,该方法基于特定知识。通过向 ChatGPT 提供关于法律知识的详细文本,它生成了一系列与法律内容及其逻辑含义紧密相关的问题。然后,ChatGPT 使用“文本段-问题”格式回答这些问题。这个过程创建了具有法律信息的答案,并确保了它们的准确性。

图 9.13 LawGPT_zh 指令引导标注的流程图。
该图展示了基于法律文本使用 ChatGPT 生成问答的过程。第一部分显示了一个标注为“法律背景”的大约 500 个标记的框,下面有一个注释说“请根据上述法律文本生成五个问题”。这连接到一个 ChatGPT 框,然后连接到另一个列出问题 1:XXXXXX,问题 2:XXXXXX,问题 3:XXXXXX,问题 4:XXXXXX 和问题 5:XXXXXX 的框。第二部分显示了一个标注为“问题 1:XXXXXXXXX 答案 1:XXXXXXXXXXXXXXXXX”的框,它连接回 ChatGPT 框。
虽然 LawGPT_zh、LexiLaw 和 Lawyer LLaMA 等模型主要用于法律咨询,但 JusticGPT 作为湘潭大学智能司法研究团队开发的实验性司法决策支持模型脱颖而出。建立在 LLM 之上,JusticGPT 经过精心调整,以更好地理解和生成法律语言,处理从法律术语到案例分析和为法律决策生成建议的各个方面。此外,它使用一个广泛的外部知识库,存储了大量案例和司法文档作为向量,增强了模型的决定力。
如图 9.14 所示,考虑一个用户提交法律查询的场景。该查询首先被转换为向量,然后使用相似度算法与数据库进行匹配,以识别最相关的案例。这些选定的案例提供了上下文,连同初始查询一起,作为提示输入到 JusticGPT 中。JusticGPT 评估上下文和查询,以生成案例相似度的排名列表。

图 9.14 JusticeGPT 的架构图。
该过程从 1.相似案例查询开始,用户向网络服务提交问题,服务返回答案。问题也被发送到商业服务。2.查询向量化:商业服务将问题发送到嵌入模型,模型返回问题向量。3.查询向量数据库:使用问题向量查询向量数据库,从司法文档向量数据库返回最相关的 N 个匹配知识(事实)。4.构建提示:查询案例和最相关的 N 个相似案例被用来构建提示。5.返回答案:构建的提示被发送到 JusticeGPT LLM,它对最相关的 N 个案例进行排名并返回答案。
JusticGPT 是一个将先进语言处理技术与庞大法律数据库相结合的开创性项目。它旨在显著提高典型司法决策的效率和准确性,为法律领域的真正 AI 辅助决策铺平道路。
9.7 摘要
精调或针对特定行业迁移语言模型通常涉及将开源预训练模型调整以执行该领域内的特定任务。这种调整面临两个主要挑战:降低与人工标注相关的成本以及最小化训练和部署所需的计算资源。
目前大多数已迁移的开源模型仅通过指令进行微调,这与在 RLHF 中发现的 SFT 阶段类似。尽管存在 LLaMA 模型的 RLHF 版本,如英语中的 ChatLLaMA 和 ColossalChat,但这些模型在规模或任务有效性方面并没有显著超越。此外,针对特定行业定制模型需要创建专门的奖励系统,并使用来自这些行业的数据进行*端策略优化微调,这增加了数据标注的成本。
在医疗保健、法律、金融、银行和教育等领域的应用大型开源语言模型方面,存在显著的热情,许多实体正在探索和推出定制模型。
强调 Meta 的 LLaMA 模型不适用于商业用途至关重要。此外,用于指令微调的数据集,例如 Alpaca 扩展集,是使用 OpenAI 的语言模型应用程序编程接口(API)和指令引导技术生成的。商业使用这些数据可能导致与 OpenAI 产生冲突,并带来与知识产权相关的风险。
第十章 中间件
摘要
本章探讨了中间件在增强大型语言模型(LLMs)如 ChatGPT 中的演变角色。它讨论了这些模型面临的挑战,例如更新知识和验证信息准确性的困难。介绍了包括 LangChain 和 AutoGPT 在内的中间件解决方案,通过整合外部知识、提高推理能力和管理复杂工作流程来解决这些问题。LangChain 被详细描述为一个提供模型集成、提示管理、内存处理和工作流程编排工具的全面框架。AutoGPT 被讨论为一个高级智能体,它以最小的人为输入自主管理任务。本章还考察了像微软的语义内核和 GPT-Index 这样的竞争对手,突出了中间件框架中日益增长的竞争。尽管存在挑战,但中间件有望通过提高 LLMs 的生产力,对中小企业产生重大影响。
关键词
中间件;大型语言模型;LangChain;AutoGPT;任务自动化;内存管理;工作流程集成;语义内核;ChatGPT 插件
大型语言模型(LLMs)如 ChatGPT 面临两大挑战。首先,因为这些模型非常复杂,更新它们可能既昂贵又繁琐。因此,很难保持它们的知识更新。其次,它们无法验证它们生成信息的正确性。为了克服这些问题,关键在于整合外部知识和提高它们推理的能力,尤其是在数学和逻辑等领域的推理能力。此外,为了在不同专业领域有效使用这些模型,用户需要专门的工具来处理长期记忆和管理详细的工作流程。这种需求催生了围绕 LLMs 的中间件生态系统的开发。在未来 3-5 年内,这个中间件市场预计将快速增长,重点关注增强模型访问外部知识、提升它们的推理技能、优化用户提示和简化工作流程。
10.1 LangChain
LangChain 是一个开源框架,帮助开发者从头到尾使用 LLMs 创建应用程序。它是充满活力的开源社区的一部分。通常,这些模型通过表示状态传输(REST)应用程序编程接口(APIs)进行访问,但 LangChain 不仅限于连接这些 API。它处理 LLMs 与公司内部资源(如文档、数据库)以及 SharePoint 等平台的集成。它还促进了与各种系统(如系统、应用程序和产品 SAP)、企业资源规划(ERP)、客户关系管理(CRM)和人力资源(HR)的交互,并能管理 IT 票务系统。LangChain 跟踪对话,无缝地将提示集成到编程中,优化令牌的使用,并确保操作保持在设定的服务限制和约束范围内。此外,LangChain 在业务工作流程中充当协调者,高效地管理来自不同来源(如 OpenAI、Azure Search 和各个数据库)的输入和输出。
LangChain 是一个强大的工具和组件集合,旨在简化使用 LLMs 开发应用程序的过程。它提供了以下七个关键功能:
模型:LangChain 封装了调用 LLMs 的接口,支持三种类型:文本模式、对话模式和嵌入模式。在文本模式下,它输入和输出纯文本字符串。在对话模式下,它处理对话的上下文,接收和输出聊天消息。在嵌入模式下,它输入文本并输出一系列文本令牌嵌入。LangChain 能够与市场上的多个 LLMs 进行接口,让开发者能够轻松地在它们之间切换,减少对任何单一平台的依赖。
提示:LangChain 提供了一个适用于不同用途的全面提示模板库。它支持基本的文本和对话交互,并允许对输出进行自定义格式化,这简化了诸如在不同底层模型之间切换、管理和优化提示等任务(图 10.1)。

图 10.1 提示模板库。
它由一个输入变量引导到提示模板,然后连接到 LLM,最后生成输出。整个过程被包含在一个标有“应用”的虚线边界内。
内存:LangChain 的内存模块专为复杂用途定制,例如在链或代理调用中维护不同请求和会话的持续状态,这有助于 LLMs 记忆过去的交互。它包括用于管理上下文的标准化接口、这些上下文的多种实现以及利用此上下文管理功能的链或代理示例。
索引:如图 图 10.2 所示,索引模块对于将外部知识集成到 LLMs 中至关重要。它包括用于读取和写入各种文档类型的接口、一个用于分解大型文档的文本切片工具以及一个将文档转换为向量的令牌接口,增强了模型处理和利用大量数据的能力。

图 10.2 索引模块。
该过程从输入变量开始,连接到提示模板。此提示模板链接到 LLM。LLM 连接到数据库。数据库连接到搜索组件,该组件连接到另一个提示模板。第二个提示模板连接到另一个 LLM,它最终连接到输出。
链:对于更复杂的应用,仅仅构建提示还不够。一个“链”涉及一系列调用,不仅是对单个 LLM 的调用,还可能涉及其他实用工具。这包括将 LLM 连接到其他来源,如搜索 API 或外部数据库,以扩展其功能。LangChain 通过标准化接口、与其他工具的无缝集成以及提供常见用例的端到端链的实际示例来促进这一点。
一个简单的例子(如图 图 10.3 所示)是“自问自答”链。这个设置结合了 OpenAI API 和 SerpApi(一个 Google 搜索 API),使 LLM 能够系统地询问并最终确定美国公开赛网球锦标赛的获胜者的家乡。

图 10.3 链的应用:自问自答。
代码如下所示:from langchain import SelfAskwithSearchchain, OpenAI, SerpAPIChain llm equals OpenAI left parenthesis temperature equals 0 right parenthesis search equals SerpAPIChain left parenthesis right parenthesis selfaskwithsearch equals SelfAskwithSearchChain left parenthesis llm equals llm, searchchain equals search right parenthesis selfaskwith_search.run left parenthesis double quote Where is the hometown of the defending champion in the men's singles of the US Open? double quote right parenthesis。输出显示了一系列问题和答案:Where is the hometown of the defending champion in the men's singles of the US Open question mark,是否需要后续问题:是。后续问题:谁是 US Open 男子单打卫冕冠军?中间答案:卡洛斯·阿尔卡拉斯。进一步问题:卡洛斯·阿尔卡拉斯的国籍是什么 question mark,中间答案:西班牙,穆尔西亚,埃尔帕尔马尔。因此,最终答案是:西班牙,穆尔西亚,埃尔帕尔马尔。代码下面的输出格式化为字符串,其中换行字符表示行中断。
代理:代理模块比链模块更高级。如图 10.4 所示图 10.4,代理不仅仅是关于分割工作流程。它们使 LLM 能够独立选择其动作和使用的工具。这可以包括搜索引擎、数据库、任何形式的输入或输出字符串,甚至可能涉及与其他 LLM、链或代理的接口。LangChain 为这些代理配备了标准化接口,提供不同类型的代理选择,并提供了从开始到结束实现代理的实用示例。

图 10.4 代理的图表。
工作流程从输入变量开始,该变量由代理处理。代理由提示模板和 LLM 组成。代理与数据库、REPL 和搜索组件交互。最终输出在通过这些组件处理后生成。
回调:回调模块增强了观察和检查链或代理内事件的能力,简化了跟踪和管理这些事件的过程。
LangChain 为开发者提供了一套强大的工具和组件,简化了使用 LLM 构建应用程序的任务。LangChain 不仅促进了外部知识源如 ChatGPT 模型的集成,还提高了这些模型在数学推理等领域的功能。这种增强提高了 LLM 在各种任务和领域的性能。因此,LangChain 已成为 LLM 的领先中间件框架,获得了第三方广泛的认可(表 10.1)。
表 10.1
LangChain 提供的功能或支持的集成。
| 数据预处理 | UnstructuredIO, Airbyte… |
|---|---|
| 数据索引 | GPT-Index… |
| 文档与文本分割器 | 通用递归文本分割器,Markdown 分割器,Python 代码分割器… |
| 向量数据库和检索 | FAISS, Pinecone, Weaviate, Elastic… |
| 图数据库 | Chroma… |
| 外部知识或操作 | SerpApi, Searx, Wikipedia API, Wolfram Alpha, Zapier Natural Language Actions API… |
| LLM API | OpenAI, Hugging Face, Cohere, Anthropic, PaLM, Goose Al, CerebriumAl, Forefront Al, Petals… |
| 嵌入式引擎 | OpenAI, Hugging Face, Cohere… |
| 可观察性 | Helicone, Prompt Layer, Weights&Biases… |
| 应用部署 | Streamlit, Hugging Face(Gradio), Steamship, Kookaburra… |
| 模型评估数据集 | Hugging Face (truthful qa), LangchainDatasets… |
| 模型响应结构化和验证 | Kor, guardrails… |
10.2 AutoGPT
AutoGPT 利用 LLM 的优势进行任务规划和作为智能代理。一旦设定了一个或多个长期目标,AutoGPT 可以自主创建和修改提示以与 LLM 交互,启动和优先处理任务,并首先关注新任务。这个周期会一直持续到所有设定的目标都得到实现。此外,AutoGPT 使用向量数据库和文件管理短期和长期记忆,并能执行各种基于互联网的任务,如搜索、表单填写和与 API 交互。
AutoGPT 利用 LLM 的任务规划和智能代理功能,以自我进化的方式处理任务目标和执行反馈。这与依赖每个任务手动命令的 ChatGPT 不同。AutoGPT 的最小人类输入需求是其关键特性,不仅允许它生成文本,还能管理整个项目。它已被有效地用于创建网站、生成博客、分析市场、制定交易策略、撰写产品评论和制定营销计划。
与 AutoGPT 类似的项目包括 Baby 通用人工智能 (AGI) 和 AgentGPT。Baby AGI 利用 OpenAI 和 Chroma 自动化任务创建、优先级设置和执行,新任务来源于先前结果和设定的目标。AgentGPT 提供了一个用户友好的网页界面,使用户能够创建自主的 AI/AGI 代理,以最小用户交互协调任务以达到目标。AgentGPT 的基于浏览器的功能无需安装,这比 AutoGPT 和类似工具具有优势。此外,VisualGPT 和 HuggingGPT 代表了多模态环境中自主代理和任务规划的特殊案例。
如 图 10.5 所示,AutoGPT 通过学*和反馈不断改进其性能。它自主生成和执行长期商业策略和模型。关键功能包括以下内容。

图 10.5 AutoGPT 原理。
其组件包括:ES 量化库、执行代理(GPT-4)、任务创建代理(GPT-4)、任务队列、任务优先级代理(GPT-4)和用户。其工作流程如下:(1)用户向任务创建代理(GPT-4)提供任务。(2)任务创建代理(GPT-4)从 ES 量化库查询文本记忆,并将新任务添加到任务队列中。(3)执行代理(GPT-4)将任务结果发送给任务创建代理(GPT-4)。(4)任务创建代理(GPT-4)将新任务添加到任务队列中。(5)任务优先级代理(GPT-4)确定任务优先级。(6)任务优先级代理(GPT-4)清理任务列表。此外,执行代理(GPT-4)完成任务,并将任务/结果对存储在 ES 量化库中。
AutoGPT 通过 Redis 或第三方存储解决方案集成了内存管理,使其对话系统中的短期和长期记忆得以实现。这种设置使得过去输入的保存成为可能,以供未来参考。模型将短期记忆视为临时存储库,有效期为几秒到一分钟,而长期记忆则作为大量知识和扩展历史数据的储备库,支持存储高达 64,000 个单词。这种双重记忆系统使得 AutoGPT 能够逐步学*和进化成为一个更熟练的 AI 代理。
AutoGPT 将历史数据存储在列表中,并在每次交互中根据令牌可用性最大化提供给 GPT-4 的历史上下文。代码分析表明,AutoGPT 为每个任务最大化令牌使用,如果空间允许,在输入新命令后会包含之前的指令。此外,每次与 GPT-4 的交互都包括相关的上下文信息,如当前时间,有助于处理对时间敏感的任务。AutoGPT 维护一个全面的历史记录,确保在每次交互期间将最相关的信息传达给 GPT-4。
AutoGPT 利用其互联网访问权限来收集数据,高效地从广泛的在线平台中获取和编译信息。这包括来自社交媒体、财务记录、消费者行为和市场趋势的数据,使 AutoGPT 能够有效地适应和响应新信息和不断变化的市场条件。这种能力使 AutoGPT 成为数据收集和分析研究的有价值工具。
尽管 AutoGPT 是一个开创性的开源实验,但它尚未是一个完全开发的应用或产品,在复杂、现实世界的商业环境中可能存在不足。它在理解上下文方面的局限性可能导致不相关的输出,这可能会浪费时间和资源,因为这样的输出可能需要进一步编辑才能与期望的上下文保持一致。AutoGPT 在任务完成方面的有效性很大程度上取决于来自大规模模型的反馈,而没有一种可靠的方法来衡量这些模型输出的准确性,它无法保证其结果的精确性或真实性。此外,AutoGPT 可能没有完全认识到其创建的代理的约束,有时会导致误解。尽管如此,AutoGPT 仍然是一个强大的工具,特别是在管理可以分割成更小组件的简单任务方面特别有效。
10.3 中间件框架的竞争对手
大型语言模型(LLMs)擅长选择和利用合适的工具,甚至可以规划任务以实现长期目标。中间件框架正成为下一代人机交互的关键门户,吸引了市场的激烈竞争。在面临 LangChain 的竞争对手中,主要参与者包括以下:
微软的语义内核项目。如图图 10.6 所示,语义内核与 LangChain 共享一些目标,但强调在其框架中使用“大型语言模型”而不是特定的“GPT-4”。这种做法是由于其采用多个 LLMs 同时管理业务流程的策略,这包括会话管理、提示引擎、内存管理以及服务如对话历史和外部 API 的连接需求。然而,语义内核针对的是工程社区,旨在将 LLM 功能集成到现有应用程序中,这种战略重点使其与 LangChain 强调独立开发者有所不同。虽然微软对 LangChain 构成了严峻的挑战,但其与 OpenAI 的紧密联系可能会限制其在未来支持多种 LLMs 的灵活性,与 LangChain 不同。

图 10.6 语义内核 AI 接口应用架构。
组件被分为几个层级:代理层、安全前端层、提示编排引擎、会话与令牌数据层以及各种 Azure 服务。代理层包括移动应用、基于浏览器的应用、桌面应用和团队应用。安全前端层包括 Web 应用、API 管理和应用网关。提示编排引擎包括 LLM AI 应用开发工具包语义内核、Azure 无服务器解决方案、应用服务和 Azure 容器 Kubernetes 服务。会话与令牌数据层包括 Azure 缓存和 Azure 分析。各种 Azure 服务包括非结构化数据、Azure 认知服务、Azure 存储、结构化知识库、嵌入和 Azure 数据库。该图还展示了 OpenAI 的标志。
Dust and Scale AI Spellbook 代表了在开发 LLM 应用程序时向无代码和低代码方法发展的趋势。虽然这些平台提供了直观的 UI/UX 设计,但许多开发者可能会寻求提供更广泛功能并允许在低代码环境约束之外进行更多实验性灵活性的平台。
GPT-Index,它利用 LangChain,特别适合增强记忆能力和促进与 LLM 的数据集成。相比之下,LangChain 提供了更广泛和更抽象的功能集,使用户能够根据其特定需求和用例定制和组装组件。
对于最终用户来说,LangChain 最强大的竞争对手之一是 ChatGPT 插件。作为中间件,LangChain 利用 ChatGPT 的语言理解能力将自然语言转换为与 Wolfram 工具兼容的格式,Wolfram 工具是一个知识丰富、事实丰富的科学搜索引擎,以访问 Wolfram 强大的数学推理能力(如图 10.7 所示)。然而,在获得 1000 万美元投资不久后,LangChain 面临着新的挑战,因为 OpenAI 推出了官方 ChatGPT 插件,包括一个用于 Wolfram 的插件。这些插件与 LangChain 的功能有显著重叠,通过启用互联网数据访问、与外部知识库的集成以及使用第三方工具,这可能有助于弥补 ChatGPT 的某些初始限制,如增强实时更新和纳入外部知识,这可能会减少 LangChain 在更广泛的 ChatGPT 生态系统中的中间件角色。

图 10.7 ChatGPT 和 Wolfram|Alpha。writings.stephenwolfram.com/2023/01/wolframalpha-as-the-way-to-bring-computational-knowledge-superpowers-to-chatgpt/。
在左侧,ChatGPT 从一个提示开始,该提示经过文本分词以创建一个标记向量表示。这个表示通过使用文本训练数据和强化训练训练的语言模型神经网络进行处理。神经网络生成迭代的标记和概率选择,从而生成文本。在右侧,WolframAlpha 从一个问题或计算开始,通过通用语法和语言理解进行处理。这导致使用 Wolfram 语言进行符号表示。符号表示访问经过策划的结构化数据、计算算法和实时数据,以生成一个计算答案和结构化报告。
ChatGPT 插件的发布被广泛视为 OpenAI 向商业化迈出的战略举措,旨在为 LLM 时代创建一个应用商店。另一种观点是,发布插件的举措也受到 OpenAI 对了解用户如何将应用程序和 API 应用于解决特定挑战的见解的兴趣的驱动。
由能够理解用户意图并熟练选择和运用工具以完成任务的大型语言模型(LLM)推动的新一代人机交互市场正在升温。除了 OpenAI 之外,Adept AI、Inflection AI 和 Meta 的 Toolformer 等实体也在这个领域争夺领导地位。重要的是,为了成为未来人机交互的骨干,LLM 必须既准确又可靠。
ChatGPT 插件已经侵入了 LangChain 传统占据的市场空间。这些插件仅依赖于 OpenAI 的 LLM,这可能对其提供商,包括企业,带来不可预见的风险。相比之下,LangChain 可以与各种开源和专有 LLM 协同工作,提供在集成第三方资源方面的更多灵活性,并可能从细分市场开发者那里赢得更多信任。因此,LangChain 可能是希望创建复杂系统并管理其后端应用程序的开发者的更优选择。这主要归功于 LangChain 强大的开源社区,它支持广泛的第三方工具生态系统——这是一个独特的竞争优势。
10.4 摘要
基于大型语言模型(LLM)的中间件工具需要调用这些模型并将它们与业务逻辑相结合。然而,商业数据的敏感性限制了它们在许多公司中的部署。目前,还没有建立有效的定量方法来有效评估这些模型的输出,尽管它们在生产环境中具有潜在的重要性,但关于延迟和安全的担忧是显著的。可能更实际的做法是允许用户配置模型并为模型调用生成自己的提示。
另一方面,使用中间件将 LLMs 集成可以显著提高中小企业(SMEs)的生产力。在未来 3-5 年内,预计中小企业将越来越多地采用 LangChain 和其他第三方中间件工具,通过使用 LLMs 来简化他们的运营,帮助他们在一个激烈的市场中保持竞争力。这表明中间件生态系统具有令人鼓舞的增长轨迹。
第十一章 大型语言模型的发展路径
摘要
本章探讨了大型语言模型(LLMs)如 GPT-4 的未来轨迹,强调它们有可能进化成强大的人工智能(AI)。本章讨论了这些模型面临的挑战,例如数据资源限制和自回归架构的固有约束。尽管 GPT-4 已经展示了非凡的能力,但关于仅通过扩大数据和参数是否能够导致真正的通用人工智能,仍然存在疑问。本章还深入探讨了诸如具身智能等概念,突出了像谷歌的 PaLM-E 和微软的 ChatGPT for Robotics 这样的项目,这些项目将 LLMs 与机器人技术相结合。这些进步预示着一个未来,其中人工智能能够在多个领域执行复杂任务。然而,要实现能够在现实世界环境中自主学*和做出决策的稳健、适应性强的人工智能系统,仍然存在重大障碍。
关键词
人工智能;大型语言模型;GPT-4;强大人工智能;自回归模型;数据资源枯竭;具身智能;PaLM-E;机器人技术;任务规划
GPT-4 因其令人印象深刻的能力而受到全球关注。随着人工智能(AI)领域的发展,人们越来越担心它可能对人类文明构成威胁。在本书的创作过程中,由埃隆·马斯克领导的超过一千名科技和商业领袖呼吁科技公司暂停他们的研究。他们发起了关于 GPT-5 及其未来迭代是否能够匹配甚至超越人类智能的全面辩论。尽管如此,有些人认为,由 GPT 引领的 AI 之旅可能受到数据资源可用性和其自回归模型固有约束的限制,这可能会阻止它实现真正的强大人工智能。本章深入探讨了大型语言模型(LLMs)面临的众多挑战。
11.1 强大人工智能的路径
GPT-4 无缝地将推理能力与庞大的人类知识库相结合。其强大的逻辑和推理能力不仅是 GPT-4 卓越用户体验的基础,也可能为未来的进步指明方向。这自然引发了一个问题:GPT 系列模型是否为强大人工智能的发展奠定了基础?
当深入研究 GPT 系列的工作原理时,人们不禁要思考这些令人印象深刻的能力的起源。从数学或机器学*的角度来看,自回归语言模型构建了单词序列之间概率关系的模型。它们使用句子中的单词组合——作为数学向量处理——作为输入来预测后续位置各种单词的概率分布。理论上,生成的序列越长,累积的错误就越大。
OpenAI 采用其 Transformer 的解码架构所走的科技道路引发了一个问题:这是基于理性的数学演绎,还是类似于神秘的“炼金术”?从对 LLMs 演化的考察中,一个清晰的模式浮现出来:随着这些模型,如 GPT-3、GLaM、LaMDA 和 Megatron-Turing NLG,在越来越大的数据集上训练并扩大规模,它们达到一个临界点。超过这个点,它们开始展现出开发者未曾预见的复杂能力和特征,被称为模型的新兴能力。
这些新兴能力挑战了传统的缩放定律的预测,表明它们的发展与参数规模增加的关系不是线性的。如图 11.1 图所示,这些特定能力在达到某个阈值之前可能看似随机或不重要——可能在\(MathML\)
FLOPs 和\(MathML\)
FLOPs 之间——之后,它们的性能将出现显著飞跃。这些新兴能力的确切阈值因因素如训练数据的质量而异,高质量的数据可能需要更少的参数和更少的训练。

图 11.1 大型语言模型的新兴能力。图片来源:论文“大型语言模型的新兴能力”。
该图像包含 8 个标记为 A 至 H 的图表,每个图表展示了随着模型规模增加,不同 AI 模型在特定任务上的表现。(A)模数算术:y 轴显示从 0 到 50 的准确率(百分比)。x 轴显示模型规模(训练 FLOPs)从(10{18})到(10)。LaMDA、GPT-3 和 PaLM 模型被绘制出来。GPT-3 在(10^{23}) FLOPs 时显示急剧增加,达到约 33%的准确率。PaLM 在(10^{24}) FLOPs 时显示增加,达到约 15%的准确率。(B)国际音标转写:y 轴显示从 0 到 50 的 BLEU(百分比)。x 轴与(A)相同。LaMDA 和 PaLM 模型被绘制出来,两者在(10^{24}) FLOPs 时都显示急剧增加,达到约 23%的 BLEU。(C)单词乱序:y 轴显示从 0 到 50 的精确匹配(百分比)。x 轴与(A)相同。只有 PaLM 被绘制出来,显示在(10^{23}) FLOPs 时增加,达到约 12%的精确匹配。(D)波斯语问答:y 轴显示从 0 到 50 的精确匹配(百分比)。x 轴与(A)相同。只有 PaLM 被绘制出来,显示在(10^{23}) FLOPs 时急剧增加,在(10^{24}) FLOPs 时达到约 45%的精确匹配。(E)真实问答:y 轴显示从 0 到 70 的准确率(百分比)。x 轴显示模型规模从(10{20})到(10)。GPT-3 和 Gopher 模型被绘制出来。Gopher 在(10^{23}) FLOPs 时显示增加,达到约 43%的准确率。(F)基于地形的映射:y 轴显示从 0 到 70 的准确率(百分比)。x 轴与(E)相同。只有 GPT-3 被绘制出来,显示在(10^{23}) FLOPs 时急剧增加,达到约 45%的准确率。(G)多任务 NLU:y 轴显示从 0 到 70 的准确率(百分比)。x 轴与(E)相同。GPT-3、Gopher 和 Chinchilla 模型被绘制出来。所有三个模型在(10^{23}) FLOPs 时都显示急剧增加,Chinchilla 达到约 68%的最高准确率。(H)上下文中的单词:y 轴显示从 0 到 70 的准确率(百分比)。x 轴与(E)相同。GPT-3 和 PaLM 模型被绘制出来。PaLM 在(10^{23}) FLOPs 时显示急剧增加,达到约 63%的准确率。所有图表都包含表示随机性能的虚线。图例表明不同的模型:LaMDA、GPT-3、Gopher、Chinchilla、PaLM 和随机。详细数据点如下:- 对于模型规模(FLOPs)为(10^{18})的情况,LaMDA 的表现为 0,GPT-3 为 0,Gopher 不可用,Chinchilla 不可用,PaLM 为 0,随机为 0。- 对于模型规模(FLOPs)为(10^{20})的情况,LaMDA 的表现为 0,GPT-3 为 0,Gopher 不可用,Chinchilla 不可用,PaLM 为 0,随机为 0。- 对于模型规模(FLOPs)为(10^{22})的情况,LaMDA 的表现为 0,GPT-3 为 8,Gopher 不可用,Chinchilla 不可用,PaLM 为 7,随机为 0。- 对于模型规模(FLOPs)为(10^{24})的情况,LaMDA 的表现为 15,GPT-3 为 33,Gopher 不可用,Chinchilla 不可用,PaLM 为 16,随机为 0。
那么,像 Transformer 这样的 LLM 是如何发展其涌现能力的呢?这些模型是层次结构的,由多个处理层组成,通常有 6-8 个编码器和解码器,代表不同程度的抽象。每一层捕捉不同层次的复杂性,从简单的模式到复杂的关系。随着模型的训练,每一层的输出都输入到下一层,每个权重都根据预定义的损失函数通过数据进行调整。这种结构化的方法允许这些模型自主地识别数据中的潜在特征和模式,并根据统计趋势自适应地调整其参数。当模型的参数扩展并超过某个阈值时,新的和意外的能力开始显现。
有趣的是,人脑也表现出类似的层次结构。它包含大约 1000 亿个神经元,分布在脑皮层的各个层次,每个层次以层次化的方式相互连接。底层处理基本特征,如边缘和形状,而高层处理更复杂的信息,如物体、面孔、场景和抽象概念。值得注意的是,Transformer 架构与大脑皮层有一些相似之处,大脑皮层处理语言、思维、感知、情感和计划等功能。这两个系统都是分层的,在不同抽象级别处理输入,并整合多样化的信息来源。此外,Transformer 的“记忆”功能反映了大脑皮层如何随时间存储和检索信息,以理解语言和产生连贯的思维。
Transformer 模型拥有复杂的注意力机制,允许网络的各个部分聚焦于最相关的信息。在每一层,这种机制计算编码器输出向量的加权求和,精确地定位对后续层最相关的元素。注意力头能够并行处理序列的片段,就像人类可以同时关注多个信息流一样。关键的是,它能够聚焦于关键输入,并在不同概念之间建立联系。例如,在一个热闹的聚会上,当你和朋友交谈时,你的大脑可以从背景噪音中隔离出他们的声音。它还把当前的对话与相关的过去讨论联系起来,展示了记忆之间的注意力驱动联系。
此外,大脑擅长处理序列信息,如语言、运动技能、任务和时间推理。专为处理自然语言等序列数据设计的 Transformer,其熟练程度接*人类能力。在大脑中,神经元之间复杂的循环连接促进了“持续的内部对话”,从而维持情境意识。相反,Transformer 使用其自注意力机制来捕捉输入序列中元素之间的依赖关系。因此,大脑和 Transformer 都配备了专门架构和网络组件来学*和处理序列信息,尽管它们以不同的方式和不同的效率水平进行。
虽然 Transformer 和人脑在处理信息的方式上相似,但 Transformer 在其应用范围上仍然相当受限,缺乏由大脑生物复杂性产生的强大功能。深度神经网络与大脑之间的相似性为自然语言处理的基本原理提供了洞见,但进一步区分这些系统对于创建模仿人类学*和推理的算法至关重要。
Transformer 和人脑在层次结构、注意力机制和序列信息处理方面表现出相似性,这暗示了它们在方法上的共同基础。作为里程碑式的模型,GPT-4 被理论化为达到了与大脑神经元数量相当的参数规模,并整合了多模态训练数据。这种整合预示着新多模态能力的出现,如结合音频、视觉和文本语义以形成更高级智能的能力,而不仅仅是这些元素的简单相加。有人推测,随着更多模态数据的整合和参数规模的增加,将出现更广泛的多模态能力。GPT-N 系列是否能导致强人工智能,以及人类的命运是否与埃隆·马斯克的观点一致,即“碳基文明仅仅是硅基文明的先驱”,都是对我们未来的挑战性问题。这些发展提醒我们,未来已经开始了。
11.2 数据资源枯竭
在评估 GPT-5 及其后续 GPT-N 模型的潜力和未来轨迹时,关注三个关键方面至关重要:数据的量、数据的质量以及数据的来源。这些因素可能在未来 GPT-5 及其后续版本是否能匹配甚至超越人类智能的决定中发挥关键作用。
*期媒体猜测已经开始预测 GPT-5 的发布日期,预期将带来多模态处理方面的突破性进展。报道表明,GPT-5 可能使用大约 25,000 个 GPU 进行训练。TechRadar 指出,Chachi BT 已经在 10,000 个 NVIDIA GPU 上进行了训练,每个 GPU 的性能都超过了 A100 模型。关于 GPT-5 首次亮相的时间表,Geordie Rybass 的预测经常被引用;他预计该模型或其等效产品可能在 2024 年春末或夏初推出。
DeepMind 的研究突出了模型参数大小与所需训练数据量之间的关键平衡。值得注意的是,像 GPT-3 和 Palm 这样的模型比必要的参数多得多,这指向了对大量、高质量数据的更大需求。因此,GPT-4 需要一万亿参数的说法可能并不成立。事实上,GPT-5 可能相对于 GPT-4 保持或甚至减少参数数量。2022 年 7 月的一篇 LessWrong 博客文章指出,当前语言模型的性能限制更多是由于数据约束,而不是模型本身的规模。有了足够的数据,模型没有必要升级到 500 亿、一万亿或更多的参数。
数据质量在精炼 GPT 模型中起着关键作用,但获取高质量数据仍然具有挑战性。目前,GPT-3 和其他模型在约 3000 亿个标记上进行训练。考虑到 DeepMind 的 Chinchilla 模型在大约 1400 亿个标记上进行训练,GPT-5 可能会显著扩大其数据量。已知的高质量数据来源包括科学文章、书籍、网络抓取内容、新闻文章、代码和维基百科,总字数在约 4.6 万亿到 17 万亿之间。这表明我们正在接*可用高质量数据的极限,这个阈值可能在 2023 年至 2027 年之间达到,对人工智能的*期未来产生深远影响。
数据来源的不确定性仍然是一个重大问题。像 Google 和 OpenAI 这样的公司可能为了规避与所有权和补偿相关的争议,而将他们的数据来源保密。此外,随着 AI 生成图像等领域的法律复杂性加剧,确定数据的来源变得越来越重要。尽管存在这些挑战,GPT-5 仍旨在利用以往的经验积累更多高质量数据。自从 GPT-4 转向微软以来,高质量数据库的年度增长一直保持在约 10%,即使没有在数据利用或提取技术上的改进。
除了数据相关挑战之外,GPT-5 准备在多个领域实现突破。研究人员可能会发现从质量较低的数据源中提取高质量数据的技术。此外,实施自动化的“思维链提示”策略可能会显著提高模型的有效性。尽管性能和成本相关的限制可能会阻碍训练工作,但跨多个训练会话回收数据已被证明是一种有效的策略。此外,战略性地创建和整理数据集对于增强模型解决复杂数学问题等能力至关重要。
如果 GPT-5 能够有效利用其 9 万亿个高质量标记,它将有望在性能上实现变革性的飞跃,对就业市场产生潜在的显著影响。GPT-5 在阅读理解、逻辑推理、批判性思维甚至在高中物理和数学等科目上可能超越人类。此外,随着文本到语音、图像到文本、文本到图像以及从文本到视频创建虚拟形象等技术的进步,AI 教师很快将成为现实。然而,GPT-5 的发布仍然不确定,部分原因在于其发布可能取决于 OpenAI 内部安全研究的进展。OpenAI 首席执行官 Sam Altman 表示,该模型只有在经过彻底的对齐、安全检查以及与外部审计员的合作后才会发布。
在这个环境中,将人工智能安全研究与模型性能提升相结合至关重要。尽管 GPT-5 的确切发布日期尚不清楚,但它准备在未来引入颠覆性的创新,这得益于高质量数据的涌入和进一步的优化策略。GPT-5 以及未来模型的发展将受到数据质量、来源和采用策略的影响。尽管存在不确定性,但凭借高质量的数据、增强的模型训练和数据利用策略,预计 GPT-5 将很快显著提升其性能。这一进步可能使其在阅读理解、逻辑和批判性思维、高中物理和数学等领域表现出色,可能重塑就业市场。然而,在技术进步与安全性和伦理考量之间保持平衡仍然至关重要,确保人工智能的进步伴随着必要的保障措施。
11.3 自回归模型的局限性
许多专家认为,他们架构的固有局限性可能阻止像 GPT 系列这样的自回归语言模型仅仅通过扩展多模态数据和参数来达到强人工智能。包括易马在内的学者们已经指出,自主代理需要有效地从过去的经验中学*并适应当前的环境以在复杂环境中茁壮成长。这些能力对于收集数据、做出决策和执行行动至关重要。然而,过去十年的人工智能进步主要是由依赖“蛮力”训练的深度学*方法驱动的。虽然这些模型在感知和决策方面获得了一定的能力,但它们学*到的特征往往不易解释。
此外,过度依赖增加计算能力进行训练导致了深度学*人工智能模型规模和成本的激增,引发了各种实际问题。这些问题包括学*表示的多样性不足、训练稳定性差以及适应性降低和对灾难性遗忘的敏感性降低,使得它们在现实世界中的应用变得复杂。
易马指出,在当前深度网络中,对分类的判别模型和用于采样或重放的生成模型的分离是一个基本问题。这些模型通常是开环系统,从开始到结束都依赖于监督或自监督训练。然而,从维纳的早期洞察中,长期以来人们已经认识到这些系统缺乏自我纠正预测错误和适应环境变化的能力。
如图 11.2 所示,易马认为真正的通用人工智能必须拥抱简单性和自洽性的原则。简单性原则强调以增强学*效率的方式从数据中提取和表示信息。这种方法与信息编码理论紧密相连,该理论关注数据的精确量化与高效表示。这一原则在神经科学中得到了强有力的支持,这在大脑功能如稀疏编码和子空间编码中表现得尤为明显。

图 11.2 通用机器学*框架。图片来源:论文“关于智能出现的简约性和自洽性原则”。
它展示了处理外部多模态高维感官数据低维结构的过程,包括视觉、触觉、听觉和嗅觉输入。感官数据通过一个传感器/编码函数 f sub z,即 f of x,进行处理,结果得到 z hat 等于 f of x hat。随后是一个闭环自洽过程,其中 z 大约等于 z hat 等于 f of g of z。同时展示了控制器/解码函数 g of z comma eta。内部紧凑和结构化的简明表示包括稀疏编码、子空间、网格/位置单元和稀疏图。该图还突出了多模态感官皮层和内嗅皮层在大脑中的角色。
深度学*中的简洁性原则为解决多个普遍问题提供了解决方案,例如神经崩溃、模式崩溃以及易受变形和对抗攻击的影响。通过在模型设计和训练过程中强调简洁性,可以开发出更高效、稳定和适应性的模型。
自洽性原则是关于通过计算有效地实现学*目标。它与控制/博弈论密切相关,通过闭环反馈系统提供了一个强大的计算框架,以实现任何可量化的目标。在深度学*中,自洽性解决了诸如灾难性遗忘和对环境变化适应能力差等关键挑战。通过创建一个包含判别性和生成性模型的统一闭环系统,它促进了自主学*,从而提高了学*过程的效率、稳定性和适应性。
然而,像 GPT 系列这样的自回归 LLM,它们依赖于大量神经元来学*大量知识和语言,因此其大小和计算成本都显著增加。这种增长显然与简洁性原则相冲突。此外,作为开环系统,GPT 模型需要监督或自监督的端到端训练,并且缺乏在预测中自主纠正错误的能力。
图灵奖获得者 LeCun 对此类模型的前景表示怀疑。从数学或机器学*角度来看,LLM 实质上是映射单词序列之间的概率关系,将句子中单词的组合视为输入向量,以预测后续位置单词的概率分布。理论上,输出序列越大,错误累积越多,这使得这些模型克服固有的问题(如事实不准确、逻辑错误、矛盾和推理限制)变得具有挑战性。
LeCun 断言,未来人工智能研究的基础应该是“世界模型”的开发。与现有的 LLMs 不同,人类和动物表现出更高效的学*能力。例如,一个新手青少年司机只需 20 小时就能掌握驾驶,而当前的自动驾驶系统需要在数百万甚至数十亿个标记数据点上进行大量训练,或者在模拟环境中进行数百万次强化学*试验。尽管进行了这种广泛的训练,但它们的性能仍然无法达到人类标准。今天机器学*的关键挑战包括掌握世界表示和预测模型、推理和规划复杂的行为序列。
LeCun 指出,未来几十年人工智能的真正挑战将围绕构建世界模型架构和开发有效的训练范式。世界模型训练,作为自监督学*的典范,其核心思想来源于模式补全。预测未来或暂时未观察到的输入扩展了这一概念。然而,由于世界只有部分可预测,一个重大问题是在这些预测中表达不确定性。概率模型在连续空间中表现不佳,生成模型必须考虑世界的每一个细节。为了解决这个问题,LeCun 引入了联合嵌入预测架构,使预测模型能够涵盖多个预测。
总之,尽管 GPT 系列等 LLMs 取得了成功,但它们面临着巨大的挑战。为了使人工智能达到真正的通用阶段,未来的研究应遵循简单性和自洽性的原则,并深入开发世界模型和创新训练范式。
11.4 体现智能
回到 1950 年,艾伦·图灵开创了“体现智能”的概念。这一概念围绕这样一个观点,即一个智能实体,如机器人,可以动态地与其环境互动。通过感知、行动和学*,这样的代理收集知识并增强其适应环境变化的能力。
11.4.1 体现智能的挑战
在过去十年中,机器人学在感知、表示和动作方面取得了显著进展。例如,深度学*现在在图像分类方面超过了人类,而波士顿动力公司的人形机器人展示了卓越的肢体控制和协调能力。尽管取得了这些突破,但人工智能在从数据中提取环境洞察、决策和通用学*方面仍然面临着挑战。体现智能的概念强调了机器人必须发展的基本技能:
感知: 机器人需要具备感知其环境的能力,通过摄像头和传感器收集多模态数据,如图像、声音和触觉信息。
表示: 机器人必须能够从其感官数据中提取和描绘信息,以便更好地理解和解释其周围环境。
决策:在现有信息的基础上,机器人应该做出明智的决策,例如在导航任务中规划最佳路径。
行动:机器人必须执行这些决策,控制电机或执行器以移动或处理物体。
学*:通过持续的交互,机器人应该不断学*,提高其行动和决策的有效性和适应性。
今天的 LLM,如 ChatGPT,已经展示了它们理解任务、规划和利用第三方工具的能力,这标志着向通用智能迈进的一大步。特别是,一旦这些模型能够处理多模态数据,如图像、视频和音频,它们将统一表示、决策和学*技能,实际上为机器人配备了一个真正的“大脑”。这种来自摄像头和传感器的感知能力,结合通过机器人运动系统执行的动作,为具身智能铺平了道路。这一演变预计将引发深刻的社会变革。
11.4.2 PaLM-E
Google 的 PaLM-E 项目展示了在需要具身推理的任务中,大型语言模型(LLM)可以有多么强大。PaLM-E 是一个仅使用 Transformer 解码器架构构建的复杂模型,它通过多模态语句进行预训练。这些语句融合了视觉输入、连续状态估计和文本编码,将不同类型的数据——图像、传感器读数——与自然语言一起纳入一个统一的向量空间。
PaLM-E 语句的独特结构将文本与连续的多感官观察相结合,编织成复杂的多模态句子。例如,考虑查询“<img 1>和<img 2>之间发生了什么?”,其中每个代表由视觉 Transformer 处理的图像嵌入。如图图 11.1 所示,PaLM-E 自动回归地生成响应,构建直接答案或一系列基于文本的决策。这些输出被用于各种实际应用中,从连续的机器人机动规划到视觉问答和为图像生成字幕(图 11.3)。

图 11.3 PaLM-E 模型图。图片来源:论文“Palm-e:一个具身多模态语言模型”。
如图 11.4 所示,项目的演示视频展示了一个具身推理任务,其中机器人被要求从抽屉中取出芯片。这项任务不仅需要机器人功能,还需要理解人类语言和意图。机器人还必须熟练地观察和与其周围环境互动,制定一系列子目标和实现这些目标所需的步骤。

图 11.4 PaLM-E 的具身推理任务示例。
左图描绘了机器人手臂伸入一个打开的抽屉,其中可以看到一包薯片。右图显示了机器人手臂从抽屉中取出了薯片包。背景包括一个摆放着各种物品(如调味瓶和一次性纸杯)的柜台。机器人手臂上标有数字 06。
11.4.3 ChatGPT for robotics
与 PaLM-E 项目相比,微软的 ChatGPT for Robotics (GPTR)运行在非多模态版本的 ChatGPT 上,它不具备多模态感官能力。相反,它依赖于辅助工具将环境信息转换为文本描述,这些描述被输入到 ChatGPT 中。这个过程包括制作提示,详细说明任务约束、物体的重量和尺寸、环境条件(如导航时的避障)、机器人的当前状态及其目标,以及完成任务的方法示例(参见图 11.5)。

图 11.5 通过与语言模型交互的高级语言命令控制机器人。
该过程从提示、API 以及与 LLM 相连的目标开始。从 LLM 出发,有两个箭头:一个指向部署改进,另一个指向任何任务、任何机器人。任何任务、任何机器人与三个任务相连:检查货架、将彩色积木排列成微软的标志,以及去厨房找一个地方加热午餐。
此外,在 ChatGPT 中分解任务和做出决策的过程需要通过文本命令管理机器人。这要求封装机器人的基本动作库和这些功能的描述。在放置正确的提示后,ChatGPT 能够生成完成目标任务的必要代码,从而通过其基础动作库实现机器人动作的控制。
GPTR 作为一种经济高效的具身智能解决方案脱颖而出,主要是因为它消除了对 LLM 进行特定任务微调的需求。利用广泛现有的知识库和复杂的推理能力,GPTR 可以直接生成控制机器人的代码,大幅减少传统编程通常所需的时间和成本。
在传统的机器人编程中,每个任务都需要创建定制的控制算法——这个过程既耗时又依赖于高度熟练的工程师。然而,GPTR 通过利用预训练的 LLM 快速生成有效的控制代码来规避这些障碍。在这个过程中,LLM 利用了它在训练期间收集的大量知识,包括编程策略、算法设计和优化技术,以应对机器人任务中的特定挑战。
图 11.6 有效地概述了 GPTR 在多种条件下执行任务的四个关键步骤:首先,它涉及封装用于控制机器人动作的库函数,包括移动、停止和获取目标位置数据。随后,构建一个包含任务和环境描述以及库函数的提示。接着,进行模拟运行,确保与 ChatGPT 的持续交互,以保证任务目标得到满足。最终,代码直接部署到机器上。

图 11.6 ChatGPT 在机器人任务执行中的四个步骤。图片来源:论文“ChatGPT for Robotics: Design Principles and Model Abilities”。
它概述了 GPTR 在多种条件下执行任务的四个关键步骤:首先,它涉及封装用于控制机器人动作的库函数,包括移动、停止和获取目标位置数据。步骤如下:1. 定义与任务相关的机器人 API 库。例如,有人想让机器人煮煎蛋并给爷爷端上。API 函数包括 locateobject、movetolocation、cookitem 和 grab_object。API 应易于在机器人上实现,并为 LLM 提供描述性文本名称。它们可以串联起来形成更复杂的功能。2. 遵循工程原则构建提示。提示应考虑机器人的目标和可用的函数。提供了一个为家庭助手机器人准备老人煎蛋的示例提示。3. 用户在循环中:迭代解决方案的质量和安全性。这涉及到使用提示与 ChatGPT 进行对话,运行模拟,评估和改进解决方案。4. 执行!最后一步是使用机器人执行任务。
GPTR 擅长处理三种不同类型的任务:主要任务类型是零样本任务规划,它在不具备先前特定知识的情况下为新任务制定计划。例如,如图图 11.7 所示,在无人机检查中,ChatGPT 能够从输入中巧妙地解读用户意图,为无人机制定可行的检查策略和巡逻路线。这使得即使是非技术用户也能有效地监督无人机操作。

图 11.7 无人机检查的零样本任务规划示例。
左侧部分展示了从风力涡轮机底部向上看向转子轮毂和叶片的特写视图,附*有一架无人机在飞行。在左下角的插图中有风力涡轮机在地面上的影子。右侧部分展示了从远处看风力涡轮机,无人机飞得更靠*观察者。右下角的插图显示了风力涡轮机叶片的侧面视图。两部分都有海岸线和海洋作为背景。
此外,ChatGPT 充当用户与机器人之间的自然语言接口,使得非技术人士与机器人互动并引导它们完成复杂任务变得简单直接。然而,在现实场景中,机器人必须管理不断变化的环境数据并应对不确定性。因此,像 GPTR 这样的 LLM 通常需要与其他 AI 技术集成,例如强化学*或计算机视觉,以培养强大且可靠的具身智能。
第二类任务包括由交互式对话促进的复杂任务。这些任务需要机器人和用户之间持续的互动以满足复杂的目标。这种互动培养了复杂的控制模式,使得 ChatGPT 能够吸收和融合简单的控制方案以应对更大、更复杂的任务。此外,ChatGPT 可以将生成控制代码的高级语义需求转换为可操作的低级编码任务,简化了非技术用户的交互。
如图 11.8 所示,考虑一个非技术用户指导 ChatGPT 为配备前向距离传感器的无人机设计一个目标实现和避障算法。虽然 ChatGPT 可以编写避障算法的大部分内容,但它仍然需要用户输入无人机方向以确定任何被忽略的步骤。尽管反馈是高级语义文本,ChatGPT 仍能进行有针对性的代码调整以完善其解决方案。这些实例突显了 ChatGPT 通过交互式对话逐步完善其解决方案,从而在复杂场景中提高性能。这种方法特别适用于非技术用户,他们可以使用自然语言指导 ChatGPT,而无需深入了解技术细节。然而,为确保 ChatGPT 能够精确理解和调整,用户必须提供明确和详细的反馈。有时,可能需要迭代 ChatGPT 的改进以达到最佳结果。

图 11.8 无人机避障任务。
课程由各种金属结构组成,类似于脚手架,排列成一定的图案。在背景中,可以看到远处有一个绿色方形目标,似乎是无人机的目的地。环境暗示这是一个开阔的场地,天空晴朗,塔楼的影子投射在地面上,表明模拟中存在光源。无人机装备有四个旋翼,正在飞行中,穿越障碍物。图像中没有人或其他可识别的物体。
第三种任务类型涉及感知-行动反馈循环,要求机器人根据其环境感知启动一系列行动。可以从两个不同的角度评估 ChatGPT 在这个领域的技能。
首先,考虑 ChatGPT 如何使用 API 库建立感知-行动反馈循环。在其代码输出中,ChatGPT 精确地使用感知功能,如图像捕获和物体检测,以收集机器人必要的导航和控制信息。这展示了 ChatGPT 在处理视觉感知数据方面的能力,确保在陌生环境中高效导航和操作。
此外,评估 ChatGPT 创建可持续的感知-行动反馈循环的能力。在此探索中,研究人员通过文本对话持续将感知信息输入模型,首先将环境数据转换为文本,然后再提交给 ChatGPT。这个过程表明 ChatGPT 可以解释这些数据并根据它们制定适当的行动,展示了其将感官输入转化为可执行响应的熟练程度。
在一项涉及感知-动作反馈循环的最*实验中,ChatGPT 被配备了计算机视觉模型,这是其功能工具包的一部分,以帮助在未知环境中探索和导航到用户指定的物体。利用 YOLOv8 后端的对象检测 API,它识别了物体边界,而 ChatGPT 负责生成导航代码,估计物体接*时的相对角度。当补充了深度传感器数据后,ChatGPT 可以进一步优化其算法,展示了其模块化适应性。
如图 11.9 所示,该设置使用 Habitat 模拟器构建,引导智能体到达指定的兴趣区域。这个设置通过基于对话的交互测试了 ChatGPT 在感知-动作反馈循环中的作用。环境感知数据——可见物体的极坐标描述——通过文本对话输入到 ChatGPT。ChatGPT 的回答仅限于移动距离和转向角度,智能体执行这些动作,在这个过程中产生了新的环境数据。

图 11.9 ChatGPT 中感知-动作反馈循环的示例。
图像显示了一个模拟的室内环境,类似于客厅,有沙发、咖啡桌和装饰品。在前景中,有一个命令提示符窗口,显示多行文本,表明动作“向沙发移动”,后面跟着以厘米为单位的距离。背景显示了模拟房间的更大视图,在右上角,有一个较小的插入图像,围绕着一个盆栽植物、餐桌和沙发等物体画有彩色框,这很可能代表了模拟环境中的对象检测。
试验证实了该模型处理简单导航任务的能力。然而,它也突出了进一步研究如何精确地以文本或矢量格式描述环境场景的必要性,以应对更复杂任务和设置。
总结来说,感知-动作反馈循环任务迫使机器人根据其环境感知制定一系列动作。将环境数据持续输入到 ChatGPT,并监控其输出,揭示该模型能够熟练地解释观测数据并据此制定合适的动作。这些发现展示了 ChatGPT 作为感知-动作反馈循环中的控制系统潜力,有助于在复杂环境中进行有效导航。
在现实世界的应用中,识别更有效的方法来情境化场景对于增强模型的环境理解至关重要。此外,研究必须继续优化将感官信息输入模型的方式的效率和简单性。实际场景也可能带来额外的挑战,包括计算资源限制、模型的实时性能以及安全和可靠性问题。
目前,像微软的 GPTR 和谷歌的 PaLM-E 这样的举措突显了 LLM 在机器人领域的潜在影响。尽管它们在推理和任务分解方面存在局限性,例如特定任务的专用机器人 API 的粒度,GPTR 依赖于手动编纂的先验知识来将动作原语编译成技能库,导致设计粒度问题,并在现实环境中的安全性方面被忽视。尽管如此,利用 LLM 进行具身智能可以显著提高现有生产力,标志着这是一个具有巨大商业前景的领域。
11.5 摘要
随着 GPT-4 的发布和 GPT-5 的持续开发,人工智能正进入一个突破性的新阶段。预计 GPT 系列的未来迭代将推动知识密集型任务的边界,利用更大规模的多模态数据和越来越复杂的模型。尽管有这些进步,当前的 LLM 在复杂推理任务中仍存在局限性。例如,它们处理简单字符复制推理或算术的能力随着字符串或数字的变长而显著下降。此外,它们在复杂行为规划方面的能力仍相对不发达。然而,随着这些模型规模的增加,它们开始表现出可预测的规模依赖行为。
这种情况引发两个关键问题:扩大 LLM 规模能在多大程度上解决这些挑战?考虑到这些模型的新兴能力,随着规模的进一步增加和更多样化的多模态数据集成,可能会发展出哪些未预见的技能?尽管对 GPT 研究方向存在批评,但 GPT-4 所展现的能力——从跨各种模态和领域的理解到其在机器人智能代理和任务规划方面的潜力——标志着通用人工智能新时代的曙光。未来已经到来,拥抱它是我们的唯一选择。
索引
注意:后跟“f”和“t”的页码分别指代图和表。
A
-
行动概率分布,124–125
-
行动值函数,127,128
-
Actor-Critic 算法,128–130,128f
-
自适应探索/利用,130
-
优势函数估计,130
-
双学*过程,130
-
双网络训练,稳定性,130
-
探索策略问题,130
-
超参数调整挑战,130
-
样本复杂性问题,130
-
TD 误差作为学*信号,130
-
-
行动者制定策略,128
-
Adafactor 优化器,120
-
AdaGrad,42
-
Adam, 42
-
Adam 优化器,22,116
-
自适应动量估计,42
-
Adept AI,186
-
优势函数,127–128
-
代理,180f
-
代理-环境交互,125f
-
AgentGPT,182
-
AGI,参见 通用人工智能
-
All-Reduce 操作,118
-
Alpaca 模型,170,170f
-
AlphaGo 的精通,4
-
交替密集和稀疏注意力模式,83
-
注释标准,140–142
-
注释者,140,141–142
-
苹果的 Siri,1
-
通用人工智能(AGI),3–4
-
人工智能—ChatGPT,新的里程碑
-
能力水平,3–6
-
发展历史,1–3
-
大型语言模型
-
影响,13–16
-
局限性,19–20
-
技术栈,12–13
-
-
大型语言模型的技术演进,6–11
-
人类反馈强化学*,11
-
监督微调,10–11
-
符号主义与连接主义,6–7
-
Transformer, 7–9
-
无监督预训练, 9–10
-
-
训练/部署大型模型,挑战,16–19
-
计算能力, 16–17
-
数据, 17–18
-
工程, 18–19
-
-
-
ArXiv, 100
-
注意力头, 29, 189
-
注意力得分矩阵, 23–24, 24–25
- 加权词嵌入,27f
-
注意力权重矩阵, 26, 26f
-
AutoGPT, 15f, 181–183, 182, 182f
-
自主 ChatDoctor, 172f
-
自回归语言模型, 51, 52
-
自回归模型,局限性,192–195
-
自回归预测, 76
-
自回归过程, 76–77, 77f
-
奖项获得者 LeCun, 194
-
Azure Search, 177
B
-
Baby AGI, 182
-
基准估计器, 135
-
基础模型, 169–170
-
贝叶斯框架, 94
-
贝叶斯推理, 92–94
-
概念分布的贝叶斯推理, 88–94
-
BBPE,参见字节级字节对编码
-
BERT, 61
-
BF16,参见 bfloat16
-
bfloat16 (BF16), 120–121, 120–121
-
BLOOM, 119
-
BLOOM-176B, 101–102
-
Boston Dynamics 展示, 195–196
-
BPE,参见字节对编码
-
BPE 算法, 69
-
暴力训练, 192–193
-
字节级字节对编码(BBPE),70,79–81
-
字节对编码(BPE),66
C
-
CAI,参见 宪法人工智能
-
计算方法,27f
-
回调模块,179
-
Chachi BT,190–191
-
思维链(CoT),94,102,191–192
-
信道推断,90–91
-
字符合并示例,68t
-
字符出现频率,68t
-
字符对,频率统计,66
-
ChatDoctor,171,171f
-
ChatGPT,144
-
ChatGPT for robotics (GPTR),197–203
-
ChatGPT 插件,185
-
中文语料库,98
-
中文语料库,17–18
-
剪裁 PPO 目标函数,133–134
-
剪裁目标函数,133
- 不同值的图,134f
-
闭环反馈系统,194
-
代码分析,183
-
Code-cushman-001,137–138
-
Code-davinci-002,139
-
Codex,18,137
-
系数矩阵,26
-
组合位置编码,40
-
Common Crawl,99–101,100
-
常识知识,9–10
-
通信操作,115f
-
计算挑战,103
-
计算硬件,12–13
-
计算能力,16–17
-
3.14E23 FLOPS,16–17
-
758 A100 GPU,16–17
-
1000 个 A100 GPU,16–17
-
2048 个 Nvidia A100 GPU,16–17
-
推理和部署阶段,17
-
NVIDIA 80GB A100 GPU,16–17
-
预训练和微调阶段,16–17
-
-
计算资源限制,203
-
计算资源,88
-
计算机科学,73
-
宪法人工智能(CAI),161–162,161f
-
上下文关注头部,30
-
上下文学*,89,92
-
上下文学* 与 传统微调,86f
-
传统机器人编程,198–199
-
正确标签,90–91
-
余弦退火,43
-
余弦函数,22,38,41
-
CoT,参见 思维链
-
协变量偏移,64
-
交叉熵,22,41–42
-
跨层稀疏连接,84
D
-
DAG,参见 有向无环图
-
数据增强方法,44
-
数据并行,103–105,104f,107–109,109
-
数据资源耗尽,190–192
-
Davinci API,137
-
解码器,36,61–62,62f
- 组件,8–9
-
深度学*,195–196
- 模型,6–7
-
DeepMind,191
- Chinchilla 模型,191
-
深度神经网络训练,35
-
DeepNorm,120
-
深度残差网络,35
-
Deepspeed,13,115–116,119–120
-
分隔符,57
-
稠密连接,84
-
稠密层,163
-
对话模式,178
-
对话生成,10–11
-
数字景观,69
-
维度 d_model,39
-
有向无环图(DAG),110–111
-
直接推理,90–91
-
分布式训练,109
- 模式,103–109
-
分而治之方法,97–98
-
下游任务,90f
-
无人机避障任务,201f
-
Dropout 正则化,43,43f,44
-
Dropout 策略,31–32
-
Dropout 技术,54
-
尘埃和规模 AI 咒语书,184
E
-
提前停止方法,44
-
ELIZA,1
-
嵌入模式,178
-
融入智能,195–203
-
行动,196
-
决策,196
-
学*,196
-
感知,196
-
表示,196
-
-
编码器,36,61–62,62f
-
-解码器架构,8–9,37
-
栈,8–9
-
-
熵损失,133
-
持续演变的环镜数据,200
-
指数衰减,43
-
广泛语料库统计,9
-
大量标注数据,88
-
大量模型扩展,8
F
-
Facebook 的 FairScale,110
-
事实知识,9–10
-
前馈网络模块,8–9
-
前馈神经网络(FNN),21,32–34
-
输入层,32–33
-
线性层,33
-
输出层,32–33
-
-
少样本任务,140
-
少样本学*能力,86,87–88,89,92–93
-
小说类型,100
-
过滤过程,160–161
-
微调,72,93–94
-
数据集,来源,140
-
相位,50,55
-
过程,75,86,89f
-
步骤,57–58
-
-
浮点格式,121f
-
FNN,参见 前馈神经网络
-
FNN 子层,36
-
基础 Transformer 研究,30
-
FP16,120–121
-
FP32,120–121
-
完全排序方法,150
G
-
门控循环单元(GRUs),6–7
-
高斯分布,164
-
高斯误差线性单元(GELU),33
-
GELU,参见 高斯误差线性单元
-
GELU 激活函数,34f
-
泛化增强,34
-
生成预训练(GPT),47–48,48–51
- 模型,56f
-
生成预训练过程,51–54
-
误差反向传播过程, 53–54
-
目标, 51–52
-
-
GitHub, 100, 101–102, 169
-
GLaM, 187–188
-
Google Brain 团队, 2, 94
-
Google 的 Pathways, 110
- 异步分布式数据流, 111f
-
GPT-2, 2, 61–62, 63–71, 63f
-
自回归生成过程, 74–77
-
自回归过程, 76–77
-
层归一化, 64
-
可学*的相对位置编码, 70–71
-
模型架构, 64f
-
正交初始化, 65–66
-
可逆标记化, 66–70
-
子词单元嵌入, 75–76
-
-
GPT-3.0, 99–101
-
GPT-3.5, 99–101
-
GPT-3 模型架构, 80f, 187–188
-
用于训练的数据集, 100t
-
嵌入层, 81
-
输入和 BBPE 标记化, 81
-
层归一化, 81
-
输出层, 81
-
位置编码, 81
-
训练数据集, 18f
-
Transformer 层, 81
-
-
GPT-3 SET 模型, 150–151
-
GPT-3 到 GPT-3.5
- 从中得出的技术路线图, 138f
-
GPT-4, 191
-
GPT-4 气球图像多模态, 3f
-
GPT-4 智能
-
自主学*和推理, 6
-
泛化能力, 5
-
知识理解和应用, 5
-
任务性能, 5
-
-
GPT-4 具有人类考试水平, 5f
-
GPT-5, 191
-
GPT-Index, 184
-
GPTQ 量化技术, 167–168
-
GPT,参见 生成式预训练
-
GPT 系列演变时间线, 2f
-
GPT 系列模型架构, 9f
-
GPU 内核, 167–168
-
GPU 的 VRAM, 118
-
梯度累积, 45
-
梯度计算, 127
-
梯度裁剪技术, 22, 44
-
梯度下降方法, 53
-
梯度问题, 64
-
渐进幅度剪枝, 167
-
GRUs,参见 门控循环单元
-
GSM8K, 95
H
-
Habitat 模拟器, 202
-
HealthCareMagic, 171
-
赫 essian 矩阵, 132
-
HFRL,参见 人类反馈强化学*
-
高级响应, 148–149
-
高频字符对, 66
-
高级语言命令, 198f
-
高速以太网, 112
-
HuggingGPT, 182
-
人类大脑, 189
-
人机界面, 14
-
人类反馈强化学* (HFRL), 11
-
在 ChatGPT 中, 137–139
-
InstructGPT 训练数据集, 139–144
-
注释标准, 140–142
-
数据分析, 142–144
-
微调数据集,来源, 140
-
-
多轮对话能力, 152–153
-
必要性, 153–155
-
InstructGPT 中的 PPO,150–152
-
奖励建模算法, 148–150
-
损失函数,149–150
-
奖励分数,148–149
-
-
训练阶段,144–148
-
强化学*,147–148
-
奖励建模,146–147
-
监督微调,145–146
-
-
-
人类生成的注释,157
-
超参数调整,58
I
-
图像到文本,192
-
隐式微调,88–92
-
重要性采样,126–127
- 在策略梯度方法中,126f
-
不当初始化,65
-
在上下文中学*,85–88,86–88
-
索引模块,179f
-
推理和部署阶段,17
-
InfiniBand,112
-
Inflection AI,186
-
初始 K-1 对,140
-
初始监督微调,11
-
输入实例生成,159–160,160f
-
输入标签映射,90
-
输入层,32–33
-
输入矩阵,27
-
输入序列,23
-
实例生成,159–160
-
Instruct-davinci-beta,138
-
InstructGPT,3,99–101,144,150
-
强化学*过程,151f
-
多轮对话中的奖励模型,152f
-
-
InstructGPT 训练数据集,139–144
- 数据分布,143t
-
指令跟随模型,170–171
-
指令生成,158,159f
-
INT8 整数,166
-
INT32 输出,166
-
交互式对话,200
-
GPU 间通信,114
-
复杂的语言模式,87
-
逆海森矩阵序列,167
-
迭代合并过程,67
-
IT 票务系统,177
J
-
杰森·魏(Jason Wei),94
-
联合嵌入预测架构,195
-
司法领域,173–175
-
JusticGPT,173,174
K
-
哈姆林·海(Kaiming He),35
-
关键向量,27–28
-
关键词挖掘方法,172
-
KL 散度,93,131,131f
L
-
L1 正则化方法,44
-
标签平滑技术,45
-
LAMBADA 语言建模任务,74
-
LaMDA,95,187–188
-
LangChain,177–181,181t
-
大型语言模型(LLM),12–13,12f,91
-
准确性,19
-
应用层,13
-
真实性,19
-
功能,14–15
-
分布式训练模式,103–109
-
数据并行,103–105
-
模型并行,105–109
-
-
潜在能力,188f
-
道德影响,19–20
-
框架层,13
-
基础设施层,12–13
-
可解释性,19
-
中型企业,15–16
-
基于中间件的,15–16,15f
-
中间件层,13
-
模型层,13
-
开源数据,174t
-
预训练数据集,99–101
-
隐私问题,20
-
预训练数据处理,101–103
-
小型企业,15–16
-
社会影响,19–20
-
技术方法,109–119
-
Megatron-LM,113–115
-
路径,110–113
-
ZeRO,115–119
-
-
训练,17
-
训练数据集,101t
-
训练策略,示例,119–122
-
BF16,120–121
-
优化训练设置,120
-
其他因素,121–122
-
参数稳定性,120
-
训练框架,119–120
-
-
作为通用接口,14f
-
-
大型语言模型,未来路径
-
自回归模型,局限性,192–195
-
数据资源耗尽,190–192
-
蕴含智能,195–203
-
挑战,195–196
-
ChatGPT 用于机器人,197–203
-
PaLM-E 项目,196–197
-
-
强人工智能之路,187–190
-
-
大型语言模型,低资源领域迁移
-
案例研究,169–175
-
基础模型,169–170
-
指令遵循模型,170–171
-
司法领域,173–175
-
医疗领域,171–173
-
-
宪法人工智能,161–162
-
低秩自适应,163–165
-
排名选择,164–165
-
模型训练和部署,163–164
-
-
量化,165–166
-
自我指导,157–161
-
过滤,160–161
-
实例生成,159–160
-
指令生成,158
-
任务分类识别,158
-
-
SparseGPT,166–169
-
-
LawGPT_zh,173,175f
-
律师 LLaMA,173
-
层次多头注意力,32
-
层归一化,22,36–37,64
-
层归一化,参见 层归一化
-
可学*的相对位置编码,70–71,83
-
学*位置编码,40
-
学*率调整策略,42–43
-
学*率预热策略/技术,22,44,45f
-
LessWrong 博客文章,191
-
LexiLaw,173
-
LibGen18,100
-
语言学知识,9–10
-
Lingvo,110
-
Linux 操作系统,4
-
带参数缩放的 LLaMA,169t
-
LLM 生成的指令,158
-
局部带状注意力,83–84
-
构建注意力矩阵,83
-
确定窗口大小,83
-
执行局部带状注意力,83
-
-
局部带状稀疏连接,84
-
局部信息提取,34
-
局部多头注意力,32
-
长距离依赖,83
-
长短期记忆网络 (LSTMs),6–7,28
-
长期记忆, 181
-
LoRA,参见 低秩自适应
-
损失函数, 41–42, 54–55, 149–150
-
低秩自适应(LoRA), 163–165
-
低秩分解, 164
-
LSTM,参见 长短期记忆网络
M
-
机器学*(ML), 110–111
-
机器学*阶段, 6, 19f
-
手动标注, 157
-
面具自注意力, 9, 10f, 47, 50f
- 机制, 62
-
面具矩阵, 48–49
-
数学向量, 187
-
矩阵计算过程, 25f
-
多 GPU 上的矩阵乘法,106f
-
矩阵乘法, 113
-
医疗领域, 171–173
-
Megatron-LM, 13, 113–115
-
Megatron-Turing NLG, 187–188
-
存储函数, 189
-
存储墙, 109
-
元学*, 85–88, 85
-
元 LLaMA 模型, 16–17, 103
-
元优化过程, 89f
-
元优化器, 88–89
-
Meta 的 LLaMA 7B, 170
-
Meta 的 Toolformer, 186
-
微软的 DeepSpeed ZeRO, 110
-
微软的新必应, 13
-
微软的 PipeDream, 110
-
微软的小冰, 1
-
中间件
-
AutoGPT, 181–183
-
竞争者,183–186
-
LangChain, 177–181
-
-
混合精度加速比和训练损失,45f
-
混合精度分解策略,165–166
-
混合精度训练迭代/方法,45,116f
-
机器学*,参见 机器学*
-
沟壑,14–15
-
模型应用,58
-
模型微调,58
-
模型生成的概率分布,51
-
模型梯度,116
-
模型初始化,58
-
模型并行性,105–109,105f
-
模型参数,116
-
模型性能评估,58
-
模型后剪枝,167
-
模型的实时性能,203
-
模型训练和部署,163–164
-
蒙特卡洛方法,125,129
-
MTL,参见 多任务学*
-
多头注意力机制,21,28–32,29f,37
-
可视化,31f
-
加权融合,30f
-
-
多头注意力模块,8–9
-
多层感知器,32–33
-
MultiNLI 数据集,164–165
-
多选题任务,90–91
-
多选题标记,57
-
多个解码器组件,76
-
多任务和零样本学*,72–74
-
多任务学*(MTL),61
-
多任务监督学*概念,71f
-
多任务无监督学*概念,71f
-
多轮对话能力,152–153
N
-
美国国家卫生研究院,100
-
自然语言推理(NLI),56–57
-
自然语言处理(NLP),2,21,47,138
-
自然语言文本,72–73
-
负梯度,134
-
神经网络操作,65
-
神经网络参数,124
-
神经网络,107
-
神经元的输出,36–37
-
下一代人机交互,183–184
-
2048 块 Nvidia A100 GPU,103
-
NLI,参见 自然语言推理
-
NLP,参见 自然语言处理
-
NLP 任务,67
-
Noam 调度,42
-
非虚构体裁,100
-
非线性引入,34
-
非线性变换,35
-
非营利人工智能研究机构,1
-
归一化类型,65f
-
数值稳定性,37
-
nuQmm,167–168
-
NVIDIA 的 Megatron-LM,110
-
NVIDIA 的 V100,121
-
NVMe 协议,119
O
-
一维分片,105–106
-
One-hot 编码,26
-
一次学*能力,86,87
-
持续内部对话,189–190
-
在线学*,148
-
OpenAI,1
-
开源策略,110
-
OPT,119
-
OPT-175B,101–102,102,165
-
优化,41–46
-
目标,131–132
-
技术,28
-
-
优化器,42,64
-
优化训练设置,120
-
正交初始化,65–66
-
正交矩阵,65
-
输出优先实例生成,159–160,160f
-
输出层,32–33
-
输出矩阵,27
-
输出向量,30
P
-
PaLM,95,101,119,119–120
-
PaLM-E 项目,196–197,197f,197f
-
并行计算,107
-
并行计算能力,8
-
并行类型,108t
-
参数稳定性,120
-
途径,13
-
途径特征
-
架构,111
-
异步执行,110
-
集中式调度,112
-
DAG,111–112
-
分布式处理,110
-
容错性,110–111
-
灵活性,110
-
群岛加速器子集,112
-
概述,111f
-
-
感知-行动反馈循环,201,202,202f
-
分段常数策略,43
-
管道气泡,107,107–109
-
管道并行,106,107–109,109
-
管道并行训练,107f
-
PM,参见 偏好模型
-
政策梯度方法,124,125,128
-
位置编码,22,153
-
位置信号,39–40
-
基于位置的卷积神经网络,37
-
位置嵌入矩阵,52
-
位置编码,37–41
-
其设计和实现,38–40
-
其工作流程,38f
-
-
后验概率分布,93
-
PPO,参见 *端策略优化
-
PPO 数据集,142–143
-
InstructGPT 中的 PPO,150–152
-
PPO 模型和 SFT 模型,比较,154f
-
偏好模型(PM),162
-
预训练语言模型,91
-
预训练数据
-
去重,102
-
其多样性,102
-
其质量和数量,101
-
-
预训练机制,9–10
-
私有云,12–13
-
处理并行性,118f
-
Project Gutenberg,100
-
投影值,25–26
-
提示模板库,178f
-
*端策略优化(PPO),150–151
-
Actor-Critic 算法,128–130
-
算法步骤,129
-
挑战,130
-
问题,130
-
价值函数和政策更新,130
-
-
其原则,132–135
-
传统政策梯度方法,123–128
-
优势函数,127–128
-
重要性采样,126–127
-
其原则,123–125
-
-
信任域策略优化,131–132
-
局限性,132
-
优化目标,131–132
-
-
-
剪枝技术,166–167
-
PTD-P,115
-
公共云,12–13
-
Pushshift.io Reddit,102
-
Python 代码,137–138
-
PyTorch,13,113
Q
-
QR 分解,66f
-
量化,165–166
-
查询向量,27–28
-
问答任务,10–11,55–56
R
-
随机标签,90–91
-
推理链,97f
-
修正线性单元(ReLU),33
-
循环神经网络(RNNs),2,21
-
参考策略,126
-
正则化系数/技术,43–44,54–55
-
正则化项,54–55
-
从 AI 反馈中进行强化学*(RLAIF),161
-
强化学*(RL),161
-
从人类反馈中进行强化学*(RLHF),138
-
强化学*机制,147–148,147f
-
带有人类反馈的强化学*,11f
-
相对位置编码,70
-
相对位置编码,40
-
ReLU,参见 修正线性单元
-
重新参数化方法,163f
-
表示状态转移(REST),177
-
残差连接,22,35–36,37
-
可逆标记化,66–70
-
奖励模型(RM),11
-
奖励建模算法,146–147,146f,148–150
-
奖励建模阶段,139–140
-
奖励建模排名算法,149f
-
奖励分数,148–149
-
RLAIF,参见 从 AI 反馈中进行强化学*
-
RL-CAI 模型,162
-
RLHF,参见 从人类反馈中进行强化学*
-
RLHF 微调,154–155
-
RL,参见 强化学*
-
RM,参见 奖励模型
-
RM 数据集,142
-
RMSprop,42
-
RNNs,参见 循环神经网络
S
-
旧金山,1
-
Sci-Hub,100
-
带搜索的自问,180f
-
自注意力与掩码自注意力,差异,63f
-
自注意力机制,7,21,23–28,24f,82
- 计算过程,23–25
-
自注意力模块,164–165
-
自注意力子层,48
-
自洽原理,194
-
自指导,157–161
-
自指导标注方法,157,158f
-
语义内核项目,184,184f
-
语义文本相似度基准(STS-B),74
-
半结构化稀疏化,168–169
-
情感分析,10–11,74
-
SerpApi,179
-
SFT,参见 监督微调
-
SFT 数据集,142
-
SGD,参见 随机梯度下降
-
短期记忆,181
-
硅谷人物,1
-
相似性标记,57
-
简单任务,140
-
正弦函数,22,38,41
-
SL-CAI 模型,162
-
SL,参见 监督学*
-
小规模模型,14–15
-
Smashwords,100
-
Softmax 归一化,23–24
-
稀疏注意力和基于内容的学*
-
概念分布的贝叶斯推理,88–94
- 隐式微调,88–92
-
GPT-3,79–81
-
在上下文中学*,85–88,86–88
-
元学*,85–88,85
-
稀疏转换器,81–84
-
特征,82–83
-
跨层稀疏连接,84
-
局部带状注意力,83–84
-
-
思维链,94–98
-
-
稀疏注意力模式,82–83
-
SparseGPT,166–169,167f
-
稀疏多头注意力,32
-
稀疏转换器,30,79–81,82f
-
特殊分类标记,56
-
专用训练过程,85
-
特殊分隔符,55–56
-
StackExchange,100
-
标准提示与推理链提示,97f
-
斯坦福大学的 Alpaca 项目,171
-
最先进的模型,104f
-
状态值函数,128
-
步步问题解决准确性,97–98
-
步步推理概念,95
-
随机梯度下降(SGD),42,47–48
-
存储 3TB,17–18
-
STS-B,参见 语义文本相似度基准
-
后续前馈子层,48
-
子词单元嵌入,75–76
-
监督微调(SFT),10–11,54,54–58,58,139–140,145f,170–171
-
微调步骤,57–58
-
原则,54–55
-
对于特定任务,55–57
-
-
监督学*(SL),161
-
符号主义 与 连接主义,6–7
-
深度学*,6
-
特征工程,6
-
泛化能力,6
-
并行计算能力不足,7
-
内部门控机制,7
-
有限的鲁棒性,6
-
长距离依赖问题,7
-
机器学*,6
-
模型容量限制,7
-
-
语法聚焦头部,30
T
-
目标策略,126
-
目标任务选择,57
-
任务分类识别,158
-
特定任务输入转换,57
-
TD,参见 时间差分
-
TechRadar,190–191
-
时间差分(TD),129
-
TensorFlow,13,113
-
张量并行性,105–106,107–109
-
文本分类,56
-
Text-davinci-001,138
-
Text-davinci-003,139
-
文本模式,178
-
文本摘要任务,73
-
文本到图像,192
-
文本到语音,192
-
思维链,94–98
-
令牌嵌入,75f
-
传统绝对位置编码,70
-
传统微调方法,13–14
-
传统 RNN,6–7
-
传统 Transformer,82f
-
训练奖励模型,151
-
训练数据准备,58
-
训练框架,119–120
-
轨迹,124
-
迁移学*场景,69
-
Transformer,7–9,8f,164–165
-
基于 Transformer 的解码器结构,81
-
Transformer 块,114f
-
Transformer 解码器,48f
-
Transformer 模型,2,21–22,49f,165t
-
前馈神经网络,32–34
-
层归一化,36–37
-
学*率调整策略,42–43
-
损失函数,41–42
-
多头注意力机制,28–32
-
实现,29–30
-
优化,32
-
作用,30–32
-
-
优化,41–46
-
优化器,42
-
位置编码,37–41
-
优缺点,41
-
设计与实现,38–40
-
变体,40
-
-
正则化,43–44
-
残差连接,35–36
-
自注意力机制,23–28
-
优缺点,28
-
计算过程,23–25
-
本质,25–28
-
-
训练,41–46
-
-
Transformer 的解码架构,187–188
-
Transformer 的自注意力机制,153
-
Transformer 堆叠层,52
-
TRPO,参见 信任域策略优化
-
信任域策略优化 (TRPO),131–132
-
计算复杂性,132
-
处理离散动作,132
-
超参数调整,132
-
需要二阶导数,132
-
-
TruthfulQA 数据集,154
U
-
低利用率,107
-
单向语言模型,9
-
均匀梯度缩放,64
-
通用机器学*框架,193f
-
无结构稀疏化,168–169
-
无监督学*,54
-
无监督多任务学*,71–72
-
无监督多任务学*,71–72
-
无监督预训练阶段,9–10,52,85
-
基于用户数据的用例,141t
V
-
V100 NVIDIA GPU,103
-
价值估计损失,133
-
价值向量,27–28
-
向量空间,25–26
-
向量量化,165–166
-
虚拟化身,192
-
视觉 Transformer,196–197
-
VisualGPT,182
-
词汇初始化,66
-
投票机制,95–97
-
VRAM 消耗,107–109
-
VRAM 碎片化,118
-
VRAM 限制,103
W
-
弱人工智能,4
-
WebText,2,63,100
-
WebText2,99–101
-
WebText 数据集,71
-
权重衰减,43,54
-
权重初始化策略,44,65
-
优化良好的集群,115
-
无线网络,162
-
维基百科,99–100,99–101,169
-
WikiSQL,164–165
-
Wolfram 工具,185,185f
-
世界知识,9–10
-
世界模型,194–195
-
世界模型训练,195
-
WuDaoCorpora,17–18
X
-
湘潭大学智能司法研究团队,173
-
王雪志,94
Y
-
易马,193
-
YOLOv8 后端,201–202
Z
-
ZeRO-1,117
-
ZeRO-2,117
-
ZeRO-3,117
-
ZeRO-Infinity,119
-
ZeRO-Offload 技术,118,119f
-
ZeroQuant,167–168
-
零冗余优化器(ZeRO),115–119
-
通信量,117f
-
内存节省,117f
-
三层系统,117
-
-
ZeRO,参见 零冗余优化器
-
零样本学*,61,72–74
-
零样本学*能力,61,76,86,87
-
零样本学* CoT,94f
-
零样本推理链和零样本学*,比较,96t
-
零样本任务规划,199–200

来微调模型。使用 SGD 或其他优化算法更新参数,结合正则化技术(如 L2 正则化)调整正则化系数
并防止过拟合。
和y——输入文本及其潜在对应的答案——在影响上下文学*结果方面发挥着重要作用。在随机标签的情境中,例如
,即使
是错误的,它仍然在可能的答案集
中。改变这些分布,如用预期答案集外的选项替换
,将极大地损害学*过程。
,其中X是输入,A是权重,Y是输出。这个过程涉及将矩阵分解为计算段,然后汇总结果。矩阵A可以按行或列分割:
(6.1)
来决定一个行动。
和奖励 r。
代表折扣因子,它调整未来奖励的重要性。
来细化 Critic 的参数
。
也被用作优势函数的代理来更新 Actor 的策略参数
:
其中
是学*率。
浙公网安备 33010602011771号