SimPOLoss¶
- class torchtune.rlhf.loss.SimPOLoss(beta: float = 2.0, gamma: float = 0.5, label_smoothing: float = 0.0)[源代码]¶
SimPO:具有无参考奖励的简单偏好优化:https://arxiv.org/abs/2405.14734。来自论文的直觉
SimPO 的有效性归功于一个关键设计:使用序列的平均对数概率作为隐式奖励。此外,我们在 Bradley-Terry 目标中引入了目标奖励边距,以鼓励获胜响应和失败响应之间有更大的边距,从而进一步提高算法的性能。
SimPO 与 DPO 几乎相同,但使用平均对数概率来消除在训练期间使用参考模型来正则化策略的需要。它还使用目标奖励边距来引导策略朝着更好的响应发展。这与
IPOLoss
的直觉有点相同,但我们不是针对参考策略和策略模型之间的边距进行优化,而是针对所选响应和被拒绝响应之间的边距进行优化。- 参数:
- forward(policy_chosen_logps: Tensor, policy_rejected_logps: Tensor) Tuple[Tensor, Tensor, Tensor] [源代码]¶
计算一批所选和被拒绝平均对数概率的 SimPO 损失。
- 参数:
policy_chosen_logps (torch.Tensor) – 策略模型对所选响应的平均对数概率,形状为 [b,]。
policy_rejected_logps (torch.Tensor) – 策略模型对被拒绝响应的平均对数概率,形状为 [b,]。
- 返回值:
losses:批次中每个示例的 SimPO 损失。
chosen_rewards:所选响应的奖励。
rejected_rewards:被拒绝响应的奖励。
- 返回类型:
Tuple[torch.Tensor, torch.Tensor, torch.Tensor]; 形状为 [b,] 的三个张量元组