Skip to content

KTO

Kahneman-Tversky Optimization

KTO: Model Alignment as Prospect Theoretic Optimization

KTO 用“单条回答是好还是坏”的二元反馈,直接优化模型对单个回答的效用,而不是像 DPO 那样去拟合成对偏好的概率。

它最重要的特点有两个。

第一,它不要求数据一定是成对偏好 (x,yw,yl),而是可以直接使用更便宜、更自然的二元标签:

(x,y,l),l{desirable,undesirable}

其中 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 的最自然数据形式是:

D={(xi,yi,li)}i=1N

其中:

  • xi 是输入;
  • yi 是模型回答;
  • li 是标签,表示这个回答是可取还是不可取。

如果你手头本来是 DPO 那种偏好数据

(x,yw,yl)

也可以把它拆成两条 KTO 数据:

(x,yw,desirable),(x,yl,undesirable)

所以 KTO 既可以吃“天然的二元反馈”,也可以吃“由成对偏好拆出来的二元反馈”。原论文在实验里同时考察了这两种情况,并讨论了每个输入只有一个回答的设定。

KTO 想优化什么

它想回答的问题是:

对一个回答 y 来说,当前策略相对参考策略到底应该提高它的概率,还是降低它的概率?

和 DPO 一样,KTO 也引入一个参考模型 πref,通常就是 SFT 模型。然后定义一个“隐式奖励”或“相对偏好强度”一样的量:

rθ(x,y)=logπθ(yx)πref(yx)

它表示:

  • 如果 rθ(x,y)>0,说明当前模型比参考模型更偏好这条回答;
  • 如果 rθ(x,y)<0,说明当前模型比参考模型更不偏好这条回答。

所以 rθ(x,y) 可以理解成“当前策略相对参考策略,对这条回答给了多少额外支持”。KTO 论文把这个量放进前景理论式的效用函数里,而不是像 DPO 那样拿它去构造成对回答的对数几率。

前景理论在这里起了什么作用

KTO 的名字来自 Kahneman 和 Tversky,因为它借用了前景理论中非常重要的一点:

人对“收益”和“损失”的感知不是线性的,而且通常对损失更敏感。

换成对齐里的语言,就是:

  • 当一个回答是可取的,把它再往上推一点,人类得到的是一种“收益”;
  • 当一个回答是不可取的,如果模型还很喜欢它,人类会感受到一种“损失”;
  • 收益和损失的感知方式不一定对称,而且常常会有不同的敏感度。

原论文先讨论了前景理论里的经典效用函数,然后为了训练更稳定,改用 sigmoid 形式来做效用函数,因为它同样具备“收益侧凹、损失侧凸”的特性,同时数值上更稳定。

参考点 z0

KTO 还有一个非常关键的量,叫 参考点(reference point),记作 z0

直觉上,它表示:

站在人类视角看,当前模型相对参考模型的“平均基准位置”大概在哪里。

KTO 论文里把这个参考点和一个 KL 基线联系起来。理论上,它写成:

z0=KL(πθ(yx)πref(yx))

它的作用是:不直接看 rθ(x,y) 本身,而是看它相对于一个“参考基准”到底是在收益区还是损失区。这样一来,KTO 就不只是问“这条回答分数高不高”,而是在问:

它相对一个基准点,是收益还是损失?

这正是前景理论里最关键的思想之一。

KTO 的效用函数

在 KTO 里,单个样本的效用函数写成分段形式。设标签为可取或不可取,那么:

v(x,y)={λDσ(β(rθ(x,y)z0)),yydesirablexλUσ(β(z0rθ(x,y))),yyundesirablex

其中:

  • σ() 是 sigmoid 函数;
  • β>0 控制曲线饱和速度,也就是“风险敏感度”;
  • λD,λU 分别控制可取样本 / 不可取样本的权重,也可以用来处理类别不平衡。

这条式子可以直接按两种情况理解。

对可取样本

如果 y 是可取的,那么我们希望

rθ(x,y)z0

越大越好。也就是说,当前模型对这条好回答的支持,应该高于参考点。这样 sigmoid 的输出就会更大,value 也更大。

对不可取样本

如果 y 是不可取的,那么我们希望

z0rθ(x,y)

越大越好。也就是说,当前模型对这条坏回答的支持,应该低于参考点。这样 sigmoid 的输出才会更大,value 也更大。

所以 KTO 的逻辑非常统一:

  • 好回答:让它在参考点之上;
  • 坏回答:让它在参考点之下。

KTO 的默认损失

论文给出的默认 KTO 损失是:

LKTO(πθ,πref)=Ex,yD[λyv(x,y)]

这里的 λy 表示:当 y 是可取样本时取 λD,当 y 是不可取样本时取 λU

这个形式看起来有点陌生,但其实很简单:

因为 λy 是常数,最小化这个损失,本质上就是最大化 v(x,y)。而 v(x,y) 已经把可取 / 不可取两类样本该往哪个方向推写进去了。

为了更直观,你也可以把它写成按样本类型拆开的单样本损失:

对于可取样本:

D(x,y)=λD[1σ(β(rθ(x,y)z0))]

对于不可取样本:

U(x,y)=λU[1σ(β(z0rθ(x,y)))]

这样就更容易看出方向:

  • 好样本想让 rθ(x,y) 超过 z0
  • 坏样本想让 rθ(x,y) 低于 z0

为什么 KTO 不需要成对偏好

DPO 的核心对象是:

(x,yw,yl)

它学习的是偏好回答比非偏好回答更好的概率。

KTO 的核心对象则是:

(x,y,l)

它直接学习“这条回答作为单个结果,到底是收益还是损失”。

所以 DPO 的监督信号是“相对比较”,KTO 的监督信号是“单点二元判断”。这也是 KTO 在数据形态上的最大特点:

它不要求两个回答必须成对出现。

如果你的数据天然来自审核、打标、rule-based filtering 或 pass/fail 检查,那么 KTO 往往比 DPO 更自然。

KTO 和 DPO 的差别到底在哪

第一,监督形式不同。

  • DPO 需要成对偏好;
  • KTO 只需要二元可取 / 不可取标签。

第二,优化目标不同。

  • DPO 优化的是偏好对数似然,本质上是偏好回答 / 非偏好回答的分类;
  • KTO 优化的是单个回答的前景理论式效用。

第三,参考点不同。

  • DPO 的比较是围绕一个非偏好回答;
  • KTO 的比较围绕一个更全局的参考点 z0。论文明确强调,KTO 不再像 DPO 那样只用“一个被拒绝回答”充当参考,而是假设人是在更广的输出分布背景下判断当前回答。

KTO 里的超参数在控制什么

KTO 最关键的超参数主要有三个。

1. β

β 控制效用函数的饱和速度。

论文的解释是:β 越大,效用越快饱和;这对应更强的“收益区风险厌恶”和“损失区风险追求”。直觉上,你可以把它看成“这套效用函数有多快进入饱和区”。

2. λD

它控制可取样本的权重。

3. λU

它控制不可取样本的权重。

这两个量一方面体现了收益 / 损失的非对称敏感度,另一方面也可以拿来处理类别不平衡。论文专门讨论了数据严重不平衡时如何调整 λDλU,并报告了在可取样本和不可取样本很不平衡的情况下 KTO 仍能保持性能。

参考点 z0 在实践里怎么估计

理论上的 z0 不太方便直接算,因为那会涉及对当前策略输出分布的采样。论文在实现上采用了一个更方便但有偏的估计。

设同一个小批次里有 m 个样本,通过把输出错位配对,构造不匹配的 (xi,yj),其中

j=(i+1)modm

然后用这些错位样本对来估计一个共享参考点:

z^0=max(0,1milogπθ(yjxi)πref(yjxi))

为了稳定训练,不对 z^0 反向传播,它只用来控制损失饱和。

这部分可以理解成:

不去精确计算“全分布下的参考点”,而是在一个 batch 里用错位样本近似出一个公共基准线。

KTO 的训练

KTO 的训练思路其实很简单。

对一条好回答,模型想做的是:

在不盲目整体抬高所有输出概率的前提下,只把真正可取的回答往参考点之上推。

对一条坏回答,模型想做的是:

把它往参考点之下压。

论文里对这一点的解释很形象:如果模型只是“很粗暴地”提高可取样本的隐式奖励,那么 KL 型参考点也会一起升高,结果并不会真正带来净收益;于是模型被迫学到“到底什么让一个回答可取”,而不是只是把所有东西一起抬高。

KTO 的优点

KTO 最吸引人的地方主要有三点。

第一,它吃二元反馈。很多真实系统里,二元信号比成对偏好更容易拿到。

第二,它在理论上不是“从 DPO 改一点点”,而是从前景理论式的效用函数直接推出来,所以它对收益、损失、参考点的处理更显式。

第三,原论文实验显示,KTO 在 1B 到 30B 的规模上可以匹配或超过基于偏好的方法,并且对极端数据不平衡也有一定鲁棒性。

KTO 的局限

但 KTO 也不是“无脑更好”。

首先,它依赖二元标签的质量。如果“可取 / 不可取”的定义本身就很有噪声,KTO 学到的也会不稳。

其次,参考点 z0 的实践估计是有偏的。论文自己也明确说了,这是一个有偏但方便的估计。

最后,KTO 的效果会明显依赖任务和反馈形态。原论文自己的结论也很克制:并不存在一个普遍最优的 HALO,最好的损失取决于当前场景最合适的归纳偏置。

总结

隐式奖励:

rθ(x,y)=logπθ(yx)πref(yx)

效用函数:

v(x,y)={λDσ(β(rθ(x,y)z0)),y is desirableλUσ(β(z0rθ(x,y))),y is undesirable

默认 KTO 损失:

LKTO(πθ,πref)=Ex,yD[λyv(x,y)]

KTO 是一种直接面向二元反馈的对齐方法。它不要求成对偏好数据,而是对单个回答打“可取 / 不可取”标签,再用前景理论式的效用函数去描述“这条回答相对参考点是收益还是损失”。通过

rθ(x,y)=logπθ(yx)πref(yx)

这样的相对偏好强度,再配合参考点 z0、风险参数 β 和收益 / 损失权重 λD,λU,KTO 把语言模型对齐写成了“最大化单回答效用”的问题。它最适合的场景,是你手上的反馈天然就是二元好坏标签,而不是严格的成对偏好。