ChatGPT的工作原理和训练过程...腾讯算法工程师深度解构ChatGPT技术
我们特别邀请了腾讯知名语言文本项目算法工程师冉宇和薛晨,用他们的专业视野帮助您了解ChatGPT技术。 ChatGPT技术的全貌由浅入深。经历了怎样的训练过程?成功的关键技术是什么?又将如何引发行业变革?开发者如何学习ChatGPT的想法和技术并将其运用到日常工作中?希望这篇文章能给你带来新的启发。
ChatGPT 的主要功能
ChatGPT 本质上是一个会话模型。它可以回答日常问题并进行各种聊天。它还可以承认错误的答案,挑战错误的问题,甚至拒绝不适当的请求。在上周发布博文并测试界面后,ChatGPT 以其惊人的对话技巧迅速“引爆”网络。
1)ChatGPT 的技术背景
ChatGPT 还没有发布任何论文,只有介绍性博文和测试 API。从博文中提供的技术点和原理图来看,与今年早些时候公布的InstructGPT的核心思想是一致的。其关键能力来自三个方面:强大的基础大模型技能(InstructGPT)、高质量的真实数据(干净、丰富)、强化学习(PPO算法)。 ChatGPT 成功的上述三个因素将在本文的第 2 部分中详细讨论。
2)ChatGPT的主要特点
最让用户印象深刻的地方拥有强大的语言理解和生成系统。他的会话能力、文本生成能力以及对不同语言表达的理解能力都非常出色。它以对话为载体,可以回答各种日常问题,提高记忆能力和多轮对话的故事长度。其次,相比GPT3这样的大模型,ChatGPT的解答更加全面,可以从多个角度进行解答和阐述。相比之前的大型模型,知识可以被更充分地“挖掘”。 可以降低人类的学习成本,节省时间成本,可以满足人类日常的大部分需求,比如文本的快速重写,这决定了人类继续长篇小说快速编写和生成的目标定位代码错误等
值得一提的是,它具有安全机制和除偏功能。类似下面的问题在以往的主流机型中经常出现。不过ChatGPT在这两点上增加了过滤处理机制。它可以拒绝并“巧妙”地回答不适当的问题和请求。比如关于非法活动的问题:![]()
未知事物的“拒绝”:![]()
当然,ChatGPT并不完美,其缺点也很明显。首先,其简单的逻辑错误还是很明显,而且性能不够稳定(但总体来说比GPT3好很多)。尤其是如果有对话历史,很容易被用户误导。
其次,ChatGPT 有时会给出看似合理但实际上是错误甚至荒谬的答案。有些答案需要自己检查一下,以确定是否正确。尤其是用户在未知状态下查阅模型,就更难判断真伪了。 ChatGPT 允许生产者以低成本添加错误消息,并且这种固有缺陷已经产生了真正的影响。编程问答网站 StackOverflow 宣布暂时禁止用户发布 ChatGPT 生成的内容。网站版主表示:看似合理实则错误的答案太多了,已经超出了网站的容量。
此外,对不确定请求的抵抗力较差,还存在高估用户意图的问题。这主要体现在,如果用户意图不明确,ChatGPT会猜测用户的意图,理想的情况应该是要求用户澄清;如果用户的意图不明确,则很有可能给出不恰当的响应。大量用户反映ChatGPT部分回复包含大量废话和固定句型。它经常使用一些常见的短语和句子结构。这与用户在构建训练数据时倾向于选择较长答案有关。 ![]()
ChatGPT的工作原理
1)ChatGPT训练流程
ChatGPT训练流程非常清晰,主要分为三步,如图:
第一步是使用监控方法,基于GPT3.5微调训练初始模型,训练数据量约为2w ~ 3w(这里是导出的量级,我们根据兄弟模型InstructGPT的训练数据量估算)。注释器分别扮演用户和聊天机器人的角色,生成多轮手动标记的对话数据。值得注意的是,当人类充当聊天机器人时,他们会收到一些机器生成的建议来帮助人类编写自己的答案,从而提高编写注释的效率。
上述精细标记的训练数据虽然数量不大,但质量和多样性非常高,并且来自真实世界的数据,这是关键点。
第二步是收集相同上下文中按答案质量排序的数据:即随机选择大量查询,使用第一阶段微调模型,并生成几个不同的答案:![]()
,然后给它们贴上标签。该人对 k 个结果进行排序,形成
组训练数据对。然后,使用成对损失来训练奖励模型,该模型可以预测注释者更喜欢哪个输出。“通过比较”学习可以产生相对准确的奖励值。
这一步将 ChatGPT 从命令驱动转变为意图驱动。对于这一点,李宏毅老师说出了他的原话:“它将继续引导GPT说人们想让它说的话。”另外,训练数据不需要太多,保持在几万的水平即可。因为它不需要扩展所有问题,只需要告诉模型人类的偏好,强化模型的意图驱动能力。
第三步,利用PPO强化学习策略对第一阶段模型进行微调。这里的核心思想是随机选择新查询并使用第二阶段奖励模型对生成的响应进行评分。这个分数就是答案的总奖励,并且返回这个奖励。由此产生的策略梯度可以更新PPO模型参数。整个过程会迭代多次,直到模型收敛。
强化学习算法可以简单理解为调整模型参数,使模型获得最大的奖励(reward)。最大奖励意味着此时的反应最符合人工选择取向。关于PPO,我们知道它是OpenAI在2017年提出的一种新的强化学习策略优化算法。它提出了一种新的目标函数,可以实现小批量更新和多个训练步骤。其实现简单、易于理解、性能稳定,可以同时处理离散/连续动作空间问题,有利于大规模训练。
以上三个步骤就是ChatGPT的训练过程,文献中统称为RLHF技术。
2) ChatGPT 为什么会成功?
三阶段训练方式为何能让ChatGPT如此强大?其实上面的训练过程包含了我们上面提到的关键点,而这些关键点正是ChatGPT成功的原因:
- 强大的基础模型功底(InstructGPT)
- 大参数语言模型(GPT3.5)
- 高质量的真实数据(精准标注的多轮对话数据和对比排名数据)
- 性能稳定的强化学习算法(PPO算法)
需要注意的是,聊天的成功是基于它是在之前大量工作的基础上实现的,并不是凭空发生的“雷”。我们将在下面详细说明:
- InstructGPT
ChatGPT 是 InstructGPT 的兄弟模型,经过训练可以迅速按照指令给出详细答案。InstructGPT是OpenAI今年3月在《Training language models to follow instructions with human Feedback》文档中提出的一项工作。整体流程与上述ChatGPT流程基本相同,但在数据收集、基础模型(GPT3 vs GPT 3.5)以及第三步PPO模型初始化方面略有不同。
本文可以认为是RLHF 1.0的最终作品。一方面,从官网来看,这篇文章之后没有再发表关于RLHF的新研究。另一方面,本文也支持Instruction Tuning的有效性。
InstuctGPT 的工作原理与 ChatGPT 类似:给出指令,人类必须写出答案。首先,工作人员训练了早期版本的InstructGPT,使用完全手动标注的数据,分为三类:指令+响应、指令+多个示例以及用户在使用API过程中的需求。从第二类数据的标注来看,推测ChatGPT可以利用检索来提供不同的In Context Learning示例以供手动标注。其余步骤与上面的 ChatGPT 相同。
需要特别关注但又容易被忽视的,是OpenAI的数据质量控制和数据泛化。这也是 OpenAI 的一大优势: 搜索高质量的注释器 - 搜索在筛选测试中表现良好的标记器,以了解其识别和响应敏感线索的能力; 使用out-of-set注释器来确保泛化性——即使用来自更大群体中没有经历过上述1)步骤的注释器来检查训练数据,以确保训练数据与较大群体的偏好。
完成以上工作后,我们可以看看InstuctGPT和GPT3的区别:
GPT3的答案很简短,而且答案太通俗,没有亮点。 InstructGPT“说话”并解释了为什么自由主义是愚蠢的。显然,该模型已经学会了人们喜欢回答此类问题的冗长答案。
GPT3 只是一个语言模型。它用于预测下一个单词,而不考虑用户想要的答案。当使用将用户偏好表示为微调数据的三种类型的手动注释时,1.3B 参数 InstructGPT 在多种场景中表现良好。下面的效果超越了 175B GPT3: ![]()
InstuctGPT 的工作也是开创性的:它拥有“锁定”和挖掘从 GPT3 学到的海量数据的知识和技能,但这些只是快速通过了上下文方法较难获得。 InstuctGPT 找到了一种利用 GPT3 强大的语言功能来完成主观任务的方法。
OpenAI博文中有一句原话:当我们要解决的安全和对齐问题复杂且主观,且其质量无法完全用自动指标来衡量时,必须利用人类的偏好成为这次。作为微调我们模型的奖励信号。
- InstuctGPT 前期工作:GPT 与强化学习的结合
事实上,2019 年 GPT2 诞生后,OpenAI 就尝试将 GPT-2 与强化学习结合起来。 NeurIPS 2020 的《Learning to Summarize with Human Feedback》论文指出,OpenAI 使用来自人类反馈的强化学习来训练生成摘要。从本工作的整体流程图中可以看出三步流程的核心思想:收集反馈数据->训练奖励模型->PPO强化学习。
RLHF的第一阶段是对多个候选摘要进行手动排序(这体现了OpenAI的能力,根据标注时间开具发票,标注太快的被排除在外);第二阶段是训练排名模型(仍然使用GPT模型);第三阶段是使用PPO算法来学习策略(GPT在摘要任务上进行微调)。
本文的模型比容量大10倍的模型能够产生更好的汇总效果。但文章也指出,模型的成功部分归功于奖励模型规模的增大。但这需要大量的计算资源——训练一个 6.7B 的强化模型需要 320 个 GPU 天。
从2020年初的Human Preferences的OpenAI Fine-Tuning GPT-2可以看出,也是先使用预训练模型来训练奖励模型,然后将PPO策略运用到强化学习中。大致步骤先来看看ChatGPT的雏形吧!
RLHF(Reinforcement Learning from Human Preferences)的思想是在 2017 年 6 月的 OpenAI Deep Reinforcement Learning from Human Preferences 工作中提出的。行为目标;通过训练找到最能解释人类判断的奖励函数,然后使用 RL 来学习如何实现这一目标。 ![]()
可以说,ChatGPT是在InstructGPT和上述理论的肩膀上完成的一项出色的工作。他们将LLM(大语言模型)/PTM(预训练语言模型)与RL(强化学习)结合起来,学习的优秀结合证明了这个方向是可行的。当然,这也是NLP乃至通用智能体的发展方向,未来还会继续发展。
- PPO
PPO(Proximal Policy Optimization)一种新型的策略梯度算法(策略梯度是一种强化学习算法,通过优化智能体的行为策略来解决环境中实现目标的问题)。我们只需要了解,通常的策略梯度算法对步长非常敏感,但很难选择合适的步长。如果训练时新旧策略差异太大,对学习是不利的。
PPO提出了一种新的目标函数,可以实现小批量更新和多个训练步骤,解决了策略梯度算法中步长难以确定的问题。由于其实现简单、性能稳定、能够同时处理离散/连续动作空间问题、有助于大规模训练,近年来受到广泛关注,并成为OpenAI的标准强化学习算法。
- WebGPT 和 CICERO
这两年,大巨头们凭借LLM+RL以及强化学习和NLP训练方面的研究,在这个领域做了很多扎实的工作,这些成果和ChatGPT一样有前景。了不起的地方。这里我们以OpenAI的WebGPT和Meta的Cicero为例。
WebGPT是OpenAI在2021年底的工作。核心思想是利用GPT3模型强大的生成能力,通过搜索引擎学习人类的一系列行为,并通过训练奖励模型来预测人类的偏好,从而使WebGPT能够自行搜索网站来回答开放域问题,并生成的答案可以满足人类的偏好。
Cicero是Meta AI上个月发布的一款可以玩人类级别的文字策略游戏的AI系统。它还可以与人类互动,可以利用策略推理和自然语言在游戏中与人类互动和竞争。 Cicero的核心是由对话引擎和策略推理引擎驱动。策略推理引擎大量使用强化学习。对话引擎类似于GPT3。
Meta 的原创博客写道:CICERO 背后的技术有一天可以在物理和虚拟世界中带来更多的智能助手。
而以上也是我们努力的方向和愿景,实现未来的突破:真正全面的定向智能文本助手。 ?创作、客服机器人、虚拟人、机器翻译、游戏、社交网络、教育、家庭护理等领域。这些都可以成为ChatGPT能够快速落地的方向。
其中一些方向将涉及交互的全面改革。例如,机器翻译不再是传统的文字输入->实时翻译,而是以助手问答的形式随时出现。甚至给出一个大概的一般中文意思,让机器给出相应的英文意思。我们目前正在做的写作产品可能也会涉及到创作模式的改变和创新。
有些方向会全面提升产品品质,比如现有的客服机器人、虚拟人等。例如,最近流行的稳定扩散模型使用 ChatGPT 来生成更好的查询。对于AIGC内容和日益流行的艺术创作,获得强大的文本塑造能力。
- ChatGPT对搜索引擎的可替代性:ChatGPT可以作为搜索引擎的有效补充
但能否替代搜索引擎(很多人关心的一点),不考虑推理成本,目前仅基于此效果。现在说还为时过早。
对于网上有答案的查询,提取完全令人满意。最近友商就提供了这样的功能。网上没有明确的答案,即使找到了相关资料(ChatGPT 很可能还没有这样的功能),也没有人能保证生成结果的可信度。
- 升级ChatGPT本身
与WebGPT结合,实时更新信息,判断事实真假。目前的ChatGPT不具备实时更新和做出事实判断的能力。如果结合WebGPT的自动搜索能力,让ChatGPT自己学会从海量知识库中发现和学习,预测就可以成为GPT-4的能力。
还有很多其他方向,包括ChatGPT与最近的数理逻辑工作的整合。由于个人思维的限制,这里不可能一一列举。 ?语言模型)RLHF(人类反馈强化学习)。可以说,RLHF是一个有前途且有趣的方向;强化学习很可能在即将到来的 GPT-4 中发挥关键作用。
结合我们对ChatGPT的看法,我们从算法和行业更新的角度得出:
首先,目前还没有更多的信息支持ChatGPT的规模,因此无法明确如何Smart ChatGPT 的规模是通过实现的。
最早的175B GPT-3代号是Davinci,其他尺寸型号有不同的代号。然而,从那时起这个代号几乎成了一个秘密。不仅没有论文,也没有官方的介绍博客。 OpenAI声称Davinci-text-002/003是GPT-3.5,并且它们都是InstructGPT类型的模型。 ChatGPT 基于其中一种微调模型。据推测,ChatGPT可能是千亿模型。
其次,ChatGPT 并不是一个突破性的创新。这几乎是OpenAI一步步扎实工作积累的自然结果。它是对近两年行业发展成果的总结。
一般人没有机会接触千亿模型(之前有一些开源千亿模型,GPT-3也是付费的)。他们不了解当前千亿模型的能力,更无法体会到模型在这个层面上的全面微调。 。以Bert、T5为代表的早期变形金刚已经和今天的大型模型不在一个水平上。事实上,OpenAI在11月28日发布了text-davinci-003,但几乎没有引起国内讨论。如果ChatGPT(11-30发布)不是免费试用的话,可能不会引起这么大的反响。
Deepmind 的 Sparrow 和 Google 的 LaMDA 也是同期做的,效果应该和 ChatGPT 相当。同样,上面提到的WebGPT和Cicero在国内也没有引起太大的轰动。 LLM的发展是近两年才达到这个水平的。或许由于成本或工程难度的原因,它在中国受到了一定程度的忽视。这次ChatGPT正好找到了一个很好的“聚光灯”,一炮而红。
所以,一方面我们要理性看待ChatGPT的结果,但另一方面ChatGPT的出现会让我们的认识与国外先进理念接轨。我们应该思考如何利用这些令人兴奋的最新成果。 ,关键是如何找到一条适合我们进入的路径。
第三,数据处理不是简单的标注,优秀的数据也是一大优势。 除了技术上的考虑,OpenAI很少开放数据。当然,他们在数据上也下了很大的功夫。训练语料库的质量与开源的C4或The Pile不一样。
当然,我们目前作为核心的开源千亿模型还有很多能力可以探索。 由于其在微调任务中缺乏生成式对话和问答,预计某些性能将不如ChatGPT。但对于许多任务,包括情境学习,这种差距继续缩小。
3)如何学习和使用ChatGPT
ChatGPT的参考和使用大致可分为以下四个方向:
- 直接使用级别
该级别是复用API最有效的部分,直接使用的好处是可以快速实现多粒度、多层次的功能需求。在许多情况下,需求难以清晰定义且数据难以获取,重用和打包此类功能可能会有所帮助。
当然,他的缺点也很明显。直接打电话的费用非常高。根据GPT3.5(达芬奇)的成本,1k代币≈700个单词为0.02美元。换算后,一篇2k字的文章直接花费0.4元。如果按照日活跃用户1万,每人10篇文章保守计算,每天的通话费用为:10000*10*0.4=4万元。虽然成本太高,但实施时间却很短。
另外,根据马斯克 Twitter 上与 OpenAI 工作人员的对话,还可以看到每个聊天过程都要花费几美分,所以直接调用 ChatGPT 的成本极高。
- 间接利用级别
该级别的核心思想是利用OpenAI接口根据各种需求生成高质量的数据,克服现有数据获取困难的瓶颈;然后利用现有的开源大模型进行数据放大,目前来看比较实用,实现时间也比较短。这是时间成本和效果之间的折衷。
- 思想参考
首先组内有参考RLHF方法的初步尝试,比如命名几个候选,利用得到的标注结果重新调整生成模型或者增加一个Ranking阶段并加入RL学习。其次,我们还尝试针对现有的大型模型微调一些高效的参数调整方法。但这一规定受资源限制,需要评估和确认。
总的来说,是对原有seq2seq的重写,扩展为GPT+Instruction Tuning的方式。
实施时间:(1)(2)
- 互动升级
将写作作为一个整体构建在ChatBot 的形式,这个核心思想在另一篇关于对话系统的报告中介绍过,只是在交互层面做了一些改变。但ChatGPT的出现和核心技术使得形态的升级成为可能。随着深度学习和多智能体系统的发展,未来将会出现多种、多样化、多功能的X-bot。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网