微信扫码
与创始人交个朋友
我要投稿
我们最近的工作提出RLHF的一种廉价/实用的替代方案:Alignment from Demonstrations (AfD) 而非 Alignment from Preference-based Data。引入Inverse RL trajectory matching的视角,帮助理解了什么时候应该做SFT,什么时候应该更进一步地做 Reward Modeling,以及应该如何使用SFT数据进行Reward Modeling。
arXiv:https://arxiv.org/pdf/2405.15624
在大语言模型对齐的任务中,我们已经熟悉了InstructGPT / Constitutional AI里面的那一套先SFT,后preference learning的框架模式,但是在很多现实场景中,给模型的输出打标记并不是一件容易的事情。在做RLHF相关工作的早期,我尝试过用GPT3.5给一些SFT过的模型输出做标记,这个信噪比太低了,即使是用价格相对便宜的GPT3.5我也觉得肉疼。。(这么想来,当初能把这一套框架模式跑通,能在LLM上把RLHF做成,真的太猛了。)
在不少LLM的落地场景中,我们手头可以拿到一些专家数据(Expert/Near-Expert Demonstration),比如如果我们想用LLM做某一个特定场景下客服聊天机器人,公司又有一些现有的对话数据,应该如何最大化利用这样的数据来微调Basemodel?
在之前的实践中,监督微调(Supervised Fine Tuning)是在不进行额外的数据标注的情况下,几乎唯一的选择。
我们的这篇工作,将从Inverse RL的角度出发,在RL的框架下来理解LLM的对齐这一问题:它的特性是什么?除了SFT以外,其他的可行解决方案是什么?各种解决方案都有哪些优缺点?
特别的,我们尝试给出以下问题的答案:
• preference data是必须的吗(几乎是)?它的动机和优劣是什么(得到无偏奖励函数)?
• SFT在什么样的数据集上够用(非开放任务)?在什么样的数据集上我们需要其他对齐手段(开放任务)?
• Bradley-Terry Model为我们带来了什么限制,它又有什么优势(reward ambiguity)?
• 有没有什么办法能够在SFT数据集上获取有效的奖励函数(IRL-RM)?
接下来的第二章主要是一些梳理性质的介绍,对RL熟悉的小伙伴可以直接跳过。
简单来说,如果我们将LLM生成token这件事当作一个序列决策过程,那么在经典MDP中的变量可以做如下定义:
State --- 状态空间 --- 在LLM进行补全时,到当前位置为止的所有token
Action --- 动作 --- 进行补全时,下一个可以选用的token
Dynamics --- 转移函数 --- 这是LLM as MDP中最重要的特性之一,这里的dynamics是'concatenation'已知且确定(非随机)的。
Reward --- 奖励函数 --- 从定义上来看,这里的Reward应该是一个可以衡量当前生成的token序列是否“符合人类对齐意图”的一个函数,理想情况下,我们希望和人类对齐意图(underlying intention for alignment)更加一致的token序列(也就是生成的response)得分较高。
理想情况下---如果有了Reward,原则上讲我们就可以把各种RL算法都拿来试一下,但是问题在于这个reward实在是太昂贵了(即使我们假设这样的reward score存在的话 --- 这是因为在许多任务中,人类可能都无法给一个response有多“符合自己的意图”进行一个前后一致的打分)。
既然绝对的分数不可得,RLHF提出了通过Ranking这一相对对比来获取绝对分数的框架。
从Rank到绝对分数的原理,相信打过排位的大家都不陌生,这正是游戏里面给大家定分数所用的机制(只不过游戏里希望用这个分数撮合游戏,并且在这个撮合过程中再进一步优化给大家定的分,但是给LLM的response打分这个事是一次性的)。另外,大家不会拿LOL的分和dota的分作对比,或者拿象棋的分和斗地主的作对比 --- 不同的游戏,因为规则/ 机制的不同,会有随机性的差异,这种随机性会导致赢一把输一把涨的分不一样。
总而言之,RLHF解决reward获取困难这一挑战的思路是,通过对pairwise data进行标注,借助Bradley Terry Model,把pairwise的标注(也就是preference)转化成绝对的分数,那么这个绝对的分数就可以是人类意图的一个有效替代。
RLHF很Work,但是太贵了,如果不考虑这种数据模式,我们还有什么解决思路吗?
其实在传统的RL Research里,缺少Reward完全不行稀奇,举个最近的例子,Nvidia前些时候的工作Euroka用LLM给机械手调了Reward Model解决了不少之前完成不了的任务,这就是很典型的场景---人类设计Reward其实也很费劲,在很多任务上,精心设计的reward未必有sparse reward效果好[\cite{Fetch Suite white paper}] --- 比如sparse reward就不容易导致local optimal policy。
在机械手控制,机器人,自动驾驶,包括打游戏下棋,这些任务中,定义reward并不是一件容易的事。
在这些难以定义有效reward的任务中,通常我们都知道什么是“好的” 动作/behavior,也就是所说的“专家决策数据集”/ Demonstration Dataset。比如我们通过控制力矩/角度来进行机械臂抓取的成功示范,比如好的第一视角驾驶行为和驾驶动作,再比如高手之间(甚至业余选手之间)打游戏下棋的replay。拿到这些专家数据之后,很容易想到的就是对着这些数据进行监督学习。它在RL literature里通常被称为“Behavior Cloning(BC)”。
在大语言模型的对齐中,这就是监督微调。
BC最大的问题在于,学习过程中的数据对(s,a)- pairs是从专家策略中采样出来的,但是学到的这个policy在部署的时候,见到的状态 s 的distribution是自己rollout出来的,因为这两个distribution总是不一致的,所以在实际部署这个BC策略的时候,它会不断放大自己造成的错误,这个问题被称为Compounding Error / 累计误差。
举个例子,让LLM做数学题,它有一个token生成得比专家差了一点,那可能会导致后面的reasoning step全都错了,进而导致错误的答案。
(虽说很难从有限的专家轨迹supervised learning就学到跟expert一样的策略 --- 最近两年有两篇文章从反方向讲了这个事有时候是可行的,就是只要BC的数据足够好,BC也可以达到很好的效果,其中一个应该是ICRA还是RAL的来着。。但是这两个文献最近找不到了。。希望有好心人看过类似结论的话给赐一手链接。。)
在RL中,DAgger --- Data Aggregation提出不断向专家索取新的演示数据/demonstration来解决这个问题,在RLHF里, @Wei Xiong 的Gibbs Sampling很早就从理论到实践上验证了这种方案的可行性。不过有时候专家并不一定总是能在线给feedback。
那么如果不能access behavior policy / expert policy,很自然的一个思路是用一个generative model来代替expert来进行采样,(等于学一个parametric model来近似expert),这种思路就是adversarial imitation learning。
更一般的,我们可以考虑distribution matching的优化目标,优化整个trajectory的分布。因为最终的目的是希望policy生成的state-action pair / response (as a trajectory)跟demonstration生成的相似/“不可分辨”。
• 2.4.1 Forward KL Divergence
此处略去一些notation的细节,感兴趣的小伙伴请翻看一下我们的论文~
使用Forward KL进行distribution matching的话,我们会发现得到的优化目标和SFT的目标一样。
这个结论虽然没有发现新的算法,但是能用来解释/预测一些现象:Forward KL因为有mass-covering的属性,用SFT进行训练的时候,这种特性会导致它倾向于学整个trajectory的mean behavior,这解释了最近literature中发现的SFT训练能够比较好的keep diversity的这一特性[Robert Kirk'24 Understanding]。另一方面,也因为这种属性,我们可以很自然地猜想SFT会在close-ended generation这些任务中表现得比较好,或者说答案的mode比较单一,比较局限的问题,例如在Harmless这个数据集上,当模型决定受限制于道德等因素不能回答问题的时候,输出中会指出这个问题为什么不应该被回答/这种行为哪里不对。
这里一个很自然的猜想是,在Harmless这种任务上,SFT应该已经可以取得不错的性能。--- 我们后面将会验证这一点。
• 2.4.2 Reverse KL Divergence
另一方面,如果我们的手头的任务是open-ended task,例如在Helpful这个数据集中,可以被评价为“helpful”的信息是多种多样的,例如human问assistant:有什么适合给6岁儿童讲的故事?这种问题可以有很多种答案的mode。这种时候,学各种mode答案的均值就不太符合直觉了 --- 我们希望进行Reverse - KL的matching (尽管这样子也会有可能带来一些mode-collapse等问题,不过我们就暂时把这些GAN里讨论过的东西留给之后吧!
Reverse KL计算的困难之处还是在于,我们无法直接计算behavior policy得到某个token的概率,所以需要通过adversarial training来完成这件事。说到adversarial training那可就头大了。。。本来LLM就废卡,如果一个废卡的东西加上一个不稳定/ 难训出来的算法,那这东西即使work估计也没啥人会用。。。因为跑不起,而且太贵了,也不切实际。。。
我觉得这也是大家现在为什么更多用DPO / RRHF / RAFT这些稳定方法的原因吧。。反正我自己用trl的ppo是没调出来。。。就是reward model明明是work的,但是policy learning这玩意实在是太不稳定了。。。用一个不稳定的东西,随机地跑出来一次实验报告结果,不同方法之间根本就没有进行对比/总结结论的价值。。所以算法的稳定性和实践上的可操作性太重要了。
在前面一个章节,我们介绍了用Distributional Matching的目标在Demonstration数据上进行对齐的方法。如果我们想用Reverse KL进行mode-seeking(感谢评论区小伙伴指出ICLR'24 MiniLLM里也提到了这一点,已经加到了新版本的reference里),就需要进行adversarial training。但是adversarial training的缺点是,不稳定,难训,贵。在我们的工作中,我们提出通过利用Inverse RL学到的奖励函数外差值的方法(extrapolating over the Inverse-RL reward model / IRL-RM)来解决这一困难。
注:我们这里使用Extrapolation这个词主要是follow [Scott Fujimoto'19 BCQ] [Daniel S. Brown'19 T-REX] 在RL的context下所指的Extrapolation概念,和最近的ExPO对model进行extrapolation是不同含义。
具体的,我们观察到在使用Reverse-KL进行Trajectory Matching的推导中,
关于Generator --- 也就是policy的学习(上图 Eqn. 10),是在优化一部分可以被看作是Reward Function的东西。如果我们把这部分记做reward,并且假设我们使用sigmoid作为Discriminative Model的最后激活,那么这个reward的值其实就是sigmoid之前的logits value (下图 Eqn. 12):
那么,我们能不能用这个logits value直接作为学到的reward呢?我们后退一步,再来看这个logits的优化目标,是在区分哪些样本是当前policy生成的,哪些样本是demonstration中的。前者因为是一个未完全对齐的模型,所以在'human intention score'这个维度上比较差,而demonstration是我们想要的“对齐结果”,所以在“human intention score”这个维度上应该已经比较好。
理想情况下,我们希望我们的reward model --- 也就是discriminator,可以学到这种intention score上的差别,然后成功地辨别二者。如果有了这样的reward model,我们就可以把提升这个reward model的值当作优化目标,去优化我们的policy。
但是事实上,如果我们直接把原始policy生成的样本当作“负样本”,把demonstration当作“正样本”,很容易就会遇到reward hacking的问题。也就是说,学到的discriminator可以达到很好的分类效果,但是却不能作为reward model。举例来说,如果expert demonstration中有非常显著的语言结构或者用词偏好,那么就很容易通过这些“作弊”的手段获得很好的分类效果。归根结底,由于demonstration不是原始model生成出来的,它们的异源性(heterogeneity)导致了这些有可能的reward hacking --- discriminator可以通过和alignment无关的角度判别出正负样本。
下图中展示了这个问题:我们希望改进模型在intention score这个维度上的表现(x轴),但是由于demonstration是用不同于policy π0 的一个行为策略 behavior policy πβ 生成的,二者由于异源,导致在其他维度上也可以很容易地分辨(y轴)。因此,用 π0 生成负样本,用 πβ 生成正样本进行训练,取得的效果可能并不理想(下图中黄色线的方向就是这样建立出来的RM的“方向“)。
除此之外,我们还能怎么做?
图中的蓝色线和红色线提供了另外的两种思路:
• 蓝色线:Init-SFT RM --- 在这种思路中,我们把 π0 生成的样本当作负样本,把 πSFT 生成的样本当作正样本,由于SFT过后的策略还是在原始的策略空间上,它最大程度地保持了和原始策略在一些与任务无关的细枝末节上一致,从而缓解reward hacking的问题。
• 红色线:SFT-Demo RM --- 这种思路中,我们把 πSFT 当作负样本,把demonstration当作正样本,根据我们前面的分析,这种方式应该会导致更加严重的reward hacking问题。我们在实验中把这种reward model当作一个baseline来作为验证。
这里一个有意思的讨论是:RLHF有没有这个问题?如果基于DPO进行训练而不是进行显式的reward modeling(例如SPIN)会不会有这个问题?--- 我们给出的答案(和观察到的现象)都是不会。具体的讨论放在了论文的附录中。
我们希望通过实验来验证前面提到的不同思想和结论。包括
• SFT在答案mode不多的任务上性能应该更好,而在答案比较开放的问题中,SFT的性能会受到限制
• 使用Init-SFT(蓝色)reward model可以达到比另外两种更好的效果
• 这样学到的reward model在大KL下(策略优化过程中,当被优化的策略距离初始点比较远的时候)依然有效
我们在HH-RLHF的Harmless和Helpful两个任务上进行了实验,使用开源的golden RM和GPT4-as-a-critic的方式进行了评估。
以下是在gpt2(harmless)和gemma2b(helpful)上实验的结果:
可以看到,在Harmless这个比较close-ended的任务中,SFT可以达到很好的效果,而在Helpful中,SFT距离demonstration的性能还有一定的距离。
接下来是使用不同Reward Model的对比,除了前文讨论的三种不同RM选择,我们还对比了Preference-data上可以取得的结果来作为参照。
可以看到,使用Init-SFT这种方式的RM可以取得和preference-data接近的RM效果。
最后,我们用GPT4标注了它对于不同方法训练得到的模型回复的偏好,进一步验证了IRL-RM (Init-SFT RM)在大KL下的有效性。
受限于显卡(1-2块 48G的A6000, 事实上全组20个人分6块A6000,外加四块2080。。。我并不是能稳定占两块A6000。。。大规模实在是跑不起。。。最近在尝试搞一下7B。。。。单卡训练一个DPO baseline就要36h。。。。BoN的时候sample 1k样本我的2bmodel已经要48h了,7b应该是寄了。。。。),目前的实验规模还比较局限,接下来的几周组里的卡暂时还没人用,我应该可以跑一些更大规模的模型,以及其他数据集。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-05-28
2024-08-13
2024-04-26
2024-08-21
2024-07-09
2024-06-13
2024-08-04
2024-04-11
2024-07-18
2024-07-01