ACL 2024 | 多目标直接偏好优化MODPO:大语言模型的多目标对齐
©作者 | 刘杰
单位 | 香港中文大学MMLab
研究方向 | 大语言模型、强化学习
代码链接:
TL;DR
在实现上,MODPO 只需要在 DPO 的基础上修改 ~2 行代码,即在 DPO 损失函数的基础上额外增加一个 margin;
在理论上,MODPO 可以被证明和 MORLHF(多目标强化学习)等价;
在实验上,MODPO 在安全对齐和长篇回答任务中显示出远超 MORLHF 的性能和效率。
介绍
▲ MODPO(多目标直接偏好优化)以最小的代价改进 DPO(直接偏好优化),以完成多目标对齐
背景:从单目标对齐到多目标对齐
其中 代表人类的提问, 代表被偏好的回答, 代表不被偏好的回答。在这个偏好奖励函数下的最优的语言模型通常满足以下目标函数:
其中 代表对齐前的模型,通常是个监督微调后的基础模型。
虽然这个最优的语言模型,完美符合大众价值观,但未必能符合多样的个人偏好;为了满足定制化需求,一个常见的做法是在训练的时候引入多个目标,例如在偏好奖励 之外,再额外引入一个奖励函数 去鼓励一些定制化的需求(例如惩罚回复中的冗余信息);在多个奖励函数的线性组合之下,语言模型的优化目标变成了如下的形式:
其中 代表一个偏好向量;不同的偏好向量会训练出不同的语言模型 ,从而实现对齐目标的定制化。
MODPO(多目标直接偏好优化)
我们提出的 MODPO 的想法其实非常简单,根据 DPO 中语言模型和奖励函数的二象性,公式(3)下的最优语言模型 其实有个 closed-form 表达式:
MODPO 管线总览:
提前训练得到定制化奖励函函数 ,其包括的范围很广,包括但不限于,
hugginface上已有的奖励函数模型; 人类标的回答的得分(likert score); 类似 DPO 中使用两个语言模型得到的奖励函数 。
MODPO 的更通用形式:
只需要改动两行代码便可以实现从DPO到MODPO拓展
dpo loss:
https://github.com/ZHZisZZ/modpo/blob/main/src/trainer/dpo_trainer.py#L415
def dpo_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
def modpo_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 of 0.1 to 0.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」
微信扫码关注该文公众号作者