Shortcuts

DPOLoss

class torchtune.rlhf.loss.DPOLoss(beta: float = 0.1, label_smoothing: float = 0.0)[source]

直接偏好优化(DPO)损失模块:https://arxiv.org/abs/2305.18290 简单来说,论文中所述:

直观上,DPO更新增加了首选响应相对于非首选响应的相对对数概率,但它结合了一个动态的、每个示例的重要性权重,防止了我们发现使用朴素概率比目标时发生的模型退化。

基于HF的TRL库中的实现: https://github.com/huggingface/trl/blob/5d1deb1445828cfd0e947cb3a7925b1c03a283fc/trl/trainer/dpo_trainer.py#L844

DPO 保留了与 PPO 的相似之处 (https://arxiv.org/abs/2009.01325),它优化了一个策略(语言)模型以与人类偏好对齐,并使用基线参考(冻结的初始语言模型)来正则化损失函数,以防止对偏好数据集的过拟合。它与 PPO 的不同之处在于直接使用标记的偏好数据来优化策略模型,而不是使用额外的奖励模型来提供反馈。这大大简化了训练并减少了计算开销。

Parameters:
  • beta (float) – DPO损失的温度参数,通常在0.1到0.5之间。默认值为0.1。

  • label_smoothing (float) – 参数编码关于标签的不确定性。默认值为0。

forward(policy_chosen_logps: Tensor, policy_rejected_logps: Tensor, reference_chosen_logps: Tensor, reference_rejected_logps: Tensor) Tuple[Tensor, Tensor, Tensor][source]

计算一批策略和参考模型对数概率的DPO损失。

Parameters:
  • policy_chosen_logps (torch.Tensor) – 策略模型对所选响应的对数概率。形状:(batch_size)

  • policy_rejected_logps (torch.Tensor) – 策略模型对于被拒绝响应的对数概率。形状:(batch_size)

  • reference_chosen_logps (torch.Tensor) – 参考模型对所选响应的对数概率。形状:(batch_size)

  • reference_rejected_logps (torch.Tensor) – 参考模型对被拒绝响应的对数概率。形状:(batch_size)

Returns:

三个张量的元组:
  • losses: 批次中每个示例的DPO损失。

  • chosen_rewards: 所选响应的奖励。

  • rejected_rewards: 被拒绝响应的奖励。

Return type:

元组[torch.Tensor, torch.Tensor, torch.Tensor]