CPO(Contrastive Preference Optimization)
一句话:用「均匀分布先验」近似 reference model,得到 DPO 损失的一个上界从而去掉
,再补一个 SFT 正则项防止 chosen 概率塌缩;为机器翻译提出,方法本身通用。 论文:Contrastive Preference Optimization: Pushing the Boundaries of LLM Performance in Machine Translation (Xu et al., 2024) ·
提出年份:2024 · 机构/团队:JHU / Microsoft · 会议/来源:ICML 2024 / arXiv:2401.08417
直觉与动机
CPO 诞生于机器翻译场景,但其动机对所有偏好优化都成立。
第一,reference model 既费资源又设上限。 DPO 用
第二,翻译里的偏好是「好 vs. 更好」的细粒度对比。 标准做法是用高质量参考译文做 SFT,但参考译文也可能有瑕疵;真正需要的是在多个都不错的候选里学出更精细的偏好。这要求一个能做细粒度对比、又不被 reference 束缚的目标。
CPO 的两步走:(1) 用一个均匀分布近似
方法与公式
CPO 的损失由对比项和 SFT 项相加:
从 DPO 推导上界(uniform reference 假设):在 DPO 的隐式 reward
SFT 项防塌缩:去掉 reference 后,对比项只关心

图源:Xu et al., Contrastive Preference Optimization: Pushing the Boundaries of LLM Performance in Machine Translation, arXiv:2401.08417(用于学习注解,版权归原作者)
与 baseline 对比
| 维度 | DPO | CPO | SimPO |
|---|---|---|---|
| Reference model | 需要 | 不需要 | 不需要 |
| 去 ref 的依据 | —— | 均匀先验 → 损失上界 | 直接换 reward 定义 |
| 防塌缩手段 | 隐式 KL | SFT 项 | margin |
| 长度归一化 | 无 | 无 | 有 |
| reward 量纲 | 序列求和 logprob | 序列求和 logprob | per-token 平均 logprob |
| 显存 / 计算 | 高 | 低 | 低 |
实现要点
CPO 在 TRL 中由 CPOTrainer 提供(它同时承载 SimPO 与 CPO-SimPO 混合)。核心计算:
# logps_w, logps_l: 序列求和 logprob, 形状 [B]; nll_w: chosen 的 NLL
prefer = -F.logsigmoid(beta * (logps_w - logps_l)).mean()
sft = nll_w.mean() # = -E[log pi(y_w|x)]
loss = prefer + cpo_alpha * sft关键细节:
- 无 reference 前向:与 SimPO 一样省掉一份模型和一次前向,这是 CPO 相对 DPO 的算力收益来源。
cpo_alpha控制 SFT 项权重,TRL 默认 1.0;置 0 即退化为纯对比项(容易塌缩,不建议)。loss_type:"sigmoid"为标准 CPO;切到"simpo"则把对比项换成长度归一化形式,可与cpo_alpha组合成 CPO-SimPO 混合目标。- logprob 按序列求和,CPO 标准形式不做长度归一化(与 SimPO 的区别)。
调参与实践经验
:对比项里 reward 是序列求和量纲, 取值与 DPO 接近(0.05~0.5),而非 SimPO 那种较大的 。 cpo_alpha(SFT 项权重):默认 1.0 多数情况可用。偏小会让 chosen 概率塌缩、生成退化;偏大则过强地拟合 chosen、削弱对比信号。可在 0.5~1.0 间扫。- 与 SimPO 的实测取舍:两者都去 reference,但 CPO 用 SFT 项锚定绝对似然、SimPO 用长度归一化 + margin 对齐生成度量。在易出现长度膨胀的任务上 SimPO 往往更稳;在希望 chosen 似然被牢牢顶住、对长度不敏感的任务(如翻译)上 CPO 更直接。两者的混合(CPO-SimPO)在部分公开评测中表现不俗,值得作为对比实验。
- 数据要求:CPO 的对比项无 KL 缰绳,对偏好数据质量与分布契合度敏感;建议在与基座分布接近的高质量数据上训,并以较少 epoch 配合留出集监控。
参考文献
- Xu et al., 2024. Contrastive Preference Optimization: Pushing the Boundaries of LLM Performance in Machine Translation. arXiv:2401.08417
- Rafailov et al., 2023. Direct Preference Optimization. arXiv:2305.18290