快捷方式

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 目标中引入了目标奖励边距,以鼓励获胜响应和失败响应之间有更大的边距,从而进一步提高算法的性能。

基于 TRL 实现:https://github.com/huggingface/trl/blob/98ad01ddfd1e1b67ec018014b83cba40e0caea66/trl/trainer/cpo_trainer.py#L603

SimPO 与 DPO 几乎相同,但使用平均对数概率来消除在训练期间使用参考模型来正则化策略的需要。它还使用目标奖励边距来引导策略朝着更好的响应发展。这与 IPOLoss 的直觉有点相同,但我们不是针对参考策略和策略模型之间的边距进行优化,而是针对所选响应和被拒绝响应之间的边距进行优化。

参数:
  • beta (float) – 等效于 DPO 损失的温度缩放参数,通常在 2.0 到 2.5 之间。默认值为 2.0。

  • gamma (float) – 目标奖励边距超参数,通常我们有 gamma in (0, 1.5]。默认值为 0.5。

  • label_smoothing (float) – 表示标签不确定性的参数。默认值为 0。

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,] 的三个张量元组

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并获得问题的解答

查看资源