今天分享的是人工智能系列深度研究报告:《 哈尔滨工业大学ChatGPT调研报告 》。
大规模预训练语言模型的技术发展历程
大规模预训练语言模型(简称大模型)作为 ChatGPT 的知识表示及存 储基础,对系统效果表现至关重要,接下来对大模型的技术发展历程加以简 要介绍。
2018 年,OpenAI 提出了第一代 GPT(Generative Pretrained Transformer)模型[1],将自然语言处理带入 “预训练” 时代。然而,GPT 模型并没 有引起人们的关注,反倒是谷歌随即提出的 BERT(Bidirectional Encoder Representations from Transformers)模型[2]产生了更大的轰动。不过,OpenAI 继续沿着初代 GPT 的技术思路,陆续发布了 GPT-2[3] 和 GPT 模型 GPT-3[4]。
尤其是 GPT-3 模型,含有 1,750 亿超大规模参数,并且提出 “提示语” (Prompt)的概念,只要提供具体任务的提示语,即便不对模型进行调整也可 完成该任务,如:输入 “我太喜欢 ChatGPT 了,这句话的情感是 __”,那 么 GPT-3 就能够直接输出结果 “褒义”。如果在输入中再给一个或几个示例, 那么任务完成的效果会更好,这也被称为语境学习(In-context Learning)。 更详细的技术细节推荐阅读相关的综述文章[5-8]。
不过,通过对 GPT-3 模型能力的仔细评估发现,大模型并不能真正克 服深度学习模型鲁棒性差、可解释性弱、推理能力缺失的问题,在深层次语 义理解和生成上与人类认知水平还相去甚远。直到 ChatGPT 的问世,才彻 底改变了人们对于大模型的认知。
ChatGPT 技术发展历程
2022 年 11 月 30 日,OpenAI 推出全新的对话式通用人工智能工具—— ChatGPT。据报道,在其推出短短几天内,注册用户超过 100 万,2 个月活 跃用户数已达 1 个亿,引爆全网热议,成为历史上增长最快的消费者应用程 序,掀起了人工智能领域的技术巨浪。
ChatGPT 之所以有这么多活跃用户,是因为它可以通过学习和理解人 类语言,以对话的形式与人类进行交流,交互形式更为自然和精准,极大地 改变了普通大众对于聊天机器人的认知,完成了从“人工智障”到“有趣”的印象转变。除了聊天,ChatGPT 还能够根据用户提出的要求,进行机器 翻译、文案撰写、代码撰写等工作。ChatGPT 拉响了大模型构建的红色警 报,学界和企业界纷纷迅速跟进启动研制自己的大模型。
继 OpenAI 推出 ChatGPT 后,与之合作密切的微软迅速上线了基于 ChatGPT 类技术的 New Bing,并计划将 ChatGPT 集成到 Office 办公套 件中。谷歌也迅速行动推出了类似的 Bard 与之抗衡。除此之外,苹果、亚 马逊、Meta(原 Facebook)等企业也均表示要积极布局 ChatGPT 类技术。 国内也有多家企业和机构明确表态正在进行类 ChatGPT 模型研发。百度表 示正在基于文心大模型进行文心一言的开发,阿里巴巴表示其类 ChatGPT 产品正在研发之中,华为、腾讯表示其在大模型领域均已有相关的布局,网 易表示其已经投入到类 ChatGPT 技术在教育场景的落地研发,京东表示将 推出产业版 ChatGPT,科大讯飞表示将在数月后进行产品级发布,国内高 校复旦大学则推出了类 ChatGPT 的 MOSS 模型。
除了国内外学界和企业界在迅速跟进以外,我国国家层面也对 ChatGPT 有所关注。2023 年 2 月 24 日,科技部部长王志刚表示:“ChatGPT 在 自然语言理解、自然语言处理等方面有进步的地方,同时在算法、数据、算 力上进行了有效结合。”科技部高新技术司司长陈家昌在回应 ChatGPT 相 关提问时也表示,ChatGPT 最近形成了一种现象级的应用,表现出很高的 人机交互水平,表现出自然语言的大模型已经具备了面向通用人工智能的一 些特征,在众多行业领域有着广泛的应用潜力。
ChatGPT 是现象级应用,标志着语言大模型已经具备了一些通用人工 智能特征,在众多行业领域有着广泛的应用潜力。”这标志着在未来,ChatGPT 相关技术有可能会成为国家战略支持的重点。
从技术角度讲,ChatGPT 是一个聚焦于对话生成的大语言模型,其能 够根据用户的文本描述,结合历史对话,产生相应的智能回复。其中 GPT 是英文 Generative Pretrained Transformer 的缩写。GPT 通过学习大量网 络已有文本数据(如 Wikipedia,reddit 对话),获得了像人类一样流畅对话 的能力。虽然 GPT 可以生成流畅的回复,但是有时候生成的回复并不符合 人类的预期,OpenAI 认为符合人类预期的回复应该具有真实性、无害性和 有用性。为了使生成的回复具有以上特征,OpenAI 在 2022 年初发表的工 作“Training language models to follow instructions with human feedback” 中提到引入人工反馈机制,并使用近端策略梯度算法(PPO)对大模型进行训练。这种基于人工反馈的训练模式能够很大程度上减小大模型生成回复与 人类回复之间的偏差,也使得 ChatGPT 具有良好的表现。完整版《哈尔滨工业大学ChatGPT调研报告》来源于公众号:百家全行业报告 研究报告内容节选如下
第一章 ChatGPT 的背景与意义
本章首先介绍自然语言处理、大规模预训练语言模型以及 ChatGPT 技 术的发展历程,接着就 ChatGPT 的技术优点和不足进行分析,然后讨论 ChatGPT 可能的应用前景,最后展望 ChatGPT 普及后可能带来的风险与 挑战。
自然语言处理的发展历史
人类语言(又称自然语言)具有无处不在的歧义性、高度的抽象性、近 乎无穷的语义组合性和持续的进化性,理解语言往往需要具有一定的知识和 推理等认知能力,这些都为计算机处理自然语言带来了巨大的挑战,使其成 为机器难以逾越的鸿沟。因此,自然语言处理被认为是目前制约人工智能取 得更大突破和更广泛应用的瓶颈之一,又被誉为 “人工智能皇冠上的明珠”。 国务院 2017 年印发的《新一代人工智能发展规划》将知识计算与服务、跨 媒体分析推理和自然语言处理作为新一代人工智能关键共性技术体系的重 要组成部分。
自然语言处理自诞生起,经历了五次研究范式的转变(如图 1.1 所示): 由最开始基于小规模专家知识的方法,逐步转向基于机器学习的方法。机器 学习方法也由早期基于浅层机器学习的模型变为了基于深度学习的模型。为 了解决深度学习模型需要大量标注数据的问题,2018 年开始又全面转向基 于大规模预训练语言模型的方法,其突出特点是充分利用大模型、大数据和 大计算以求更好效果。
近期,ChatGPT 表现出了非常惊艳的语言理解、生成、知识推理能力, 它可以极好地理解用户意图,真正做到多轮沟通,并且回答内容完整、重点 清晰、有概括、有逻辑、有条理。ChatGPT 的成功表现,使人们看到了解 决自然语言处理这一认知智能核心问题的一条可能的路径,并被认为向通用 人工智能迈出了坚实的一步,将对搜索引擎构成巨大的挑战,甚至将取代很多人的工作,更将颠覆很多领域和行业。
那么,ChatGPT 到底解决了什么本质科学问题,才能变得如此强大并 受到广泛的关注呢?我们认为,ChatGPT 是继数据库和搜索引擎之后的 全新一代的 “知识表示和调用方式”。
知识在计算机内的表示是人工智能的核心问题。如表 1.1所示,早期,知 识以结构化的方式存储在数据库中,人类需要掌握机器语言(如 SQL),才 能调用这些知识;后来,随着互联网的诞生,更多文本、图片、视频等非结 构化知识存储在互联网中,人类通过关键词的方式调用搜索引擎获取知识; 现在,知识以参数的形式存储在大模型中(从 2018 年开始),ChatGPT 主 要解决了用自然语言直接调用这些知识的问题,这也是人类获取知识最自然 的方式。
另外,从自然语言处理技术发展阶段的角度看(如图 1.1 ),可以发现一 个有趣的现象,即每一个技术阶段的发展时间,大概是上一个阶段的一半。 小规模专家知识发展了 40 年,浅层机器学习是 20 年,之后深度学习大概 10 年,预训练语言模型发展的时间是 5 年,那么以 ChatGPT 为代表的技术能持续多久呢?如果大胆预测,可能是 2 到 3 年,也就是到 2025 年大概 又要更新换代了。
ChatGPT 的相关技术
接下来将简要介绍 ChatGPT 相关技术的发展历程。ChatGPT 核心技 术主要包括其具有良好的自然语言生成能力的大模型 GPT-3.5 以及训练这 一模型的钥匙——基于人工反馈的强化学习(RLHF)。
GPT 家族是 OpenAI 公司推出的相关产品,这是一种生成式语言模型, 可用于对话、问答、机器翻译、写代码等一系列自然语言任务。每一代 GPT 相较于上一代模型的参数量均呈现出爆炸式增长。OpenAI 在 2018 年 6 月 发布的 GPT 包含 1.2 亿参数,在 2019 年 2 月发布的 GPT-2 包含 15 亿参 数,在 2020 年 5 月发布的 GPT-3 包含 1750 亿参数。与相应参数量一同增 长的还有公司逐年积淀下来的恐怖的数据量。可以说大规模的参数与海量的 训练数据为 GPT 系列模型赋能,使其可以存储海量的知识、理解人类的自 然语言并且有着良好的表达能力。
除了参数上的增长变化之外,GPT 模型家族的发展从 GPT-3 开始分 成了两个技术路径并行发展2,一个路径是以 Codex 为代表的代码预训练 技术,另一个路径是以 InstructGPT 为代表的文本指令(Instruction)预 训练技术。但这两个技术路径不是始终并行发展的,而是到了一定阶段后 (具体时间不详)进入了融合式预训练的过程,并通过指令学习(Instruction Tuning)、有监督精调(Supervised Fine-tuning)以及基于人类反馈的强化 学习(Reinforcement Learning with Human Feedback,RLHF)等技术实现 了以自然语言对话为接口的 ChatGPT 模型。
RLHF 这一概念最早是在 2008 年 TAMER:Training an Agent Manually via Evaluative Reinforcement[9]一文中被提及的。在传统的强化学习 框架下代理 (Agent) 提供动作给环境,环境输出奖励和状态给代理,而在 TAMER 框架下,引入人类标注人员作为系统的额外奖励。该文章中指出引 入人类进行评价的主要目的是加快模型收敛速度,降低训练成本,优化收敛 方向。具体实现上,人类标注人员扮演用户和代理进行对话,产生对话样本 并对回复进行排名打分,将更好的结果反馈给模型,让模型从两种反馈模式 ——人类评价奖励和环境奖励中学习策略,对模型进行持续迭代式微调。这 一框架的提出成为后续基于 RLHF 相关工作的理论基础。
在 2017 年前后,深度强化学习(Deep Reinforcement Learning)逐渐 发展并流行起来。MacGlashan et al.[10]提出了一种 AC 算法(Actor-critic), 并且将人工反馈(包括积极和消极)作为信号调节优势函数(Advantage function)。Warnell et al.[11]将 TAMER 框架与深度强化学习相结合,成功 将 RLHF 引入深度强化学习领域。在这一阶段,RLHF 主要被应用于模拟 器环境(例如游戏等)或者现实环境(例如机器人等)领域,而利用其对于 语言模型进行训练并未受到重视。
在 2019 年以后,RLHF 与语言模型相结合的工作开始陆续出现,Ziegler et al.[12]较早利用人工信号在四个具体任务上进行了微调并取得不错的效果。 OpenAI 从 2020 年开始关注这一方向并陆续发表了一系列相关工作,如应 用于文本摘要[13-14],利用 RLHF 训练一个可以进行网页导航的代理[15]等。 后来,OpenAI 将 RLHF 与 GPT 相结合的工作,提出了 InstructGPT 这 一 ChatGPT 的孪生兄弟[16],主要是利用 GPT-3 进行对话生成,旨在改善 模型生成的真实性、无害性和有用性。与此同时,作为缔造 AlphaGo 的公 司,具有一干擅长强化学习的算法工程师的 DeepMind 也关注到了这一方 向,先后发表了 GopherCite[17]和 Sparrow[18]两个利用 RLHF 进行训练的语 言模型,GopherCite 是在开放域问答领域的工作,Sparrow 是在对话领域的 一篇工作,并且在 2022 年 9 月,DeepMind 的聊天机器人也已经上线。
2022 年 12 月,OpenAI 在诸多前人工作的积淀之下推出了 ChatGPT。 ChatGPT 以 GPT-3.5 作为基座,依托其强大的生成能力,使用 RLHF 对 其进行进一步训练,从而取得了惊艳四座的效果。
ChatGPT 技术发展脉络的总结
纵观 ChatGPT 的发展历程,不难发现其成功是循序渐进的,OpenAI 从 2020 年开始关注 RLHF 这一研究方向,并且开展了大量的研究工作,积 攒了足够的强化学习在文本生成领域训练的经验。GPT 系列工作的研究则 积累了海量的训练数据以及大语言模型训练经验,这两者的结合才产生了 ChatGPT。可以看出技术的发展并不是一蹴而就的,是大量工作的积淀量 变引起质变。此外,将 RLHF 这一原本应用于模拟器环境和现实环境下的 强化学习技术迁移到自然语言生成任务上是其技术突破的关键点之一。
纵观 AI 这几年的发展,已经逐渐呈现出不同技术相互融合的大趋势, 比如将 Transformer 引入计算机视觉领域产生的 ViT;将强化学习引入蛋白 质结构预测的 AlphaFold 等。每个研究人员都有自己熟悉擅长的领域,而同时科学界也存在着大量需要 AI 赋能的亟待解决的关键问题,如何发现这些 问题的痛点,设计合理的方法,利用自己研究领域的优越的技术解决问题, 似乎是一个值得思考,也非常有意义的问题。
这是一个 AI 蓬勃发展的时代,计算机科学界每天都在产生着令人惊奇 的发明创造,很多之前人们可望而不可及的问题都在或者正在被解决的路 上。2022 年 2 月,DeepMind 发布可对托卡马克装置中等离子体进行磁控制 的以帮助可控核聚变的人工智能,这项研究目前仍在进行。或许在未来的某 一天,能源将不成为困扰我们的问题,环境污染将大大减少,星际远航将成 为可能。希望每个研究人员都能在这样的时代中,找到适合自己的研究方向 并且为科技进步添砖加瓦。
ChatGPT 的未来技术发展方向
虽然 ChatGPT 目前已经取得了非常喜人的成果,但是未来仍然有诸多 可以研究的方向。
首先 OpenAI 的研究人员指出了 ChatGPT 现存的一些问题:
1. ChatGPT 有时候会生成一些似是而非、毫无意义的答案,导致这个问 题的原因有:强化学习训练过程中没有明确的正确答案;训练过程中 一些谨慎的训练策略导致模型无法产生本应产生的正确回复;监督学 习训练过程中错误的引导导致模型更倾向于生成标注人员所知道的内 容而不是模型真实知道的。
2. ChatGPT 对于输入措辞比较敏感,例如:给定一个特定的问题,模型 声称不知道答案,但只要稍微改变措辞就可以生成正确答案。
3. ChatGPT 生成的回复通常过于冗长,并且存在过度使用某些短语的问 题,例如:重申是由 OpenAI 训练的语言模型。这样的问题主要来自 于训练数据的偏差和过拟合问题。
4. 虽然 OpenAI 已经努力让模型拒绝不恰当和有害的请求,但是仍然无 法避免对有害请求作出回复或对问题表现出偏见。 其次,ChatGPT 虽然很强大,但是其模型过于庞大使用成本过高,如 何对模型进行瘦身也是一个未来的发展方向,目前主流的模型压缩方法有量 化、剪枝、蒸馏和稀疏化等。量化是指降低模型参数的数值表示精度,比如 从 FP32 降低到 FP16 或者 INT8。剪枝是指合理地利用策略删除神经网络中的部分参数,比如从单个权重到更高粒度组件如权重矩阵到通道,这种方 法在视觉领域或其他较小语言模型中比较奏效。蒸馏是指利用一个较小的学 生模型去学习较大的老师模型中的重要信息而摒弃一些冗余信息的方法。稀 疏化将大量的冗余变量去除,简化模型的同时保留数据中最重要的信息。
此外,减少人类反馈信息的 RLAIF 也是最近被提出的一个全新的观点。 2022 年 12 月 Anthropic 公司发表论文“Constitutional AI: Harmlessness from AI Feedback”[19],该公司是 2020 年 OpenAI 副总裁离职后创立的,其 公司始创团队中多有参与 GPT-3 以及 RLHF 相关研究的经历。该文章介绍 了其最新推出的聊天机器人 Claude,与 ChatGPT 类似的是两者均利用强 化学习对模型进行训练,而不同点则在于其排序过程使用模型进行数据标注 而非人类,即训练一个模型学习人类对于无害性偏好的打分模式并代替人类 对结果进行排序
ChatGPT 的优势与劣势
ChatGPT 的优势
ChatGPT 作为开年爆款产品,自发布以来不足三个月,就以其能力的 全面性、回答的准确性、生成的流畅性、丰富的可玩性俘获了数以亿计的 用户,其整体能力之强大令人惊叹。下面我们将从以下三个角度分别阐述 ChatGPT 相较于不同产品和范式的优点。
1. 相较于普通聊天机器人: ChatGPT 的发布形式是一款聊天机器人,类 似于市场上其他聊天机器人(微软小冰、百度度秘等),也是直接对其下指 令即可与人类自然交互,简单直接。但相较之下,ChatGPT 的回答更准确, 答案更流畅,能进行更细致的推理,能完成更多的任务,这得益于其以下三 方面的能力:
1)强大的底座能力:ChatGPT 基于 GPT-3.5 系列的 Code-davinci-002 指令微调而成。而 GPT-3.5 系列是一系列采用了数千亿的 token 预训 练的千亿大模型,足够大的模型规模赋予了 ChatGPT 更多的参数量 记忆充足的知识,同时其内含“涌现”的潜力,为之后的指令微调能 力激发打下了坚实的基础;
2)惊艳的思维链推理能力:在文本预训练的基础上,ChatGPT 的基础大 模型采用 159G 的代码进行了继续预训练,借助代码分步骤、分模块解决问题的特性,模型涌现出了逐步推理的能力,在模型表现上不再 是随着模型规模线性增长,有了激增,打破了 scaling law;
3)实用的零样本能力:ChatGPT 通过在基础大模型上利用大量种类的 指令进行指令微调,模型的泛化性得到了显著地激发,可以处理未见 过的任务,使其通用性大大提高,在多种语言、多项任务上都可以进 行处理。
综上,在大规模语言模型存储充足的知识和涌现的思维链能力的基础 上,ChatGPT 辅以指令微调,几乎做到了知识范围内的无所不知,且难以 看出破绽,已遥遥领先普通的聊天机器人。
相较于其它大规模语言模型: 相较于其它的大规模语言模型,ChatGPT 使用了更多的多轮对话数据进行指令微调,这使其拥有了建模对话历史的能 力,能持续和用户交互。
同时因为现实世界语言数据的偏见性,大规模语言模型基于这些数据预 训练可能会生成有害的回复。ChatGPT 在指令微调阶段通过基于人类反馈 的强化学习调整模型的输出偏好,使其能输出更符合人类预期的结果(即能 进行翔实的回应、公平的回应、拒绝不当问题、拒绝知识范围外的问题),一 定程度上缓解了安全性和偏见问题,使其更加耐用;同时其能利用真实的用 户反馈不断进行 AI 正循环,持续增强自身和人类的这种对齐能力,输出更 安全的回复。
相较于微调小模型: 在 ChatGPT 之前,利用特定任务数据微调小模 型是近年来最常用的自然语言处理范式。相较于这种微调范式,ChatGPT 通过大量指令激发的泛化能力在零样本和少样本场景下具有显著优势,在未 见过的任务上也可以有所表现。例如 ChatGPT 的前身 InstructGPT 指令 微调的指令集中 96% 以上是英语,此外只含有 20 种少量的其它语言(包含 西班牙语、法语、德语等)。然而在机器翻译任务上,我们使用指令集中未出 现的塞尔维亚语让 ChatGPT 进行翻译,仍然可以得到正确的翻译结果,这 是在微调小模型的范式下很难实现的泛化能力。
除此之外,作为大规模语言模型的天然优势使 ChatGPT 在创作型任务 上的表现尤为突出,甚至强于大多数普通人类。
ChatGPT 的劣势
固然 ChatGPT 在实际使用中表现惊艳,然而囿于大规模语言模型自身、 数据原因、标注策略等局限,仍主要存在以下劣势:
1. 大规模语言模型自身的局限: 身为大规模语言模型,ChatGPT 难免有 着 LLM 的通用局限,具体表现在以下几个方面:
1)可信性无法保证:ChatGPT 的回复可能是在一本正经地胡说八道,语 句通畅貌似合理,但其实完全大相径庭,目前模型还不能提供合理的 证据进行可信性的验证;
2)时效性差:ChatGPT 无法实时地融入新知识,其知识范围局限于基础 大规模语言模型使用的预训练数据时间之前,可回答的知识范围有明 显的边界;
3)成本高昂:ChatGPT 基础大模型训练成本高、部署困难、每次调用花 费不菲、还可能有延迟问题,对工程能力有很高的要求;
4)在特定的专业领域上表现欠佳:大规模语言模型的训练数据是通用数 据,没有领域专业数据,比如针对特定领域的专业术语翻译做的并不 好;
5)言模型每次的生成结果是 beam search 或者采样的产物,每次都会 有细微的不同。同样地,ChatGPT 对输入敏感,对于某个指令可能回 答不正确,但稍微替换几个词表达同样的意思重新提问,又可以回答 正确,目前还不够稳定。
2. 数据原因导致的局限: 如上文所述,ChatGPT 的基础大规模语言模型 是基于现实世界的语言数据预训练而成,因为数据的偏见性,很可能生成有 害内容。虽然 ChatGPT 已采用 RLHF 的方式大大缓解了这一问题,然而 通过一些诱导,有害内容仍有可能出现。 此外,ChatGPT 为 OpenAI 部署,用户数据都为 OpenAI 所掌握,长 期大规模使用可能存在一定的数据泄漏风险。
3. 标注策略导致的局限: ChatGPT 通过基于人类反馈的强化学习使模型 的生成结果更符合人类预期,然而这也导致了模型的行为和偏好一定程度上反映的是标注人员的偏好,在标注人员分布不均的情况下,可能会引入新的 偏见问题。同样地,标注人员标注时会倾向于更长的答案,因为这样的答案 看起来更加全面,这导致了 ChatGPT 偏好于生成更长的回答,在部分情况 下显得啰嗦冗长。
此外,作为突围型产品,ChatGPT 确实表现优秀。然而在目前微调小 模型已经达到较好效果的前提下,同时考虑到 ChatGPT 的训练和部署困难 程度,ChatGPT 可能在以下任务场景下不太适用或者相比于目前的微调小 模型范式性价比较低:
1)ChatGPT 的通用性很强,对多种自然语言处理任务都有处理能力。然 而针对特定的序列标注等传统自然语言理解任务,考虑到部署成本和 特定任务的准确性,在 NLU 任务不需要大规模语言模型的生成能力, 也不需要更多额外知识的前提下,如果拥有足够数据进行微调,微调 小模型可能仍是更佳的方案;
2)在一些不需要大规模语言模型中额外知识的任务上,例如机器阅读理 解,回答问题所需的知识已经都存在于上下文中;
3)由于除英语之外的其它语言在预训练语料库中占比很少,因此翻译目 标非英文的机器翻译任务和多语言任务在追求准确的前提下可能并不 适用;
4)大规模语言模型的现实世界先验知识太强,很难被提示覆盖,这导致 我们很难纠正 ChatGPT 的事实性错误,使其使用场景受限;
5)对于常识、符号和逻辑推理问题,ChatGPT 更倾向于生成“不确定” 的回复,避免直接面对问题正面回答。在追求唯一性答案的情况下可 能并不适用;
6)ChatGPT 目前还只能处理文本数据,在多模态任务上还无法处理。
ChatGPT 的应用前景
ChatGPT 作为掀起新一轮 AIGC 热潮的新引擎,无论在人工智能行业 还是其他行业都带来了广泛的讨论和影响,下面我们分别从这两个方面讨论
在人工智能行业的应用前景及影响
ChatGPT 的发布及其取得的巨大成功对人工智能行业形成了强烈的冲 击,人们发现之前许多悬而未解的问题在 ChatGPT 身上迎刃而解(包括事 实型问答、文本摘要事实一致性、篇章级机器翻译的性别问题等),ChatGPT 引起了巨大的恐慌。然而从另一个角度看,我们也可以把 ChatGPT 当成是 一个工具来帮助我们的开发、优化我们的模型、丰富我们的应用场景,比如:
1. 代码开发:利用 ChatGPT 辅助开发代码,提高开发效率,包括代码 补全、自然语言指令生成代码、代码翻译、bug 修复等;
2. ChatGPT 和具体任务相结合:ChatGPT 的生成结果在许多任务上 相比微调小模型都有很明显的可取之处(比如文本摘要的事实一致 性,篇章级机器翻译的性别问题),在微调小模型的基础上结合这些 ChatGPT 的长处,可能可以在避免训练部署下显著提升小模型的效 果;
3. 同时基于 ChatGPT 指令微调激发的零样本能力,对于只有少数标注 或者没有标注数据的任务以及需要分布外泛化的任务,我们既可以直 接应用 ChatGPT,也可以把 ChatGPT 当作冷启动收集相关语料的工 具,丰富我们的应用场景。
在其他行业的应用前景及影响
ChatGPT 的发布也引起了其它行业的连锁反应:Stack Overflow 禁用 ChatGPT 的生成内容,美国多所公立学校禁用 ChatGPT,各大期刊禁止将 ChatGPT 列为合著者。ChatGPT 似乎在一些行业成为“公敌”,但在其它 行业,也许充满机遇。
1. 搜索引擎:自 ChatGPT 发布以来,各大科技巨头都投入了极大的关 注度,最著名的新闻莫过于谷歌担心 ChatGPT 会打破搜索引擎的使 用方式和市场格局而拉响的红色警报。为此各大科技巨头纷纷行动起 来,谷歌开始内测自己的类 ChatGPT 产品 Bard,百度三月份将面向 公众开放文心一言,微软更是宣布 ChatGPT 为必应提供技术支持,推 出新必应。ChatGPT 和搜索引擎的结合似乎已经不可避免,也许不会马上取代搜索引擎,但基于搜索引擎为 ChatGPT 提供生成结果证据 展示以及利用检索的新知识扩展 ChatGPT 的回答边界已经是可以预 见并正在进行的结合方向。
2. 泛娱乐行业:ChatGPT 对于文娱行业则更多带来的是机遇。无论是基 于 ChatGPT 创建更智能的游戏虚拟人和玩家交流提升体验,还是利 用虚拟数字人进行虚拟主播直播互动,ChatGPT 都为类似的数字人提 供了更智能的“大脑”,使行业充满想象空间。除此之外,在心理健康 抚慰、闲聊家庭陪护等方面,类似的数字人也大有拳脚可展。
3. 自媒体行业:同样大大受益的还有自媒体行业。美国的新闻聚合网站 BuzzFeed 宣布和 OpenAI 合作,未来将使用 ChatGPT 帮助创作内 容。ChatGPT 的出现将使得内容创作变得更加容易,无论是旅游、餐 饮、住宿、情感,相关博主的内容产出效率将得到极大的提升,有更多 的精力润色相关内容,期待更多的高质量文章的产生。
4. 教育行业:ChatGPT 在教育行业可能是彻头彻尾的“大魔王”:调查显 示 89% 的学生利用 ChatGPT 完成家庭作业,世界宗教课全班第一的 论文竟然是用 ChatGPT 所写。这迫使多所学校全面禁用 ChatGPT, 无论是在作业、考试或者论文当中,一经发现即认定为作弊。然而从另 一方面来看,这可能也会促使针对人工智能相关法律法规的完善,加 速 AI 社会化的发展。
5. 其他专业领域:针对其它专业领域,ChatGPT 的具体影响不大。因为 限于 ChatGPT 训练数据的限制,ChatGPT 无法对专业领域的专业 知识进行细致的分析,生成的回答专业度不足且可信性难以保证,至 多只能作为参考,很难实现替代。比如因为 ChatGPT 未获取 IDC、 Gartner 等机构的数据使用授权,其关于半导体产业的市场分析中很 少涉及量化的数据信息。
此外,ChatGPT 可以帮助个人使用者在日常工作中写邮件、演讲稿、文 案和报告,提高其工作效率。同时基于微软计划将 ChatGPT 整合进 Word、 PowerPoint 等办公软件,个人使用者也可以从中受益,提高办公效率
ChatGPT 带来的风险与挑战
ChatGPT 的出现和应用给用户和社会带来了很多新的风险和挑战。这 些风险和挑战,一部分是 ChatGPT 本身技术限制引起的,如生成的内容不 能保证真实性、会产生有害言论等。一部分是用户对 ChatGPT 的使用不当 引起的,如在教育、科研等领域滥用 ChatGPT 产生的文本。ChatGPT 用 户数量在其出现后两个月就突破了 1 亿,因此应对这些风险和挑战需要整个 社会行动起来,制定相应的法律和规范,让 ChatGPT 为人类发展服务,尽 量避免引起新的的社会问题。下面列举了几个重要风险和挑战,并试着给出 了相应的解决思路。
滥用风险 滥用风险主要是指用户对于 ChatGPT 产生结果的不当应用。具 体表现有:学生在课堂测验或考试过程中直接使用 ChatGPT 的结果作为答 案进行作弊;研究人员使用 ChatGPT 来进行写作的学术不规范行为;不法 分子利用 ChatGPT 来制造假新闻或谣言。Tamkin et al.[20]指出,使用预训 练语言模型能参与的犯罪行为种类繁多,因此很难把所有它们能错误使用的 方法都归纳总结起来,可以预料随着技术的发展以及不法分子的不断尝试, ChatGPT 被错误使用的方式会更多样且更加难以预测。
已有很多研究者针对这一需求提出了不同的解决方案。下面主要介绍两 个有代表性的工作:
2023 年 1 月 31 日,开发 ChatGPT 的 OpenAI 公司发布了一个能够鉴 别 AI 生成文本的分类器3。根据 OpenAI 公布的测试结果,该分类器对于 “AI 生成文本”类别的召回率只有 26%。该分类器的训练数据的构造方式如 下:首先获取大量提示,对于每个提示,分别获取 AI 生成文本和人工写作 文本。这种训练数据的获取方式成本较高。
斯坦福大学的 Mitchell et al.[21]提出了一种 Zero-shot 的 AI 生成文本 检测方法 DetectGPT,该方法利用 AI 生成文本和人工写作文本在由其他 AI 模型进行改写后所引起的生成概率的变化来进行判别,生成概率变化大 的文本为 AI 生成文本。根据论文在 3 个数据集上的测试结果,DetectGPT 在 AUROC 这一评价指标上超过了目前已知的其他 Zero-shot 方法。DetectGPT 的优势是不需要训练数据,但是它需要能够输出生成概率的 AI 模型 的支持,而很多 AI 模型只提供了 API(如 GPT-3),无法计算生成文本的概率
总的来说,目前对于 ChatGPT 自动生成文本的自动鉴别技术效果还不 能令人满意,需要继续寻找更有效的鉴别方法。
错误信息风险 错误信息风险源于 ChatGPT 可能产生虚假、误导、无意义 或质量差的信息。ChatGPT 可以并且已经在成为很多用户的一种获取信息 的手段,但用户如果没有分辨能力,可能会采信这些错误信息,从而带来风 险隐患。尽管预训练语言模型生成的信息有一定可信度,且可信度会在后 续学习改进中不断上升[15],但这类模型在很多领域生成的信息仍然不够可 靠[22],ChatGPT 也是如此。ChatGPT 的流行会在某种程度上增加用户对 它的信任,从而被更多错误的信息误导。预训练语言模型的生成的错误信息 比例上升可能会加大人们对社会中各类信息的不信任,破坏社会的知识交流 传播[23]。
在一些很敏感的领域,比如法律和医学,ChatGPT 的错误信息很容易导 致直接伤害。错误的医学法律知识会导致使用者违法犯罪或者自行处理伤口 疾病时出现问题,从而造成对社会和自己身体健康的伤害。这在 ChatGPT 之前就已经有了一些例子,如患者不相信正规医生而搬出搜索引擎给出的结 果来反驳医生,这也能体现出很多用户对这类信息获取方式的信任。
知识共享是一种社会现象,人们出于信任从社会中获取知识并且过滤吸 收。ChatGPT 的一个较为常用的功能是充当搜索引擎,类似百度、Google 等,搜索引擎的信息因其较高的准确率通常拥有较高的可信度,但是如果 ChatGPT 产生错误信息误导他人的现象加剧可能会导致人们不仅对 ChatGPT 信任感下降,同时也对其他类别的信息不再信任,破坏社会的知识共 享,影响社会的知识交流传播。
目前还没有专门针对 ChatGPT 生成文本的正确性进行鉴别的研究论 文发表。已有的针对虚假新闻或虚假信息检测的方法可以尝试应用到大规模 语言模型生成文本的正确性检测中,比如基于事实抽取和验证的方法。但是 基于写作风格的方法可能不太实用,因为大规模语言模型生成文本的过程与 人的写作过程有较大区别。
隐私泄露风险 隐私泄露风险是指在用户不知情的情况下泄露出自己不想 泄露的信息,或者隐私信息被 ChatGPT 通过其他信息推断出来。用户在使 用 ChatGPT 过程中可能会泄露自己的个人隐私信息或者一些组织乃至国 家的机密信息。个人信息的泄露可能会对个人的心理健康、人身安全造成影 响。国家或者商业机密往往是只有小范围人员能获悉的高等级信息,它们的泄露传播可能会危机国家安全和企业安全。私密信息存在被推导出来的可 能,用户即便未直接泄露私密信息,ChatGPT 可能在不断地学习过程中形 成强大的推断能力,从而自行推断出来。
对于这种风险的防范需要从两个方面入手:1)提醒用户注意隐私保护; 2)想办法限制 ChatGPT 对于隐私信息的访问和利用。
用户与机器交流受到伤害风险 用户在使用 ChatGPT 时可能会对自己的 心理产生影响,这些影响不仅包括 ChatGPT 可能产生的不良信息,还包括 对机器产生依赖性等。ChatGPT 输出的暴力、色情等信息会对未成年和一 些成年人造成较大影响,该类别信息的过多摄入会对人的心理健康产生影响。一些用户可能会对 ChatGPT 这种交互式对话机器人产生成瘾性或者依 赖性,从而导致健康和社交问题。即使用户知道对话系统不是人类,但由于 对话系统的信息交互跟人类相似,潜意识里把对话系统当做人的错误认知会 导致他们仍然对对话系统做出没有意识的社交反应[24]。即部分用户会在没 有意识的状态下将对话系统误认为是人类来交流,从而产生对对话系统的依 赖。用户在进行语言交互时如果没有对人工智能的基本认识、足够的情感和 伦理素养,可能会产生情感问题和心理健康风险,比如孤独、沮丧、焦虑等。 患有心理疾病者在此也有可能会因为对 ChatGPT 的依赖而拖慢自己的心 理疾病治疗进度。
有害言论风险 常见的有害言论包括种族主义、性别歧视和偏见等。ChatGPT 是一种无感知的语言模型,对输入数据的处理是基于其在训练数据中 的出现频率和语言模式。如果训练数据中存在偏见和歧视,ChatGPT 在这 部分数据上训练后也会反映这些问题。由于训练数据体量巨大且丰富,其中 不同文化和价值观之间存在差异,因此可能会有种族、文化和价值观冲突的 风险。早在 2016 年微软研发的聊天机器人 Tay 就在一天之间就因获取大量 有害输入而转化为一个“种族歧视者”,这也说明了这一风险的存在性。有害言论风险的根源在于训练数据和训练过程,在 ChatGPT 的进化过程中,必须要想办法尽量避免有害言论的产生。
知识产权风险 知识产权风险包括两个方面:1)ChatGPT 是否会侵犯他人 的知识产权;2)ChatGPT 产生的内容是否具有知识产权。
一些有版权的作品不属于机密信息,但是使用需要许可,而使用者和 ChatGPT 在对话中有可能中使用未经许可的版权作品或商标,侵犯他人的知识产权,这一点在追责时可能会在开发者和使用者的责任界定上出现争 议[25]。
国际保护知识产权协会(AIPPI)2019 年发布的《人工智能生成物的版 权问题决议》认为人工智能生成物在其生成过程中有人类干预,且该生成物 符合受保护作品应满足的其他条件情况下,能够获得保护,而生成过程无人 类干预的人工智能生成物无法获得版权保护4。但是 ChatGPT 广泛的应用 场景可能需要知识产权认定方面更细致的规定。
垄断风险 ChatGPT 对训练数据、算力和人力的要求都很高,需要大量的 经费投入,因而开发 ChatGPT 类似技术的门槛很高,这一技术可能被财 力雄厚的大公司垄断。以与 ChatGPT 规模相当的 GPT-3 模型为例,采用 V100 GPU 和最便宜的云计算套餐,训练一次 GPT-3 模型需要 355 GPU 年,费用为 460 万美元 5。马里兰大学的副教授 Tom Goldstein 在 2022 年 12 月初估计 ChatGPT 用户数量为 1 百万时,每天运行的费用大约在十万 美元这个量级6。
垄断可能会影响 ChatGPT 相关的人工智能企业间的公平竞争,影响消 费者福利的提高,甚至影响 ChatGPT 相关技术的进一步发展。目前很多应 用已经建立在 ChatGPT 之上了,但是 ChatGPT 目前的服务并不稳定。一 旦形成垄断,这些应用都必须依附于 ChatGPT,如果 ChatGPT 不能提供 服务,将会给相关企业和用户造成损失。
幸运的是现在很多公司都在投入,研究人员和技术人员也在不断提出实 现 ChatGPT 和降低 ChatGPT 训练成本的方法。希望通过技术进步和开源 共享,尽量避免 ChatGPT 技术形成垄断的局面。
第二章 ChatGPT 相关核心算法
ChatGPT 的卓越表现得益于其背后多项核心算法的支持和配合。本章 将分别介绍作为其实现基础的 Transformer 模型、激发出其所蕴含知识的 Prompt/Instruction Tuning 算法、其涌现出的思维链能力、以及确保其与 人类意图对齐的基于人类反馈的强化学习算法。
2.1 基于 Transformer 的预训练语言模型
ChatGPT 强大的基础模型采用 Transformer 架构,Transformer[26]是一 种基于自注意力机制的深度神经网络模型,可以高效并行地处理序列数据。 原始的 Transformer 模型包含两个关键组件:编码器和解码器。编码器用于 将输入序列映射到一组中间表示,解码器则将中间表示转换为目标序列。编 码器和解码器都由多层的注意力模块和前馈神经网络模块组成。其中自注意 力模块可以学习序列中不同位置之间的依赖关系,即在处理每个位置的信息 时,模型会考虑序列中其他所有位置上的信息,这种机制使得 Transformer 模型能够有效地处理长距离依赖关系。在原始 Transformer 模型基础上,相 继衍生出了三类预训练语言模型:编码预训练语言模型、解码预训练语言模 型和编解码预训练语言模型。
2.1.1 编码预训练语言模型(Encoder-only Pre-trained Models)
这类模型在预训练过程中只利用原始 Transformer 模型中的编码器。相 应的预训练任务通常选用掩码语言建模任务(Masked Language Modeling), 即掩码住(用特殊字符 [MASK] 替换)输入句子中一定比例的单词后,要 求模型根据上下文信息去预测被遮掩的单词。其中有有代表性的工作包括 BERT[2],ALBERT[27],RoBERTa[28]等。表 2.1列举该架构下的若干经典模型。
BERT BERT 模型是最经典的编码预训练语言模型,其通过掩码语言建 模和下一句预测任务,对 Transformer 模型的参数进行预训练。
ALBERT ALBERT 是一个轻量化的 BERT 模型,作者通过分解词向量 矩阵和共享 Transformer 层参数来减少模型参数个数。
RoBERTa 相较于 BERT 模型,RoBERTa 在预训练阶段,采用了更多的 语料以及动态掩码机制(不同轮次同一样本掩码不同的单词),去掉了下一 句预测任务,同时采用了更大的批大小。
2.1.2 解码预训练语言模型(Decoder-only Pre-trained Models)
GPT (Generative Pre-trained Transformer) 是由 OpenAI 提出的只有 解码器的预训练模型。相较于之前的模型,不再需要对于每个任务采取不同 的模型架构,而是用一个取得了优异泛化能力的模型,去针对性地对下游 任务进行微调。在本章节将介绍 GPT 系列模型,包括 GPT-1、GPT-2 和 GPT-3,表 2.1列举了 GPT 若干模型的信息。
(1)GPT-1
GPT-1 在文章“Improving Language Understanding by Generative PreTraining”[1]中被提出。在 GPT 被提出之前,大多数深度学习方法都需要大 量人工标注的高质量数据,但是标注数据的代价是巨大的,这极大程度上限 制了模型在各项任务性能的上限。如何利用容易获取的大规模无标注数据来 为模型的训练提供指导成为 GPT-1 中需要解决的第一个问题。另外自然语 言处理领域中有许多任务依赖于自然语言在隐含空间中的表征,不同任务对 应的表征很可能是不同的,这使得根据一种任务数据学习到的模型很难泛化 到其他任务上。因此如何将从大规模无标注数据上学习到的表征应用到不同 的下游任务成为 GPT-1 需要解决的第二个问题。
GPT-1 的结构很简单,由 12 层 Transformer Block(自注意力模块和 前馈神经网络模块)叠加而成。针对第一个问题,GPT-1 中使用了自左到右 生成式的目标函数对模型进行预训练。这个目标函数可以简单理解为给定前 i − 1 个 token,对第 i 个 token 进行预测。基于这样的目标函数,GPT-1 就 可以利用无标注的自然语言数据进行训练,学习到更深层次的语法信息与语 义信息。
针对第二个问题,在完成了无监督的预训练之后,GPT-1 接着使用了有 标注的数据进行有监督的微调使得模型能够更好地适应下游任务。给定输入token 序列x1, x2, ..., xm 与标签 y 的数据集,对模型的参数进行再次训练调 整,用到的优化模型是在给定输入序列时预测的标签最接近真实值。
具体来说,GPT-1 在大规模无标注语料库上预训练之后,再利用有标 注数据在特定的目标任务上对模型参数进行微调,实现了将预训练中获得的 知识迁移到下游任务。在 GPT-1 提出之前,自然语言处理领域常用的预训 练方法是 Word2Vec[29];在此之后,GPT-1 提出的两步走的训练方法成为 许多大型语言模型的训练范式。从这个角度来看,GPT-1 和 Word2Vec 在 具体下游任务中发挥的作用是类似的,通过无监督的方法获取自然语言的隐 含表示,再将其迁移至其他目标任务。但是从更高的层面来看,GPT-1 与以 往的词向量表示方法是不同的,其数据量与数据规模的增大使得模型能够学 习到不同场景下的自然语言表示。图 2.1是 GPT-1 原文中的总览图,左侧 是 GPT-1 的架构以及训练时的目标函数;右侧是对于不同任务上进行微调 时模型输入与输出的改变。
总体来说,GPT-1 的目标是学习到一个通用的自然语言表征,并在之后 通过简单调节适应很大范围上的任务。从现在的角度来看,GPT-1 成功背 后有两个原因:第一个是 2017 年 Transformer 的提出使得捕获自然语言中 长距离依赖关系成为可能;第二个是 GPT 模型在预训练过程中用到了更大 的数据量以及更多的模型参数,使得模型能够从大规模语料库中学习到以往 模型无法学习的知识。而任务微调在通用预训练和下游任务之间搭起了知识 桥梁,使得用一个模型解决多种问题成为一条可行之路。
(2)GPT-2
与 GPT-1 中的通过预训练-微调范式来解决多个下游任务不同,GPT2 [3]更加侧重于 Zero-shot 设定下语言模型的能力。Zero-shot 是指模型在下 游任务中不进行任何训练或微调,即模型不再根据下游任务的数据进行参数 上的优化,而是根据给定的指令自行理解并完成任务。
简单来讲,GPT-2 并没有对 GPT-1 的模型架构进行创新,而是在 GPT1 的基础上引入任务相关信息作为输出预测的条件,将 GPT-1 中的条件概 率 p(output|input) 变为 p(output|input;task);并继续增大训练的数据规模 以及模型本身的参数量,最终在 Zero-shot 的设置下对多个任务都展示了巨 大的潜力。
虽然 GPT-2 并没有模型架构上的改变,但是其将任务作为输出预测的 条件引入模型从而在 Zero-shot 的设置下实现多个任务的想法一直延续至 今。这样的思想事实上是在传达只要模型足够大,学到的知识足够多,任何 有监督任务都可以通过无监督的方式来完成,即任何任务都可以视作生成任 务。
(3)GPT-3
GPT-3[4]使用了与 GPT-2 相同的模型和架构。文中为了探索模型规模 对于性能的影响,一共训练了 8 个不同大小的模型,并将最大的具有 1750 亿参数的模型称为 GPT-3。表 2.1综合统计了 GPT-1、GPT-2 和 GPT-3 的 参数量,模型架构以及预训练的数据集,方便读者直观上理解 GPT 的迭代 趋势。
GPT-3 最显著的特点就是大。大体现在两方面,一方面是模型本身规 模大,参数量众多,具有 96 层 Transformer Decoder Layer,每一层有 96 个 128 维的注意力头,单词嵌入的维度也达到了 12,288;另一方面是训练 过程中使用到的数据集规模大,达到了 45TB。在这样的模型规模与数据量 的情况下,GPT-3 在多个任务上均展现出了非常优异的性能,延续 GPT-2 将无监督模型应用到有监督任务的思想,GPT-3 在 Few-shot,One-shot 和 Zero-shot 等设置下的任务表现都得到了显著的提升。
虽然 GPT-3 取得了令人惊喜的效果,但是也存在许多限制,例如天然 的从左到右生成式学习使得其理解能力有待提高;对于一些简单的数学题目 仍不能够很好完成,以及模型性能强大所带来的社会伦理问题等。同时由于 GPT 系列模型并没有对模型的架构进行改变,而是不断通过增大训练数据 量以及模型参数量来增强模型效果,训练代价巨大,这使得普通机构和个人 无法承担大型语言模型训练甚至推理的代价,极大提高了模型推广的门槛。
2.1.3 基于编解码架构的预训练语言模型(Encoder-decoder Pretrained Models)
基于编码器的架构得益于双向编码的全局可见性,在语言理解的相关任 务上性能卓越,但是因为无法进行可变长度的生成,不能应用于生成任务。 基于解码器的架构采用单向自回归模式,可以完成生成任务,但是信息只能 从左到右单向流动,模型只知“上文”而不知“下文”,缺乏双向交互。针对 以上问题,一些模型采用序列到序列的架构来融合两种结构,使用编码器提 取出输入中有用的表示,来辅助并约束解码器的生成。表 2.1列举该架构下 的若干经典模型。
BART BART 的具体结构为一个双向的编码器拼接一个单向的自回归解 码器,采用的预训练方式为输入含有各种噪声的文本,再由模型进行去噪重 构。在解码器部分,BART 每一层对编码器的最后一层的隐藏表示执行交叉 注意力机制以聚合关键信息。BART 在维基百科和 BookCorpus 数据集上训 练,数据量达 160GB[30]。
T5 BART 为了兼顾不同任务设计了复杂的预训练任务,针对如何在多个 任务中实现优秀的迁移性能这一问题,谷歌研究者提出了一种新的范式:将 所有自然语言处理任务统一成“文本到文本”的生成任务。T5 通过在输入 之前加入提示词,实现了用单个模型解决机器翻译、文本摘要、问答和分类 等多个任务。针对迁移学习需要的巨量、高质量和多样的预训练数据,T5 在 谷歌专门构造的 C4 数据集上进行训练[31]。
Switch Transformers 随着语言模型的深入研究,参数量的增加可以显 著提高模型的性能,但随之而来的就是应用时越来越大的运算量。SwicthTransformer 将混合专家网络(Mixture-of-Experts,MoE)的条件运算思想 引入 Transformer 的全连接层,实现增加模型的尺寸而不增加推理时的运算
2.2 提示学习与指令精调
2.2.1 提示学习概述
提示学习(Prompt Learning)简单来说是通过一些方法编辑下游任 务的输入,使其形式上模拟模型预训练过程使用的数据与任务。比如做情感 分类任务时,监督学习的做法是输入“我今天考砸了”,模型输出分类的分 数或分布,而提示学习的做法则是在“我今天考砸了”后拼接上自然语言描 述“我感觉很 ____”,让模型生成后面的内容,再根据某种映射函数,将 生成内容匹配到某一分类标签。
可以看出,提示学习这种方式拉近了测试分布与预训练分布的距离,进 而可以利用大规模预训练语言模型在预训练过程中习得的强大语言建模能 力,使其不经过微调就可以在各种下游任务上取得很好的结果。后续更有工 作提出了自动提示搜索和连续提示的方法,使得提示本身也可以微调,使其 有了更好的灵活性。
提示学习还有各种有趣的用法,如小样本场景下的语境学习(In-context learning),即在提示中加入几个完整的例子,如“美国的首都是华盛顿, 法国的首都是巴黎,英国的首都是 ____”,以及在推理任务上的思维链 (Chain-Of-Thought,COT)(我们将在下一节中详细介绍)等等。
相较于提示学习,指令精调(Instruction Tuning)可以说是提示学 习的加强版。两种学习方法的本质目标均是希望通过编辑输入来深挖模型 自身所蕴含的潜在知识,进而更好的完成下游任务。而与提示学习不同的 是,指令学习不再满足于模仿预训练数据的分布,而是希望通过构造“指令 (Instruction)”并微调的方式,学习人类交互模式的分布,使模型更好的理 解人类意图,与人类行为对齐;在指令学习中,模型需要面对的不再是单纯 的补全任务,而是各种不同任务的“指令”,即任务要求。模型需要根据不同 的任务要求,做出相匹配的正确回复。“指令”举例如下:
1)请将下面这句话翻译成英文“ChatGPT 都用到了哪些核心技术?”
2)请帮我把下面这句话进行中文分词“我太喜欢 ChatGPT 了!”
3)请帮我写一首描绘春天的诗词,诗词中要有鸟、花、草。
从样例中可以看出,原本自然语言处理中的经典任务,经过任务要求的 包装后,就变成了更符合人类习惯的“指令”。研究表明,当“指令”任务的种类达到一定量级后,大模型甚至可以在没有见过的零样本(Zero-shot) 任务上有较好的处理能力。因此,指令学习可以帮助语言模型训练更深层 次的语言理解能力,以及处理各种不同任务的零样本学习能力。OpenAI 提出的 InstructGPT 模型使用的就是指令学习的思想,ChatGPT 沿袭了 InstructGPT 的方法。
2.2.2 ChatGPT 中的指令学习
根据 OpenAI 的博客1,ChatGPT 所用到的指令学习数据集的构造方 法和训练方法与 InstructGPT 大致相同,因此我们介绍 InstructGPT 构造 “指令”数据集的细节。
InstructGPT 的“指令”数据集由两部分构成,其中一部分收集于全球 用户使用 OpenAI 的 API 后的真实人机交互数据,这些数据在使用之前都 经过了信息去重和敏感信息过滤;另一部分数据则来自于人工标注。为了使 标注人员能够标注出高质量的数据集,OpenAI 通过前期的审核和面试,聘 请了一个由 40 人组成的标注团队。在这些人工标注的数据中,总共分为三 类,其一是为了增加数据集中任务的多样性,由标注人员写出任意任务的 “指令”;其二是小样本(Few-shot)数据,由标注人员写出“指令”和一些对 应的问答对,用于训练模型的小样本学习(Few-shot learning)能力;其三 是在 OpenAI API 中已有的用例,标注人员模仿这些用例写出相类似的“指 令”数据。这些数据包含了语言模型中常见的任务类型(生成、问答、聊天、 改写、总结、分类等),其中 45.6% 的“指令”为生成任务类型,在所有类 型中占比最大。
InstructGPT 通过在构造的”指令”数据集上进行有监督微调(Supervised fine-tuning, SFT)和基于人工反馈的强化学习(Reinforcement Learning from Human Feedback, RLHF)以使模型与人类需求对齐。
在实验结果上,将运用指令学习后且含有 175B 参数的 InstructGPT 模 型,在指令学习的经典数据集 FLAN、T0 上进行精调后发现,InstructGPT 模型对比 FLAN、T0 两个模型在效果上均有一定程度的提升。其原因可以 归结为两点:
其一,现有的公开 NLP 数据集,往往专注于容易进行评测的 NLP 任务 (如分类任务、问答任务、翻译或总结任务等)。但事实上,经过统计发现,在 OpenAI API 上使用过的用户中,用模型解决分类或问答任务的只占到了各类任务中很小一部分,而开放性的生成任务才是占比最大的一类任务、这就 使得以往用公开 NLP 数据集进行训练的模型,缺乏在开放性任务上的有效 训练。InstructGPT 通过让标注人员大量标注有关生成和头脑风暴类的开放 性“指令”,并让模型进行训练,从而使得模型能够在这些方面有很大的效 果提升。
其二,现有的公开 NLP 数据集,往往仅针对一种或几种语言任务进行 处理。这就忽视了现实情况下,人类用户会向语言模型提出各种任务要求的 情况。因此,能够综合处理各种任务的模型,才能在实际中获得更好的效果。 而 InstructGPT 所用到的指令学习技术正好可以弥补传统模型的缺陷,通 过标注大量具备任务多样性的“指令”数据,帮助模型获得在各类任务上的 处理能力。
2.3 思维链(Chain of Thought,COT)
人类在解决数学应用题这类复杂推理任务的过程中,通常会将问题分解 为多个中间步骤,并逐步求解,进而给出最终的答案,例如求解问题“小华 每天读 24 页书,12 天读完了《红岩》一书,小明每天读 36 页书,几天可以 读完《红岩》?”,人会将问题分解为(1)“红岩共 24*12=288(页)”、(2)“小 明可以用 288÷36=8(天)”。受此启发,谷歌研究人员 Jason Wei(现 OpenAI 员工)等提出了思维链[33],通过在小样本提示学习的示例中插入一系列中间 推理步骤,有效提升了大规模语言模型的推理能力,图 2.2展示模型通过产 生思维链来正确求解数学应用题。
相较于一般的小样本提示学习,思维链提示学习有几个吸引人的性质:
1. 在思维链的加持下,模型可以将需要进行多步推理的问题分解为一系 列的中间步骤,这可以将额外的计算资源分配到需要推理的问题上。
2. 思维链为模型的推理行为提供了一个可解释的窗口,使通过调试推理 路径来探测黑盒语言模型成为了可能。
3. 思维链推理应用广泛,不仅可以用于数学应用题求解、常识推理和符 号操作等任务,而且可能适用任何需要通过语言解决的问题。
4. 思维链使用方式非常简单,可以非常容易地融入语境学习(in-context learning),从而诱导大语言模型展现出推理能力。
2.4 基于人类反馈的强化学习(Reinforcement Learning with Human Feedback,RLHF)
RLHF 是 ChatGPT/InstrcutGPT 实现与人类意图对齐,即按照人类指 令尽可能生成无负面影响结果的重要技术[16]。该算法在强化学习框架下实 现,大体可分为以下两个阶段:
奖励模型训练 该阶段旨在获取拟合人类偏好的奖励模型。奖励模型以提示 和回复作为输入,计算标量奖励值作为输出。奖励模型的训练过程通过拟合 人类对于不同回复的倾向性实现。具体而言,首先基于在人类撰写数据上精 调的模型,针对同一提示采样多条不同回复。然后,将回复两两组合构成一 条奖励模型训练样本,由人类给出倾向性标签。最终,奖励模型通过每条样 本中两个回复的奖励值之差计算倾向性概率拟合人类标签,进而完成奖励模型的训练。
生成策略优化 给定习得的奖励模型,ChatGPT/InstructGPT 的参数将被 视为一种策略,在强化学习的框架下进行训练。首先,当前策略根据输入的 查询采样回复。然后,奖励模型针对回复的质量计算奖励,反馈回当前策略 用以更新。值得注意的是,为防止上述过程的过度优化,损失函数同时引入 了词级别的 KL 惩罚项。此外,为了避免在公开 NLP 数据集上的性能退化, 策略更新过程兼顾了预训练损失。
第三章 大模型训练与部署
并行计算是大模型训练部署过程中最重要的支撑技术之一,不仅关系大 模型的计算效率,还决定了计算平台能否为大模型提供有效支撑。本章首先 分析介绍了并行计算与大模型之间的关系以及目前可用的并行计算框架。接 下来从实际部署大模型的角度出发,总结了该过程中可能出现的问题及相关 可用资源。最后为了更加有效地使用大模型,详细介绍了针对大模型的压缩 和加速方法。
3.1 大模型并行计算技术
随着 ChatGPT 的大火,大规模预训练模型再次成为学术界和产业界关 注的热点。面向 GPU 运算卡的并行计算是大模型训练部署过程中不可逾越 的鸿沟。NVIDIA 论文中提到训练自己的 GPT,使用了 3072 张 80GB A100 训练 GPT,最大规模的模型参数量达到了 1T(GPT-3 原版的 5 倍)[35]。如 此庞大的参数规模,单独一块 GPU 运算卡甚至完成不了最基本的装载。由 此可见,GPU 并行是大模型训练的必备技术。不同于传统并行以加快计算 速度为目的,大模型的并行计算往往还要考虑怎样将庞大的参数有机地分布 到多张 GPU 卡中,并保持不同 GPU 卡之间有效的通信,整体配合完成大 模型的训练部署。通常 GPU 并行计算有两种策略:
模型并行 这种并行模式将计算任务拆分成若干个更小但不同的任务。尤其 是大模型参数量过大的原因,一般不能将一个模型完整地装载至一张 GPU 卡,甚至是一个节点(含有多张卡)。此时往往要根据模型的不同功能组件 或者对长 Tensor 进行切分,将经过切分的子任务分配到不同的 GPU 卡中。 如果不同部分存在数据和功能上的逻辑相关性,也可以组成一道流水线
数据并行 这种并行模式将数据分解为多个部分,让每个运算单元分别去计 算一个或多个小块数据,最后进行汇总。由于不需要对训练过程部分的代 码大幅改动,是使用率较高的并行方式。从标准的数据并行(Data Parallel, DP),发展到分布式数据并行(Distributed Data Parallel,DDP),再到目前 的完全分片数据并行(Fully Sharded Data Parallel,FSDP), 在并行通信效 率上得到了大幅提升。机器学习中的随机梯度下降法(Stochastic Gradient Descent,SGD),极大促进了这类并行策略在深度学习训练过程中的应用。
一般来说,CPU 的多线程编程偏向于第一种并行模式,优点是可以带 来更高的并行效率,可以处理超过单个计算节点位宽的数据。缺点是不同计 算单元之间的同步和通信机制的设计要求较高,随着并行节点的增加,通信 的计算资源消耗快速增加。GPU 并行编程模式则偏向于第二种,优点是并 行算法设计相对简单,容易增加新的计算节点。缺点是要求每个计算节点必 须有足够的容量,可以装载整个模型。这对大模型而言往往是不可实现的。 因此现实中,大模型的训练部署往往采用混合方式。例如将整个 GPU 集群 以数据并行的方式分成若干块,每块装入一个大模型。块内按照任务并行的 方式,将大模型分解成如干与每块 GPU 容量匹配的子任务,每块 GPU 对 应一个子任务,可以是大模型不同的网络组件,甚至可以是长 Tensor 分成 多个短 Tensor 进行并行计算。如果设计合理,还可以做到不同网络组件的 流水线并行,通过一种“接力”的方式并行提高计算效率。
即使目前业界已有的 GPU 分布式训练方案,也严重依赖于服务器之间 的通信、拓扑、模型并行、流水并行等底层问题的解决情况。如果只有分布 式训练框架,甚至都无法正常启动训练过程。这也是为什么 GPT-3 已经发 布了一年,却只有少数企业可以复现 GPT-3。目前,已经公布明确已经完成 千亿参数规模大模型训练的框架主要是 NVIDIA 开发的 Megatron-LM 、经 过微软深度定制开发的 DeepSpeed、国产百度飞浆 PaddlePaddle 和华为昇 思 MindSpore。大多数并行框架都支持 PyTorch 分布式训练,可以完成百 亿参数规模的模型训练。
3.2 并行计算框架
PyTorch 1
PyTorch 自身提供了几种加速分布数据并行的技术,包括分桶梯度(bucketing gradients)、通信和计算的重叠(overlapping computation with communication)以及在梯度累积(gradient accumulation)阶段跳过梯度同 步(skipping gradient synchronization)。PyTorch 分布式数据并行可以用 256 个 GPU 达到接近线性的可扩展性程度[36]。在 DP 的基础上,原生支 持 DDP,每个节点都有自己的本地模型副本和本地优化器,支持多机多卡 的分布式训练。一般来说,DDP 都显著快于 DP,能达到略低于卡数的加速 比,但要求每块 GPU 卡都能装载完整输入维度的参数集合。在 1.11 版本 后,PyTorch 开始支持 FSDP 技术,可以更加高效的将部分使用完毕的参数 移至内存中,显著减小了显存的峰值占用,更加吻合大模型的特性。
TensorFlow 2
TensorFlow 是一个为大规模数值计算设计的流行开源库。TensorFlow 支持异构设备的并行计算,可以在不同类型和尺寸的机器上运行,无论是超 级计算机,还是嵌入式系统。它希望用户只需关注模型的构建和优化,透明 化复杂的并行计算细节。此外,TensorFlow 可以实现多机并行线性加速,提 高分布式训练的效率。原始的 TensorFlow 是基于静态图设计的,有着更高 的底层运行效率。但缺点是不易调试。最新版本的 TensorFlow 已经开始同 时支持静态图和动态图了,是开源时间较长的并行框架。
飞桨 PaddlePaddle 3
飞桨(PaddlePaddle,Parallel Distributed Deep Learning)是我国较早 开源开放、自主研发、功能完备的产业级深度学习框架。飞桨不仅在业内最 早支持了万亿级稀疏参数模型的训练能力,而且近期又创新性的提出了 4D 混合并行策略,以训练千亿级稠密参数模型,可以说分布式训练是飞桨最具 特色的技术之一。
飞桨的分布式训练技术在对外提供之前就已经在百度内部广泛应用,如 搜索引擎、信息流推荐、百度翻译、百度地图、好看视频、文心 ERNIE 等等, 既包含网络复杂、稠密参数特点的计算机视觉(CV)自然语言处理(NLP) 模型训练场景,又覆盖了有着庞大的 Embedding 层模型和超大数据量的推 荐搜索训练场景,可谓是分布式训练技术得天独厚的“练功房”。
昇思 MindSpore4
昇思 (MindSpore) 是一个全场景深度学习框架,旨在实现易开发、高效 执行、全场景覆盖三大目标。其中易开发表现为 API 友好、调试难度低,高效执行包括计算效率、数据预处理效率和分布式训练效率,全场景则指框架 同时支持云、边缘以及端侧场景。昇思 MindSpore 的特性之一就是融合了 数据并行、模型并行和混合并行,构建一种易用高效的分布式并行训练模式, 让算法人员不再需要关注算法模型到底需要用哪种模式训练。可以简化分布 式并行编程,串行代码实现分布式训练,对用户屏蔽并行细节,并且保持高 性能;计算逻辑上保持和单卡串行流程一致;实现上统一数据并行和模型并 行,一套框架支持多种并行模式;结合集群拓扑优化性能。
OneFlow5
OneFlow 一直主打分布式和高性能。对于多机多卡训练场景,是国内较 早发布的并行计算框架。OneFlow 会把整个分布式集群逻辑抽象成为一个 超级设备,用户可以从逻辑视角的角度使用超级设备。最新版本的 OneFlow 和 TensorFlow 一样,实现了同时 dui 动态图和静态图的支持,而且动静图之 间转换十分方便。此外,OneFlow 完全兼容 PyTorch,将 PyTorch 程序转移 至 OneFlow 框架的代价较低。OneFlow 支持数据 + 模型的混合并行方式, 便于提升并行计算性能。OneFlow 在框架层面也做了大量优化,nn.Graph 提供了简洁、丰富的性能优化选项,如算子融合(Kernel Fusion)、自动混 合精度训练 (Auto Mixed Precision Training) 等。
夸父 Colossal-AI 6
“夸父”(Colossal-AI),提供了一系列并行组件,通过多维并行、大规 模优化器、自适应任务调度、消除冗余内存等优化方式,提升并行训练效率, 并解耦了系统优化与上层应用框架、下层硬件和编译器,易于扩展和使用。 提升人工智能训练效率的同时最小化训练成本。在三方面进行了优化:优化 任务调度、消除冗余内存、降低能量损耗[37]。夸父从大模型实际训练部署过 程中的性价比角度出发,力求易用性,无需用户学习繁杂的分布式系统知识, 也避免了复杂的代码修改。仅需要极少量的改动,便可以使用夸父将已有的 单机 PyTorch 代码快速扩展到并行计算机集群上,无需关心并行编程细节。
Megatron-LM7
Megratron 是 NVIDIA 提出的一种基于 PyTorch 分布式训练大规模 语言模型的架构,用于训练基于 Transformer 架构的巨型语言模型。针对 Transformer 进行了专门的优化,主要采用的是模型并行的方案。Megatron 设计就是为了支持超大的 Transformer 模型的训练的,因此它不仅支持传统分布式训练的数据并行,也支持模型并行,包括 Tensor 并行和 Pipeline 并 行两种模型并行方式。NVIDIA 发表了多篇论文,较有代表性的有发表于 2019 年 9 月的论文,主要提出了通过将矩阵分块提高并行度的方法[38]。发 表于 2021 年 4 月的第二篇论文,对于分布式中的一些重要的设计,如 tensor parallel、pipeline parallel、micro batch size 等进行了一些分析与讨论。同 时提出了更加精细的 pipeline 结构与 communication 模式[35]。通过多种并 行方式的结合,可以让大模型的训练更快。发表于 2022 年 7 月的第三篇文 章将核心操作 LayerNorm 和 Dropout 安装输入维度进一步切分,使得这两 个需要频繁运行的操作在不大幅增加通信开销的情况下实现了并行[39]。
DeepSpeed8
在 2021 年 2 月份,微软发布了一款名为 DeepSpeed 的超大规模模 型训练工具,其中包含了一种新的显存优化技术——零冗余优化器 ((Zero Redundancy Optimizer,ZeRO)[40]。该技术去除了在分布式数据并行训练过 程中存储的大量冗余信息,从而极大地推进了大模型训练的能力。从这个角 度出发,微软陆续发布了 ZeRO-1,ZeRO-2,ZeRO-3 和 ZeRO-3 Offload,基 本实现了 GPU 规模和模型性能的线性增长[41]。基于 DeepSpeed,微软开 发了具有 170 亿参数的自然语言生成模型,名为 Turing-NLG。2021 年 5 月,推出了能够支持训练 2000 亿级别参数规模的 ZeRO-2。目前最新版本 ZeRO-3 Offload 可以实现在 512 颗 V100 上训练万亿参数规模的大模型。
Horovod9
Horovod 是一个基于 TensorFlow, Keras, PyTorch 以及 Apache MXNet 的并行计算框架。Horovod 力求将单机程序快速简单地转化并行计算。由 LF AI & Data Foundation 基金会(LF AI and Data)维护。鼓励所有致力于 人工智能、机器和深度学习的公司,参与到开源项目社区。Horovod 使用的 MPI 模型比 TensorFlow 的参数服务器模型更简单。使用 Horovod 编写的 深度学习模型训练脚本可以在几乎不进行任何改动的情况下顺利地在单个 GPU、多个 GPU 甚至多个主机上运行。实验表明在拥有 128 个节点(每个 节点 4 块 Pascal GPU)的集群上,在 Inception V3 和 ResNet-101 两个任 务上,Horovod 几乎表现出了线性加速比。
表 3.1对以上并行框架的信息进行了汇总。
3.3 模型部署
模型部署是决定大模型能否使用的关键因素之一,大模型因模型参数量 大,对软硬件资源的配置有很高的要求。这一节我们将首先介绍部署大规模 预训练模型面临的困难与挑战,以及常用的解决方案。
3.3.1 预训练模型部署的困难
大规模预训练模型已经成为深度学习应用中最常用的技术之一。尽管它 们在计算机视觉、自然语言处理和语音处理等领域中表现出色,但将它们部 署到生产环境中仍然面临许多问题的挑战,包括以下几个方面:
1. 模型大小:预训练模型通常非常庞大,GPT-3 等模型包含上千亿个参 数,因此在部署时可能会面临存储和传输上的困难
2. 推理速度:模型推理速度是评估一个机器学习模型性能的重要指标之 一。在实际应用中,模型的推理速度往往直接影响着用户的体验和系 统的效率。高效的模型推理速度可以缩短处理时间,提高用户满意度, 减少计算资源的浪费。微软发布的多语言机器翻译模型 DeltaLM 在英 语到中文的翻译方向上大约耗时 150ms/token(V100 GPU,PyTorch 框架)[42],在华为 NPU 架构上耗时大约在 0.2-16 s/token 之间。
3. 计算资源:预训练模型需要大量的计算资源来进行推理,这可能会导 致部署时的计算瓶颈和性能问题。
4. 硬件兼容性:预训练模型的部署需要适应多种不同的硬件平台,包括 CPU、GPU、ASIC 等,因此需要适配和优化。
5. 数据隐私:预训练模型通常需要使用大量的数据进行训练,在部署时 需要考虑数据隐私和保护的问题。
6. 版本管理:预训练模型可能会不断更新和改进,因此在部署时需要考 虑版本管理和更新的问题。
3.3.2 部署框架和部署工具
部署流程 大模型的部署一般包括以下步骤:
1. 模型选择:选择一个适合自己业务需求的预训练模型,训练一个模型 的参数。
2. 模型转换和优化:由于不同的深度学习框架和硬件设备之间存在差异, 需要将权重文件转换为目标框架和设备可用的格式,同时进行一定的优化操作,以提高模型的性能和速度。
3. 数据预处理和集成:根据业务需求,对输入数据进行预处理和格式转 换,将其转换为模型可接受的格式,并将模型与数据处理代码集成到 一个可执行的应用程序中。
4. 模型部署和测试:将打包好的应用程序部署到目标设备上,并进行测 试和验证,确保模型的正确性和稳定性。
5. 模型更新和维护:根据实际使用情况,对模型进行更新和优化,并及 时修复可能出现的问题和 bug,保证模型的持续可用性和性能。
部署框架 选择合适的部署框架和工具来简化部署过程,并提供模型管理、调 试和监控功能。一些常见的部署框架和工具包括 TensorFlow Serving、ONNX Runtime、OpenVINO、TensorRT、TorchScript 等。
部署方式 Online 方式:首先在移动端做初步预处理,然后把数据传到服务 器进行预测后返回移动端。Offline 方式:根据硬件的性能选择模型,在服务 器训练得到模型,在移动端进行预测的过程
3.3.3 部署技术和优化方法
代码优化 代码优化是一种通过优化神经网络中的算子实现高效部署的技 术。在预训练模型中,算子是指网络中的基本计算单元,通常包括全连接、 卷积、池化、归一化等操作。这些算子的优化对于提高模型的效率和性能至 关重要。一般来讲,算子代码优化可以通过以下方式实现:
1. 使用高效的算法:在实现算子时,使用高效的算法可以减少计算复杂 度和内存占用,从而提高神经网络的性能。
2. 使用更高效的语言实现算子:例如使用 C++ 和 C 等来替代 python 实现算子,可以更好地利用计算资源和硬件加速器,提高神经网络的 性能。CUDA 和 Triton 就分别是用 C++ 和 python 实现的优化后的 算子。
硬件加速 硬件加速是一种通过使用专用硬件来提高神经网络的性能的技 术。通常情况下,硬件加速可以通过以下方式实现:
1. TPU 加速:TPU 是由 Google 设计的专门为深度学习应用优化的 ASIC 芯片。与通用的 CPU 和 GPU 不同,TPU 专门针对深度学习计算的 特殊需求进行了设计和优化。
2. ASIC(Application-Specific Integrated Circuit)加速:ASIC 是一种定 制化的集成电路,专门为某个特定应用场景而设计制造。与通用的处 理器和逻辑电路不同,ASIC 可以实现高度优化的电路结构和算法,以 提高性能和能效。
3. FPGA(Field-Programmable Gate Array)加速:是一种可编程逻辑 芯片,它可以通过编程方式实现各种逻辑电路。与固定功能的集成电 路(ASIC)不同,FPGA 具有高度灵活性和可编程性,可以在硬件 层面实现不同的应用场景。FPGA 通常由大量的逻辑单元(Look-Up Tables, LUTs)和存储单元(Flip-Flops)组成。逻辑单元可以实现基 本的布尔逻辑运算和算术运算,而存储单元可以存储中间结果和状态变量。FPGA 还包含了大量的内部通信线路和 I/O 引脚,可以与其他 电路和设备进行通信。
云服务 云服务是指将预训练模型部署到云端服务器上,通过互联网提供给 用户使用的服务。云服务可以提供强大的计算能力和存储资源,同时可以 根据实际需要灵活调整计算资源的规模和配置。常见的云服务提供商包括 AWS、Azure、Google Cloud 等,它们提供了各种深度学习服务和工具,如 模型训练、模型部署、自动缩放。
1. 模型训练服务:提供 GPU 和 TPU 等硬件资源和深度学习框架,可以 帮助用户在云端快速训练深度学习模型。
2. 模型部署服务:提供各种深度学习模型的部署服务,可以将训练好的 模型部署到云端或边缘设备上,以提供各种应用程序的服务。
3. 弹性伸缩服务:根据用户的需求和流量变化,自动调整计算和存储资 源的规模和配置,以提供更加灵活、高效和可靠的服务。
移动端 CPU 推理框架的优化 移动端 CPU 推理框架的优化通常通过编 译优化来实现,即通过对代码进行优化和重组,以便让 CPU 能更高效地处 理模型计算,提高模型推理的速度。
隐私保护 随着机器学习在越来越多的场景中被应用,保护用户隐私已经成 为一个重要的问题。在预训练模型部署中,也需要考虑如何保护用户隐私, 常用的用户隐私隐私保护技术包括:
1. 差分隐私:通过添加噪声来隐藏数据集中的个人信息,从而保护用户 的隐私。
2. 加密技术:加密技术是一种保护数据隐私和保密性的技术,它通过使 用密钥来将原始数据转换为一种无法读取的形式。只有拥有正确密钥 的人才能够解密数据并访问原始信息。
3. 访问控制:访问控制可以限制对数据和模型的访问,从而保护数据和 模型的隐私
3.4 预训练模型的压缩
3.4.1 模型压缩方案概述
随着深度学习技术的不断发展,大型语言模型(Large Language Model)[4,22,43-44] 已成为自然语言处理领域的核心技术。然而,这些模型通常具有数十亿乃至 上百亿参数,导致存储和计算成本极高,大多数下游用户难以进行微调。因 此,针对大型语言模型的模型压缩成为一种可行的替代方案,便于进一步部 署[45]。针对于模型压缩,常使用的方案有以下几种:
1. 剪枝:剪枝是一种通过去除模型中一些不必要的连接或神经元来减小 模型大小的技术。
2. 蒸馏:蒸馏是一种通过使用学生模型来模拟预训练教师模型的行为来 减小模型大小的技术。通常情况下,学生模型由更小的神经网络或线 性模型组成。
3. 量化:量化是一种将预训练模型中的权重从浮点数转换为低位数的技 术。通常情况下,量化的精度是 8 位或更低。量化可以大大减少模型 的存储空间和计算量,但可能会对模型的性能产生一定的影响。
4. 权重矩阵分解:使用包括 SVD 等矩阵分解方法对预训练模型的 FFN 层的权重矩阵进行分解,从而减少 Attention 层的参数量,提高模型的 效率。
5. 模型参数共享:以 ALBERT 为例,模型的 Attention 层之间采用了权 重共享的方式,从而减少了模型的参数量[27]。 在现有资源条件的限制下,模型压缩一般是面向具体的下游任务,即在 微调阶段通过压缩模型的规模实现模型的下游任务快速适配。本文即重点 探讨两种常用的针对下游任务微调的模型压缩方法:知识蒸馏[46]和模型剪 枝[47]。
3.4.2 结构化模型压缩策略
传统的知识蒸馏方法通过对齐模型输出或内部隐层特征,将复杂的“教 师模型”知识迁移到较小的“学生模型”以实现模型压缩[45-46,48]。然而,当 前大型语言模型(如 GPT-3 系列[4])只提供 API 接口,其参数等处于黑盒状态,难以应用传统知识蒸馏方法。相反,我们可以通过上传下游任务相关 数据并利用教师大模型的输出信息和原始数据一起训练小模型,以使其具有 一定的能力。例如,GPT-3 可以利用思维链解决复杂推理问题,而小模型由 于大小限制而缺乏这种能力。研究人员通过让 GPT-3 输出中间推理步骤并 生成多样的思维链步骤,丰富微调训练数据,并将这些思维链用于小模型的 训练,使其具有一定的推理能力[49-50]。除了未开源模型参数的黑盒模型,如 GPT-3,还有一些开源参数的大型语言模型,例如 OPT[43],BLOOM[51]等。 对于这些模型,我们可以借鉴之前利用中间层特征的方法进行知识蒸馏。但 是由于这些模型的参数仍然过大,对于一般下游用户的微调训练仍然是巨大 的开销。因此,在进行大型语言模型的知识蒸馏时,不仅要关注小模型在推 理阶段的性能和开销,还要关注蒸馏过程中的训练开销。
3.4.3 非结构化模型压缩策略
研究人员主要是围绕已经开源参数的模型,例如 GPT-J[4]、OPT[43]以 及 BLOOM[51]等进行模型参数的剪枝。模型剪枝大体上可以针对具体关注 的参数单元和子网络情况,可以分为结构化剪枝和非结构化剪枝两种。结构 化剪枝方法在较高稀疏度的情况下可以达到可观的提速但是会带来一定程 度上的性能下降,而非结构化剪枝的方法虽然可以在较高稀疏度的情况下保 持性能,但是又难以在通用的硬件上带来实质性的加速[52]。同时,在之前 研究中常用的迭代式剪枝策略并不是完全合适,因为仍然需要多次训练大模 型,也会给下游用户带来较大的训练开销,因而如何 One-shot 地得到一个 合适的子网络供下游用户使用值得探索。同时,研究人员还在探索如何将剪 枝与其他模型压缩技术,如量化和蒸馏,相结合以进一步提高大型语言模型 性能和效率。这些技术的发展有望为推动人工智能技术的发展和应用提供有 力支持。
3.4.4 模型压缩小结
目前,针对像 GPT-3[4]这样的超大规模模型进行有效的模型压缩仍然存 在一些挑战。这些挑战主要包括以下几个方面:
模型复杂度:超大模型通常拥有数十亿甚至数百亿的参数,导致整个压 缩过程的训练的计算量和内存消耗巨大,这对硬件要求非常高。超大模型的 结构往往非常复杂,由多个层和子网络组成。因此,压缩模型的过程需要考 虑如何剪枝模型、量化模型、知识蒸馏等多种技术手段的结合使用。
模型压缩技术的局限性:当前已有的模型压缩技术可能无法直接适用于 超大模型。例如,传统的知识蒸馏方法可能无法有效地提取超大模型中的知 识,而结构化剪枝等方法在较高稀疏度的情况下可能会带来性能下降。并且 有研究表明,大型语言模型存在涌现能力,即当模型参数达到一定规模时才 会具有足够强的能力。同时,由于超大模型的结构复杂,可能需要一些特殊 的压缩技术来处理。因此,需要有一种通用的压缩方法,适用于各种类型的 超大模型。
模型的黑盒特性:目前的超大模型如 GPT-3 等均为闭源模型,用户无 法获取其具体的参数信息和结构信息。这使得在对模型进行压缩时需要使用 一些基于模型输出或中间层特征的方法进行知识迁移和蒸馏,增加了压缩的 难度。
针对超大模型的压缩,目前已经有一些研究在进行探索。例如,通过结 合剪枝、知识蒸馏和参数共享等多种技术手段,可以在不损失模型性能的情 况下将模型参数量压缩数百倍甚至数千倍。
总的来说,针对超大模型的压缩是一个具有挑战性的任务,需要结合多 种技术手段进行综合处理。未来的研究将继续探索如何针对超大模型进行更 加高效和精确的压缩,以推动人工智能技术的发展和应用
(本文仅供参考,不代表我们的任何投资建议。如需使用相关信息,请参阅报告原文。)
本报告总计:94页。
受篇幅限制,仅列举部分内容!
报告来源公众号:【百家全行业报告】