专栏名称: 深度学习自然语言处理
一个从大三就接触NLP的小小NLPer,本公众号每天记录自己的一点一滴,每篇文章最后也有托福单词等新知识,学技术同时,也一点一滴积累额外的知识。期待与你在知识的殿堂与你相遇!
目录
相关文章推荐
厦门日报  ·  已确认!美失联飞机坠毁,全员遇难 ·  昨天  
厦门日报  ·  招4760人!2025年福建省考公告发布 ·  昨天  
厦门日报  ·  紧急提醒!已经抵达厦门! ·  昨天  
海西晨报  ·  招人!厦门这些学校、医院…… ·  2 天前  
厦门日报  ·  金价大涨,创历史新高! ·  3 天前  
51好读  ›  专栏  ›  深度学习自然语言处理

如何用一个统一的视角,分析RLHF下的各种算法?

深度学习自然语言处理  · 公众号  ·  · 2024-12-19 22:00

正文

来自:大猿搬砖简记

LLM所有 细分方向 群+ ACL25/ICML25/NAACL25 投稿群-> LLM所有细分领域群、投稿群从这里进入!

写这篇文章的起因是,上周读了https://zhuanlan.zhihu.com/p/1082394115这篇知乎文章,文中探讨了关于DPO的局限性。在我之前写DPO的推导过程时(https://zhuanlan.zhihu.com/p/721073733),我就一直有一个主观感觉,rlhf算法的优化效果和客观世界的真值比起来,误差主要分布在【奖励函数误差】【prompt x】和【response y】上,其中我认为后两者是至关重要的(和数据集密切相关),他们也间接决定了【奖励函数的误差】。我认为诸如dpo这类off-policy的方法,和ppo这类on-policy的方法比较起来,误差也就在后两者上,相关的分析我回复在佬的评论区里。

但是总觉得对自己目前的理解,还是不够尽兴,我想用一个更有逻辑的视角来看待这个问题。即我想先不考虑任何具体的优化算法,仅从rlhf最原始的优化目标出发,来分析这个目标下暗藏的前提,而探索这些前提的目的是:

  • 这些前提决定了rlhf的上限,也就是它和客观世界真值间的误差
  • 这些前提可以解释rlhf各种实现算法(例如dpo,ppo等)间存在的差异性

这种前提也为我提供了一个统一的视角,它能帮助我分析各种rlhf变种算法是怎么在理论设计或实操中 违背 这种前提,又是怎么尽力去 修复 和这个前提间的差距的。

所以在上个周末,我开始搜罗一些大家常见的rlhf训练问题,同时大量阅读和rlhf理论分析的相关文章,我选择的这些文章的主要特点就是, 有充分的数学推理 和实验结论 。虽然各个作者的分析角度都不一样,但神奇的是,我发现这些不一样的视角都可以渐渐收敛到我想找的那个【前提】上来,于是把自己当成模型进行了一次自我训练,来optimize target。

但同时也由于“我”这个模型的参数量有限,收敛的结果不一定特别好,也许还有一些幻觉(主观解读),所以也请大家选择性阅读~在这篇文章里,不会涉及太复杂的数学推导(需要涉及的部分我都尽量用简明的语言+举例的方式展示出来),可以放心食用。文章里也贴出了我参考的资料,如果大家对哪篇感兴趣,我看看后面能不能再单独出个详解(这些文章确实不好读,因为结论都在数学推导中,很少显式给出)。

(最后,由于我现在特别想赶紧赶回家吃俄式大甜筒冰淇淋😁,所以文中有一点部分没有详细展开,后面我会在知乎里补充,也会加一些图辅助理解)。

一、RLHF优化目标的隐藏前提

rlhf最初的公式:

  • :一个固定的奖励函数。 我们先假设这是一个最优的奖励函数( ),也即它具有完美的泛化能力和评估性能,可以准确衡量任意(x, y)的得分。
  • KL散度:用于衡量 之间的相似度,KL散度越大,相似度越小。

1.1 穷举法

这个公式具体在做什么:

  • 现在,先假设我们不使用任何特定的算法或者神经网络,在这个前提下我们来讨论如何找到最优的 ,我们记这个最优的

  • 我们先理解某个 的含义:它表示给定一个prompt x,它的输出y所服从的一种分布

  • 现在对于某个prompt x,我们在头脑里想象出若干条分布曲线,每条曲线表示一种可能的 所有曲线代表组成的这个集合 就代表给定某个prompt x的前提下,其输出y的分布的所有可能 。而我们现在要做的,就是从这个集合中,找到最符合人类偏好的真值曲线,记其为

  • 既然有了这个集合 ,那我们就可以用穷举法找到 :把集合中的每一种分布都带入到上面的总优化目标中进行计算。在总优化目标中, 都是固定的,只有 在变。

  • 现在,我们再回过头,看总优化目标下面的限定条件 ,这个条件意味着,当你在检验某条分布曲线时,你用到的y就来自这条分布曲线,同样,当你检验到那条最优的分布曲线 时,你用的y就来自这条分布曲线。 也就是说,你正在检验哪个分布,你的y就产自哪个分布。

1.2 显式解

现在,再让我们向现实靠近一点:在实际操作中,我们根本不可能穷举出固定x下所有 的具体表达式,如果还是不考虑任何神经网络算法,我们应该怎么办呢?那就尝试直接通过数学推导,求出 的显示解吧。在文章开头我写的dpo推导那篇链接中,我们给出了求显示解的过程,这里不再赘述,直接给出结果:

其中,Z(x)是一个配分函数(partition function),它被定义为 ,之所以这样定义,是为了做归一化,即我们要让 可以成为一种概率分布,其值限制在[0, 1]范围内。

当我们仔细端详这个显式解等式右侧时候,我们发现 (假设这是完美的奖励函数)都是固定的,这意味着:

  • 虽然我们不知道 的具体表达式,但是我们知道另外一个分布 的具体表达式。 那么我只需要把ref模型取出来,喂它吃一个x,然后穷举(或抽取足够多的y),我就能估算出 的分布了!

现在让我们再贴近现实一点,上述这个方法可能存在2个问题:

  1. 穷举的成本是昂贵的。
  2. 穷举是低效的。

第1个问题显而易见,我们来仔细看第2个问题:什么叫【低效】?

  • 首先,我们是从已知分布 里采样,去估计最优分布 的具体形式。通俗一点来说,这里的y来自

  • 那么,如果我们从全知的上帝视角来看,如果最优分布 在吃这条x的情况下,几乎不可能产出y,也就是 ,那这样的采样点对我们估计 是没有意义的 。我们来具象化地解释这点,如果你想估计出真值曲线的分布,那么你至少需要保证有足够多的观测点恰好落在分布曲线内,你才能做拟合。如果你的采样的观测点都落在曲线外,那就没有意义了。我们再举一个例子,假设一个袋子里有若干黑球和白球,现在需要你估计球的颜色分布。正常来说,我们可以通过放回取样法去估计(蒙特卡洛模拟)。但是如果你每次伸进袋子里,啥也不取,只是在把手抽出来的时候,记录“取到红球的次数为0”,那这个采样就对我们估计分布没有意义了。

1.3 拒绝采样

到这一步为止,虽然我们找到了显式解 。但是我们却面临着穷举昂贵和采样效率低效的问题,那么,有什么办法可以提升采样效率呢?

我们前面谈到,之所以采样低效是因为我们从 中采样的结果可能很难命中 的分布空间(简直就是一种无方向的采样)。 那么我们自然而然想到,如果可以把采样的范围做一些限制,是不是就能一定程度上提升采样效率?如下图所示,如果我们可以通过调整 的分布曲线,让它【刚好】把 的分布曲线包裹起来,我们在这个范围做采样,就能提升采样的命中率了。读到这里有些朋友可能已经回想起来了,这种采样方法,就是我们常说的拒绝采样(rejection sampling),如下图所示

(TODO:关于拒绝采样的展开细节,我留在后面更新在我的知乎上,因为我现在想赶紧回家吃俄式大甜筒冰淇淋,所以只好先鸽在这里)。

1.4 隐藏前提

到目前为止,我们完全不谈诸如DPO,PPO,各种O的优化方法,我们只从最原始的总优化目标 出发,通过一些分析,【来明确这个优化目标里暗藏了一些什么样的前提】,我们在这里做个小结。

(1)前提1:数据的采集与分布

  • 在这个前提下,我们假设奖励函数r是完美的。
  • 我们应该做到,正在检验哪个 ,我们就从这个 中进行采样(暗藏着on-policy的假设)。
  • 我们至少应该保证,有充足的观测数据对(x, y)是落在真值分布 的分布曲线内的。这一点和上述第2点存在某些交集之处:也就是说如果我们做不到第2点,那么至少保证这一点可以实现。

(2)前提2:奖励函数的泛化性

  • 但是在实际训练时,奖励函数很难达到完美 ,主要原因如下:

    • 奖励函数可能是有偏的 。我们至少希望这个奖励函数能够很好衡量服从 的观测数据。但实际上它的训练数据可能存在bias(比如极端一点,它用的都是 低概率处的观测点来训练的),再加上其泛化能力的不足(这个问题比较玄学一些,目前我还给不出很好的解释),最终造成了它的偏差性。

    • BT偏好模型本身的缺陷 。在RLHF这一步,现在一般默认使用BT模型做成对偏好数据的建模,作为一个先验性质的“标准答案”,它不一定能很好反映人类偏好的复杂程度。

  • 正是因为奖励函数的不完美,原始优化目标中的KL散度和 值就非常重要

    • 由于我们不能完全信任奖励函数, 所以我们通过KL项控制 的迭代步伐,用 控制对奖励函数的信任程度。
    • 如果 设置不当,就可能产生reward hacking的问题 :即最终策略模型拟合了有偏的奖励模型,产生了高奖励但“不符合逻辑”的生成结果。
    • 而KL散度这一项也说明了原始目标设计中隐藏的一个前提: 我们有一个初始模型(ref),也有某条prompt x,我们其实是在初始模型最可能产生的那些回复y里,增加人类所喜欢的那些yw的概率,降低人类所不喜欢的yl的概率 。所以理论上 不是任意形式的,它在 缩放下被 控制住。对于那些在初始模型低概率处的y,即使我们因为它的r比较高想给他一个较高的 时,它最终的reward也会被KL项所抵消。

以上对奖励模型的这些讨论,以及reward hacking的问题,可以在openAI的这篇关于reward model scaling law的文章中找到更多细节(https://arxiv.org/pdf/2210.10760)

二、DPO存在的问题

在分析完这些前提的基础上,现在我们可以来一些我们所关心的,具体的优化算法了,我们先来看DPO。

  • DPO从 显式解这一步出发,先推出最优 下奖励函数 的表达

  • 根据先验知识,我们认为BT模型能较好衡量人类的偏好,我们将 带入这个先验的模型里进行建模。进而构造出了DPO loss,见下图公式(7)。

整体过程如下(具体推导可以看我之前写dpo的文章):

我们拿上文整理出的“原始优化目标的2个前提”,来仔细端详一下dpo loss。

2.1 数据的采集与分布

(1)“意料之外”的数据分布偏移

不难发现,dpo的优化过程并没有尝试去遍历 ,取而代之的是,它使用的是用观测数据去拟合真值 的做法。所以这里,我们自然而然提出一个问题:

  • dpo所使用的数据对 有多少是真得采样自真值分布?

由于dpo的训练数据不采样自我们待训练的策略模型,而是来自别的分布(人类标注,sft模型,其余开源模型的合成数据等,属于off-policy类型),那么我们无法保证这批训练数据能有效覆盖到我们要拟合的真值分布 ,比如,你的数据都是从 曲线外的地方采集到的,那拟合出 自然很难。

我把这些不是我们刻意为之的数据采样称为“意料之外的数据偏移”。解决它的办法之一就是通过前文所说的【拒绝采样】,其中,RSO就是基于这个思想开发的DPO的变种,详细的细节可以参见https://arxiv.org/pdf/2309.06657这篇文章,这里我们只给出RSO的大致改进思路:

  • 首先,假设有一批多样性的离线偏好数据集D,它来自各个源,可以认为覆盖比较全面。
  • 借助这些数据集,我们先训练一个奖励模型r,可以认为它的性能比较强大。
  • 利用这个奖励模型,我们从 显式解出发,从已知分布 中通过拒绝采样,从D中找到最可能落在 分布内的数据点。
  • 使用奖励模型,对这些数据点重新进行打分,重新组装偏好对
  • 再用这批新的数据做dpo训练。
  • 做拒绝采样的过程,其实就是在把off-policy转变为on-policy的过程,整体示例如下

(2)“意料之内”的数据分布偏移

但此时,你肯定有这样的疑惑 :在实际训练中,大部分情况下,我肯定是先设想我要的 长什么样子,然后根据这个方向去搜索我要的训练数据,如果是这样,那就不存在训练数据在 之外的问题了,可是我还是经常发生模型崩溃,或者偏好根本没有注入模型的情况,这是怎么回事呢?

假设现在我们又一个sft模型,我们想训练它对齐人类的安全偏好,比如x可能是用户提的敏感问题,yw = 一句简短的拒绝回答,yl = 一个详实的泄露机密的方案:

  • 我们在之前对原始优化目标的分析中,我们还得出过一个前提 :原始优化目标里的KL散度一项保证了 其实是在 最可能产生的那些y里,增加人类喜欢的yw的生成概率,降低人类不喜欢的yl的概率。 也就是说这个 其实是受 的约束的,并不是我们任意想要的任何形式。

  • 那么假设你的sft模型在训练时很少见过拒绝的数据,或者是很少给出简短的回答。那么理论上它能得到的 也大致如此。

  • 那么你构造的这批数据,其实在无意间变成了低概率区域有偏数据,所以最终,你没能把知识注入

所以此时,比起在继续rlhf,更应该回到sft阶段上做继续训练,对sft模型灌入类似于rlhf阶段的分布数据,先改变 的分布。

2.2 奖励函数/loss的限制:为何chosen与reject的reward会同时下降

虽然说DPO没有显式训练一个奖励模型,但其实我们是可以从dpo loss(上图公式(7))中找到yw和yl的奖励值的,也就是 内的两项。

我们来讨论在dpo训练中一个常见的现象: chosen和reject的reward/prob都同时发生下降。

我们回想前文对rlhf整体优化目标的分析,其中有一条是 由于BT模型存在局限性,奖励函数可能并不完美。这个局限性是指:BT模型只能期望发生chosen打败reject的概率要尽量大,但是它不能保证chosen本身尽量大 。有了这个前提,我们继续讨论这里的问题。

我们回想一下rlhf阶段偏好对是如何构建的 :一种常用的方法是,在一个/多个sft模型上,对prompt收集多条响应结果,然后让人类/AI labeler进行偏好排序。 尽管我们可以通过调整温度系数等参数对y进行采样,但是大多数的chosen和reject响应都采样自







请到「今天看啥」查看全文