llm 中的对齐微调 DPO、KTO、PPO算法
模型经过海量数据预训练后,它拥有了广泛的知识,但其输出行为是“中性”的,它不知道人类更偏爱哪种风格的回答(例如:更有帮助、更无害、更简洁、更符合特定格式)。对齐微调 的目标就是缩小模型与人类偏好之间的差距。
对齐微调:利用人类偏好信号来指导模型的优化。
1. PPO - 近端策略优化
PPO是强化学习领域的经典算法,它是在RLHF范式的第三阶段被引入并取得巨大成功的。
RLHF的三步流程:
-
监督微调:使用高质量的指令-回答对数据,对预训练模型进行微调,得到一个初始的SFT模型。这一步是让模型初步学会“如何回答指令”。
-
训练奖励模型:
-
收集人类标注数据:对于同一个提示,让模型生成多个回答(例如A, B, C, D),然后由人类标注员对这些回答进行排序(例如 A > C > D > B)。
-
训练一个独立的奖励模型,它的任务是学习人类的偏好判断。给定一个提示和回答,RM会输出一个标量分数,分数越高代表回答越好。训练目标是让RM对更优回答的打分高于对更差回答的打分。
-
-
使用PPO进行强化学习优化
PPO的核心机制 - “近端”:
目标:在最大化期望奖励的同时,确保策略的更新步长不会太大。
实现:PPO通过一个“裁剪”函数来限制新旧策略之间的概率比率。如果一次更新会让新策略与旧策略差异巨大,从而可能带来性能崩溃,PPO会将这个更新“拉回”到一个可信的范围内。这就像给优化过程加了一个“安全带”,确保了训练的稳定性。
2. DPO - 直接偏好优化
DPO的核心思想:
DPO证明,在奖励模型和最优策略之间存在一个解析关系。利用这个关系,可以直接将“最大化奖励”的强化学习问题,转换成一个简单的监督学习分类问题。
-
数据需求:只需要成对的偏好数据。对于每个提示
x,有两个回答(y_w, y_l),其中y_w是获胜回答,y_l是失败回答。 -
损失函数:DPO的损失函数是如下形式:
L_DPO = -log σ( β * log[πθ(y_w|x) / π_ref(y_w|x)] - β * log[πθ(y_l|x) / π_ref(y_l|x)] )-
πθ:当前正在被优化的策略模型。 -
π_ref:参考模型(通常是SFT模型)。 -
σ:sigmoid函数。 -
β:控制偏离参考模型程度的超参数。
-
损失函数的目标是最大化当前模型相对于参考模型对“好回答”的偏好提升。具体来说:
-
log[πθ(y_w|x) / π_ref(y_w|x)]表示当前模型相比参考模型,有多大程度更“喜欢”输出好的回答y_w。我们希望这个值越大越好。 -
log[πθ(y_l|x) / π_ref(y_l|x)]表示当前模型相比参考模型,有多大程度更“喜欢”输出坏的回答y_l。我们希望这个值越小越好。 -
整个损失函数的目标是让“对好回答的偏好提升”与“对坏回答的偏好提升”之间的差值尽可能大。当这个差值足够大时,sigmoid后的值接近1,负对数损失就接近0。
3. KTO - 知识转移优化
KTO是一种更新的、更简单的直接偏好优化方法。它可以看作是DPO(直接偏好优化)的进一步发展。
KTO的核心思想:
KTO认为,我们不需要复杂的PPO和单独的奖励模型,甚至不需要严格的“成对偏好”数据(即A回答优于B回答)。它只需要一个更简单的信号:某个回答是“可取的”还是“不可取的”。
-
数据:对于每个提示,只需要标记生成的回答是 “好” 还是 “坏” 。这比收集多个回答并进行排序要容易得多。
-
原理:KTO通过一个损失函数,直接优化模型,使得:
-
对于“好”的回答,模型的输出概率应该高于某个期望值。
-
对于“坏”的回答,模型的输出概率应该低于某个期望值。
-
-
关键优势:它绕过了训练奖励模型的步骤,直接将人类对“好/坏”的偏好信号注入到语言模型的优化过程中。
KTO与DPO的关系:
-
DPO:需要成对的偏好数据(Chosen vs Rejected)。它通过一个精巧的数学推导,将奖励最大化问题转换为一个纯粹的监督学习问题。
-
KTO:是DPO的泛化。它不需要成对数据,只需要单个样本的“可取性”标签。它的损失函数设计得更加直接,旨在拉高“好”回答的似然,压低“坏”回答的似然。
简单比喻:KTO就像一个老师,他不需要比较两个学生(A和B)的作业哪个更好(DPO),他只需要在每个学生的作业上打勾(好)或打叉(坏),然后让学生自己去朝着“打勾”的方向努力。

浙公网安备 33010602011771号