ACL 2024 | 多目标直接偏好优化MODPO:大语言模型的多目标对齐
©作者 | 刘杰
单位 | 香港中文大学MMLab
研究方向 | 大语言模型、强化学习
论文链接:
https://arxiv.org/pdf/2310.03708.pdf
代码链接:
https://github.com/ZHZisZZ/modp
TL;DR
我们提出 MODPO(多目标直接偏好优化),它以最小的代价改进 DPO(直接偏好优化),以完成多目标对齐。
- 在实现上,MODPO 只需要在 DPO 的基础上修改 ~2 行代码,即在 DPO 损失函数的基础上额外增加一个 margin;
- 在理论上,MODPO 可以被证明和 MORLHF(多目标强化学习)等价;
在实验上,MODPO 在安全对齐和长篇回答任务中显示出远超 MORLHF 的性能和效率。
介绍
尽管单一语言模型可以通过 RLHF(基于人类反馈的强化学习)[1] 实现与群体平均偏好的对齐,但这样的语言模型无法满足多样化的个人偏好:每个人对于不同对齐维度(有用性,无害性,诚实性,等等)有着不同的偏重。
为了实现多目标对齐,一些同期工作依赖 MORLHF(多目标强化学习),通过对多个奖励函数的加权来表示不同人的偏好,但是 MORLHF 也继承了 RLHF 的所有缺点,例如训练不稳定以及流程的复杂性。
▲ MODPO(多目标直接偏好优化)以最小的代价改进 DPO(直接偏好优化),以完成多目标对齐
在这次的工作中,我们提出 MODPO,致力于以最小的代价改进 DPO(直接偏好优化)[2] 以实现多目标对齐。这种方法将目标的加权组合以及语言模型的训练,折叠进奖励函数的训练过程中,用最简单的监督学习来实现语言模型的多目标对齐。
在实现上,MODPO 仅仅只是在 DPO 的基础上修改了 ~2 行代码,即在 DPO 的损失函数的基础上额外增加一个 margin;在理论上,MODPO 可以被证明和 MORLHF 等价;在实验上,MODPO 在安全对齐和长篇回答中显示出远超 MORLHF 的性能和效率。
背景:从单目标对齐到多目标对齐
其中 代表人类的提问, 代表被偏好的回答, 代表不被偏好的回答。在这个偏好奖励函数下的最优的语言模型通常满足以下目标函数:
其中 代表对齐前的模型,通常是个监督微调后的基础模型。
虽然这个最优的语言模型,完美符合大众价值观,但未必能符合多样的个人偏好;为了满足定制化需求,一个常见的做法是在训练的时候引入多个目标,例如在偏好奖励 之外,再额外引入一个奖励函数 去鼓励一些定制化的需求(例如惩罚回复中的冗余信息);在多个奖励函数的线性组合之下,语言模型的优化目标变成了如下的形式:
其中 代表一个偏好向量;不同的偏好向量会训练出不同的语言模型 ,从而实现对齐目标的定制化。
为了优化公式(3),最常见的做法使用多目标强化学习(MORLH)[3,4],但是它继承了强化学习的不稳定性以及流程的复杂性;与此同时 DPO 虽然解决了强化学习的缺点,但是 DPO 通常只能完成单目标的偏好奖励的最大化,如何将 DPO 拓展到多目标优化中并不显然;而 MODPO 的目的则是在 DPO 的基础上,做最小的改动来实现多目标的优化。
MODPO(多目标直接偏好优化)
我们提出的 MODPO 的想法其实非常简单,根据 DPO 中语言模型和奖励函数的二象性,公式(3)下的最优语言模型 其实有个 closed-form 表达式:
经过一些基本的变换,我们可以把上述公式改写成:
只要我们将公式(5)代入公式(1)所代表的损失函数,并用参数化的形式来表示语言模型 ()和提前训练好的定制化奖励函数(),那么就可以得到一个针对语言模型的损失函数 :
与常见的 DPO 损失函数相比,MODPO 损失函数相当于在 DPO 的基础上增加了一个 margin;通过这个 margin,MODPO 将目标的加权组合和语言模型的训练同时折叠进偏好奖励函数的训练管线中,使得语言模型被人类偏好驱动的同时,也能被其他定制化目标所驱动。
MODPO 管线总览:
提前训练得到定制化奖励函函数 ,其包括的范围很广,包括但不限于,
hugginface上已有的奖励函数模型; 人类标的回答的得分(likert score); - 类似 DPO 中使用两个语言模型得到的奖励函数 。
2. 遍历所需要的所有偏好向量 ,对于每一个 ,优化此 下的损失函数(公式(6))来得到一系列满足不同偏好的语言模型。
MODPO 的更通用形式:
只需要改动两行代码便可以实现从DPO到MODPO拓展
dpo loss:
https://github.com/ZHZisZZ/modpo/blob/main/src/trainer/dpo_trainer.py#L415
defdpo_loss(
self,
policy_chosen_logps,
policy_rejected_logps,
reference_chosen_logps,
reference_rejected_logps,
):
chosen_rewards = self.beta * (policy_chosen_logps - reference_chosen_logps)
rejected_rewards = self.beta * (policy_rejected_logps - reference_rejected_logps)
logits = chosen_rewards - rejected_rewards
losses = -F.logsigmoid(logits)
return losses, chosen_rewards.detach(), rejected_rewards.detach()
modpo loss:
https://github.com/ZHZisZZ/modpo/blob/main/src/trainer/modpo_trainer.py#L132
defmodpo_loss(
self,
policy_chosen_logps,
policy_rejected_logps,
reference_chosen_logps,
reference_rejected_logps,
chosen_margin_reward,
rejected_margin_reward,
):
chosen_rewards = (1/self.w[0])*(self.beta * (policy_chosen_logps - reference_chosen_logps) - chosen_margin_reward @ self.w[1:])
rejected_rewards = (1/self.w[0])*(self.beta * (policy_rejected_logps - reference_rejected_logps) - rejected_margin_reward @ self.w[1:])
logits = chosen_rewards - rejected_rewards
losses = -F.logsigmoid(logits)
return losses, chosen_rewards.detach(), rejected_rewards.detach()
相比 dpo,modpo 只引入了一个 margin_reward,所以如果你对 dpo 熟悉,那么 modpo 将很容易上手。
上面代码中变量解释如下:
policy_chosen_logps: Log probabilities of the policy model for the chosen responses. Shape: (batch_size,)
policy_rejected_logps: Log probabilities of the policy model for the rejected responses. Shape: (batch_size,)
reference_chosen_logps: Log probabilities of the reference model for the chosen responses. Shape: (batch_size,)
reference_rejected_logps: Log probabilities of the reference model for the rejected responses. Shape: (batch_size,)
beta: Temperature parameter for the DPO loss, typically something in the range of0.1to0.5. We ignore the reference model as beta -> 0.
实验
参考文献
[4] Rame A, Couairon G, Dancette C, et al. Rewarded soups: towards pareto-optimal alignment by interpolating weights fine-tuned on diverse rewards[J]. Advances in Neural Information Processing Systems, 2024, 36.
更多阅读
#投 稿 通 道#
让你的文字被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析、科研心得或竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。
📝 稿件基本要求:
• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题
• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算
📬 投稿通道:
• 投稿邮箱:[email protected]
• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者
• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿
△长按添加PaperWeekly小编
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
最新评论
推荐文章
作者最新文章
你可能感兴趣的文章
Copyright Disclaimer: The copyright of contents (including texts, images, videos and audios) posted above belong to the User who shared or the third-party website which the User shared from. If you found your copyright have been infringed, please send a DMCA takedown notice to [email protected]. For more detail of the source, please click on the button "Read Original Post" below. For other communications, please send to [email protected].
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。