算法工程师深度解构ChatGPT技术

图片

引言 | 本栏目特邀腾讯知名语言文本项目算法工程师冉昱、薛晨,用专业视野带你由浅入深了解ChatGPT技术全貌。它经历了什么训练过程?成功关键技术是什么?将如何带动行业的变革?开发者如何借鉴ChatGPT思路和技术,投入到日常工作中?期望本文能给你新的灵感。

图片

ChatGPT主要特点

ChatGPT本质是一个对话模型,它可以回答日常问题、进行多轮闲聊,也可以承认错误回复、挑战不正确的问题,甚至会拒绝不适当的请求。在上周公布博文和试用接口后,ChatGPT很快以令人惊叹的对话能力“引爆”网络。

1)ChatGPT的技术背景

ChatGPT目前未释出论文文献,仅释出了介绍博文和试用API。从博文中提供的技术点和示意图来看,它与今年初公布的InstructGPT 核心思想一致。其关键能力来自三个方面:强大的基座大模型能力(InstructGPT),高质量的真实数据(干净且丰富),强化学习(PPO算法)。以上ChatGPT成功的三个要素,具体将在文中第2部分详细展开。

2)ChatGPT的主要特点

让用户印象最深刻的是它有强大的语言理解和生成系统。其对话能力、文本生成能力、对不同语言表述的理解均很出色。它以对话为载体,可以回答多种多样的日常问题,对于多轮对话历史的记忆能力和篇幅增强。其次,与GPT3等大模型相比,ChatGPT回答更全面,可以多角度全方位进行回答和阐述,相较以往的大模型,知识被“挖掘”得更充分。它能降低了人类学习成本和节省时间成本,可以满足人类大部分日常需求,比如快速为人类改写确定目标的文字、大篇幅续写和生成小说、快速定位代码的bug等。

值得一提的事,它具有安全机制和去除偏见能力。下图这类问题在以前的大模型中时常出现,然而ChatGPT在这两点上增加了过滤处理机制。针对不适当的提问和请求,它可以做出拒绝和“圆滑”的回复。例如对于违法行为的提问:

图片图片

对于未知事物的“拒绝”:

图片

当然ChatGPT并非十全十美,其缺点也比较明显。首先,其简单的逻辑问题错误依旧明显存在,发挥不够稳定(但总体比GPT3好很多)。特别在有对话历史时,它容易因被用户误导而动摇。

图片

其次,ChatGPT有时会给出看似合理、但并不正确或甚至荒谬的答案。部分答案需要自行甄别才能判断正误,特别当本身用户处于未知状态来咨询模型时,更加无法判断真伪。ChatGPT使得生产者可以用较低成本增加错误信息,而这一固有缺点已经造成了一些实际影响。编程问答网站 StackOverflow 宣布暂时禁止用户发布来自 ChatGPT 生成的内容,网站 mods 表示:看似合理但实际上错误的回复数量太多,已经超过了网站的承受能力。

此外,它抵抗不安全的prompt能力较差,还存在过分猜测用户意图的问题。这主要体现在当用户提问意图不明确时,ChatGPT会猜测用户意图,理想情况应为要求用户澄清;当用户意图不明确时,很大概率给出不合适的回复。大批量的用户反馈,ChatGPT部分回复废话较多、句式固定。它通常过度使用一些常见的短语和句式。这与构造训练数据时,用户倾向于选择更长的回复有关。

图片

ChatGPT的工作原理

1)ChatGPT的训练过程

ChatGPT训练过程很清晰,主要分为三个步骤,示意如图所示:

图片

第一步,使用有监督学习方式,基于GPT3.5微调训练一个初始模型,训练数据约为2w~3w量级(此处为推测量级,我们根据兄弟模型InstructGPT的训练数据量级估算)。由标注师分别扮演用户和聊天机器人,产生人工精标的多轮对话数据。值得注意的是,在人类扮演聊天机器人时,会得到机器生成的一些建议来帮助人类撰写自己的回复,以此提高撰写标注效率。

以上精标的训练数据虽然数据量不大,但质量和多样性非常高,且来自真实世界数据,这是很关键的一点。

第二步,收集相同上文下,根据回复质量进行排序的数据:即随机抽取一大批Prompt,使用第一阶段微调模型,产生多个不同回答:图片,图片,图片图片,之后标注人员对k个结果排序,形成图片组训练数据对。之后使用pairwise loss来训练奖励模型,可以预测出标注者更喜欢哪个输出。"从比较中"学习可以给出相对精确的奖励值

这一步使得ChatGPT从命令驱动转向了意图驱动。关于这一点,李宏毅老师的原话称,“它会不断引导GPT说人类要他说的”。另外,训练数据不需过多,维持在万量级即可。因为它不需要穷尽所有的问题,只要告诉模型人类的喜好,强化模型意图驱动的能力就行。

第三步,使用PPO强化学习策略来微调第一阶段的模型。这里的核心思想是随机抽取新的Prompt,用第二阶段的Reward Model给产生的回答打分。这个分数即回答的整体reward,进而将此reward回传,由此产生的策略梯度可以更新PPO模型参数。整个过程迭代数次直到模型收敛。

强化学习算法可以简单理解为通过调整模型参数,使模型得到最大的奖励(reward),最大奖励意味着此时的回复最符合人工的选择取向。而对于PPO,我们知道它是2017年OpenAI提出的一种新型的强化学习策略优化的算法即可。它提出了新的目标函数,可以在多个训练步骤实现小批量的更新,其实现简单、易于理解、性能稳定、能同时处理离散/连续动作空间问题、利于大规模训练。

以上三个步骤即ChatGPT的训练过程,合称为文献中提到的RLHF技术

2)ChatGPT为何成功?

为何三段式的训练方法就可以让ChatGPT如此强大?其实,以上的训练过程蕴含了上文我们提到的关键点,而这些关键点正是ChatGPT成功的原因:

  • 强大的基座模型能力(InstructGPT)
  • 大参数语言模型(GPT3.5)
  • 高质量的真实数据(精标的多轮对话数据和比较排序数据)
  • 性能稳定的强化学习算法(PPO算法)

我们需要注意的是,chatGPT的成功,是在前期大量工作基础上实现的,非凭空产生的“惊雷”。下面我们将针对性阐述:

  • InstructGPT

ChatGPT是InstructGPT的兄弟模型(sibling model),后者经过训练以遵循Prompt中的指令,从而提供详细的响应。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类似:给定Instruction且需要人工写回答。首先工作人员训练了一个InstructGPT的早期版本,使用完全人工标注的数据,分3类:Instruction+Answer、Instruction+多个examples 和用户在使用API过程中提出的需求。从第二类数据的标注,推测ChatGPT可能用检索来提供多个In Context Learning的示例,供人工标注。剩余步骤与以上ChatGPT相同。

尤其需要重视但往往容易被忽视的是,OpenAI对于数据质量和数据泛化性的把控。这也是OpenAI的一大优势:寻找高质量标注者——寻找在识别和回应敏感提示的能力筛选测试中,表现良好的labeler;使用集外标注者保证泛化性——即用未经历以上1)步骤的更广大群体的标注者对训练数据进行验证,保证训练数据与更广泛群体的偏好一致。

在完成以上工作后,我们可以来看看InstuctGPT与GPT3的区别:

图片

GPT3的回答简短,回复过于通俗毫无亮点。而InstructGPT“侃侃而谈”,解释自由主义为何愚蠢,显然模型学到了对于此类问题人们更想要的长篇大论的回答。

GPT3只是个语言模型,它被用来预测下一个单词,丝毫没有考虑用户想要的答案;当使用代表用户喜好的三类人工标注为微调数据后,1.3B参数的InstructGPT在多场景下的效果超越175B的GPT3:

图片

图片

InstuctGPT的工作也很有开创性:它在“解锁”(unlock)和挖掘GPT3学到的海量数据中的知识和能力,但这些仅通过快速的In-context的方式较难获得。InstuctGPT找到了一种面向主观任务来挖掘GPT3强大语言能力的方式。

OpenAI博文中有这样一段原话:当我们要解决的安全和对齐问题是复杂和主观,它的好坏无法完全被自动指标衡量的时候,此时需要用人类的偏好来作为奖励信号来微调我们的模型。

  • InstuctGPT的前序工作:GPT与强化学习的结合

其实在2019年GPT2出世后,OpenAI就有尝试结合GPT-2和强化学习。NeurIPS 2020的 Learning to Summarize with Human Feedback 工作中写道,OpenAI在摘要生成时,利用了从人类反馈中的强化学习来训练。可以从这篇工作的整体流程图中,看出三步走的核心思想:收集反馈数据 -> 训练奖励模型 -> PPO强化学习

图片

RLHF第一阶段是针对多个候选摘要人工排序(这里就体现出OpenAI的钞能力,按标注时间计费,标注过快的会被开除);第二阶段是训练排序模型(依旧使用GPT模型);第三阶段是利用PPO算法学习Policy(在摘要任务上微调过的GPT)。

文中模型可以产生比10倍更大模型容量更好的摘要效果。但文中也同样指出,模型的成功部分归功于增大了奖励模型的规模。但这需要很大量级的计算资源——训练6.7B的强化学习模型需要320 GPU-days的成本。

2020年初的OpenAI的Fine-Tuning GPT-2 from Human Preferences可看出,它同样首先利用预训练模型来训练reward模型,进而使用PPO策略进行强化学习。整体步骤初见ChatGPT的雏形!

图片

而RLHF(reinforcement learning from human feedback )的思想,是在2017年6月的OpenAI Deep Reinforcement Learning from Human Preferences工作提出的。其核心思想是利用人类的反馈判断最接近视频行为目标的片段;通过训练来找到最能解释人类判断的奖励函数,然后使用RL来学习如何实现这个目标。

图片

可以说,ChatGPT是站在InstructGPT以及以上理论的肩膀上完成的一项出色的工作,它们将LLM(large language model)/PTM(pretrain language model)与RL(reinforcement learning)出色结合证明这条方向可行。当然,这也是未来还将持续发展的NLP甚至通用智能体的方向。

  • PPO

PPO(Proximal Policy Optimization) 一种新型的Policy Gradient算法(Policy Gradient是一种强化学习算法,通过优化智能体的行为策略来解决在环境中实现目标的问题)。我们只需了解普通的Policy Gradient算法对步长十分敏感,但是又难以选择合适的步长。在训练过程中新旧策略的的变化差异如果过大则不利于学习。

而PPO提出了新的目标函数可以在多个训练步骤实现小批量的更新,解决了Policy Gradient算法中步长难以确定的问题。由于其实现简单、性能稳定、能同时处理离散/连续动作空间问题、利于大规模训练等优势,近年来受到广泛关注,成为OpenAI默认强化学习算法。

  • WebGPT和CICERO

近两年,利用LLM+RL以及对强化学习和NLP训练的研究,各大巨头在这个领域做了非常多扎实的工作,而这些成果和ChatGPT一样都有可圈可点之处。这里以OpenAI的WebGPT和Meta的Cicero为例。

WebGPT是2021年底OpenAI的工作。其核心思想是使用GPT3模型强大的生成能力,学习人类使用搜索引擎的一系列行为,通过训练奖励模型来预测人类的偏好,使WebGPT可以自己搜索网页来回答开放域的问题,而产生的答案尽可能满足人类的喜好。

Cicero是Meta AI上个月发布的可以以人类水平玩文字策略游戏的AI系统,。其同样可以与人类互动,可以使用战略推理和自然语言与人类在游戏玩法中进行互动和竞争。Cicero的核心是由一个对话引擎和一个战略推理引擎共同驱动的,而战略推理引擎集中使用了RL,对话引擎与GPT3类似。

图片

Meta原blog中写道:The technology behind CICERO could one day lead to more intelligent assistants in the physical and virtual worlds.

而以上也是我们未来力求突破的方向和愿景:一个真正全方位的智能的文字助手

图片

ChatGPT应用和思考

1)ChatGPT应用

  • ChatGPT对于文字模态的AIGC应用具有重要意义

它可以依附于对话形态的产品和载体大有空间,包括但不限于内容创作、客服机器人、虚拟人、机器翻译、游戏、社交、教育、家庭陪护等领域。这些或许都将是 ChatGPT 能快速落地的方向。

其中有些方向会涉及到交互的全面改革,比如机器翻译不再是传统的文本输入->实时翻译,而是随时以助手问答的形式出现。甚至给出一个大概笼统的中文意思,让机器给出对应英文。目前我们目前所做的写作产品,可能也会涉及创作模式的改变和革新。

有些方向会全面提升产品质量,比如已存在的客服机器人、虚拟人等。

  • ChatGPT作为文字形态的基础模型,自然可以与其他多模态结合

比如最近同为火热的Stable Diffusion模型,利用ChatGPT生成较佳的Prompt,对于AIGC内容和日趋火热的艺术创作,提供强大的文字形态的动力。

  • ChatGPT对于搜索引擎的代替性:ChatGPT可以作为搜索引擎的有效补充

但至于是否能代替搜索引擎(不少人关注的地方),抛开推理成本不谈,目前只从效果上来说为时尚早。

对于网络有答案的query,抽取就完全能满足,现友商最近就有这样的功能。网络上没有明确答案,即使检索了相关材料(ChatGPT应该还没有这样的功能),也没人能保证生成结果的可信度。

  • ChatGPT本身的升级

与WebGPT的结合对信息进行实时更新,并且对于事实真假进行判断。现在的ChatGPT没有实时更新和事实判断能力,而这如果结合WebGPT的自动搜索能力,让ChatGPT学会自己去海量知识库中探索和学习,预测可能会是GPT-4的一项能力。

还有其他更多方向,包括ChatGPT与最近数理逻辑工作的结合。此处受个人思维所限,无法一一列举。

2)关于ChatGPT的思考

参考上文所述,以及参阅近2年OpenAI GPT语言模型相关的文章,RLHF的方法效果显著,ChatGPT成功的核心也在于基于LLM(Large language model)的RLHF(Reinforcement Learning from Human Feedback)。可以说,RLHF是一个很有希望且有趣的方向;强化学习在即将发布的GPT-4中大概率扮演这关键角色。

结合对于ChatGPT的看法,我们从算法和行业更新角度做出了阐述:

首先,对于ChatGPT的规模目前没有更多信息支撑,所以无法明确如此智能的ChatGPT是在何规模下达成的。

最早的175B的GPT-3代号是Davinci,其他大小的模型有不同的代号。然而自此之后的代号几乎是一片迷雾,不仅没有任何论文,官方的介绍性博客也没有。OpenAI称Davinci-text-002/003是GPT-3.5,而它们均为InstrucGPT类型的模型,ChatGPT是基于其中一个微调模型得到,由此推测ChatGPT可能是千亿模型。

其次,ChatGPT不完全算突破式的创新,是OpenAI一步一步扎实工作积累得到的几乎理所当然的结果,属于这两年业界发展的成果汇总。

大家一般没有机会接触千亿模型(之前有较少开源的千亿模型,GPT-3也是收费的),不了解现在千亿模型的能力边界,对全量微调这个级别的模型也无从估计。以Bert和T5为代表的早期Transformer,和现在的大模型已不是一个量级。事实上11月28日OpenAI上新了text-davinci-003,但几乎没有引起国内任何讨论。如果ChatGPT(11-30发布)不是免费试用,或许也不会引起这么大的反响。

同一时期的工作还有Deepmind的Sparrow和Google的LaMDA,效果与ChatGPT应该不相上下。同样以上提到的WebGPT和Cicero也在国内没有太大的水花。这两年LLM发展已经到了这个层级,或许因为成本或者工程化难度的问题,某种层面上在国内被忽视了。而此次ChatGPT正好找到了好的“曝光点”,一炮而红。

所以,一方面我们要理性看待ChatGPT的成果,但另一方面ChatGPT的出现,会将我们的认识和国外先进思想拉到一条线上,我们应该思考如何利用这些令人激动的最新成果,而其中关键是如何找到适合我们入口的方式。

第三,数据处理不是简单的标注,优秀的数据也是一种极大的优势。除去技术上的考量,OpenAI很少开源数据,显然他们在数据上也下了大功夫,训练语料质量和开源的C4或The Pile不能同日而语。

当然,我们目前核心使用的开源千亿模型,有很多待挖掘的能力。由于其在微调任务中缺乏生成式的对话和问答,某些表现不如ChatGPT也在预料之中。但是对于很多任务来说,配合In-context Learning,这个差距会被进一步缩小。

3)如何借鉴和使用ChatGPT

对于ChatGPT的借鉴和使用,大致可以归类以下四个方向:

  • 直接使用层面

此层面为复用API中效果极佳的部分,直接使用的优势是可以快速实现多粒度多层级功能需求。在很多需求难以定义清晰、数据难以获得的情况下,复用并包装这样的功能一本万利。

当然其缺点也很明显。直接调用成本是极高的,根据GPT3.5(Davinci)的成本推测:1k tokens≈700 words为0.02美元。换算后,一篇2k字的文章直接调用需要0.4人民币。若保守按照日活1w用户、人均10篇文章计算,则每日调用成本为:10000*10*0.4=40000元。虽成本过于高昂,但实现时间最少。

图片

另外,根据Musk Twitter上与OpenAI工作人员的对话,也可以看到每次聊天过程需要几美分的成本,所以ChatGPT直接调用成本极高。

图片

  • 间接使用层面

此层面核心思想是利用OpenAI接口,按照不同需求生成高质量数据,克服现有数据难获得的瓶颈;进而利用现有开源大模型进行数据扩增,这是目前比较切实,实现时间较少,是在时间成本和效果上折中的方式。

  • 思想借鉴

首先,组内目前有初步尝试参考RLHF的方法,如对多候选进行标注、利用得到的标注结果重新微调生成模型、或者增加排序阶段加入RL学习。其次,我们也尝试一些高效调参的方法微调现有大模型。但此条受限于资源尚需评估和确认。

总的来说,将改写从最初的seq2seq,拓展到GPT+Instruction Tuning路径。

实现时间:(1)< (2) < (3)

资源成本:(1)> (3) > (2)

  • 交互升级

将写作整体打造为ChatBot的形式,此核心思想见另一篇关于对话系统报告中的介绍,涉及到交互层面的变革。但ChatGPT的出现和核心技术让形式升级成为可能。随着深度学习和多智能体系统的发展,未来会有多种、多样、多功能的X-Bot出现。

👨‍👩‍👧‍👦有奖开放talk:你还能想到ChatGPT哪些用途?它还有什么应用价值?

欢迎在评论区聊一聊你的看法。我们将选取点赞量最高的3位朋友,送出腾讯云定制礼品一份。12月20日中午12点开奖。快邀请你的开发者朋友们一起来参与吧!

腾讯工程师技术干货直达:

1.太硬核!用大数据技术预测足球胜率

2.祖传代码重构:从25万行到5万行的血泪史

3.探秘微信业务优化:DDD从入门到实践

4.万字好文!带你入门 redis

公众号后台回复“chatGPT”获得本篇作者推荐相关学习材料

图片


腾讯云技术社区
最专业的云解读社区
21.7k 声望
17.3k 粉丝
0 条评论
推荐阅读
微信海量数据查询如何从1000ms降到100ms?
微信的多维指标监控平台,具备自定义维度、指标的监控能力,主要服务于用户自定义监控。作为框架级监控的补充,它承载着聚合前 45亿/min、4万亿/天的数据量。当前,针对数据层的查询请求也达到了峰值 40万/min,3...

腾讯云开发者阅读 80

定档 6 月!SegmentFault AI Hackathon 杭州站启动
AI 掀起巨浪,你我应是冲浪者。创业团队、互联网大厂、国家队的大模型角力如火如荼,各类开源模型、垂直模型的出现也推动着越来越多 AGI 应用的陆续落地。

SegmentFault思否7阅读 58.9k评论 2

封面图
使用 🧨 Diffusers 实现 ControlNet 高速推理
自从 Stable Diffusion 风靡全球以来,人们一直在寻求如何更好地控制生成过程的方法。ControlNet 提供了一个简单的迁移学习方法,能够允许用户在很大程度上自定义生成过程。通过 ControlNet,用户可以轻松地使用...

HuggingFace4阅读 3.4k

封面图
用 AI 生成漂亮小姐姐(一)——Stable Diffusion 小白搭建教程
最近 AIGC、ChatGPT 等话题持续发酵,热门程度不亚于之前的 “元宇宙”。抖音、小红书到处都是机器对话、AI 绘图的视频。我看见别人生成的漂亮小姐姐图片眼馋得不行,终于按捺不住自己的好奇心,也尝试一下搭建。本...

WalkerD15阅读 1.7k评论 3

Science AI 大潮已至,科技部亲自下场出大动作
生成式 AI 爆火,中国如何在 AI 时代实现弯道超车?对此,科技部亲自给出答案:启动 AI for Science 专项部署工作。可以预见,AI for Science 新一轮大潮即将来临。

超神经HyperAI3阅读 79.9k

封面图
TOPI 简介
这是 TVM 算子清单(TOPI)的入门教程。 TOPI 提供了 numpy 风格的通用操作和 schedule,其抽象程度高于 TVM。本教程将介绍 TOPI 是如何使得 TVM 中的代码不那么样板化的。

超神经HyperAI1阅读 90.7k

编译 MXNet 模型
本篇文章译自英文文档 Compile MXNet Models。作者是 Joshua Z. Zhang,Kazutaka Morita。更多 TVM 中文文档可访问 →TVM 中文站。本文将介绍如何用 Relay 部署 MXNet 模型。首先安装 mxnet 模块,可通过 pip 快速...

超神经HyperAI1阅读 47.2k

21.7k 声望
17.3k 粉丝
宣传栏