我在浏览器里跑了一个微型 DPO 策略,训练过程实时可见,每一步更新都不加隐藏层。当奖励模型和整个强化学习循环被拿掉之后,剩下的部分少得出奇——一个损失函数、两个对数概率相减、再过一个 sigmoid。没有 PPO 的额外对局采样,没有三个模型挤在显存里的负重感,整个训练循环短到可以嵌在一个网页里。这种“轻”不是删减功能的迁就,而是代数推导把冗余项直接消掉的后果。
放在常规的对齐流程旁边看,这种对比会更强烈。传统路线走了三步:先微调语言模型让它能生成像样的答案;然后收集人类偏好对,用这些偏好对训练一个单独的奖励模型,把“好不好”量化成标量分;最后启动强化学习,让策略网络去最大化这个奖励分,同时加入 KL 惩罚项防止策略跑偏。三步下来,算力开销是三个模型驻留内存,工程上的不稳定在于强化学习本身需要二次采样,而那个被当作目标的奖励模型本质上也是个代理——策略网络只要找到这个奖励函数的漏洞,就能刷高分,而不是真正给出更好的回答。
这套机制能用,但太重,每个环节都需要维护,还留下一个可以被钻空子的奖励信号。DPO 的主张因此显得尖锐:
你其实不需要奖励模型,也不需要强化学习。这句话不是简化论的口头激荡,而是从经典优化目标里直接推导出来的。该目标希望最大化奖励减去一个与参考策略的 KL 散度加权项,而这个目标存在一个封闭形式的解——最优策略正好是用奖励重新加权后的参考策略:π*(y|x) ∝ π_ref(y|x) · exp(r(x,y) / β)。这个等式一度被当作理论性质写在论文里,直到有人把它反过来用。
把上面的关系式重新排列,把奖励表达成策略的函数,会得到 r(x,y) = β · ( log π(y|x) − log π_ref(y|x) ) + 常数。这一行等式就是 DPO 的全部技巧。它意味着,任何时刻,只要你有当前的策略和一个冻结的参考策略,你就可以直接读出奖励值,不需要单独训练一个奖励模型来模拟人类偏好。奖励变成了策略自身概率差异的足迹,那台用来学奖励的神经网络就此消失。
这个“隐式奖励”的定义很直观:当前策略对某个回答给予的对数概率,减去参考模型对同一个回答的对数概率,再乘以温度系数 β。实现上就是一行函数:
def implicit_reward(x, y): return beta * (policy.logprob(y|x) - ref.logprob(y|x))
加法常数在比较同一个提示下的两个回答时彼此抵消——偏好对存在的意义正是让你只需要关心相对差异,不需要绝对分数。这一点非常重要,因为它撤掉了奖励模型需要持续校准绝对评分的基础。只要有成对的“优选回答”和“非优选回答”,隐式奖励就已经能给出哪个更“高”的信号。
DPO 接着把 Bradley–Terry 模型搬过来,这个模型原本是训练奖励模型时用的损失函数:−log σ(r_chosen − r_rejected),把一个回答优于另一个的概率建模成 sigmoid 函数后的奖励差值。DPO 不做修改,直接把这个损失用在隐式奖励上。因为它就是 r 的替代,所以损失最终变成只依赖策略自身对数概率与参考对数概率之差的形式:
def dpo_loss(x, y_chosen, y_rejected): d_chosen = policy.logprob(y_chosen|x) - ref.logprob(y_chosen|x) d_rejected = policy.logprob(y_rejected|x) - ref.logprob(y_rejected|x) margin = beta * (d_chosen - d_rejected) return -log_sigmoid(margin)
从形式看,这是一个二分类损失,目标就是让优选回答的隐式奖励大于非优选回答。奖励模型从此不再作为独立实体存在,它被代数拆解并内化到了策略里。原来的三步流水线坍塌成一个环节:直接用偏好对优化策略,而所谓奖励只是策略对自己和参考之间偏差的量度。强化学习循环也被替换成普通的监督式梯度下降。
这种简化带来一个直白的问题:既然没了独立的 KL 惩罚项,策略会不会在优化过程中飘太远?传统 PPO 的做法是在每个更新步骤里显式减去 KL 散度,用额外的计算来拉住策略。DPO 里,同样的约束力被 β 参数包进了损失函数。β 乘以对数概率差得到的 margin,本身就携带了距离参考的强度信息——概率差越大,margin 越敏感,梯度越会往回拽。换句话说,KL 正则从显式的代码行变成了损失曲率里的暗力量,策略的每一步更新都同时在做对齐和自保持,而不需要额外的对局采样来估算散度。
整件事的后果是,偏好对齐被降维成一个可微分的二分类问题。你只需要准备好偏好对、冻结住参考模型,然后像训练一个简单分类器那样跑梯度下降。我把这套流程塞进浏览器里跑了一遍,TensorFlow.js 做自动微分,训练数据是随手编的几十条问答对,不到一分钟模型就开始把概率质量往礼貌、准确的回答上挪动。没有奖励模型,没有 PPO,没有调度器。留在屏幕上的只有日志里两行概率差和一条稳定上升的隐式奖励曲线。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.