Automatic Instruction Evolving for Large Language Models
演进指令方法增强版:自动演进指令
Evol-instruct方法作为一种新增指令微调数据的方法在去年受到了一定关注,熟悉这种方法的朋友应该知道Wizard系列的LM,Coder和Math都利用了类似的方法或衍生方法,简而言之就是将已有的种子数据里的指令复杂化然后让模型生成对应的输出,从而用于增强训练。但是这种问题的缺陷在于,Evol时的指令具体如何编写是需要一些domain knowledge的,比如说代码领域可行的“增加时间或空间复杂度”的要求显然不能用在聊天这一domain上,因此自动化Evol这个过程是有必要的,作者希望有一种方法能1.自动化设计指令演进方法;2.保持指令演进过程中平稳运行,避免出现演进失败的情况(比如出现演进出没有答案的指令来)。作者提出一种“Auto Evol-Instruct”的方法,细节见下图,仔细看一下就能理解。首先,为了从手动设计演进指令转变到自动生成,作者采用一种通用的初始演进方式,为了通用性,他们使用了一个LLM作为优化器来迭代式优化最初的演进方法来确保对于给定指令集上有最小的错误率,另外还有一个专用于生成演进指令的LLM。从上图中可以看到这种对指令的优化有两个关键阶段,第一个是”演进轨迹分析(Evol Trajectory Analysis)“,此时优化器LLM会仔细分析演进LLM生成的指令中的潜在问题,比如产生了一条没有解的指令或者指令相比初始指令并没有提升复杂性;第二个阶段叫”演进方法优化(Evolving Method Optimization)“,优化器LLM会试图解决前一阶段观察出来的问题。这两个阶段相互更替重复实现指令的渐进式演进。另外在图的右半部分,优化器LLM有时难以持续提供建设性反馈和增强演化方法。为增强方法的稳定性,作者从Self-Consistency中学习,采取了一种叫作Multiple Optimization的策略,即在每一步中,优化器LLM进行m次采样解码的分析和优化。这生成了m种不同的潜在改进演化方法,即图1中的e1_t至em_t,使模型能够同时探索更多可能性。把初始演进方法的prompt贴在上面,这论文没什么太难的东西,直接看结果。他们在三种任务上做了评测,分别是指令遵循、数学推理和代码生成,作者做实验的具体设置在table1,实验结果在tab2,总结来说有以下结论:1.提出的方法在不同模型规模上均显著提高了指令遵循能力,在小模型上提升高一些;2.该方法显著提高了数学推理能力,比如只使用了少量的指令数据(仅7K)并在Mixtral-8x7B上微调后能超过GPT-3.5-turbo,这表明该方法能显著提升现有数学数据的质量上限;3.方法也能有效提高模型的代码生成能力,如在33B规模上,Evol-Instruct改进不明显,而新方法与种子数据相比显示出5.4的提升。撰文:戴剑波;编辑:戴剑波
未经本公众号授权不得转载,欢迎转发。