剑桥提出RLHF平替方案:在SFT以外,我们还能拿SFT数据做什么?
©作者 | 孙浩
单位 | 剑桥大学博士生
研究方向 | 强化学习
我们最近的工作提出 RLHF 的一种廉价/实用的替代方案:Alignment from Demonstrations (AfD) 而非 Alignment from Preference-based Data。引入 Inverse RL trajectory matching 的视角,帮助理解了什么时候应该做 SFT,什么时候应该更进一步地做 Reward Modeling,以及应该如何使用 SFT 数据进行 Reward Modeling。
论文标题:
https://arxiv.org/pdf/2405.15624
Motivation:从SFT和专家数据讲起
在大语言模型对齐的任务中,我们已经熟悉了 InstructGPT / Constitutional AI 里面的那一套先 SFT,后 preference learning 的框架模式,但是在很多现实场景中,给模型的输出打标记并不是一件容易的事情。在做 RLHF 相关工作的早期,我尝试过用 GPT 3.5 给一些 SFT 过的模型输出做标记,这个信噪比太低了,即使是用价格相对便宜的 GPT 3.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熟悉的小伙伴可以直接跳过。
Alignment as Markov Decision Processes without Reward(MDP\R),一些老生常谈
简单来说,如果我们将 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 有多“符合自己的意图”进行一个前后一致的打分)。
2.1 RLHF(Bradley-Terry Model)如何解决这一困难?
既然绝对的分数不可得,RLHF 提出了通过 Ranking 这一相对对比来获取绝对分数的框架。
从 Rank 到绝对分数的原理,相信打过排位的大家都不陌生,这正是游戏里面给大家定分数所用的机制(只不过游戏里希望用这个分数撮合游戏,并且在这个撮合过程中再进一步优化给大家定的分,但是给 LLM 的 response 打分这个事是一次性的)。另外,大家不会拿 LOL 的分和 dota 的分作对比,或者拿象棋的分和斗地主的作对比——不同的游戏,因为规则/机制的不同,会有随机性的差异,这种随机性会导致赢一把输一把涨的分不一样。
关于 Bradley-Terry model 的更多细节,请参阅之前写的一篇笔记:
https://zhuanlan.zhihu.com/p/663790188
总而言之,RLHF 解决 reward 获取困难这一挑战的思路是,通过对 pairwise data 进行标注,借助 Bradley Terry Model,把 pairwise 的标注(也就是 preference)转化成绝对的分数,那么这个绝对的分数就可以是人类意图的一个有效替代。
RLHF 很 Work,但是太贵了,如果不考虑这种数据模式,我们还有什么解决思路吗?
2.2 没有Reward的时候,RL还能做点啥?
其实在传统的 RL Research 里,缺少 Reward 完全不行稀奇,举个最近的例子,Nvidia 前些时候的工作 Euroka 用 LLM 给机械手调了 Reward Model 解决了不少之前完成不了的任务,这就是很典型的场景——人类设计 Reward 其实也很费劲,在很多任务上,精心设计的 reward 未必有 sparse reward 效果好 [\cite{Fetch Suite white paper}]——比如 sparse reward 就不容易导致 local optimal policy。
在机械手控制,机器人,自动驾驶,包括打游戏下棋,这些任务中,定义 reward 并不是一件容易的事
(此处插播一条广告【Reward Shifting】- NeurIPS22:简单的 reward 线性变换能给我们带来什么?(在这篇工作里,一个有用的结论是,如果各位要给 Value-based RL Algo 设计 Reward 的话,在 online 任务中用负的,offline 任务中用正的,会有奇效。
https://zhuanlan.zhihu.com/p/565737585
在这些难以定义有效 reward 的任务中,通常我们都知道什么是“好的” 动作 /behavior,也就是所说的“专家决策数据集” / Demonstration Dataset。比如我们通过控制力矩/角度来进行机械臂抓取的成功示范,比如好的第一视角驾驶行为和驾驶动作,再比如高手之间(甚至业余选手之间)打游戏下棋的 replay。拿到这些专家数据之后,很容易想到的就是对着这些数据进行监督学习。它在 RL literature 里通常被称为 “Behavior Cloning(BC)”。
在大语言模型的对齐中,这就是监督微调。
2.3 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 Inverse Reinforcement Learning as Distribution Matching的不同Objective
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 这玩意实在是太不稳定了。用一个不稳定的东西,随机地跑出来一次实验报告结果,不同方法之间根本就没有进行对比/总结结论的价值。所以算法的稳定性和实践上的可操作性太重要了。
借助Adversarial Training的思想,用SFT数据训练Reward Model
在前面一个章节,我们介绍了用 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 的一个行为策略 behavior policy 生成的,二者由于异源,导致在其他维度上也可以很容易地分辨(y 轴)。因此,用 生成负样本,用 生成正样本进行训练,取得的效果可能并不理想(下图中黄色线的方向就是这样建立出来的 RM 的“方向”)。
除此之外,我们还能怎么做?
图中的蓝色线和红色线提供了另外的两种思路:
蓝色线:Init-SFT RM——在这种思路中,我们把 生成的样本当作负样本,把 生成的样本当作正样本,由于 SFT 过后的策略还是在原始的策略空间上,它最大程度地保持了和原始策略在一些与任务无关的细枝末节上一致,从而缓解 reward hacking 的问题。 红色线:SFT-Demo RM——这种思路中,我们把 当作负样本,把 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 应该是寄了),目前的实验规模还比较局限,接下来的几周组里的卡暂时还没人用,我应该可以跑一些更大规模的模型,以及其他数据集。有新的结果会第一时间更新~
【Code Release】代码会在整理后发布,现在完全是 research 代码,接下来想整理成好用的接口,整合到现有的框架中去,实现一键在本地数据集上进行训练~
更多阅读
#投 稿 通 道#
让你的文字被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析、科研心得或竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。
📝 稿件基本要求:
• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题
• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算
📬 投稿通道:
• 投稿邮箱:[email protected]
• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者
• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿
△长按添加PaperWeekly小编
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
微信扫码关注该文公众号作者