SPAR:通过树搜索细化自我对弈框架提升LLM指令遵循能力
2024年12月19日 由 alex 发表
18
0
大型语言模型(LLM)中的指令遵循能力要求模型能够识别指令中最细微的要求,并在输出中准确反映这些要求。现有的方法通过偏好学习来优化这一过程,这些方法在创建偏好对时通常直接从模型中采样多个独立响应。但这种方法可能会引入与指令是否得到精确遵循无关的内容变化(例如,相同语义的不同表达),从而干扰教授模型识别导致指令遵循改进的关键因素的目标。
为了解决这一问题,本文引入了SPAR,这是一个结合树搜索自我精炼的自对弈框架,用于生成无干扰的有效且可比的偏好对。通过与自己进行对弈,大型语言模型采用树搜索策略来根据指令精炼其之前的响应,同时最小化不必要的变化。
主要贡献:
- 揭示了从独立采样响应中得出的偏好对往往包含干扰因素,这会妨碍偏好学习以提高指令遵循能力。
- 引入了SPAR,这是一种新颖的自对弈框架,能够在指令遵循任务中实现持续的自我改进。
- 构建了一个包含43K个复杂指令遵循提示的高质量数据集和一个可以提高大型语言模型指令遵循能力的SFT数据集。
方法
总体框架
SPAR迭代训练框架如下图所示:
正式地,在每次迭代中,给定来自提示集的指令x,执行器生成一个响应y。
精炼器识别出那些没有准确遵循指令的响应,称之为负面响应。
目标是精炼负面响应为正确响应。
这些生成的精炼对被收集起来,用于通过直接偏好优化(DPO)来优化执行器。
同时,应用拒绝采样微调(RFT)来改进精炼器。这个过程为两个模型的下一次自我改进迭代做好了准备。
数据构建
提示创建
- 种子提示:我们使用来自Infinity-Instruct数据集的种子提示集,该数据集包含一千万条高质量对话。在应用基于长度、关键词和自我BLEU的规则过滤后,我们获得了大约5万个种子提示。
- 基于分类法的提示构建:我们采用基于分类法的机制来使约束类型全面且平衡。在构建约束分类法后,我们利用它基于种子提示构建复杂的指令遵循任务。这产生了大约4.3万个提示。
Actor 和 Refiner初始化
- Actor数据创建:首先收集一个强大的大型语言模型对这些复杂提示的响应,从而为执行器模型生成监督微调(SFT)数据(x, y) ∈ DActor,其中x是复杂指令,y是强大大型语言模型的响应。然后,我们对基础模型进行微调,得到一个初始执行器M0。
- Refiner数据创建:为了用强大的判断和精炼能力来引导精炼器模型,我们从初始执行器M0中采样响应。然后,我们收集来自一个强大大型语言模型的判断,形成一个数据集(x, y, j) ∈ DJSFT。我们收集那些被判断为没有准确遵循指令的响应,并将它们称为负面响应。对于这些负面响应,我们使用强大大型语言模型进行最小修订的纠正,以避免无关的变化。
- 训练策略:对于执行器和精炼器模型,我们都使用标准监督微调,损失函数为:
其中q表示输入,r表示目标响应,N表示r的长度。对于执行器训练,我们有输入q = x和目标r = y。对于精炼器,我们在DJSFT中使用输入q = (x, y)和目标r = j,在DRSFT中使用输入q = (x, ynegative, j)和目标r = yrefined。
集成树搜索的自对弈训练
负面数据收集
- 对于每个提示x,我们首先从执行器模型中采样K个响应{y1, y2, ..., yK}。
- 然后,对于每个提示和响应对,我们利用精炼器生成一个判断,该判断包含两部分:一个标签,表明响应是否遵循指令;以及一个关于评估的解释。
- 为了使这个判断更准确,我们纳入了自一致性机制,通过从精炼器获得多个判断,并通过多数投票确定最终标签。
- 多数投票后,我们随机选择一个与投票标签相匹配的判断作为最终判断,这样可以识别出那些引发不准确遵循指令响应的挑战性提示,生成形式为(x, ynegative, j)的元组,其中ynegative是不正确的响应,j是其对应的判断。
树搜索精炼
- 考虑到直接精炼往往成功率较低,我们采用了一种树搜索方法,并为这种精炼实现了广度优先搜索(BFS)和深度优先搜索(DFS)策略。
- 以BFS为例,从一个不正确的指令-响应对及其判断作为根节点开始,我们逐层扩展搜索树,直到找到一个正确的响应。
- 在每个中间节点,我们为当前响应生成潜在的精炼,并使用精炼器评估其正确性。生成的精炼数量对应于分支的数量。
- 具体来说,在树的某一层,精炼器:1) 为当前层的每个节点生成潜在的精炼;2) 判断这些精炼的正确性。这会创建一组具有新响应及其对应判断的子节点。
- 搜索过程持续进行,直到我们获得一个元组(x, ynegative, yrefined),其中yrefined是新精炼的正确响应。
执行器训练
- 我们利用精炼对进行偏好学习,使用DPO优化执行器模型。
- 在第t次迭代中,我们用精炼对(ynegative, yrefined)训练执行器模型Mt,将ynegative视为被拒绝的响应(yl),将yrefined视为被选择的响应(yw)。
- 训练数据集表示为Dtdpo,DPO损失描述如下:
其中πtθ表示执行器模型Mt,而参考模型πref以Mt初始化,在训练过程中保持不变。这将为下一次迭代生成一个新的执行器模型Mt+1。
精炼器训练
由于精炼器的输入是模板化的,我们使用拒绝采样微调(RFT)来获得新的精炼器Rt+1。RFT训练数据由两部分组成:
(1)精炼训练数据
- 精炼训练数据由捕捉不正确响应精炼过程的元组组成。
- 对于基于树搜索的精炼步骤中的每个不正确响应,我们收集形式为(x, yp, jp, yrefined)的元组,其中(x, yp, jp)表示精炼树中最终正确响应的父节点,而yrefined是正确精炼后的响应。
(2)判断训练数据
- 判断训练数据来源于负面数据收集和树搜索过程的节点。
- 这个数据集由元组(x, yi, ji)组成,其中x是提示,yi是对x的响应,而ji是与多数投票一致的判断。
- 然后,我们使用构建的训练数据进行监督微调。
- 对于精炼数据Dtrefine,我们使用元组(x, yp, jp, yrefined),其中输入q = (x, yp, jp),目标r = yrefined。对于判断数据Dtjudge,我们使用元组(x, yi, ji),其中输入q = (x, yi),目标r = ji。
实验
执行器评估结果
SPAR显著提高了指令遵循能力
下表显示了在大型语言模型(LLM)上迭代训练后,在指令遵循基准测试上的主要结果
经过三次训练迭代后,SPAR-8B-DPO-iter3在IFEval上的平均准确率甚至超过了GPT-4-Turbo(81.3%)。此外,在推理阶段融入树搜索精炼技术显著提升了性能。此外,SPAR在模型规模方面展现出了出色的可扩展性,这极大地增强了LLaMA3–70B-Instruct模型的指令遵循能力。
SPAR不损害通用能力
下表展示了在通用基准测试上的性能表现
结果表明,SPAR保持甚至提高了整体性能,特别是在GSM8k和HumanEval基准测试上,这表明增强的指令遵循能力支持了大型语言模型(LLM)的整体对齐。
SPAR显著优于其他基线方法
下图展示了每次训练迭代在IFEval上的改进情况
在每一次迭代中,SPAR的表现都优于其他方法。值得注意的是,即使经过三次迭代,其他方法也未能超越SPAR第一次迭代的性能。
精炼器评估结果
SPAR迭代提升判断能力
下表展示了在LLMBar上对迭代训练的大型语言模型(LLM)的判断能力的评估结果。
结果显示,SPAR的迭代显著提高了模型评估指令遵循任务的能力。到第三次迭代时,精炼器SPAR-8B-RFT-iter3的表现超越了用于构建判断SFT数据集的模型GPT-4o-Mini。
SPAR逐步提升精炼能力
下表展示了精炼评估结果。Acc-GPT使用GPT-4o作为评判标准;Acc-SPAR使用SPAR-8B-RFT-iter3作为评判标准。
结果表明,随着每次训练迭代,LLaMA3–8B-Instruct的精炼准确率(成功率)持续提高,最终达到了与GPT-4o-Mini相当的水平,而GPT-4o-Mini是用于构建SFT数据的强大大型语言模型(LLM)。
结论
我们介绍了一个新的自我对弈框架SPAR,旨在通过训练精炼对来提高大型语言模型(LLM)的指令遵循能力。
我们发现,与传统方法不同(传统方法依赖于从模型中采样多个独立响应来构建偏好对),通过精炼偏好对以最小化外部因素并突出关键差异,可以显著提高指令遵循任务的性能。
使用我们的框架迭代训练的LLaMA3-8B-Instruct模型在IFEval上的表现超越了GPT-4-Turbo。
通过推理时间的计算扩展,其性能可以进一步提升。
文章来源:https://medium.com/@techsachin/spar-self-play-with-tree-search-refinement-to-improve-instruction-following-in-llms-3047c5ac7735