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, 或ktobeta: 控制偏好强度的温度参数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 拆分和序列级聚合。