卷友们好,今天推荐一篇DPO作者的新作:
本文几乎是DPO的原班人马搞的,新来的Joey Hejna是X-QL(本文部分核心理论)一作。这篇文章并没有提出一个新的算法,或者是在一个新的任务上刷了SOTA,主要是对DPO算法给出了一个理论解释,统一了处理LLM强化学习任务的两个视角,即序列决策还是单步决策。用强化学习的语言就是说dense or sparse reward,r or Q*。而后者这个Q*有不禁让人联想到OPENAI“泄露的Q*计划”。应该说还是有其理论价值的。
此外我相信本文即使对于多数专业研究者也是晦涩难懂的。这篇文章对于NLP领域的读者而言要求了太多前置的RL知识,对theoretical RL领域读者又过于应用,符号系统一定程度上被改写了。
因此本文面向NLP领域已经有了DPO和PPO算法的基本了解和实践,但不熟悉系统强化学习理论的读者。本文不采用原论文的叙述思路和符号系统,更多反应的是一些个人见解(我并不完全认可原作者的叙述方式)。主要作为看不懂原文但又希望get到原作者想表达啥的参考。
我们知道DPO的loss function其实是一个训练reward model的loss。DPO这篇论文题目也叫做Your Language Model is Secretly a Reward Model:
DPO这篇文章的核心创新在于,他说我们其实不用拿这个loss去学一个奖励模型,奖励函数模型本身不也是为了拿来训练LLM的吗?我们直接定义:
这样我们直接一步就得到了LLM。
那么问题来了,假设我们最终目的仅仅是为了得到一个奖励函数, 而不是为了得到一个\pi_{\theta}。我们还有必要用DPO这套方法来建模吗?
这两个参数化建模的方式,不考虑计算速度,显存需求,网络架构这些empirical 区别,有理论上的本质差异吗?
----有!简单讲有一个极其好的数学性质:那就是这个期望会非常好计算,它不需要我们真的求数学期望,而是有严格解析解的。我们定义新符号
这个符号所代表的物理量满足下面的性质:
证明(这个证明无法省略,是算法叙述的核心):
当t=T-1时候,我们有
当t<T-1的时候,可以类似用数学归纳法证明。
认真看完证明公式你会发现, 这个看似intractable的物理量可以解析表示的核心原因就是 本质上是由两个通过softmax自归一化的生成式模型表征的。把 替换为传统的 你不可能得到类似的性质。(你想吧,如果你的打分函数 只能对一整个句子打分,得到一个scalar rew,现在给你半个句子,为了计算上面那个期望,你是不是只能先用 采样无数句子,再对这无数个句子打分然后取“平均”得到 ?)
总结上一节的内容:我们先定义了一个新的物理量
我们发现,当且仅当 时,
在解析意义上严格成立,可以轻易计算。
你可能会问:“ok,我们现在可以轻易算出来一个原本intractable的物理量。so what? 有什么物理含义吗?”
我先给出答案:说白了 这个函数输入LLM模型的前t个toekn的logp ratio之和,输出表示的是对前一半句子 的打分,Q exactly就是强化学习(softRL)中的Q-function。而我们传统认为的reward model只是Q在t=T时候的特例。当t=T时,我们有 。
这个牛逼的点就在于:如果你用DPO的方法来训练reward model,在训练的时候你输入给神经网络的全部都是一整条的句子,learning target是一个句子的reward。而evaluation的时候,你可以只输入给神经网络前一半句子,这个model自动就会变成半个句子的Q-function。而这一切都是有强理论保证且exactly精确的。回忆下PPO算法中,学一个类似的Q\value-function,为了算GAE你是不是得在训练中给Value model要喂半个句子(随机truncate得到)的数据?即使这样它学到的神经网络也只是“近似”的而已。
这个巨大的差别本质上就是因为我们在用两个generative model来表征一个函数,而生成式模型的“自归一化”(self-normalization)性质,带来了很多理论的好处。
实际有什么用呢?我为什么非要把他记为 而不把它记为 呢?
想象一个场景,如果我们现在正在用LLM生成一个句子,并且一直用 监测评估已经生成句子的分数,设句子在第100步出现了EOS token而终止。我们作图如下:
根据定义,Q的物理含义就是,“立足我已经生成的一半句子 ,我对于我未来完整句子能拿多少分数的一个预期”。随着t的增加,我们这个分数估计会越来越准确,在t=T时,我们的估计就是100%准确的。
那么如果我们生成了一个新的token,然后发现Q增加了,那这是不是就严格说明这个token是“好”的?反之,如果我们发现Q大幅度下降,我们是不是就知道这个token“非常有害”?
而一个token对于Q值造成的difference,其实在DPO setting下可以精确计算的:
这里的 就是一个token 的credit。 太低就意味着我们当下生成的token对系统影响是不利的。所有token的“credit”之和就等于我们这一条句子的真实reward。
DPO原文的第一个实验也正是在做这样credit的分解。
为了加强理解,我们再想象另外一个场景,如果我们还用LLM 生成句子,且已经生成了一半 。下一步我们要生成 这个token了。vocabulary只有两个单词, 和 。我现在想知道,如果我希望尽可能提高最终句子得高分的概率,那我到底是应该选 还是 呢?答案是你应该选 和 值更大者。而在 场景下,这两个物理量的比较式很容易的,因为你可以忽略他们公共部分,只比较 和 的 credit。基于这个理解,我们可以用这个来进行句子采样中的“planning”搜索,这也正是原文第二个实验应用。
总结下这一小节,DPO在理论上基本严谨地完成了这么一个任务。就是给你一个sparse reward标注的数据集,在有足够多(指数级)的数据情况下,你可以训练得到一个模型,把稀疏的奖励合理分摊到每一个token上,从而把sparse rew问题转移为dense rew问题。(严谨理论后面再讨论)
(这是进阶内容,不太关心理论的同学可跳过,主要解释原文常提及的bellman consistency啥意思,需要简单RL基础)
首先我们把LLM建模成为一个MDP决策问题,每产生一个token是一步action,当下的state则是已经产生的所有token(前一半句子),产生T个token序列终止。这个episode中reward是稀疏的,只在最后一步得到:
我们在这个MDP环境中用强行定义 函数和 函数。这组定义式我们称为叫做Bellman Equation:
上面的定义式中间部分都是在dense reward场景下严格定义的。右侧式子,则是MDP在稀疏奖励且 ,也就是LLM应用中的特殊情况下得到的。
你可以把上面的定义式从t=T到t=0一步步数学归纳展开,可以得到下面的结论
到此为止,你可以自行验证,只要我能学到一个精确的 ,并且定义
那么 , 就自动成立了。这一切只需要我用DPO的方法搭建神经网络。
这也是原文反复说什么有他们方法有bellman consistency的含义。
问:PPO RLHF中我们需要用到一个 函数,它定义是 ,似乎和上面定义不一致啊?
这个新的bellman定义并非空穴来风,有较深层的RL理论保证(原文Eq 5),是经典理论。感兴趣可以参考到X-QL,softQL,SAC等论文。X-QL一作也和本文一作重合,我记得是去年ICLR的oral。
上式也可以称为一个value function, 只不过它不再是简单平均期望,而是指数意义下期望(softmax而非mean):
问:这种训练方法对RL领域有何启示?
我个人认为,off-policy算法的核心痛点在于Q函数很难学。它往往需要用bellman公式来进行bootstrapping训练,这导致了训练的极其不稳定,才有了16-18年各种各样的优化trick(如target network和twin delayed update)。DPO给出了一种generative model for discriminative task的Q-learning范式,可能有其意义。
我相信绝大多数实操过DPO训练的同学都会发现一个反直觉的现象。就是看logp的评估曲线,你会发现无论数据还是测试集中被preferred的数据,经过DPO finetune后被sample到的概率反而下降,而不是上升了。只不过那个rejected response的logp下降的更快,才让loss function持续下降(因为reward margin上升了)。
这篇文章第三个实验,给这个现象进行了一些合理性分析,但并没有给出理论上的解决方案,因此希望在这里给我们的工作打个广告(图穷匕见)。
Noise Contrastive Alignment of Language Models with Explicit Rewards
https://arxiv.org/abs/2402.05369
这篇工作里,我们从contrastive learning的视角,基于NCE算法严格推导得到了一个更加general的LLM alignment方法。它不仅可以处理preference二元数据(>),还可以处理任意多个的由explicit scalar reward标注的reponse数据,可以充分利用分差信息。这篇文章中提出的NCA算法,应该是首次提出并从理论和实践两个层面都解释并解决了DPO算法chosen response 的logp下降的问题。(虽然并没被引用)
在工程实践中,THUNLP实验室的一篇工作[1]在他们提出的tree-structure reasoning数据集UltraInteract上对我们的方法进行了独立的第三方评测,并于KTO和DPO算法进行了对比。发现NCA在70B模型上表现最优,在数理代码等指标上接近或超过了GPT3.5的水平。
此外,UltraInteract这个数据集在我看来部分解决了from r to Q*这篇文章走向应用的一个痛点:目前没有dense-reward标注的response数据集。虽然UltraInteract也无法对句子进行per-token level的质量标注,但是他们采用逐阶段标注打分标注的方法也依然可以视为某种trade-off。这应当是符合LLM 从sparse reward setting走向dense reward的趋势的。
[1]
Advancing LLM Reasoning Generalists with Preference Trees: https://arxiv.org/abs/2404.02078