©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 则使用如下公式:
相比 instance-level-dpo,step-level-dpo 只优化 step-level 的数据,而共同前缀则作为 prompt 的一部分,不参与 loss 计算。这里,我们首先介绍几篇与 Step-DPO 相关的文章。
MCTS-DPO
论文标题:
Monte Carlo Tree Search Boosts Reasoning via Iterative Preference Learning
论文地址:
https://arxiv.org/abs/2405.00451
代码地址:
https://github.com/YuxiXie/MCTS-DPO
该文章提出 step-level-dpo,为了获取 step-level 的偏序数据,则使用树搜索获取具有共同前缀的 step-level 偏序数据。使用树搜索可以天然地获取具有共同前缀的 preference-dataset,而且,可以利用 UCT、estimated-Q 等等,选择 preference-step,以及 对 Step-DPO 算法做 label smoothing 如根据访问次数对 dpo-loss 做平滑。
SVPO
论文标题:
Step-level Value Preference Optimization for Mathematical Reasoning
论文地址:
https://arxiv.org/abs/2406.10858
该工作继承了 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。
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
该文章系统地讨论了使用答案错误样本提升数学能力的方法。
相比前几个工作,该工作使用朴素的 rollout,估计每个 step 的 value-function,并根据 q 值,获取 chosen 和 rejected-step。当使用 step-level-dpo 优化时,达到相同 acc,可以少用 8 倍的数据量。
同时,该工作也指出,当我们使用 step-dpo 时,模型具备 step-level 的错误检测能力(与文章 [4] 的观点类似):
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 在不同尺寸的强基线上依然可以取得更好的结果。
从结果上来看,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 数据。
我们的实践
之前,我们简单探讨过 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。
从上表中可以看到,我们重新实现的训练 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 提供了更好的探索。
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(初始值貌似有点大))
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 可能上限更高但需要的资源也更多。
当我们训练 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 优化的影响。
类比 PPO,这里,beta 作为调节 policy 和 ref-policy 差距的关键参数,当 beta 越小,则 policy 偏离 ref-policy 更多,可能达到更好的 performance,也存在更大的 degenerate 可能性。
该文章提出几个重要观察:
beta 需要超参数搜索,不同的 policy 和 ref-policy 组合,最优 beta 不一样。
使用更好的 ref-policy,不一定总能提升 policy 效果,而且,越强的 ref-policy,需要的 beta 越大(提供更大的正则,避免 degenerate)。
beta 越小,则 dpo-as-verifier 的能力越强,但同时达到最好的 gen-performance 和最好的 discriminative-performance 需要的 beta 不一样。
我们简单在 step-dpo-10k 上完成了一组实验:
qwen2-SFT 作为 policy 初始化和 ref-policy 后,当 beta=0.1,
这里,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,进而达到更好的效果。
终章
为了更好的复现相关实验,我们基于 metamath 的 prompt+qwen2-72b-instruct+ 答案过滤,合成了 400k 数据,以及混合 numina-cot 的 aime、amc 等数据,共计 900k 的 sft 数据(解答过程无固定格式,答案格式 The answer is:)。并在 step-dpo 的 preference-dataset 上完成 beta 的超参搜索。
几个重要结论:
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 存在几个问题:
多余的计量单位 难以被 规则解析器全部覆盖。
存在 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。
参考文献
[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
更多阅读
#投 稿 通 道#
让你的文字被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析、科研心得或竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。
📝 稿件基本要求:
• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题
• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算
📬 投稿通道:
• 投稿邮箱:hr@paperweekly.site
• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者
• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿
△长按添加PaperWeekly小编
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
·
·
·