DPO 与 KTO 的区别
文章目录
- 1. 核心思想对比
- 2. 数学形式对比
- DPO目标函数:
- KTO 目标函数:
- 价值函数 V 的构建方法
- 1. 价值函数 V ( x , y ) V(x, y) V(x,y) 的核心作用
- 2. 典型构建方法
- (1) 基于LLM隐含概率的构建
- (2) 基于奖励模型的构建(更接近原始论文方案)
- (3) 混合构建方案
- 3. 阈值 τ \tau τ 的设定方法
- 3. 应用特性对比
DPO 和 KTO 都是基于人类偏好的大语言模型对齐方法,但它们在理论基础、优化目标和应用场景上有显著区别。以下是结构化对比:
1. 核心思想对比
维度 | DPO | KTO |
---|---|---|
理论来源 | 基于Bradley–Terry偏好模型 | 基于行为经济学的前景理论(Prospect Theory) |
优化目标 | 直接最大化偏好数据似然 | 建模人类对“收益/损失”的非对称心理反应 |
数据要求 | 需要成对偏好数据(chosen/rejected) | 支持单样本反馈(无需严格配对) |
2. 数学形式对比
DPO目标函数:
L D P O = − E [ log σ ( β log π θ ( y w ∣ x ) π r e f ( y w ∣ x ) − β log π θ ( y l ∣ x ) π r e f ( y l ∣ x ) ) ] \mathcal{L}_{DPO} = -\mathbb{E} \left[ \log \sigma(\beta \log \frac{\pi_\theta(y_w|x)}{\pi_{ref}(y_w|x)} - \beta \log \frac{\pi_\theta(y_l|x)}{\pi_{ref}(y_l|x)}) \right] LDPO=−E[logσ(βlogπref(yw∣x)πθ(yw∣x)−βlogπref(yl∣x)πθ(yl∣x))]
- 通过参考模型 π r e f \pi_{ref} πref 约束策略 π θ \pi_\theta πθ,隐式避免奖励函数显式建模
KTO 目标函数:
KTO 目标函数:
L K T O = E [ λ ⋅ ReLU ( V ( x , y ) − τ ) − ReLU ( τ − V ( x , y ) ) ] \mathcal{L}_{KTO} = \mathbb{E} \left[ \lambda \cdot \text{ReLU}(V(x, y) - \tau) - \text{ReLU}(\tau - V(x, y)) \right] LKTO=E[λ⋅ReLU(V(x,y)−τ)−ReLU(τ−V(x,y))]
- 引入价值函数 V ( x , y ) V(x,y) V(x,y) 和阈值 τ \tau τ,对“好于阈值”和“差于阈值”的样本非对称惩罚
- 直接建模人类对损失的厌恶(loss aversion 系数 λ \lambda λ 通常>1)
价值函数 V 的构建方法
1. 价值函数 V ( x , y ) V(x, y) V(x,y) 的核心作用
- 行为经济学基础:模拟人类决策中的非理性特征(如损失厌恶、风险偏好)
- 技术目标:量化模型输出 ( y ) 相对于输入 ( x ) 的“主观价值”(非传统意义上的概率或奖励)
2. 典型构建方法
(1) 基于LLM隐含概率的构建
def compute_V(x, y, model, tokenizer):# 计算对数概率得分logits = model(x, labels=y).logitslog_probs = torch.log_softmax(logits, dim=-1)y_tokens = tokenizer(y, return_tensors="pt").input_idstoken_log_probs = log_probs.gather(-1, y_tokens.unsqueeze(-1)).squeeze()return token_log_probs.mean().item() # 平均token概率作为价值
- 原理:用语言模型本身对生成内容 y 的似然概率作为价值代理
- 优点:无需额外训练,与模型能力强相关
- 改进方向:加入长度归一化或对比样本校准
(2) 基于奖励模型的构建(更接近原始论文方案)
V ( x , y ) = R ϕ ( x , y ) − E y ′ ∼ π r e f [ R ϕ ( x , y ′ ) ] V(x, y) = R_\phi(x, y) - \mathbb{E}_{y' \sim \pi_{ref}}[R_\phi(x, y')] V(x,y)=Rϕ(x,y)−Ey′∼πref[Rϕ(x,y′)]
-
实现步骤:
- 预训练奖励模型 R ϕ R_\phi Rϕ(如用Pairwise Ranking Loss)
- 计算相对于参考策略 π r e f \pi_{ref} πref 的偏移量(去偏置)
- 加入方差归一化项(可选): V ( x , y ) σ ( R ϕ ) \frac{V(x, y)}{\sigma(R_\phi)} σ(Rϕ)V(x,y)
-
参考代码
# 在KTO实现中可能这样使用:
y_tokens = tokenizer("好的,我明白了", return_tensors="pt").input_ids
v_xy = token_log_probs.mean() # 计算V(x,y)# 计算KTO loss
loss = lambda_ * torch.relu(v_xy - tau) - torch.relu(tau - v_xy)
(3) 混合构建方案
V ( x , y ) = α ⋅ P L M ( y ∣ x ) + ( 1 − α ) ⋅ R t a s k ( x , y ) V(x, y) = \alpha \cdot P_{LM}(y|x) + (1 - \alpha) \cdot R_{task}(x, y) V(x,y)=α⋅PLM(y∣x)+(1−α)⋅Rtask(x,y)
- 应用场景:需要平衡生成流畅度(第一项)和任务指标(第二项)时
- 超参数: α \alpha α 通常通过验证集网格搜索确定
1. 符号含义
符号 | 含义 | 计算方式 | 典型值范围 |
---|---|---|---|
P L M ( y ∣ x ) P_{LM}(y \mid x) PLM(y∣x) | 语言模型生成概率 | 对生成序列 y y y 的 token 概率乘积或平均 | [0,1] |
R t a s k ( x , y ) R_{task}(x, y) Rtask(x,y) | 任务特定奖励 | 根据业务需求定制(如BLEU/ROUGE/业务指标) | 可缩放至与 P L M P_{LM} PLM 同量纲 |
α \alpha α | 平衡系数 | 网格搜索确定 | 0.3~0.7 |
2. 物理意义
-
第一项:语言模型对输出 y y y 的“自信程度”,保障生成流畅性
- 示例:P(“天气真好”) > P(“天汽针好”) (后者可能为错别字)
-
第二项:业务场景的专项优化目标
- 示例:客服场景中“问题解决率”、文案生成中“点击率预测”
-
α \alpha α 作用:控制“保守派”与“改革派”的博弈
- α → 1 \alpha \rightarrow 1 α→1:倾向安全但平庸的输出
- α → 0 \alpha \rightarrow 0 α→0:追求业务指标但可能牺牲流畅度
3. 阈值 τ \tau τ 的设定方法
方法 | 计算公式 | 适用场景 |
---|---|---|
数据分位数法 | τ = quantile ( { V ( x , y ) } , q = 0.7 ) \tau = \text{quantile}(\{V(x, y)\}, q = 0.7) τ=quantile({V(x,y)},q=0.7) | 小规模数据 |
动态调整法 | τ t = τ t − 1 + η ⋅ ( V ˉ − τ t − 1 ) \tau_t = \tau_{t-1} + \eta \cdot (\bar{V} - \tau_{t-1}) τt=τt−1+η⋅(Vˉ−τt−1) | 在线学习环境 |
任务驱动法 | 设定为任务指标阈值(如BLEU≥4) | 有明确质量标准的场景 |
3. 应用特性对比
特性 | DPO | KTO |
---|---|---|
数据效率 | 需要高质量成对数据 | 支持非配对数据,适合弱监督场景 |
训练稳定性 | 依赖参考模型质量 | 对噪声数据更鲁棒 |
适用任务 | 精细偏好对齐(如风格控制) | 风险敏感场景(如金融/医疗回复) |
计算开销 | 需维护参考模型 | 无需参考模型,计算更轻量 |