打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ChatGPT背后的技术-基于人类反馈的强化学习(RLHF) 理论篇

作者简介



作者:Surika

原文:

  https://zhuanlan.zhihu.com/p/616708590

*封面由new bing创作,prompt为depicting pictures about reinforcement learning based on human feedback, impressionism style.

**本文在整理时参考了互联网上众多资料,仅用于学术交流,如有侵权请联系。

ChatGPT基础回顾

ChatGPT不是突然产生的,从最早的GPT一步步进化到今天,是OpenAI背后无数人多年积累的结果。中间经历的几个主要版本:

GPT家族的发展历程

GPT-1 用的是无监督预训练 + 有监督微调,只有简单的单向语言模型任务;

GPT-2用的是纯无监督预训练,使用更多的数据,更大的模型,又新增了几个辅助的训练任务;

GPT-3 沿用了 GPT-2 的纯无监督预训练,但是数据大了好几个量级。它使用45TB的超大规模数据,175B的超大参数量模型。另外加入了Meta-learning的训练任务,提高了Few shot和Zero-shot任务上的表现;

InstructGPT加入了近两年流行的prompt-learning。另外更重要的是,加入了强化学习,即RLHF(Reinforcement Learning from Human Feedback),基于人工反馈机制的强化学习,也是后面着重介绍的模块。

ChatGPT:目前没有开源代码或论文参考,从网上的推测来看,应该是在InstructGPT的基础上,进一步优化了多轮对话效果。与其前身InstructGPT相比,ChatGPT试图减少有害和误导性的回复。

下图是ChatGPT的训练过程,本文要介绍的RLHF技术主要是第二步和第三步的内容:

(1) 利用gpt自回归式的语言模型在大规模的语料上进行无监督的预训练,得到生成模型

(2) 然后人工对用户提示文本后,GPT生成句子的结果进行打分。产生形式为(提示文本,GPT生成句子,得分)的数据集,训练打分模型

(3) 最后利用强化学习的方式 让打分模型去优化生成模型的效果。

chatgpt效果如此好,主要可以归结于两个原因:

一是训练语料的质量、多样性。openai搭建了40多人的团队去收集和标注数据。而且训练一个gpt3.5大约要花1000多w美刀,所以数据和算力不容忽视。

二是基于强化学习的训练方式。其中(2)(3)步被学术界叫做 Reinforcement Learning From Human Feedback 。其实就利用人类的反馈去优化 你的目标模型,让模型输出更符合人类直觉的结果。chatgpt 采用PPO算法利用打分模型去进一步优化生成模型。

由于数据和算力我们无从下手,本着对chatgpt 深入学习的心态,我们先研究一下chatgpt 强化学习的部分的基础知识。

ChatGPT的训练方法,RLHF主要涉及其中的第二步和第三步

强化学习背景知识

基础概念

以下两页PPT中讲解了强化学习的一些基础概念。需要注意的是,强化学习需要一个交互的过程,而且要解决的是序列决策问题。这里如果要展开还会涉及到马尔科夫决策过程,本文中先不做过多叙述。

强化学习有许多在游戏上的应用。用熟悉的super mario来举个例子,我们可以操纵的游戏角色mario是可以交互的智能体agent,游戏中每一帧的画面中要交互的场景即enviroment,游戏角色依据当前环境做出新的动作,而环境会对角色的每个动作作出反馈,例如吃到了金币会有加成,而被击中则不是一个好消息,这样的反馈可以量化为奖励reward,这种奖励值可以帮助学习如何选择最合适的动作,也就是在交互中学习。

特点

强化学习与监督学习、无监督学习的关系

这张图说明了强化学习与我们熟悉的监督学习、无监督学习的关系。强化学习是和监督学习,非监督学习并列的第三种机器学习方法。

我们可以通过与熟悉的监督学习比较,来说明强化学习的一些特点。

(1)强化学习处理的大多数是序列数据,其很难像监督学习的样本一样满足独立同分布。在强化学习的训练过程中,时间非常重要。因为我们得到的是有时间关联的数据(sequential data),而不是独立同分布的数据。在机器学习中,如果观测数据有非常强的关联,会使得训练非常不稳定。这也是为什么在监督学习中,我们希望数据尽量满足独立同分布,这样就可以消除数据之间的相关性。

(2)在强化学习过程中,没有非常强的监督者(supervisor),只有奖励信号(reward signal)。并且奖励信号是延迟的.

(3)强化学习智能体会从环境中获得延迟的奖励,即环境会在很久以后才告诉我们之前所采取的动作到底是不是有效的。因为我们没有得到即时反馈,所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后,如果使用监督学习,就可以立刻获得一个指导,比如,我们现在采取了一个错误的动作,正确的动作应该是什么。而在强化学习中,环境可能会告诉我们这个动作是错误的,但是它并不会告诉我们正确的动作是什么。而且更困难的是,它可能是在一两分钟过后才告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方。

(4)强化学习会试错探索,它通过探索环境来获取对环境的理解。学习器并没有告诉我们每一步正确的动作应该是什么,学习器需要自己去发现哪些动作可以带来最多的奖励,只能通过不停地尝试来发现最有利的动作。智能体获得自己能力的过程,其实是不断地试错探索(trial-and-error exploration)的过程。探索(exploration)和利用(exploitation)是强化学习中非常核心的问题。其中,探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励,也有可能使我们“一无所有”;利用指采取已知的可以获得最多奖励的动作,重复执行这个动作,因为我们知道这样做可以获得一定的奖励。因此,我们需要在探索和利用之间进行权衡,这也是在监督学习中没有的情况。

最后一点,智能体的动作会影响它随后得到的数据,这一点是非常重要的。在训练智能体的过程中,很多时候我们也是通过正在学习的智能体与环境交互来得到数据的。所以如果在训练过程中,智能体不能保持稳定,就会使我们采集到的数据非常糟糕。我们通过数据来训练智能体,如果数据有问题,整个训练过程就会失败。所以在强化学习中一个非常重要的问题就是,怎么让智能体的动作一直稳定地提升。用下棋来举个形象的例子,在监督学习中,棋手的上限往往取决于老师的上限,也就是俗话说的”和臭棋篓子下棋,越下越臭“;而在强化学习的设置下,即使有着资质平平甚至有些笨的起点,也有自己和自己下,有朝一日悟道飞升的可能性。

再来看看强化学习和非监督学习的区别。也还是在奖励值这个地方。非监督学习是没有输出值也没有奖励值的,它只有数据特征。同时和监督学习一样,数据之间也都是独立的,没有强化学习这样的前后依赖关系。

可以总结说,监督学习是从外部监督者提供的带标注训练集中进行学习,也就是由任务驱动型;

非监督学习是一个典型的寻找未标注数据中隐含结构的过程,也就是数据驱动型;

强化学习则更偏重于智能体与环境的交互, 这带来了一个独有的挑战 ——“试错(exploration)”与“开发(exploitation)”之间的折中权衡,智能体必须开发已有的经验来获取收益,同时也要进行试探,使得未来可以获得更好的动作选择空间,也就是说可以从错误中学习。

强化学习和监督学习的概念对应

但在NLP的实际实验中,强化学习和监督学习也一些概念之间也存在着对应的关系,上图中做了说明。该图出处为 HeptaAI:强化学习一:基础部分。

文本生成中的强化学习

让我们落到文本生成的实际场景中。如图所示,文本生成的问题,可以建模为一个token空间上的序列决策问题(选择一个token后继续选择另一个token)

  • State:对话上下文

  • Action:回复的token space上的token

  • Reward:生成的质量判别

  • Episode:一次完整的解码生成回复的过程

强化学习的分类

最后,我们来看强化学习下算法的分类法。

根据一种比较通行的分类法,强化学习可以分为基于值的方法、基于策略的方法和actor-critic方法这三类。

基于值函数的学习方法要学习一个价值函数, 去计算每个动作在当前环境下的价值,目标就是获取最大的动作价值,即我每一步采取回报最大的动作和环境进行互动。Value-Based的方法输出的是动作的价值,选择价值最高的动作。适用于非连续的动作。常见的方法有Q-learning、Deep Q Network和Sarsa。其基础网络结构如下图所示,在编码网络之后,直接用一个全连接层来为每个状态输出一个分数。

基于策略梯度的学习方法去学习策略函数,去计算当前前环境下每个动作的概率,目标是获取最大的状态价值,即该动作发生后期望回报越大越好。

Policy-Based的方法直接输出下一步动作的概率,根据概率来选取动作。但不一定概率最高就会选择该动作,还是会从整体进行考虑。适用于非连续和连续的动作。常见的方法有Policy gradients。从图中可以看出来,在全连接层之后还有一个softmax层,从而将打分转化成概率。

Actor-Critic 融合了上述两种方法,价值函数和策略函数一起进行优化。价值函数负责在环境学习并提升自己的价值判断能力,而策略函数则接受价值函数的评价,尽量采取在价值函数那可以得到高分的策略。

PPO算法

有了前面的基础,就可以引入ChatGPT中实际使用的强化学习方法,PPO算法,这也是OpenAI的RL工作中常用的算法。本章内容主要来自李宏毅老师的强化学习课程,视频和课程网站链接附在下面。

课程视频的B站链接:李宏毅深度强化学习(国语)课程(2018)_哔哩哔哩_bilibili 

课程网站: Hung-yi Lee

PG算法之前,主流的基于价值的强化学习算法,在给定一个状态下,计算采取每个动作的价值,我们选择在所有状态下具有最大的期望奖励的行动。如果我们省略中间的步骤,即直接根据当前的状态来选择动作,也就引出了强化学习中的另一种很重要的算法,即策略梯度(Policy Gradient, PG)。也就是说,其目的是是直接建模与优化Policy

举例如图所示:输入当前的状态,输出action的概率分布,依据概率分布选择下一个action。

策略梯度它通过观测信息选出一个行为直接进行反向传播,利用reward奖励直接对选择行为的可能性进行增强和减弱,好的行为会被增加下一次被选中的概率,不好的行为会被减弱下次被选中的概率。

下一张图就是policy gradient的具体过程。就是先有一个策略θ,之后用这个策略来收获很多数据,收集很多s,a的成对资料,得到一堆游戏记录,即

,奖励是
。这里state是随机性的,相同的state不见得会有相同的action。然后将收集到的资料带入公式中,计算梯度,也就是log probability
,然后取gradient,乘上weight,就是当前策略的reward。基于这个reward去更新模型,用更新的模型再来获取数据,之后再更新模型,如此循环反复。

之前提到的PG算法,我们有一个agent,他与环境互动,然后学习更新,这个过程中的policy都是同一个。因此,当我们更新参数之后,之前计算的策略的所有概率就都不对了,这时候就需要重新去采样。之前采样出来的数据都不能用了,换句话说,过程中的数据都只能用一次。这就造成了policy gradient会花很多时间在采样数据上,因为所有的数据都只能更新一次,更新一次之后就要重新采样。

因此,有了PPO算法的改进原因。我们希望可以用一个旧策略收集到的数据来训练新策略,这意味着我们可以重复利用这些数据来更新策略多次,效率上可以提升很多。具体来说,PPO算法利用重要性采样的思想,在不知道策略路径的概率p的情况下,通过模拟一个近似的q分布,只要p同q分布不差的太远,通过多轮迭代可以快速参数收敛

重要性采样的过程如下。开始时x服从于p(x)分布,可以展开为对px计算积分,然后分子分母同乘q(x),通过变形,调整为从q采样x,并且需要承上一个权重p(x)比q(x),来修正p q两个分布之间的差异。

总结来说,近线策略优化算法PPO 即属于AC框架下的算法,在采样策略梯度算法训练方法的同时,重复利用历史采样的数据进行网络参数更新,提升了策略梯度方法的学习效率。PPO重要的突破就是在于对新旧新旧策略器参数进行了约束,希望新的策略网络和旧策略网络的越接近越好。近线策略优化的意思就是:新策略网络要利用到旧策略网络采样的数据进行学习,不希望这两个策略相差特别大,否则就会学偏。

但重要性采样依然存在一个问题。我们用q代替了p来采样x,但是两个随机变量的分布,即使均值mean一样,也不代表方差variance一样。推导过程可以看左边的公式。第一行是我们上一页ppt推出来的结论。根据黄色框中的方差计算的方法,我们可以写出第三行到第四行的公式。根据这个推导过程可以看见,两个方差之间存在这差异p(x)比q(x),因此,如果p(x)比q(x)的数值很大,就会造成方差很大。理论上来说,如果采样次数很多,p和q得到的期望会是一样的。但如果采样次数不够多,就可能会有很大的差别。

直观的用右边的图来说明一下。蓝线是p(x)的分布,绿线是q(x)的分布,红线是f(x)。以分布来说,p(x)采样的点多数在左边,f(x)是负的;但q(x)采样的点多数在右边,是正的。因此,采样样本数不多的情况,两者之间差异会很大。

上面的是不能重用数据的版本,强化学习中称为on policy。用theta策略与环境互动,采样出轨迹

并计算期望值。

下面是可以重用的版本,用 

与环境互动。它是另一个agent,用于示范给要更新的 
 看,让  知道与环境互动会发生的情况,以此来训练
 ,这时候轨迹
使用 
来采样的,这么做的优点是可以利用相同的数据多次。

应用我们前面介绍的重要性采样的思想,只要乘上权重p(x)比q(x),用在这里也就是

比上

根据一系列的推导和演化,我们可以得到最后这个公式,一个新的目标函数。这个推导是根据蓝色框里的公式来的。

我们前面也提到了,在重要性采样中,如果用于采样的和需要更新的两个策略分布差距太大,就会出问题,具体到PG的场景中,也就是不能让 

差异过大。如何避免的方式就是我们最后的主角:PPO算法。

为了不让

差异过大,PPO的解法是在里面加入一个约束项,也就是

KL散度简单来说就是衡量二者有多相似,我们希望这两个分布越像越好。

算法的步骤如下:

第一步:初始化Policy的参数

2.在每次迭代中,首先使用

与环境互动,得到一堆
数据对, 计算优势函数,我们这里可以理解成奖励。

而不同于PG算法只能应用一次数据,PPO可以多次训练

目标函数即中间这个式子。

这里还有一个trick,即动态更新 

 。我们设置一个可以接受的最大、最小KL,成为适应性KL惩罚。如果目前的KL大于设定的KL最大值,说明惩罚项没有发挥效果,就加大 
 ;如果比最小值小,说明惩罚项太强了,就减少 

使用KL散度的是初版的PPO算法,因为要计算KL散度还是有点复杂,因此延伸出了PPO2算法。

它的目标函数由两项组成,需要选择两项里的较小项。clip函数中有三项,它的意思是当第一项小于第二项时回传

当第一项大于第三项时回传 
 ,这里 
 是个超参数。

我们将clip处理的部分画成了图,即蓝色虚线。横轴是三项里的第一项,

,纵轴是clip的实际输出。当clip大于
时,输出
;输出小于
时,输出
;介于中间时,直接输出值。红线是取值范围。

看着两个图,A我们先当成奖励reward理解。直观来看,奖励大于0时,说明这个s,a对是好的,我们希望增加他出现的概率,也就是

越大越好,但
的比值不能超过
;奖励小于0时,说明这个s,a对是不好的,我们希望增加他减少的概率,也就是
越小越好,但
的比值不能小于

这是PPO的论文给出的实验结果,紫色的线是PPO2的效果,基本都是在第一第二的位置上,效果是非常不错的。

RLHF发展历程

在了解了最基本的强化学习之后,我们再来对比一下RL和RLHF的区别和联系。

上面的图是前面出现过的基本强化学习的概念,下面是RLHF的示意图。可见其中的元素和概念基本是共享的,而不同的也就是红框中的部分,在agent和environment之前,出现了第三个可以参与交互的对象:人类,并由其衍生了一系列步骤。

实际上,RLHF并不是突然出现的事物,最早在2017年的NIPS就出现了这一思想。而在2020年的NIPS上,OpenAI已经尝试将其用于文本摘要任务,并取得了很好的效果。图中可见,RLHF的步骤框架从2020年这篇工作开始,就基本确定了。

NIPS 2017

这篇工作针对的是奖励函数设计的问题。奖励函数设计是强化学习中的一个难题。从本质上讲,奖励函数是对任务目标的一种抽象,也是我们向 agent 传达任务目标的桥梁。当任务非常复杂时,很难将目标转化为奖励函数这种形式化、数字化的表征。试想一下,如何为煎鸡蛋这个任务设计奖励函数?虽然将煎鸡蛋这个任务数字化抽象为奖励函数很困难,但是我们人类执行这个任务则没什么难度,也就是说,我们可以以相对低的成本获取很多完成这个任务的专家轨迹,这样我们就可以做模仿学习(IL),比如我们可以先用逆强化学习(IRL)方法从专家轨迹中恢复奖励函数,再用这个奖励函数做 RL。这种方法虽然有效,但是仍存在限制,假如任务太难了,以至于普通人很难完成呢?比如遥控玩具飞机做特技,或者控制一个虚拟机器人后空翻,这些特殊任务需要训练有素的专业人士提供专家轨迹,成本就又上去了。注意到从提供奖励函数到提供任务轨迹,我们降低了对人能力的要求,从而降低成本。按这个思路继续下去,虽然我们不能给出复杂任务的完整轨迹,但是评估某条轨迹的效果还是比较容易的。比如后空翻任务,我们一眼就能看出某段轨迹是不是后空翻,并且能对完成质量给出大概的评估。显然,可以把这个评估作为这一段轨迹的 return,执行 MC 类的 RL 方法。这看起来好像不错,但我们普通人不是专业裁判,且通常没有一个详尽的评价标准,难以给出稳定的定量评估分数。于是我们再次降低要求,只要人类定性地对比两条轨迹哪个比较好就行了。

本文提出的就是一种利用上述 “人类偏好” 进行 DRL 的方法,非正式地说, agent 的目标是通过向人类发出尽量少的偏好比较请求,生成人类喜欢的轨迹。

考虑通过一系列步骤与环境交互的代理:在每个时刻t,代理从环境中接收到一个观测o,然后向环境发送一个动作a,轨迹片段是观察和动作组成的序列。

表示相比
代表的意思是,o1 a1获得的reward要大于o2 a2获得的reward。。(论文中使用的是偏序关系的符号大于,这里为了打字方便直接用>代替了)这里

在之前的RL工作中,r是有定量的评估公式的。但像在上一页里介绍的,我们现在没有定量评估所需的奖励函数r,就只能定性评估agent满足人咧偏好的程度。此外还有一个问题,因为系统很难每次重置成同样的状态,因此用于比较的轨迹片段通常从不同的状态开始,这增加了人类比较评估的难度,也使得人类的比较结果更难解释,但是本方法克服了此困难。

优化策略使用偏好诱导,人类的判断记录在一个三元组

是两段轨迹片段,
是{1,2}上的分布,表示用户首选的轨迹片段。

如果人类选择一个轨迹片段作为首选,则 

 将其所有权重放在该选择上;如果人类将片段标记为同样好的选择,则 
 是均匀分布;如果人类将片段标记为不可比较,则数据库中不包含此比较。

最后是拟合奖励函数,我们将奖励函数的估计值解释为偏好预测器,最小化预测偏好分布和实际人类偏好分布之间的交叉熵损失。

实验结果也非常的好。更形象的结果展示,可以看这个openai博客里发布的视频https://openai.com/research/learning-from-human-preferences

对这篇文章更详细的解读可以参考:
 论文翻译 -- Deep Reinforcement Learning from Human Preferences

论文理解【IL - IRL】 -- Deep Reinforcement Learning from Human Preferences

文本摘要+RLHF, NIPS 2020

这篇工作是OpenAI早于ChatGPT两年发表在NeurIPS 2020,在这篇文章中ChatGPT的框架雏形已经显现。文章专注于英文摘要任务,所用的方法和ChatGPT基本一致,包括了ChatGPT的核心方法,RLHF。这篇工作在知乎上也有许多介绍,我做PPT的时候主要参考了以下两篇:

读论文:Learning to summarize from human feedback

ChatGPT技术精要,RLHF相关论文笔记(一)——Learning to summarize from human feedback

这篇工作解决的问题聚焦在不合理的评价指标上,在文本生成领域这同样是一个棘手的问题。随着语言模型变得越来越强大,训练和评估越来越受到用于特定任务的数据和指标的限制。例如,摘要任务训练模型使用ROUGE等一些自动化指标进行评估,但这些指标都不能完全刻画我们对摘要质量的需求。传统的通过监督学习和最大化对数似然并不是一个好的方法。因为在摘要、翻译等任务中,可能同时有几个相差很大的输出文本都是高质量的输出,而最大化对数似然只会迫使模型输出去接近训练集reference里的那个版本的文本。这篇文章专注于英文摘要任务,不采用极大化词的对数似然损失,而是利用收集到的human feedback数据通过监督学习专门训练一个打分模型来直接捕获人类的偏好,然后再使用这个模型通过强化学习来训练生成模型。

本研究使用来自 Reddit 的 TL;DR 摘要数据集,该数据集包含 3M 的帖子文本以及相应的摘要信息。通过一系列数据预处理,我们仅保留了包含 24 到 48 个 token 的人工编写摘要的帖子,并将摘要长度最大化以减少长度对质量的潜在影响。最终,我们获得了一个包含 123,169 个帖子的数据集。选择 CNN/DM 数据集的原因是该数据集的基线非常强,可以通过简单的提取方法实现。

本研究的目标是生成质量尽可能好、长度不超过 48 个 token 的摘要。摘要的质量标准是能够准确地传达原文的内容,以满足只读摘要不读原文的读者的需求。

前一项研究报告了“我们希望我们的模型学习的质量概念和人工标注人员实际评估的质量概念之间的不匹配”,导致模型生成的摘要在标注员看来是高质量的,但在研究人员看来却是相当低质量的。

与前一项研究相比,本研究采取了两个措施来提高人工标注数据的质量。首先,我们完全过渡到离线设置,向人工标注人员发送大批次的比较数据,并在累积的数据上重新训练模型。其次,我们与标注员保持密切联系,为他们提供详细的指导,回答他们在共享聊天室中的问题,并定期向他们提供反馈。我们对所有标注员进行了培训,以确保他们的标注结果与我们的标准高度一致,并在项目过程中不断监测标注员和研究人员之间的一致性。

最后,我们的一致性数据非常良好,标注员与专家之间的一致性达到了77%,而专家之间的一致性达到了73%。我们的主干模型采用了 GPT-3 结构,并在 1.3B 和 6.7B 两个参数量的模型上进行了 Human Feedback 实验。

首先,对LM进行自回归预训练是第一步。这包括对两个模型进行LM的token预测自回归预训练,并在构建的摘要数据集上对模型进行有监督的fine-tune,以获得监督模型。使用这些监督模型对初始摘要进行抽样,以进行比较,并将其用作baseline来收集多个候选的原文-摘要对数据。这些数据基于当前策略、初始策略、原文摘要和其他不同的baseline生成,并成对发送给标注人员来选择最佳的那一个。

其次,利用第一步标注好的数据来训练一个奖励模型,以模拟人类偏好。在监督模型的基础上进行奖励模型(RM)的训练,是通过在其上增加一个输出标量的线性head来实现的。训练结束后将reward模型输出归一化,以便参考文章数据的摘要达到0的平均分。

公式里x是post,y0和y1是两个summary, reward model要预测哪个是人类认为更好地。如果人类认为yi更好,RM loss写成这个公式。

第三步是利用第二步训练得到的奖励模型输出的logit来引导强化学习过程,从而训练摘要生成模型。这是通过使用强化学习来实现的,并且用于生成最终结果的模型(策略模型)是另一个进行fine-tune的模型。通过将奖励模型的输出作为使用PPO算法最大化的整个摘要的奖励,在每个时间步骤都是一个BPE token。只有在整个摘要生成完之后,才会有可用于监督信号的reward。在生成单个单词时,没有监督信号可用。

作者在奖励中加入了一个KL散度惩罚项,具有以下两个好处。首先,它可以作为熵奖励,鼓励策略进行探索,从而防止其坍塌为单一模式。其次,它确保策略不会学习产生与奖励模型在训练期间看到的结果有太大不同的输出,从而防止模型训飞了。

左上角是人工评估最喜欢的输出,纵坐标是被选为最喜欢的比例。可见HF的结果大大超越了监督学习的结果。

右上角是文章还从覆盖度、准确度、流畅性、整体质量四个方面对各模型的结果进行了对比。发现HF模型在每一个方面都有优势,而且在覆盖度方面很突出。

左下角是泛化性评估。评估模型在其他数据集上的迁移能力(OOD)。虽然HF在训练时有生成长度的限制,但是从结果可以看到,模型的效果基本和相同结构模型在目标领域数据上训练的结果一样好,比另外两个模型好出一大截。

HF的迁移性能也非常优秀,接近了监督学习的效果。反观监督学习的迁移效果很差,甚至还不如pretrain only。

右下角表示利用ROUGE作为reward来优化模型,人类评估效果上会很快就达到峰值,并稳步下降,收敛。效果相比其他RM的差了很多

虽然作者提出的方法效果非常好,但是作者在文末也承认了这篇工作的方法资源消耗巨大,达到了320 GPU / 天和数千小时的人工标注时间。这个成本确实不是一般研究团队所能承受的了的,目前来看对于硬件,人力成本和时间成本的消耗是其最大的局限性。但是其应用前景非常广阔,给模型注入人类的偏好,让大模型更好地对齐人。ChatGPT的巨大成功也证明了这一方法可行性。

ChatGPT中的RLHF

有了前面两篇的铺垫,我们就可以正式来看chatgpt是怎么做的了。

第一步是花钱招人给问题(prompt)写回答(demonstration),使用经典的预训练目标训练一个语言模型GPT3。这一步大家都懂,就不用说了。这一步可以多训几个版本,第二步会用到。

这一步里比较值得说的就是预训练模型的选择。首先,我们。对这一步的模型,OpenAI 在其第一个流行的 RLHF 模型 InstructGPT 中使用了较小版本的 GPT-3; Anthropic 使用了 1000 万 ~ 520 亿参数的 Transformer 模型进行训练;DeepMind 使用了自家的 2800 亿参数模型 。

这里可以用额外的文本或者条件对这个 LM 进行微调,例如 OpenAI 对 “更可取” (preferable) 的人工生成文本进行了微调,而 Anthropic 按 “有用、诚实和无害” 的标准在上下文线索上蒸馏了原始的 LM。这里或许使用了昂贵的增强数据,但并不是 RLHF 必须的一步。由于 RLHF 还是一个尚待探索的领域,对于” 哪种模型” 适合作为 RLHF 的起点并没有明确的答案。

接下来,我们会基于 LM 来生成训练奖励模型的数据,并在这一步引入人类的偏好信息。

在第二部中,针对问题的多个回答,我们可以使用多个模型来产生,包括初始模型、finetune模型和人工模型等,然后使用奖励模型/偏好模型来对这些回答进行打分。这个奖励模型接收prompt和response两个文本作为输入,输出一个标量奖励。奖励模型的训练是RLHF流程中非常重要的一个环节,实际上是一个监督学习过程。

在RM的训练过程中,我们可以从Prompt数据集中选取一些数据作为训练集,在输入初始模型后,可以产生多个response,这些response可以是多个语言模型生成的,也可以是generate之后采样得到的,只要保证这些response是针对同一个prompt生成的即可。接下来,我们需要对这些response进行排名,人工对这些回答进行排序,按照一些标准(比如可读性、正确性等)进行排序。这里需要注意,我们不直接对文本标注分数来训练RM,因为标注者的价值观不同会导致标注分数不准确且存在噪音。相反,我们使用排名来比较多个模型的输出,并构建更好的规范数据集。

对于排名方式,一种成功的方式是对不同模型在相同提示下的输出进行比较,并使用Elo系统建立一个完整的排名。使用pair-wise loss将rank计算为具体的分数,然后归一化为标量奖励值。InstructGPT论文使用的是pair-wise loss,也可以使用经典的ELO算法来实现。通过这些排名结果,我们可以得到针对同一个prompt的response的分数,这些分数将被用于训练RM模型。需要注意的是,这些训练数据集可以从预定义数据集中采样生成,也可以通过Amazon Mechanical Turk等渠道获得。

最后,这一奖励模型的训练对于RLHF算法的无缝接入非常重要。我们可以用端到端的方式使用LM来建模,也可以使用模块化的系统建模。这一奖励数值对于后续的RL算法来说至关重要。


接下来是最后一步:利用 RM 输出的奖励,用强化学习方式微调优化 LM。

最后一阶段是强化学习微调阶段。在这一步中,数据集规模更大,且不再需要人工参与。这一步的方法可以概括为以下四个部分:

首先,使用第一阶段监督模型的参数来初始化PPO模型的参数。接着,使用PPO模型生成回答,并使用第二阶段的RM模型对回答进行评估和打分。最后,通过打分,更新训练PPO模型的参数。

让我们将微调任务表述为强化学习问题。我们认为输入的prompt是状态(state),输出的response是动作(action),想要得到的策略(policy)就是怎么从prompt生成action能够得到最大的reward,也就是拟合人类的偏好。

这个策略的行为空间(action space)是语言模型(LM)的词表对应的所有词元,通常在50k数量级左右。所有的状态是可能的输入词元序列,也比较大(词汇量 ^ 输入标记的数量)。奖励函数是偏好模型和策略转变约束(Policy shift constraint)的组合。

PPO算法确定的奖励函数具体计算如下:将prompt输入初始LM和当前微调的LM,分别得到了输出文本。将来自当前策略的文本传递给RM,得到一个标量的奖励。将两个模型生成的文本进行比较,计算差异的惩罚项。在来自OpenAI、Anthropic和DeepMind的多篇论文中,该惩罚项被设计为输出词分布序列之间的KL散度的缩放。这一项被用于惩罚RL策略在每个训练批次中生成大幅偏离初始模型的文本,以确保模型输出合理连贯的文本。如果去掉这一惩罚项,可能会导致模型在优化中生成乱码文本来愚弄奖励模型提供高奖励值。此外,OpenAI在InstructGPT上实验了在PPO添加新的预训练梯度,以保证RL模型能够保留好的语言模型能力。可以预见到,随着RLHF研究的进展,奖励函数的公式会继续进化。

作为一个可选项,RLHF可以通过迭代RM和策略共同优化。随着策略模型的更新,用户可以继续将输出和早期的输出进行合并排名。Anthropic 在他们的论文中讨论了迭代在线 RLHF,其中策略的迭代包含在跨模型的 Elo 排名系统中。这样引入策略和 RM 演变的复杂动态,代表了一个复杂和开放的研究问题。

对这一部分,已经有许多非常优秀且深入的解析,例如以下两篇:

https://huggingface.co/blog/rlhf* 官方中文翻译:ChatGPT 背后的“功臣”——RLHF 技术详解

Akiko:从零实现ChatGPT——RLHF技术笔记

后ChatGPT时代:应用与未来展望

ChatGPT的主要成功要归结于采用RLHF来精调语言大模型。既然RLHF效果这么好,自然也有工作尝试将这个思路迁移到其他任务上。近日谷歌AI团队将类似的思路用于文生图大模型:基于人类反馈来精调Stable Diffusion模型来提升生成效果。

文生图+RLHF

目前的文生图模型虽然已经能够取得比较好的图像生成效果,但是很多时候往往难以生成与输入文本精确匹配的图像,特别是在组合图像生成方面。为此,谷歌最新的论文Aligning Text-to-Image Models using Human Feedback提出了基于人类反馈的三步精调方法来改善这个问题。

该工作更详细的介绍可见 当ChatGPT和Stable Diffusion碰撞:谷歌用人类反馈提升文生图效果

下面是一些图像生成样例,也可以看出精调后的模型在文本语义对齐上的提升。

这个论文只是基于人类反馈在文生图模型上一个尝试,看起来还是有一定的效果,但是主要的问题是图像生成质量出现下降,比如出现过饱和以及失真的图像。虽然加入未标注的数据集和预训练数据集,能在一定程度上改善这个问题。

论文在120个文本上基于人类打分来对原始模型和精调后的模型来进行对比,结果如下所示,可以看到在图像和文本对齐方面,模型效果有明显的提升(50% vs 3%),但是在图像生成质量上(fidelity)有稍微的下降(MS-COCO数据集上的FID也有下降),论文认为主要的原因是设计的数据集主要目标是为了对齐文本和图像,数据集的多样性较少,而且采用的预训练数据集只是一个很小的子集,如果采用更大的数据集,应该可以进一步改善这个问题。从消融实验来看,采用未标注数据集和预训练数据集来进行正则化,对于保证图像生成质量还是非常关键的。

总结与展望

对于ChatGPT成功的关键,我个人认为可以总结为以下三点:

  • 优秀的大模型

  • 高质量数据:garbage in garbage out

  • Human in the loop:有多少人工就有多少智能

三者缺一不可,而其中,虽然ChatGPT为代表的RLHF技术非常有影响力,引发了巨大的关注,但仍然存在若干局限性:

  • RLHF 范式训练出来的这些模型虽然效果更好,但仍然可能输出有害或事实上不准确的文本。这种不完美则是 RLHF 的长期挑战和优化目标。在基于 RLHF 范式训练模型时,人工标注的成本是非常高昂的,而 RLHF 性能最终仅能达到标注人员的知识水平。

  • 此外,这里的人工标注主要是为RM模型标注输出文本的排序结果,而若想要用人工去撰写答案的方式来训练模型,那成本更是不可想象的。

  • RLHF的流程还有很多值得改进的地方,其中,改进 RL 优化器显得尤为重要。PPO 是一种基于信赖域优化的相对较旧的RL算法,但没有其他更好的算法来优化 RLHF 了。

作为讨论班里技术系列的最后一期,这页PPT总结了ChatGPT背后技术的发展历程:

这个讨论班是3月初讲的,没过几天gpt-4就来了...

2017年之前早已有之的一些数学/AI/RL等基础技术,比如微积分、概率统计、最优化、策略梯度、TRPO算法(2015年提出)

2017年6月OpenAI联合DeepMind首次正式提出的RLHF,试图解决的问题是,在奖励函数不够明确的情况下,通过基于人类对事物比较的偏好而非绝对奖励值训练奖励函数,最后通过TRPO算法迭代策略

2017年7月的OpenAI团队提出的对TRPO算法的改进:PPO算法

2017年6月的Transformer/Self-Attention

2018年6月的GPT(Generative Pre-trained Transformer),其关键构成是基于Transformer-Decoder的Masked Self-Attention

2019年2月的融合prompt learning的GPT2,prompt learning的意义在于小样本也能出大效果

2020年5月的GPT3,参数规模到了1750亿,而且这一年的9月份OpenAI已经开始研究GPT3与RLHF的结合了(即上边介绍的文本摘要的工作),且此时用的策略优化方法为PPO

2021年7月的Codex,通过对GPT3进行大量的代码训练迭代而出Codex,从而具备代码/推理能力

2021年9月Google提出的FLAN大模型:基于指令微调技术Instruction Fine-Tuning (IFT)

2022年1月的Google研究者提出的思维链技术(Chain of Thought,简称CoT)

2022年3月的OpenAI正式发布instructGPT:GPT3 + 指令学习 + RLHF + PPO,其中,遵循人类指令的学习instruction learning,和prompt learning的核心区别在于instruction learning会提供更多的指令引导模型输出更符合预期的结果

2021年第4季度逐步发展而来的GPT3.5

2022年11月的ChatGPT:语言模型层面的核心架构是GPT3.5(基于Transformer-Decoder的Masked Self-Attention且融合了Codex的代码/推理能力、instruction learning等技术) + RLHF + PPO

由此可见,ChatGPT非一蹴而就、横空出世,背后其实经过了各个前置技术的发展、迭代、结合而成。在准备这期讨论班的时候GPT-4还没有发布,而在整理博客的这个节点,GPT-4在升级的同时,还新加入了多模态的能力。在这个时间节点的NLPer无可避免的站在时代的前沿,面对未知的未来发展趋势,希望这篇介绍可以帮大家更好的了解背景、思考未来、拥抱变化。

进技术交流群请添加AINLP小助手微信(id: ainlp2)

请备注具体方向+所用到的相关技术点

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP小助手微信(id:ainlp2),备注工作/研究方向+加群目的。

阅读至此了,分享、点赞、在看三选一吧🙏

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
强化学习到深度强化学习
强化学习之旅,AI最热门的话题
如何用人工智能进行电子交易?摩根大通说要解决这些难题
RLHF中的「RL」是必需的吗?有人用二进制交叉熵直接微调LLM,效果更好
【机器学习】从统计学角度看待机器学习
【算法地图】一张地图带你玩转机器学习
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服