超越DPO!大模型精细化对齐之Step-DPO

abf2302697bdf5d9e2ae6dfbc65645fc.gif

©PaperWeekly 原创 · 作者 | 皓天

单位 | 小红书

研究方向 | AI安全、推理&规划

近期,GSM8K、MATH 被各种 7B 小模型刷的飞起,其中,step-level-dpo 成为刷分利器。这里,instance-level-dpo 指 preference-dataset使用 完整的chosen-tracjectory 和 rejected-tracjectory。

而 step-level-dpo 则使用 step-chosen、step-rejected 构造偏序数据集。相比 instance-level-dpo,step-level-dpo 则使用如下公式:

141b6f00d8b90b078e9a65f4fc76de5f.png

相比 instance-level-dpo,step-level-dpo 只优化 step-level 的数据,而共同前缀则作为 prompt 的一部分,不参与 loss 计算。这里,我们首先介绍几篇与 Step-DPO 相关的文章。

4f56ef10fcbb46a6d2620262d2008ac7.png

MCTS-DPO

论文标题:

Monte Carlo Tree Search Boosts Reasoning via Iterative Preference Learning

论文地址: 

https://arxiv.org/abs/2405.00451

代码地址: 

https://github.com/YuxiXie/MCTS-DPO

4c4d41592d73209ac28d64255e5d5544.png

a2ad4fff70bc58f013e64032ccd58040.png

该文章提出 step-level-dpo,为了获取 step-level 的偏序数据,则使用树搜索获取具有共同前缀的 step-level 偏序数据。使用树搜索可以天然地获取具有共同前缀的 preference-dataset,而且,可以利用 UCT、estimated-Q 等等,选择 preference-step,以及 对 Step-DPO 算法做 label smoothing 如根据访问次数对 dpo-loss 做平滑。

fd2964f9ab2d0836965e718516ca807d.png

f82c413428fdb87f241a85e23a29dc1b.png

SVPO

论文标题:

Step-level Value Preference Optimization for Mathematical Reasoning

论文地址: 

https://arxiv.org/abs/2406.10858

15e2cd6ea4cf9ea5f8087a9533b1ab78.png

该工作继承了 alphamath,将 value-function 估计与 step-level-dpo 结合。preference-dataset 的构造与 [1] 类似,即使用树搜索 + output-reward 筛选 chosen、rejected step。在整个模型训练过程中,加入了 value-head 的训练,解码时,可以使用 value-guided-decoding,采样复杂度介于 greedy/random-sample 和 MCTS 之间,达到更好的效果。该工作在训练中,为了防止模型退化,加入了 sft-loss。

50aa7a46d024dbd11d8f9bdec8c13487.png

Scaling LLM Math Synthetic Data

论文标题:

RL on Incorrect Synthetic Data Scales the Efficiency of LLM Math Reasoning by Eight-Fold

论文地址: 

https://arxiv.org/abs/2406.14532

该文章系统地讨论了使用答案错误样本提升数学能力的方法。

68574988cec7bb075e678602ff528254.png

cdae7875b84000d5fb9e4dd046e1229e.png

相比前几个工作,该工作使用朴素的 rollout,估计每个 step 的 value-function,并根据 q 值,获取 chosen 和 rejected-step。当使用 step-level-dpo 优化时,达到相同 acc,可以少用 8 倍的数据量。

6490a39b8761603bef6bc8f708820c35.png

同时,该工作也指出,当我们使用 step-dpo 时,模型具备 step-level 的错误检测能力(与文章 [4] 的观点类似):

7b9bac982aa39af8dc4a643d00e7ddad.png

bdcd4050149d0f2eb7d73abbc6b4592f.png

Step-DPO

论文标题:

Step-DPO: Step-wise Preference Optimization for Long-chain Reasoning of LLMs

论文地址: 

https://arxiv.org/abs/2406.18629

代码地址: 

https://github.com/dvlab-research/Step-DPO

该工作是笔者认为近期较为扎实的工作,虽然只在 gsm8k、math 两个数据集上完成的实验,但在足够的多 base、instruct 以及 rl 模型上进行实验,证明了 step-dpo 在不同尺寸的强基线上依然可以取得更好的结果。

bb05dedac2d2e370f917b94f623d21c8.png

从结果上来看,step-dpo 在 deepseekmath-rl 上依然有一定的提升(尤其是在 MATH 上)。此外,在 qwen2 不同尺寸、llama3 上,从 7B 到 70B,step-dpo 依然可以带来一致性的提升。

从 preference-dataset 的构造上来看,该文章首先用 deepseek-math-instruct 在 metamath、MMIQC 等数据集完成一次推理,获取符合特定格式的 response。并根据 answer 筛选答案正确的数据作为训练数据。在构造 preference-data 时,和前述的工作类似,但使用了和 sft-dataset 不同的 prompt 数据。

4cf8e46250b8e6313fc5b2e6cbbec851.png

我们的实践

之前,我们简单探讨过 tdpo 在 eurus 上的评测。这里,我们在 Step-DPO-10k 的 preference-dataset 上进行实验的复现,以及  tdpo 在有共同前缀 response 上的性能评测。

step-dpo 使用文章里面的超参数,dpo-beta=0.4 

数据集:Step-DPO-10k

由于 Step-DPO 的提供了(step-chosen,step-rejected)、(full-chosen,full-rejected)的数据集,我们进行了共同前缀的 step-level、共同前缀的 instance-level 的 dpo 训练。

对于 tdpo,我们使用 instance-level 的数据,区别仅在于共同前缀放 prompt 还是 response。当共同前缀放 response,则 tdpo 中的 forward-kl 会消掉且 dpo-loss 的前缀 loss 也会消掉,只剩下不同后缀的 forward-kl 和 dpo-loss。

f3b774a6af92e33e612f90b3224809d9.png

从上表中可以看到,我们重新实现的训练 trainer 和官方模型的 infer 结果基本接近。当使用不同的模版时,不管是 step-dpo 还是 tdpo,性能都会有一定的下降。其中,tdpo 的性能下降更为明显。

当换成 alpaca-template 后,tdpo 性能符合预期,在 gsm8k 上,得到 87.11 的解决率。而 step-dpo 则在 math 上的提升更为明显。

不管是 Eurus-Preference-Dataset,还是 Step-DPO-Preference-Dataset,都能够给 sft 模型带来不同程度的提升。尤其是 step-dpo、tdpo 等等算法,能够取得更为稳定的提升(至少模型能力不退化)。而笔者自己的 xpo 实验,均基于 sft 数据集的 prompt 构建 chosen、rejected pair,在 xpo 等方法上,一训就崩,尤其是数学和 code。

当使用新的 prompt 或者不同模型的 response 构造的 preference-datasets,xpo 的训练更为稳定(如 eurus-preferenced-dataset、step-dpo-preference-dataset)。

当使用新的 prompt 或者不同模型的 response 构造的偏序数据,对于 xpo 等等来说,都算是 out-of-distribution dataset。而如果使用 sft+sft-model 获取的偏序数据,则为 in-distribution dataset。对于 offline-rl,in-distribution 数据似乎限制了模型的优化且更容易破坏模型的原始分布(如数学、code 等有一定的格式约束),而 ood 数据似乎为 offline-rl 提供了更好的探索。

cabd07a6fb3f52ef20064a3ca4ad5c84.png

PPO vs Step-DPO

基于 Step-DPO-10k-dataset,我们基于 llama-factory+trl(做了一定修改),对比 PPO 和 Step-PPO 在提升数学能力上的一些实验对比:

  • PPO 的超参数使用 trl 默认且 critic、actor 共享 encoder

  • 学习速率:actor:5e-7,critic:1e-6(2 倍 actor)

  • RM:基于 evaluation 的 rule-rm、基于 step-dpo-10k 的 bt-rm

  • num-train-epoch:1(采样长度 2048、每个 prompt 采样两次)

  • kl-coef(adaptive-kl-coef,init-kl-coef=0.2(初始值貌似有点大))

3c8bd9f96104a6b4ae5e93e6f6b7e37b.png

PPO-1epoch 需要 11 个小时(基于 trl + 采样长度 2048)。step-dpo 跑 8 个 epoch 需要 3 个小时。在二者使用相同的 prompt(与 test-set 不重叠),PPO 消耗的时间成本更高,在有限资源的超参数搜索,相对 step-dpo有一定的劣势,当参数量增加后,相应的超参数可能需要重新调整,对于资源的消耗较多。

另外,在同样的训练参数配置下,bt-rm 对比 rule-rm 有一定的提升。

在实践中,使用 bt-rm 可能能带来更好的收益。而鲁棒的 bt-rm 需要较好的 preference-dataset。在有限的计算资源下,ood 的 preference-dataset 可能带来较为可观的收益。而 ppo 可能上限更高但需要的资源也更多。

75d611cb808eff5d1b120e9515fc7671.png

当我们训练 DPO 的时候,response 和 beta 该怎么选

之前,当笔者使用 sft-model+sft-dataset,生产偏序数据集,并设置 beta=0.1,dpo 训练在数学和 code 上,都会崩溃,包括但不限于丢失 sft 注入的格式 如 “The answer is” 等等,一度怀疑 preference-dataset 需要使用 ID、OOD 的 prompt 和 response构造。

近期,新发布的一个文章:Understanding Reference Policies in Direct Preference Optimization,则将这个问题探讨的更清晰。

提出 DPO 的文章,将 beta 设置为 0.1,成为后来很多 xpo 工作的默认超参数。然而,policy-model 和 ref-model 的能力逐渐提升时,beta 是否还该保持 0.1 的默认值,其实是一个问号。文章 [5] 则更为系统的讨论了这个问题:即  DPO 中的 reference-policy 对 DPO 优化的影响。

d25a70a96adc88633e3b63b6ed7b3089.png

类比 PPO,这里,beta 作为调节 policy 和 ref-policy 差距的关键参数,当 beta 越小,则 policy 偏离 ref-policy 更多,可能达到更好的 performance,也存在更大的 degenerate 可能性。

该文章提出几个重要观察:

  1. beta 需要超参数搜索,不同的 policy 和 ref-policy 组合,最优 beta 不一样。

  2. 使用更好的 ref-policy,不一定总能提升 policy 效果,而且,越强的 ref-policy,需要的 beta 越大(提供更大的正则,避免 degenerate)。

  3. beta 越小,则 dpo-as-verifier 的能力越强,但同时达到最好的 gen-performance 和最好的 discriminative-performance 需要的 beta 不一样。

我们简单在 step-dpo-10k 上完成了一组实验:

qwen2-SFT 作为 policy 初始化和 ref-policy 后,当 beta=0.1,

0f8616130b0201c879d88970c404add1.png

这里,preference-dataset 均为 OOD-prompt+OOD-response,随着 beta 变小,policy 更容易偏离 ref-policy,导致模型效果下降严重。而 Step-DPO 中提到,7B 模型,beta=0.4,而 72B 模型,beta=0.5,也与文章 [5] 中的结论比较类似即越强的 ref-policy,需要更大的 beta。

至于能否让 policy 取得一致性提升,可能最直接的还是 根据 policy 的 rollout+ORM/PRM,构造 模型容易出错的 preference-dataset,进而提高模型训练的样本效率以及合理的 beta 调优。这里,beta 调整可以参考 PPO 中的 AdaptiveKLController,根据 policy 在 chosen 和 rejected 上的 kl 距离,动态调节 beta,进而达到更好的效果。

16335849833c40b442d9271ef97c15c9.png

终章

为了更好的复现相关实验,我们基于 metamath 的 prompt+qwen2-72b-instruct+ 答案过滤,合成了 400k 数据,以及混合 numina-cot 的 aime、amc 等数据,共计 900k 的 sft 数据(解答过程无固定格式,答案格式 The answer is:)。并在 step-dpo 的 preference-dataset 上完成 beta 的超参搜索。

4061d068bcb68225f1429b206ad4278d.png

几个重要结论:

1. 900k 的 text-cot,纯合成 440k,加 pdf 解析 460k,qwen2-7b-base,text-cot可以刷到 gsm8k 88.5,math 57.32(exact-match)。qwen2-72b-base,在同样的 sft 数据集下,gsm8k:94.47, math:69.68。

2. 当使用 offline-preference-dataset(step-dpo 的 preference-dataset 来源于 qwen2-7b-instruct),尤其在数学上,beta 越小,效果下降越严重,beta=0.4/0.5 是一个相对折中的设定。

3. 当我们遍历 beta,从 0.1 到 2.0,step=0.1,使用其他模型生产的 preference-dataset,sft 越强,需要的 beta 也越大,最终,qwen2-7b-base,可以在 gsm8k、math 上分别提升 1 个点左右,但比较难兼顾。

4. 由于使用规则判断 答案是否正确,这里,结果为 exact-match。exact-match 存在几个问题:

  1. 多余的计量单位 难以被 规则解析器全部覆盖。

  2. 存在 referece:\frac{15}{2},prediction:7.5 的情况,目前的规则也难以覆盖,导致结果的变动 可能是 answer 更容易被解析而不是模型能力更强。 

5. 总体上来看,step-dpo 比 full-dpo 在各个 beta 下,都会更好一些。

6. 与 [5] 不同,通用能力评测,在不崩的情况下,beta 越小越好,dpo-as-verifier 也会更强;而像 math 等等,越小的 beta 对模型产生更多的“负向优化”,大一些的 beta 能稳固模型能力。当混合多个数据点时,beta 可以做成 data-dependent 而不是固定值。

7. step-dpo 对每个 step 一视同仁,一般都会存在一定的噪声,这时,[1] 里面提供的一些方法可以降低 step-level 的噪声。同时,也能使用 prefix-sampling,计算 prefix-step 的 bon-acc 作为 step-level-dpo 的 soft-label。

outside_default.png

参考文献

outside_default.png

[1] Monte Carlo Tree Search Boosts Reasoning via Iterative Preference Learning

[2] Step-level Value Preference Optimization for Mathematical Reasoning

[3] RL on Incorrect Synthetic Data Scales the Efficiency of LLM Math Reasoning by Eight-Fold

[4] Your Language Model is Secretly a Q-Function

[5] Understanding Reference Policies in Direct Preference Optimization

更多阅读

ac5ac4be7f1bec22e7780f1e4af62fb4.png

bd85f2ef2fc96b69a64c2165849d0057.png

674cd01d1fd614f74b7c6f77e4875dfc.png

962a144edc78dc6c5d8a9065e87ad330.gif

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算

📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

cb3855a728c3432eb60f250215bba123.png

△长按添加PaperWeekly小编

🔍

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

·

·

·

0327e90ae35ac1a736731fd4e4ef6763.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值