Phase 18: Ethics, Safety & Alignment

直接偏好优化家庭

拉斐洛夫等人 根据RLHF的优势在偏好数据方面具有封闭形式,因此您可以跳过明确的奖励模式并直接优化政策. 这种洞察力产生了一家IPO,KTO,SimPO,ORPO,BPO,每个都解决了DPO失败模式. 2026年,直线配列算法将比PPO更多的边境训练后运行. 但第二课的过度优化曲线仍然适用:DAA不逃离Goodhart,

Type: Learn

Languages: Python (stdlib, six-variant preference-loss comparator)

Prerequisites: Phase 18 · 01 (InstructGPT), Phase 18 · 02 (Reward hacking), Phase 10 · 08 (DPO basics)

Time: ~75 minutes

学习目标

  • 取出DPO封闭形式从RLHF-with-KL最佳.
  • 说明IPO,KTO,SimPO,ORPO,BPO的每个故障模式.
  • 区分"隐含的奖励差距"与"偏好强度",并解释为什么IPO的身份映射是重要的.
  • 解释为什么Rafailov等人 (NeurIPS 2024) 证明尽管没有明确的RM,但DAA过度优化.

问题

关于RLHF的目标 (课 1)

max_pi E_{x,y~pi} [ r(x, y) ] - beta * KL(pi || pi_ref)

已知最佳值:

pi*(y|x) = (1/Z(x)) * pi_ref(y|x) * exp(r(x, y) / beta)

因此,奖励被隐含地定义为最佳政策与参考的比例:

r(x, y) = beta * log(pi*(y|x) / pi_ref(y|x)) + beta * log Z(x)

取代这个为布拉德利-特里偏好概率和分区函数Z(x)取消,因为它只取决于x只有政策参数的损失 没有奖励模型需要.

纹:衍生假设最佳可达,偏好数据是分布式的,参考政策是真实模式.这些都不完全适用.每个家庭成员都会修复不同的违反假设.

概念

果 (Rafailov等, 2023)

L_DPO = -log sigmoid(
  beta * log(pi(y_w | x) / pi_ref(y_w | x))
  - beta * log(pi(y_l | x) / pi_ref(y_l | x))
)

什么可能会发生错误:

  • 隐含的奖励差距beta * (log(pi/pi_ref)_w - log(pi/pi_ref)_l)只有一个小的偏好,就会产生一个任意大的差距.
  • 输出驱动选择和拒绝的日志探测器在相反的方向.只要拒绝的日志探测器更快地下降,它可以推倒所选的绝对日志探测器.这是降级的选择反应现象.
  • 分布外偏好 (罕见罕见对与罕见罕见对) 产生了任意的隐含奖励.

投资者:

身份偏好优化取代了日志-sigmoid 通过身份映射在偏好概率.损失成为一个有限的目标的二方误差:

L_IPO = (log(pi(y_w | x) / pi_ref(y_w | x)) - log(pi(y_l | x) / pi_ref(y_l | x)) - 1/(2 beta))^2

边缘由1/(2 beta)偏好强度和隐含奖励差距均为比例.

技术技术技术 (Ethayarajh等,2024年)

由于单个标记输出和二进制"可"或"不可"信号,它将映射到一个前景理论实用性:

v(x, y) = sigma(beta * log(pi(y|x) / pi_ref(y|x)) - z_ref)

优势:可以使用未配对数据,这更丰富.

博 (Meng等, 2024)

简单的偏好优化将训练信号与生成进行一致化. 完全删除参考政策,并根据长度正常化日志概率:

L_SimPO = -log sigmoid(
  (beta / |y_w|) * log pi(y_w | x)
  - (beta / |y_l|) * log pi(y_l | x)
  - gamma
)

具有一个边缘gamma长度正常化消除了利用DPO的长度偏差失败模式的激励 (更长时间y_w根据建筑物,它提供了更大的日志检测差距.

欧罗波 (Hong等, 2024)

优化偏好率增加一个偏好术语,

L_ORPO = L_NLL(y_w) + lambda * L_OR
L_OR = -log sigmoid(log(odds(y_w) / odds(y_l)))

没有参考政策 SFT术语是调节剂.从基模型到对齐模型的单一阶段训练.没有单独的SFT检查点.

报告的内容:

确定级选择答案问题:DPO保留排名y_w > y_l但绝对的记录测试y_w报告在Llama-3.1-8B-Instruct上对数学推理而言.

普遍结果:DAA仍然过度优化

拉斐洛夫等人"直接调整算法中奖励模型过度优化的扩展法则" (NeurIPS 2024) 与DPO,IPO,SLiC在KL预算中多个数据集上培训政策.金-奖励-KL曲线具有相同的Gao等.峰值和崩形状.暗示奖励在培训期间询问出分布样本;KL规范化并没有稳定这一点.

报价分析系统 (DAA) 没有逃离Goodhart.它们从"奖励模型过度优化"到"参考政策比率过度优化"的表面变化.

选择他们中的 (2026)

  • 如果您有大量的对取决数据:DPO与保守的beta,SimPO如果长度偏差明显.
  • 如果您有双重反:KTO.
  • 如果您想要从基模型中获得单阶段管道:ORPO.
  • 如果您看到DPO日志中被选择的记录检查器,
  • 如果偏好强度很大,且DPO和:IPO.

每个实验室都用电池运行五个任务,每项任务都会选择胜利者.

用它

code/main.py根据玩具偏好数据集,对比六次损失 (DPO,IPO,KTO,SimPO,ORPO,BPO) 进行了比较.每次损失都以小的软最大政策优化于相同的500对样本.每种方法的最终胜率,选项日志-试验漂移和隐含奖励差距.

运送它

这一课产生了outputs/skill-preference-loss-selector.md鉴于数据集统计数据 (对对对对对对对对对对对对对变量对均偏好强度,长度分布) 和目标 (单阶段或SFT-then-preference),建议对偏好损失进行报告,并报告它保护的故障模式.

运动

  1. 跑步code/main.py报告DPO和BPO的最后选择日志检查下降.BPO应该保持更高的选择绝对概率验证这一点.
  1. 修改偏好数据,使所有对具有相同的强度. 在六种方法中,哪种方法最强大?哪种降低?
  1. 没有改变任何其他东西,数字显示DPO的长度利用和SIMPO的修正.
  1. 拉斐洛夫等人 (NeurIPS 2024) 声称DAA过度优化. 复制一个点版本:图 chosen-minus-rejected KL divergence,并观察大型beta中的DPO过度优化.
  1. 阅读BPO论文摘要 (OpenReview b97EwMUWu7). 写下BPO在DPO添加的一行纠正. 确认在code/main.py现在,我们要去.

关键词

TermWhat people sayWhat it actually means
DPO"RLHF without a reward model"Loss derived from the closed-form RLHF optimum; policy parameters only
Implicit reward"the log-ratio"beta * log(pi(y|x) / pi_ref(y|x)) — the DPO-implied reward
IPO"bounded DPO"Replaces log-sigmoid with identity; implicit reward gap capped by 1/(2 beta)
KTO"unpaired DPO"Prospect-theory utility over single labels with loss aversion
SimPO"reference-free DPO"Length-normalized log-likelihood + margin; no reference policy
ORPO"one-stage DPO"NLL + odds-ratio preference term; trains from base model in one pass
BPO"chosen-preserving DPO"DPO plus a penalty for decreasing the chosen response's absolute log-prob
Degraded Chosen"chosen goes down"DPO decreases chosen log-prob so long as rejected falls faster
DAA"direct alignment algorithm"Any preference-loss method that skips an explicit RM

进一步阅读

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.