引言 | 本栏目特邀腾讯知名语言文本项目算法工程师冉昱、薛晨,用专业视野带你由浅入深了解 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 对于搜索引擎的代替性:C****hatGPT 可以作为搜索引擎的有效补充
但至于是否能代替搜索引擎(不少人关注的地方),抛开推理成本不谈,目前只从效果上来说为时尚早。
对于网络有答案的 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 出现。