DPO 损失

直接偏好优化(DPO)及其变体用于在不需要单独奖励模型的情况下将模型与人类偏好对齐。

DPOLoss

标准 DPO 损失,支持多种损失类型和可选的无参考模式。

from twinkle.loss import DPOLoss

loss_fn = DPOLoss(
    loss_type='sigmoid',  # 'sigmoid', 'hinge', 'ipo', 'kto'
    beta=0.1,
    sft_weight=0.0,       # 可选的 SFT 正则化权重
    reference_free=False,
)

model.set_loss(loss_fn)

参数:

  • loss_type: DPO 变体 — sigmoid(默认), hinge, ipo, 或 kto

  • beta: 控制偏好强度的温度参数

  • sft_weight: chosen 响应上额外 SFT 损失的权重

  • reference_free: 为 True 时跳过参考模型的对数概率

损失函数期望批次中 chosen/rejected 样本交替排列。它计算序列级对数概率,优化策略使其偏好 chosen 而非 rejected 响应。

SimPOLoss

简化偏好优化,通过使用长度归一化的对数概率来消除对参考模型的需求。

from twinkle.loss import SimPOLoss

loss_fn = SimPOLoss(beta=2.0, gamma=1.0)

参数:

  • beta: logit 差异的缩放因子

  • gamma: 添加到偏好差距的 margin 项

CPOLoss

对比偏好优化,将偏好学习与行为克隆相结合。

from twinkle.loss import CPOLoss

loss_fn = CPOLoss(beta=0.1, cpo_alpha=1.0)

参数:

  • beta: 偏好损失的温度

  • cpo_alpha: chosen 响应上行为克隆(NLL)损失的权重

ORPOLoss

赔率比偏好优化,在单一损失中统一 SFT 和偏好对齐。

from twinkle.loss import ORPOLoss

loss_fn = ORPOLoss(beta=0.1)

该损失将 chosen 响应上的标准 NLL 项与对数赔率比惩罚相结合,推动模型远离 rejected 响应。

所有偏好损失都继承自 PreferenceLossBase 的共享工具方法,包括对数概率计算、chosen/rejected 拆分和序列级聚合。