在分析核心算法之前,我们先了解chatGPT相关技术发展进程
首先介绍自然语言处理、大规模预训练语言模型以及 ChatGPT 技术的发展历程,接着就 ChatGPT 的技术优点和不足进行分析,然后讨论核心算法。
1.1 自然语言处理的发展历史
人类语言(又称自然语言)具有无处不在的歧义性、高度的抽象性、近乎无穷的语义组合性和持续的进化性,理解语言往往需要具有一定的知识和推理等认知能力,这些都为计算机处理自然语言带来了巨大的挑战,使其成为机器难以逾越的鸿沟。因此,自然语言处理被认为是目前制约人工智能取得更大突破和更广泛应用的瓶颈之一,又被誉为 “人工智能皇冠上的明珠”。
国务院 2017 年印发的《新一代人工智能发展规划》将知识计算与服务、跨媒体分析推理和自然语言处理作为新一代人工智能关键共性技术体系的重要组成部分。
自然语言处理自诞生起,经历了五次研究范式的转变(如图 1.1 所示)由最开始基于小规模专家知识的方法,逐步转向基于机器学习的方法。机器学习方法也由早期基于浅层机器学习的模型变为了基于深度学习的模型。为了解决深度学习模型需要大量标注数据的问题,2018 年开始又全面转向基于大规模预训练语言模型的方法,其突出特点是充分利用大模型、大数据和大计算以求更好效果。
近期,ChatGPT 表现出了非常惊艳的语言理解、生成、知识推理能力,它可以极好地理解用户意图,真正做到多轮沟通,并且回答内容完整、重点清晰、有概括、有逻辑、有条理。ChatGPT 的成功表现,使人们看到了解决自然语言处理这一认知智能核心问题的一条可能的路径,并被认为向通用人工智能迈出了坚实的一步,将对搜索引擎构成巨大的挑战,甚至将取代很多人的工作,更将颠覆很多领域和行业。
那么,ChatGPT 到底解决了什么本质科学问题,才能变得如此强大并受到广泛的关注呢?我们认为,ChatGPT 是继数据库和搜索引擎之后的全新一代的 “知识表示和调用方式”知识在计算机内的表示是人工智能的核心问题。如表 1.1所示,早期,知识以结构化的方式存储在数据库中,人类需要掌握机器语言(如 SQL),才能调用这些知识;后来,随着互联网的诞生,更多文本、图片、视频等非结构化知识存储在互联网中,人类通过关键词的方式调用搜索引擎获取知识;
现在,知识以参数的形式存储在大模型中(从 2018 年开始),ChatGPT 主要解决了用自然语言直接调用这些知识的问题,这也是人类获取知识最自然的方式。
表 1.1: 知识表示和调用方式的演进
另外,从自然语言处理技术发展阶段的角度看(如图 1.1 ),可以发现一个有趣的现象,即每一个技术阶段的发展时间,大概是上一个阶段的一半。
小规模专家知识发展了 40 年,浅层机器学习是 20 年,之后深度学习大概10 年,预训练语言模型发展的时间是 5 年,那么以 ChatGPT 为代表的技术能持续多久呢?如果大胆预测,可能是 2 到 3 年,也就是到 2025 年大概又要更新换代了。
1.2 大规模预训练语言模型的技术发展历程
大规模预训练语言模型(简称大模型)作为 ChatGPT 的知识表示及存储基础,对系统效果表现至关重要,接下来对大模型的技术发展历程加以简要介绍。
2018 年,OpenAI 提出了第一代 GPT(Generative Pretrained Trans-former)模型[1],将自然语言处理带入 “预训练” 时代。然而,GPT 模型并没有引起人们的关注,反倒是谷歌随即提出的 BERT(Bidirectional EncoderRepresentations from Transformers)模型[2]产生了更大的轰动。不过,Ope-nAI 继续沿着初代 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 调研报告术能持续多久呢?如果大胆预测,可能是 2 到 3 年,也就是到 2025 年大概又要更新换代了。
1.2 大规模预训练语言模型的技术发展历程
大规模预训练语言模型(简称大模型)作为 ChatGPT 的知识表示及存储基础,对系统效果表现至关重要,接下来对大模型的技术发展历程加以简要介绍。
2018 年,OpenAI 提出了第一代 GPT(Generative Pretrained Trans-former)模型[1],将自然语言处理带入 “预训练” 时代。然而,GPT 模型并没有引起人们的关注,反倒是谷歌随即提出的 BERT(Bidirectional EncoderRepresentations from Transformers)模型[2]产生了更大的轰动。不过,Ope-nAI 继续沿着初代 GPT 的技术思路,陆续发布了 GPT-2和 GPT 模型GPT-3。
尤其是 GPT-3 模型,含有 1,750 亿超大规模参数,并且提出 “提示语”(Prompt)的概念,只要提供具体任务的提示语,即便不对模型进行调整也可完成该任务,如:输入 “我太喜欢 ChatGPT 了,这句话的情感是 __”,那么 GPT-3 就能够直接输出结果 “褒义”。如果在输入中再给一个或几个示例,那么任务完成的效果会更好,这也被称为语境学习(In-context Learning)。
不过,通过对 GPT-3 模型能力的仔细评估发现,大模型并不能真正克服深度学习模型鲁棒性差、可解释性弱、推理能力缺失的问题,在深层次语义理解和生成上与人类认知水平还相去甚远。直到 ChatGPT 的问世,才彻底改变了人们对于大模型的认知。
1.3 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 模型。
除了国内外学界和企业界在迅速跟进以外,我国国家层面也对 Chat-GPT 有所关注。2023 年 2 月 24 日,科技部部长王志刚表示:“ChatGPT 在自然语言理解、自然语言处理等方面有进步的地方,同时在算法、数据、算力上进行了有效结合。”科技部高新技术司司长陈家昌在回应 ChatGPT 相关提问时也表示,ChatGPT 最近形成了一种现象级的应用,表现出很高的人机交互水平,表现出自然语言的大模型已经具备了面向通用人工智能的一些特征,在众多行业领域有着广泛的应用潜力。1
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 具有良好的表现。
1.3.1 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 Man-ually via Evaluative Reinforcement[9]一文中被提及的。在传统的强化学习框架下代理 (Agent) 提供动作给环境,环境输出奖励和状态给代理,而在TAMER 框架下,引入人类标注人员作为系统的额外奖励。该文章中指出引入人类进行评价的主要目的是加快模型收敛速度,降低训练成本,优化收敛方向。具体实现上,人类标注人员扮演用户和代理进行对话,产生对话样本并对回复进行排名打分,将更好的结果反馈给模型,让模型从两种反馈模式——人类评价奖励和环境奖励中学习策略,对模型进行持续迭代式微调。这一框架的提出成为后续基于 RLHF 相关工作的理论基础。
在 2017 年前后,深度强化学习(Deep Reinforcement Learning)逐渐发展并流行起来。MacGlashan et al.[10] 提出了一种 AC 算法(Actor-critic),并且将人工反馈(包括积极和消极)作为信号调节优势函数(Advantagefunction)。Warnell et al.[11] 将 TAMER 框架与深度强化学习相结合,成功将 RLHF 引入深度强化学习领域。在这一阶段,RLHF 主要被应用于模拟器环境(例如游戏等)或者现实环境(例如机器人等)领域,而利用其对于语言模型进行训练并未受到重视。
在 2019 年以后,RLHF 与语言模型相结合的工作开始陆续出现,Ziegleret 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 对其进行进一步训练,从而取得了惊艳四座的效果。
1.3.2 ChatGPT 技术发展脉络的总结
纵观 ChatGPT 的发展历程,不难发现其成功是循序渐进的,OpenAI从 2020 年开始关注 RLHF 这一研究方向,并且开展了大量的研究工作,积攒了足够的强化学习在文本生成领域训练的经验。GPT 系列工作的研究则积累了海量的训练数据以及大语言模型训练经验,这两者的结合才产生了ChatGPT。可以看出技术的发展并不是一蹴而就的,是大量工作的积淀量变引起质变。此外,将 RLHF 这一原本应用于模拟器环境和现实环境下的强化学习技术迁移到自然语言生成任务上是其技术突破的关键点之一。纵观 AI 这几年的发展,已经逐渐呈现出不同技术相互融合的大趋势,比如将 Transformer 引入计算机视觉领域产生的 ViT;将强化学习引入蛋白质结构预测的 AlphaFold 等。每个研究人员都有自己熟悉擅长的领域,而同时科学界也存在着大量需要 AI 赋能的亟待解决的关键问题,如何发现这些问题的痛点,设计合理的方法,利用自己研究领域的优越的技术解决问题,似乎是一个值得思考,也非常有意义的问题。
这是一个 AI 蓬勃发展的时代,计算机科学界每天都在产生着令人惊奇的发明创造,很多之前人们可望而不可及的问题都在或者正在被解决的路上。2022 年 2 月,DeepMind 发布可对托卡马克装置中等离子体进行磁控制的以帮助可控核聚变的人工智能,这项研究目前仍在进行。或许在未来某一天,能源将不成为困扰我们的问题,环境污染将大大减少,星际远航将成为可能。希望每个研究人员都能在这样的时代中,找到适合自己的研究方向并且为科技进步添砖加瓦。
1.3.3 ChatGPT 的未来技术发展方向
虽然 ChatGPT 目前已经取得了非常喜人的成果,但是未来仍然有诸多可以研究的方向。
首先 OpenAI 的研究人员指出了 ChatGPT 现存的一些问题:
1. ChatGPT 有时候会生成一些似是而非、毫无意义的答案,导致这个问题的原因有:强化学习训练过程中没有明确的正确答案;训练过程中一些谨慎的训练策略导致模型无法产生本应产生的正确回复;监督学习训练过程中错误的引导导致模型更倾向于生成标注人员所知道的内容而不是模型真实知道的。
2. ChatGPT 对于输入措辞比较敏感,例如:给定一个特定的问题,模型声称不知道答案,但只要稍微改变措辞就可以生成正确答案。
3. ChatGPT 生成的回复通常过于冗长,并且存在过度使用某些短语的问题,例如:重申是由 OpenAI 训练的语言模型。这样的问题主要来自于训练数据的偏差和过拟合问题。
4. 虽然 OpenAI 已经努力让模型拒绝不恰当和有害的请求,但是仍然无法避免对有害请求作出回复或对问题表现出偏见。
其次,ChatGPT 虽然很强大,但是其模型过于庞大使用成本过高,如何对模型进行瘦身也是一个未来的发展方向,目前主流的模型压缩方法有量化、剪枝、蒸馏和稀疏化等。
量化是指降低模型参数的数值表示精度,比如从 FP32 降低到 FP16 或者 INT8。
剪枝是指合理地利用策略删除神经网络中的部分参数,比如从单个权重到更高粒度组件如权重矩阵到通道,这种方法在视觉领域或其他较小语言模型中比较奏效。蒸馏是指利用一个较小的学生模型去学习较大的老师模型中的重要信息而摒弃一些冗余信息的方法。稀疏化将大量的冗余变量去除,简化模型的同时保留数据中最重要的信息。
此外,减少人类反馈信息的 RLAIF 也是最近被提出的一个全新的观点。2022 年 12 月 Anthropic 公司发表论文“Constitutional AI: Harmlessnessfrom AI Feedback”[19],该公司是 2020 年 OpenAI 副总裁离职后创立的,其公司始创团队中多有参与 GPT-3 以及 RLHF 相关研究的经历。该文章介绍了其最新推出的聊天机器人 Claude,与 ChatGPT 类似的是两者均利用强化学习对模型进行训练,而不同点则在于其排序过程使用模型进行数据标注而非人类,即训练一个模型学习人类对于无害性偏好的打分模式并代替人类对结果进行排序。
1.4 ChatGPT 的优势与劣势
1.4.1 ChatGPT 的优势
ChatGPT 作为开年爆款产品,自发布以来不足三个月,就以其能力的全面性、回答的准确性、生成的流畅性、丰富的可玩性俘获了数以亿计的用户,其整体能力之强大令人惊叹。下面我们将从以下三个角度分别阐述ChatGPT 相较于不同产品和范式的优点。
相较于普通聊天机器人: ChatGPT 的发布形式是一款聊天机器人,类似于市场上其他聊天机器人(微软小冰、百度度秘等),也是直接对其下指令即可与人类自然交互,简单直接。但相较之下,ChatGPT 的回答更准确,答案更流畅,能进行更细致的推理,能完成更多的任务,这得益于其以下三方面的能力:
1. 强大的底座能力: ChatGPT 基于 GPT-3.5 系列的 Code-davinci-002指令微调而成。而 GPT-3.5 系列是一系列采用了数千亿的 token 预训练的千亿大模型,足够大的模型规模赋予了 ChatGPT 更多的参数量记忆充足的知识,同时其内含“涌现”的潜力,为之后的指令微调能力激发打下了坚实的基础;
2. 惊艳的思维链推理能力: 在文本预训练的基础上,ChatGPT 的基础大模型采用 159G 的代码进行了继续预训练,借助代码分步骤、分模块解决问题的特性,模型涌现出了逐步推理的能力,在模型表现上不再是随着模型规模线性增长,有了激增,打破了 scaling law;
3. 实用的零样本能力: ChatGPT 通过在基础大模型上利用大量种类的指令进行指令微调,模型的泛化性得到了显著地激发,可以处理未见过的任务,使其通用性大大提高,在多种语言、多项任务上都可以进行处理。
综上,在大规模语言模型存储充足的知识和涌现的思维链能力的基础上,ChatGPT 辅以指令微调,几乎做到了知识范围内的无所不知,且难以看出破绽,已遥遥领先普通的聊天机器人。
2. 相较于其它大规模语言模型: 相较于其它的大规模语言模型,ChatGPT使用了更多的多轮对话数据进行指令微调,这使其拥有了建模对话历史的能力,能持续和用户交互。
同时因为现实世界语言数据的偏见性,大规模语言模型基于这些数据预训练可能会生成有害的回复。ChatGPT 在指令微调阶段通过基于人类反馈的强化学习调整模型的输出偏好,使其能输出更符合人类预期的结果(即能进行翔实的回应、公平的回应、拒绝不当问题、拒绝知识范围外的问题),一定程度上缓解了安全性和偏见问题,使其更加耐用;同时其能利用真实的用户反馈不断进行 AI 正循环,持续增强自身和人类的这种对齐能力,输出更安全的回复。
3. 相较于微调小模型: 在 ChatGPT 之前,利用特定任务数据微调小模型是近年来最常用的自然语言处理范式。相较于这种微调范式,ChatGPT通过大量指令激发的泛化能力在零样本和少样本场景下具有显著优势,在未见过的任务上也可以有所表现。例如 ChatGPT 的前身 InstructGPT 指令微调的指令集中 96% 以上是英语,此外只含有 20 种少量的其它语言(包含西班牙语、法语、德语等)。然而在机器翻译任务上,我们使用指令集中未出现的塞尔维亚语让 ChatGPT 进行翻译,仍然可以得到正确的翻译结果,这是在微调小模型的范式下很难实现的泛化能力。
除此之外,作为大规模语言模型的天然优势使 ChatGPT 在创作型任务上的表现尤为突出,甚至强于大多数普通人类。
1.4.2 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 目前还只能处理文本数据,在多模态任务上还无法处理。表 1.2 列举了一些 ChatGPT 存在的以上不足的示例(2023 年 2 月 24日测试)。
ChatGPT 大模型核心算法深度分析
ChatGPT 的卓越表现得益于其背后多项核心算法的支持和配合。
本文将分别深度分析作为其实现基础的 Transformer 模型、激发出其所蕴含知识的Prompt/Instruction Tuning 算法、其涌现出的思维链能力、以及确保其与人类意图对齐的基于人类反馈的强化学习算法。
2.1 基于 Transformer 的预训练语言模型
ChatGPT 强大的基础模型采用 Transformer 架构,Transformer是一种基于自注意力机制的深度神经网络模型,可以高效并行地处理序列数据。
原始的 Transformer 模型包含两个关键组件:编码器和解码器。
编码器用于将输入序列映射到一组中间表示,解码器则将中间表示转换为目标序列。编码器和解码器都由多层的注意力模块和前馈神经网络模块组成。
其中自注意力模块可以学习序列中不同位置之间的依赖关系,即在处理每个位置的信息时,模型会考虑序列中其他所有位置上的信息,这种机制使得 Transformer模型能够有效地处理长距离依赖关系。
在原始 Transformer 模型基础上,相继衍生出了三类预训练语言模型:
-
编码预训练语言模型
-
解码预训练语言模型
-
编解码预训练语言模型
2.1.1 编码预训练语言模型(Encoder-only Pre-trained Models)
这类模型在预训练过程中只利用原始 Transformer 模型中的编码器。相应的预训练任务通常选用掩码语言建模任务(Masked Language Modeling),即掩码住(用特殊字符 [MASK] 替换)输入句子中一定比例的单词后,要求模型根据上下文信息去预测被遮掩的单词。其中有有代表性的工作包括BERT,ALBERT,RoBERTa等。表 2.1列举该架构下的若干经典模型。
图 2.1: GPT 模型架构及微调方式
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”中被提出。在 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;在此之后,GPT-1 提出的两步走的训练方法成为许多大型语言模型的训练范式。
从这个角度来看,GPT-1 和 Word2Vec 在具体下游任务中发挥的作用是类似的,通过无监督的方法获取自然语言的隐含表示,再将其迁移至其他目标任务。但是从更高的层面来看,GPT-1 与以往的词向量表示方法是不同的,其数据量与数据规模的增大使得模型能够学习到不同场景下的自然语言表示。
图 2.1是 GPT-1 原文中的总览图,左侧是 GPT-1 的架构以及训练时的目标函数;右侧是对于不同任务上进行微调时模型输入与输出的改变。
图 2.1: GPT 模型架构及微调方式
总体来说,GPT-1 的目标是学习到一个通用的自然语言表征,并在之后通过简单调节适应很大范围上的任务。
从现在的角度来看,GPT-1 成功背后有两个原因:
第一个是 2017 年 Transformer 的提出使得捕获自然语言中长距离依赖关系成为可能。
第二个是 GPT 模型在预训练过程中用到了更大的数据量以及更多的模型参数,使得模型能够从大规模语料库中学习到以往模型无法学习的知识。而任务微调在通用预训练和下游任务之间搭起了知识桥梁,使得用一个模型解决多种问题成为一条可行之路。
(2)GPT-2
与 GPT-1 中的通过预训练-微调范式来解决多个下游任务不同,GPT-2 更加侧重于 Zero-shot 设定下语言模型的能力。Zero-shot 是指模型在下游任务中不进行任何训练或微调,即模型不再根据下游任务的数据进行参数上的优化,而是根据给定的指令自行理解并完成任务。
简单来讲,GPT-2 并没有对 GPT-1 的模型架构进行创新,而是在 GPT-1 的基础上引入任务相关信息作为输出预测的条件,将 GPT-1 中的条件概率 p(output|input) 变为 p(output|input;task);并继续增大训练的数据规模以及模型本身的参数量,最终在 Zero-shot 的设置下对多个任务都展示了巨大的潜力。
虽然 GPT-2 并没有模型架构上的改变,但是其将任务作为输出预测的条件引入模型从而在 Zero-shot 的设置下实现多个任务的想法一直延续至今。这样的思想事实上是在传达只要模型足够大,学到的知识足够多,任何有监督任务都可以通过无监督的方式来完成,即任何任务都可以视作生成任务。
(3)GPT-3
GPT-3使用了与 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 Pre-trained Models)
基于编码器的架构得益于双向编码的全局可见性,在语言理解的相关任务上性能卓越,但是因为无法进行可变长度的生成,不能应用于生成任务。
基于解码器的架构采用单向自回归模式,可以完成生成任务,但是信息只能从左到右单向流动,模型只知“上文”而不知“下文”,缺乏双向交互。针对以上问题,一些模型采用序列到序列的架构来融合两种结构,使用编码器提取出输入中有用的表示,来辅助并约束解码器的生成。表 2.1列举该架构下的若干经典模型。
BART
BART 的具体结构为一个双向的编码器拼接一个单向的自回归解码器,采用的预训练方式为输入含有各种噪声的文本,再由模型进行去噪重构。在解码器部分,BART 每一层对编码器的最后一层的隐藏表示执行交叉注意力机制以聚合关键信息。BART 在维基百科和 BookCorpus 数据集上训练,数据量达 160GB。
T5
BART 为了兼顾不同任务设计了复杂的预训练任务,针对如何在多个任务中实现优秀的迁移性能这一问题,谷歌研究者提出了一种新的范式:将所有自然语言处理任务统一成“文本到文本”的生成任务。T5 通过在输入之前加入提示词,实现了用单个模型解决机器翻译、文本摘要、问答和分类等多个任务。针对迁移学习需要的巨量、高质量和多样的预训练数据,T5 在谷歌专门构造的 C4 数据集上进行训练。
Switch Transformers
随着语言模型的深入研究,参数量的增加可以显著提高模型的性能,但随之而来的就是应用时越来越大的运算量。Swicth Transformer 将混合专家网络(Mixture-of-Experts,MoE)的条件运算思想引入 Transformer 的全连接层,实现增加模型的尺寸而不增加推理时的运算量。
表 2.1: 基于 Transformer 的预训练模型对比
2.2 提示学习与指令精调
2.2.1 提示学习概述
提示学习(Prompt Learning)简单来说是通过一些方法编辑下游任务的输入,使其形式上模拟模型预训练过程使用的数据与任务。 比如做情感分类任务时,监督学习的做法是输入“我今天考砸了”,模型输出分类的分数或分布,而提示学习的做法则是在“我今天考砸了”后拼接上自然语言描述“我感觉很 ____”,让模型生成后面的内容,再根据某种映射函数,将生成内容匹配到某一分类标签。
可以看出,提示学习这种方式拉近了测试分布与预训练分布的距离,进而可以利用大规模预训练语言模型在预训练过程中习得的强大语言建模能力,使其不经过微调就可以在各种下游任务上取得很好的结果。后续更有工作提出了自动提示搜索和连续提示的方法,使得提示本身也可以微调,使其有了更好的灵活性。
提示学习还有各种有趣的用法,
如小样本场景下的语境学习(In-contextlearning),即在提示中加入几个完整的例子,如“美国的首都是华盛顿,法国的首都是巴黎,英国的首都是 ____”,以及在推理任务上的思维链(Chain-Of-Thought,COT)(我们将在下一节中详细介绍)等等。
相较于提示学习,指令精调(Instruction Tuning)可以说是提示学习的加强版。 两种学习方法的本质目标均是希望通过编辑输入来深挖模型自身所蕴含的潜在知识,进而更好的完成下游任务。而与提示学习不同的是,指令学习不再满足于模仿预训练数据的分布,而是希望通过构造“指令(Instruction)”并微调的方式,学习人类交互模式的分布,使模型更好的理解人类意图,与人类行为对齐;在指令学习中,模型需要面对的不再是单纯的补全任务,而是各种不同任务的“指令”,即任务要求。模型需要根据不同的任务要求,做出相匹配的正确回复。“指令”举例如下:
• 请将下面这句话翻译成英文“ChatGPT 都用到了哪些核心技术?”
• 请帮我把下面这句话进行中文分词“我太喜欢 ChatGPT 了!”
• 请帮我写一首描绘春天的诗词,诗词中要有鸟、花、草。
从样例中可以看出,原本自然语言处理中的经典任务,经过任务要求的包装后,就变成了更符合人类习惯的“指令”。研究表明,当“指令”任务的种类达到一定量级后,大模型甚至可以在没有见过的零样本(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 Learningfrom 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员工)等提出了思维链,通过在小样本提示学习的示例中插入一系列中间推理步骤,有效提升了大规模语言模型的推理能力,图 2.2展示模型通过产生思维链来正确求解数学应用题。
相较于一般的小样本提示学习,思维链提示学习有几个吸引人的性质:
-
在思维链的加持下,模型可以将需要进行多步推理的问题分解为一系列的中间步骤,这可以将额外的计算资源分配到需要推理的问题上。
-
思维链为模型的推理行为提供了一个可解释的窗口,使通过调试推理路径来探测黑盒语言模型成为了可能。
-
思维链推理应用广泛,不仅可以用于数学应用题求解、常识推理和符号操作等任务,而且可能适用任何需要通过语言解决的问题。
-
思维链使用方式非常简单,可以非常容易地融入语境学习(in-contextlearning),从而诱导大语言模型展现出推理能力。
图 2.2: 思维链提示学习示意图
针对零样本场景,利用推荐关键词“Let’s think stepby step”(让我们一步一步思考) 生成中间步骤的内容,从而避免了人工撰写中间步骤的过程。
2.4 基于人类反馈的强化学习(ReinforcementLearning with Human Feedback,RLHF)
RLHF 是 ChatGPT/InstrcutGPT 实现与人类意图对齐,即按照人类指令尽可能生成无负面影响结果的重要技术[16]。该算法在强化学习框架下实现,大体可分为以下两个阶段:
奖励模型训练 该阶段旨在获取拟合人类偏好的奖励模型。 奖励模型以提示和回复作为输入,计算标量奖励值作为输出。奖励模型的训练过程通过拟合人类对于不同回复的倾向性实现。具体而言,首先基于在人类撰写数据上精调的模型,针对同一提示采样多条不同回复。然后,将回复两两组合构成一条奖励模型训练样本,由人类给出倾向性标签。最终,奖励模型通过每条样本中两个回复的奖励值之差计算倾向性概率拟合人类标签,进而完成奖励模型的训练。
生成策略优化 给定习得的奖励模型,ChatGPT/InstructGPT 的参数将被视为一种策略,在强化学习的框架下进行训练。 首先,当前策略根据输入的查询采样回复。然后,奖励模型针对回复的质量计算奖励,反馈回当前策略用以更新。值得注意的是,为防止上述过程的过度优化,损失函数同时引入了词级别的 KL 惩罚项。此外,为了避免在公开 NLP 数据集上的性能退化,策略更新过程兼顾了预训练损失。
读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用
对于0基础小白入门:
如果你是零基础小白,想快速入门大模型是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!
标签:学习,训练,模型,任务,2024,算法,GPT,ChatGPT From: https://blog.csdn.net/2301_82275412/article/details/141171624