最近已有不少大厂都在秋招宣讲,也有一些已在 Offer 发放阶段了。
节前,我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。
针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了深入的讨论。
总结链接如下:
《大模型面试宝典》(2024版) 发布!
喜欢本文记得收藏、关注、点赞。
最近又认真读了一遍大佬的文章:朱小霖:DPO 是如何简化 RLHF 的 。不由感叹,数学不愧是 AI 技术的第一生产力,但凡我当初对这个证明过程多深入思考一会儿,也不至于踩那么多坑。
01 理论证明
针对 ppo 的 loss 函数,我们做以下变换:
至此,艺术已成!致敬大佬朱小霖。
02 dpo 的局限性
经过上面的证明,一切都清晰了,dpo 对标的从来都是不是 ppo,而是 reward_model。
二者不仅训练数据一样,loss 函数本质上也一致。那么即使不去做实验验证, dpo 的局限性也已经跃然纸上了。
03 dpo 的大前提未被验证
dpo 从头到尾都在以 reward_model 的方式让模型学习 evaluate 能力,但是却并没有证明一个重要假设:“模型的 evaluate 能力和 generate 能力到底是不是相互促进的?”
dpo 后的模型具有了更强的 evaluate 能力,但我们的目标是提升模型的 generate 能力啊。如果这个基本假设不成立,那 dpo 的学习过程就没有什么价值。
不要认为这个假设是显而易见的,美食家并不一定做得一手好饭。这个大前提的成立与否,还关系到 SPIN、self-reward 等左脚踩右脚的训练方式是否有存在的意义。
也正是因为 dpo 是在让模型具有 reward_model 的能力,所以它并不在乎模型能不能说出一个好的句子,只在乎 loss margin 是否在变大。
大家训练 dpo 的时候,基本都遇到过 good_sentence 和 bad_sentence 的 loss 都上升的尴尬现象,往往需要我们加系数和调参数才能解决。
reward_model 的训练方式根本不在乎模型的 generate 能力,因此稳定训练的 dpo 需要魔改 loss 函数。
04 dpo 缺乏在线采样数据
我们再从另外一个角度来思考 dpo 的不足,已知:
-
dpo 和 reward_model 完全等价;
-
rlhf = reward_model + ppo。
可得:ppo 所做的一切操作,便是 dpo 效果不如 rlhf 的原因。
那我们思考一下,ppo 到底做了什么?ppo 没有使用任何训练数据,它唯一做的事情便是 generate,通过对模型 generate 的文本进行打分,把 reward_model 的 evaluate 能力转换成 generate 能力喂给模型。
因此,缺乏的这个 generate 的过程就是 dpo 效果不行的原因。那这个 generate 的过程又带来了什么呢?online 和 explore。
老生常谈的一个知识点了:rlhf 是 online 学习方式,dpo 是 offline 学习方式。
rlhf 是修复模型当前已有的知识,属于因材施教,并且由于 do_sample 的随机性,它可以进行 explore;但 dpo 则是强制模型学习训练者认为正确的知识(偏好数据对中的 good sentence),沿着一条被设定的正确的路线使劲走,这种 offline 的学习方式也导致它不具备 explore 的空间。
**我们在 dpo 训练中常用的一个技巧:**让模型先对“偏好数据对的 good sentence”做一次 sft,再进行 dpo 训练。
不就是强行让 dpo 变成 online 的学习方式吗?毕竟训过的知识大概率也是可以 generate 出来的。
我们在 dpo 数据中常用的一个技巧:把模型自己生成的 path@N 结果,拿来构造成偏好 pair 对,不就是同时在模拟 ppo 的 online 和 sample 能力吗?
因为欠缺,所以需要弥补。所有的 dpo 数据处理技巧,大多都能从 ppo 身上找到一些痕迹。