30 秒看懂
Nathan Lambert 修正后训练课程中的多个细节,涵盖同策略蒸馏、Bradley–Terry 损失、轨迹采样和 PPO 记号。他还推荐了动手代码示例和模型输出对比库。
- 1蒸馏推导更正token 级 KL 估计只有在期望意义上等于 KL 散度。
- 2KL 不是距离它的不对称性违反了数学距离的定义。
- 3数据集层面的损失Bradley–Terry 训练目标需要对样本求期望。
- 4轨迹采样没有环境和初始分布,策略本身无法确定完整轨迹。
- 5PPO 目标与梯度裁剪操作让目标函数比分段导数更易读。
要点建议
- 单个采样 token 只是 KL 散度的估计,不是完整的期望。
- KL 散度不对称,因此不是数学意义上的距离。
- 奖励模型目标必须考虑整个训练数据集。
- 统一奖励索引并明确轨迹分布可以避免记号错误。
- PPO 梯度较难阅读,因此常用目标函数来展示。
按章节阅读整理后的全文
推导更正
Lambert 修正同策略蒸馏中的 KL 估计和奖励模型损失,并解释为什么 KL 不是数学距离。
这期问答汇总修正了课程中的推导和记号,并介绍实践方法。读者评论和 GitHub issue 帮我发现了一些细微错误;要完整理解后训练数学,这些细节很重要。
一张关于同策略蒸馏的幻灯片错误地把 token 级量直接等同于完整的 KL 散度。KL 是对分布求期望。一个采样 token 给出的是估计值,优势函数取该估计值的负数;它只有在期望意义上等于完整的 KL 表达式。

符号反转后得到的对数概率差可能看起来像正向 KL,但方向取决于采样分布:这里 token 来自学生模型。这说明推导很容易表面上看似合理,却遗漏关键细节。
我有时把 KL 散度称为距离,但它不是数学意义上的距离,因为 KL 不对称。实践者常非正式地用“距离”表达训练中策略变化的程度;精确讨论则需要说明方向和近似方法。
实践中,KL 通过采样估计。我推荐 John Schulman 关于 KL 近似的文章,里面包括通常称为 k1、k2 和 k3 的估计量。实现时可能为了稳定性在不同估计量之间切换。
奖励模型课程中的 Bradley–Terry 推导也存在问题:它从最大化单个样本的概率开始。实际训练使用采样数据集,因此修正后的目标需要对样本求期望或平均,而不能把单个概率当成完整训练问题。

感谢 Chris 指出多个问题。这些从理论到实践的细节很容易遗漏。对于询问作业的读者,网页版章节提供了建议实验,与代码仓库中的示例相对应。
代码和学习资源
建议实验和模型补全库支持动手探索。他欢迎读者为练习作贡献。
可以尝试用租用的 GPU 或本地硬件运行示例,检查日志、调整参数,看看哪些地方会出错。我欢迎大家贡献内容,包括设计数学练习:即便语言模型很容易给出答案,练习仍应有教学价值。
模型补全库提供了另一种探索方式:针对相同提示,展示不同模型和后训练阶段的输出。许多例子早于推理模型,但无需自己运行旧模型,就能进行历史比较。
强化学习记号
统一索引、明确轨迹分布及清晰表达梯度有助于避免错误。通过目标函数理解 PPO 往往更容易。
读者还发现强化学习章节的记号不一致。一些错误可能已经进入印刷版;网页版已经修正,我计划在重印时修复。
奖励索引有两种惯例:Sutton 和 Barto 使用 t+1 索引,而其他一些工作使用以 t 为基础的惯例。书中现在统一采用后者。每种惯例单独使用都可以,但混用可能造成事实错误。
小写 r 表示一次状态转移相关的奖励,大写 R 则可以表示轨迹剩余部分的回报,可能经过折扣。写成轨迹的 R 有助于将轨迹级回报与单步奖励区分开。

对于优势加权的 REINFORCE 梯度,旧记号没有清楚说明对什么求导。在这个估计量中,优势值被视为标量,因此修订后的表达式将它放在对数策略梯度前面。在代码中,可以利用模型的对数概率和自动微分求得梯度。
另一处更正涉及轨迹采样。策略将状态映射为动作;它本身不会生成完整的状态和动作序列。轨迹必须从由策略、初始状态分布和环境共同决定的分布中采样。
为什么书中为 REINFORCE 写出解析梯度,却为 PPO 和 TRPO 写目标函数?PPO 的裁剪目标比分段导数更容易理解。实际实现时,目标函数变成损失,自动微分负责计算参数梯度。
一位书籍维护者还改进了章节中对 PPO 目标的解释和配图。这些修正说明,细致的读者反馈能让课程更清晰。下一讲将回到偏好与偏好数据。
同频道的其他文章
16:48EN → 简体中文
48:04EN → 简体中文
46:42EN → 简体中文
5:42EN → 简体中文
32:56EN → 简体中文
32:11EN → 简体中文