KTO
Kahneman-Tversky Optimization
KTO 用“单条回答是好还是坏”的二元反馈,直接优化模型对单个回答的效用,而不是像 DPO 那样去拟合成对偏好的概率。
它最重要的特点有两个。
第一,它不要求数据一定是成对偏好
其中 desirable 表示“可取 / 好”,undesirable 表示“不可取 / 坏”。
第二,它不是从“哪一条回答比哪一条更好”的 Bradley-Terry 偏好似然出发,而是从 前景理论(prospect theory) 里的“人类如何感知收益和损失”出发,构造一个针对单个回答的效用函数,再直接最大化这个效用。原论文把 KTO 归入一类更一般的损失,称为 HALO(human-aware loss,人类感知损失),并强调 KTO 只需要“某个回答对这个输入来说是否可取”的二元反馈。
为什么会有 KTO
很多后训练方法默认人类反馈一定是“成对偏好”:给定同一个 prompt,标注员在两个回答里选一个更好。这当然有效,但现实里,很多反馈其实更像:
- 这个回答可接受 / 不可接受;
- 这个回答有帮助 / 没帮助;
- 这个回答安全 / 不安全;
- 这个回答通过 / 不通过。
也就是说,现实里很常见的是 单条回答的二元判断,而不一定是严格配对的比较。KTO 的动机正是:既然很多可用反馈天然就是二元的,那么不如直接设计一个损失,让模型从这种反馈中学习,而不必强行把它凑成成对偏好。论文也明确把这一点作为 KTO 的实用优势之一:二元好坏信号更便宜、更快、更容易收集。
TIP
成对偏好 是让人比较两个回答:
同一个问题 x:
回答 A:巴黎是法国的首都。 回答 B:法国的首都是伦敦。
标注:A 比 B 好
二元反馈 是只判断单个回答好不好:
问题 x:
回答:巴黎是法国的首都。
标注:好 / 可取
KTO 的训练数据长什么样
KTO 的最自然数据形式是:
其中:
是输入; 是模型回答; 是标签,表示这个回答是可取还是不可取。
如果你手头本来是 DPO 那种偏好数据
也可以把它拆成两条 KTO 数据:
所以 KTO 既可以吃“天然的二元反馈”,也可以吃“由成对偏好拆出来的二元反馈”。原论文在实验里同时考察了这两种情况,并讨论了每个输入只有一个回答的设定。
KTO 想优化什么
它想回答的问题是:
对一个回答
来说,当前策略相对参考策略到底应该提高它的概率,还是降低它的概率?
和 DPO 一样,KTO 也引入一个参考模型
它表示:
- 如果
,说明当前模型比参考模型更偏好这条回答; - 如果
,说明当前模型比参考模型更不偏好这条回答。
所以
前景理论在这里起了什么作用
KTO 的名字来自 Kahneman 和 Tversky,因为它借用了前景理论中非常重要的一点:
人对“收益”和“损失”的感知不是线性的,而且通常对损失更敏感。
换成对齐里的语言,就是:
- 当一个回答是可取的,把它再往上推一点,人类得到的是一种“收益”;
- 当一个回答是不可取的,如果模型还很喜欢它,人类会感受到一种“损失”;
- 收益和损失的感知方式不一定对称,而且常常会有不同的敏感度。
原论文先讨论了前景理论里的经典效用函数,然后为了训练更稳定,改用 sigmoid 形式来做效用函数,因为它同样具备“收益侧凹、损失侧凸”的特性,同时数值上更稳定。
参考点
KTO 还有一个非常关键的量,叫 参考点(reference point),记作
直觉上,它表示:
站在人类视角看,当前模型相对参考模型的“平均基准位置”大概在哪里。
KTO 论文里把这个参考点和一个 KL 基线联系起来。理论上,它写成:
它的作用是:不直接看
它相对一个基准点,是收益还是损失?
这正是前景理论里最关键的思想之一。
KTO 的效用函数
在 KTO 里,单个样本的效用函数写成分段形式。设标签为可取或不可取,那么:
其中:
是 sigmoid 函数; 控制曲线饱和速度,也就是“风险敏感度”; 分别控制可取样本 / 不可取样本的权重,也可以用来处理类别不平衡。
这条式子可以直接按两种情况理解。
对可取样本
如果
越大越好。也就是说,当前模型对这条好回答的支持,应该高于参考点。这样 sigmoid 的输出就会更大,value 也更大。
对不可取样本
如果
越大越好。也就是说,当前模型对这条坏回答的支持,应该低于参考点。这样 sigmoid 的输出才会更大,value 也更大。
所以 KTO 的逻辑非常统一:
- 好回答:让它在参考点之上;
- 坏回答:让它在参考点之下。
KTO 的默认损失
论文给出的默认 KTO 损失是:
这里的
这个形式看起来有点陌生,但其实很简单:
因为
为了更直观,你也可以把它写成按样本类型拆开的单样本损失:
对于可取样本:
对于不可取样本:
这样就更容易看出方向:
- 好样本想让
超过 ; - 坏样本想让
低于 。
为什么 KTO 不需要成对偏好
DPO 的核心对象是:
它学习的是偏好回答比非偏好回答更好的概率。
KTO 的核心对象则是:
它直接学习“这条回答作为单个结果,到底是收益还是损失”。
所以 DPO 的监督信号是“相对比较”,KTO 的监督信号是“单点二元判断”。这也是 KTO 在数据形态上的最大特点:
它不要求两个回答必须成对出现。
如果你的数据天然来自审核、打标、rule-based filtering 或 pass/fail 检查,那么 KTO 往往比 DPO 更自然。
KTO 和 DPO 的差别到底在哪
第一,监督形式不同。
- DPO 需要成对偏好;
- KTO 只需要二元可取 / 不可取标签。
第二,优化目标不同。
- DPO 优化的是偏好对数似然,本质上是偏好回答 / 非偏好回答的分类;
- KTO 优化的是单个回答的前景理论式效用。
第三,参考点不同。
- DPO 的比较是围绕一个非偏好回答;
- KTO 的比较围绕一个更全局的参考点
。论文明确强调,KTO 不再像 DPO 那样只用“一个被拒绝回答”充当参考,而是假设人是在更广的输出分布背景下判断当前回答。
KTO 里的超参数在控制什么
KTO 最关键的超参数主要有三个。
1.
论文的解释是:
2.
它控制可取样本的权重。
3.
它控制不可取样本的权重。
这两个量一方面体现了收益 / 损失的非对称敏感度,另一方面也可以拿来处理类别不平衡。论文专门讨论了数据严重不平衡时如何调整
参考点 在实践里怎么估计
理论上的
设同一个小批次里有
然后用这些错位样本对来估计一个共享参考点:
为了稳定训练,不对
这部分可以理解成:
不去精确计算“全分布下的参考点”,而是在一个 batch 里用错位样本近似出一个公共基准线。
KTO 的训练
KTO 的训练思路其实很简单。
对一条好回答,模型想做的是:
在不盲目整体抬高所有输出概率的前提下,只把真正可取的回答往参考点之上推。
对一条坏回答,模型想做的是:
把它往参考点之下压。
论文里对这一点的解释很形象:如果模型只是“很粗暴地”提高可取样本的隐式奖励,那么 KL 型参考点也会一起升高,结果并不会真正带来净收益;于是模型被迫学到“到底什么让一个回答可取”,而不是只是把所有东西一起抬高。
KTO 的优点
KTO 最吸引人的地方主要有三点。
第一,它吃二元反馈。很多真实系统里,二元信号比成对偏好更容易拿到。
第二,它在理论上不是“从 DPO 改一点点”,而是从前景理论式的效用函数直接推出来,所以它对收益、损失、参考点的处理更显式。
第三,原论文实验显示,KTO 在 1B 到 30B 的规模上可以匹配或超过基于偏好的方法,并且对极端数据不平衡也有一定鲁棒性。
KTO 的局限
但 KTO 也不是“无脑更好”。
首先,它依赖二元标签的质量。如果“可取 / 不可取”的定义本身就很有噪声,KTO 学到的也会不稳。
其次,参考点
最后,KTO 的效果会明显依赖任务和反馈形态。原论文自己的结论也很克制:并不存在一个普遍最优的 HALO,最好的损失取决于当前场景最合适的归纳偏置。
总结
隐式奖励:
效用函数:
默认 KTO 损失:
KTO 是一种直接面向二元反馈的对齐方法。它不要求成对偏好数据,而是对单个回答打“可取 / 不可取”标签,再用前景理论式的效用函数去描述“这条回答相对参考点是收益还是损失”。通过
这样的相对偏好强度,再配合参考点