SimPO 与 DPO 对比推导

分类: 预训练与微调 · 难度: 进阶 · 关联讲座: L09

SimPO 是 DPO 的一个重要变体,通过去除对参考模型的依赖、引入长度归一化和 margin 机制,在保持偏好优化目标的同时大幅降低了训练资源需求。本文从数学角度对比两者的目标函数差异及其实际影响。

📐 SimPO 与 DPO 的对比推导

DPO 需要 reference model 计算 log prob 比值,SimPO 直接去掉这一依赖,在长度归一化的 log prob 上做偏好优化:

JSimPO=logσ(βywlogπθ(ywx)βyllogπθ(ylx)γ)J_{\text{SimPO}} = -\log \sigma\left(\frac{\beta}{|y_w|} \log \pi_\theta(y_w|x) - \frac{\beta}{|y_l|} \log \pi_\theta(y_l|x) - \gamma\right)

其中 y|y| 是回复的 token 长度,γ>0\gamma > 0 是 margin 超参数,β\beta 控制偏好信号强度。

关键区别

  • DPO 目标:πθ(ywx)πref(ywx)>πθ(ylx)πref(ylx)\frac{\pi_\theta(y_w|x)}{\pi_{ref}(y_w|x)} > \frac{\pi_\theta(y_l|x)}{\pi_{ref}(y_l|x)}(相对于参考模型的比值)
  • SimPO 目标:1ywlogπθ(ywx)>1yllogπθ(ylx)+γ\frac{1}{|y_w|}\log\pi_\theta(y_w|x) > \frac{1}{|y_l|}\log\pi_\theta(y_l|x) + \gamma(绝对 log prob,长度归一化)

好处:无需加载 reference model,训练时显存减半;长度归一化防止模型通过生成短回答来”作弊”。