大模型- PPO、DPO 和 KTO 这三种用于大语言模型(LLM)对齐的强化学习算法 -74
核心思想与类比
KTO (Kahneman-Tversky Optimization)。这是一个较新的算法,其命名源于诺贝尔经济学奖得主丹尼尔·卡尼曼和阿莫斯·特沃斯基的前景理论。在LLM对齐的语境下,大家讨论的基本上是KTO。
三种算法的核心目标是一致的:让语言模型学会人类的偏好,使其生成的回答更有用、更无害、更符合人类价值观。 但它们实现这一目标的路径和“哲学思想”截然不同。
PPO (近端策略优化):“导师指导模式”
你有一个美食评论家(奖励模型),他会给机器人做的每一道菜(模型生成)打一个具体的分数(Reward)。机器人根据这个分数微调自己的菜谱(策略/Policy),但又怕步子迈太大把好不容易学会的东西忘了,所以每次只做微小的调整(近端裁剪)。这个过程是在线的、反复尝试的。
DPO (直接偏好优化):“比对学习模式”
你不需要一个全能的美食评论家。你只需要拿机器人做的两道菜,让试吃者指出“我更喜欢A,而不是B”。收集大量这样的“A>B”的偏好数据后,你直接用这些数据来修改机器人的菜谱。它的目标是最大化被选中的菜(A)的概率,同时最小化被拒绝的菜(B)的概率。这个过程是离线的、一次性完成的。
KTO (卡尼曼-特沃斯基优化):“点赞/点踩模式”
这种模式更简单。你甚至不需要同时做两道菜。试吃者只需要品尝一道菜,然后给出“喜欢”(点赞)或者“不喜欢(点踩)”的标签即可。收集大量这样的数据后,你用它们来修改菜谱。算法的核心是更严厉地惩罚“不喜欢”的菜,更温和地奖励“喜欢”的菜,这借鉴了人类“损失厌恶”的心理。
关键区别对比表
特性 | PPO (Proximal Policy Optimization) | DPO (Direct Preference Optimization) | KTO (Kahneman-Tversky Optimization) |
---|---|---|---|
核心思想 | 在线强化学习,通过奖励信号逐步优化策略。 | 将偏好数据转化为一个简单的分类问题,直接优化策略。 | 将“好/坏”标签数据转化为分类问题,直接优化策略。 |
所需数据 | (prompt, response, human_reward)提示、模型的回答、人类给出的奖励分数。 | (prompt, chosen_response, rejected_response)提示、被偏好的回答、被拒绝的回答。 | (prompt, response, label)提示、一个回答、以及一个“好”或“坏”的标签。 |
是否需要奖励模型 (Reward Model) | 是,需要一个独立训练的、能给回答打分的奖励模型。 | 否,巧妙地将奖励模型隐式地包含在了损失函数中。 | 否,和DPO类似,也是隐式地优化奖励。 |
训练过程 | 在线 (Online) / 复杂1. 模型生成回答2. 奖励模型打分3. 计算优势函数4. 更新模型参数(循环往复) | 离线 (Offline) / 简单在静态的偏好数据集上进行一次性的监督学习式训练。 | 离线 (Offline) / 更简单在静态的“好/坏”标签数据集上进行一次性的监督学习式训练。 |
复杂性 | 高需要维护多个模型(策略模型、价值模型、奖励模型、参考模型),训练过程不稳定,超参数多。 | 中流程大大简化,只需要策略模型和参考模型,训练稳定。 | 低流程和DPO类似,但数据收集的成本和难度显著降低。 |
主要优点 | 理论成熟,效果上限可能很高,控制粒度精细。 | 简单、稳定,去掉了复杂的RLHF流程,效果与PPO相当甚至更好。 | 数据收集成本极低,可以利用更广泛的反馈信号(如用户的点赞/点踩)。 |
主要缺点 | 极其复杂且不稳定,训练成本高,是阻碍RLHF普及的主要障碍。 | 需要成对的偏好数据,标注成本依然较高。 | 效果可能略逊于DPO,因为它利用的信息比成对偏好要少。 |
详细解释PPO
PPO是经典的强化学习算法,在RLHF(基于人类反馈的强化学习)流程中,它扮演了第三阶段也是最核心的角色。它把“让模型符合人类偏好”这个问题看作是一个标准的RL问题:
策略 (Policy):要优化的LLM本身。
环境 (Environment):用户(或一个模拟用户的模型)提供prompt。
行动 (Action):LLM生成一个response。
奖励 (Reward):一个预先训练好的奖励模型 (Reward Model) 会给这个response打分,分数高低代表了它多大程度上符合了人类偏好
PPO通过不断地“生成-打分-更新”这个循环来提升LLM。它的主要挑战在于这个过程涉及多个模型的复杂交互,非常难以调试和稳定。
DPO
DPO的出现是对PPO复杂性的革命性简化。它的洞见是:我们最终的目标是让模型知道人类“更喜欢A而不是B”,那么我们何不直接围绕这个“偏好”来构建损失函数呢?
它跳过了显式的奖励模型和复杂的在线采样过程。仅使用一个静态的、成对的偏好数据集 (prompt, y_w, y_l)(其中y_w是更受欢迎的回答,y_l是被拒绝的回答),DPO通过一个巧妙的损失函数,直接调整LLM的概率分布,使其提高生成 y_w 的概率,降低生成 y_l 的概率。这本质上是在进行一种隐式的奖励建模和优化。
KTO
KTO则是在DPO的基础上,思考如何进一步降低数据标注的成本。成对比较(“A和B哪个更好?”)虽然比打分简单,但仍然需要为同一个prompt生成至少两个候选答案,并进行比较。
KTO的洞见是:在很多场景下,我们能轻易获得更简单的数据,即某个回答本身是“好的”还是“坏的”。例如,用户对AI回答的点赞/点踩、一个代码回答是否能成功运行等。
KTO利用了前景理论中“损失厌恶”的思想,为“坏”样本设置了比“好”样本更高的惩罚权重,从而高效地利用这些简单的标签数据来对模型进行优化。
如何选择
PPO: 在LLM对齐领域,由于其复杂性,现在已逐渐被DPO等更简单的方法取代。除非你有非常成熟的RLHF平台和团队,否则一般不推荐从零开始使用PPO。
DPO: 目前业界主流和最推荐的方法。如果你能收集到成对的偏好数据,DPO提供了一个效果出色、稳定且易于实现的强大方案。
KTO: 当你难以收集成对偏好数据,但可以轻松地为单个回答打上“好/坏”标签时,KTO是最佳选择。它极大地降低了数据门槛,让你能够利用更大规模、更多来源的反馈数据来持续改进模型。
总而言之,这个领域的发展趋势是从复杂走向简单,从高成本走向低成本,即 PPO → DPO → KTO 的演进路径
样本数据集格式
dpo:
{
"instruction": "",
"input": "",
"history": "",
"reject": "xxxx",
"chosen": "xxxx"
}
kto:
{
"instruction": "",
"input": "",
"history": "",
"kto_tag": true,
}