AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


斯坦福 |提出多阶段LLM编程指令示例优化器:MIPRO,复杂任务准确率提升13%!
发布日期:2024-06-21 03:25:03 浏览次数: 1749



引言

通过模块化语言模型调用,并组成pipleines来解决复杂任务,极大的推动了NLP任务的发展(下图为prompt优化样例)。在此过程中需要对每个模块设计有效的prompt。为此本文作者重点研究了LLM编程的prompt优化,旨在通过优化提示来最大化下游任务指标。作者将复杂问题分解为优化每个模块的指令提示,并引入了几种策略来制作基于任务的指令,并开发了一种新型优化器MIPRO,使用Llama3-8B在多个项目上都得到了不错的效果,且最高可提升13%的准确率。https://arxiv.org/pdf/2406.11695

背景介绍

使用语言模型(LM)来解决复杂的任务,通常需要应用高级的提示技术(prompting techniques)并将它们组合成多阶段的流程(multi-stage pipelines)。尽管如此,当前的LM程序大多是通过“提示工程”(prompt engineering)来设计的,这是一种通过手动试错来创建长提示的方法,以迫使LM在特定流程中执行特定步骤。

当前最新的研究提出了提示优化器(prompt optimizers),例如APE、OPRO和EvoPrompt等,它们可以检索字符串以识别高性能提示的算法。但是,大多数方法并不能够直接应用于多阶段LM程序,因为在这些程序中缺乏对单个LM调用的评估指标。最近ICLR2024提出的编程模型:DSPy,将LM pipeline抽象为文转图,可以学习如何应用提示、微调、增强和推理技术的组合。但该优化器尽管可以创建多阶段pipeline表示来优化prompt和权重,但是并不能对复杂multi-prompt pipelines的 free-form 指令进行调优。

为此,本文在弱假设条件下探讨任意语言模型(LM)程序中高效优化提示(prompts)的方法,特别是那些具有多个阶段的程序。具体来说,作者无法访问LM权重,只需要LM程序本身、一个优化度量标准以及一组输入输出的训练集。这使得在不收集每个模块的详细训练数据的情况下,可以优化使用黑盒LM的程序。

针对该研究方向,作者正式定义了LM程序的提示优化问题,并提出了两个关键挑战:1)随着模块数量的增加,提示的范围空间将会非常大,基于Less is More的思想,构建一些高质量的prompt至关重要;2)面对复杂的多阶段任务,需要联合优化许多不同的变量,而这些变量参数化了所有模块的提示,必须有效地推断每个变量配置的影响。为此,本文作者定义了几种策略来应对此类挑战,并系统的探索了它们的性能。

LM程序提示优化定义

下图定义了优化语言模型(LM)程序中提示的问题,并提出了一个通用的优化框架。如下图所示:LM程序:由多个模块(个模块)组成的程序,每个模块使用不同的语言模型(LM)。每个模块由一个包含一组变量的提示模板定义。例如,对于一个少样本问答(few-shot QA)的提示模板,可能包含用于指令、示例和目标问题的变量。

变量和赋值所用提示模板中所有变量的集合,是变量到字符串的总赋值。指定了在这种赋值下运行的程序

优化目标:目标是找到一个总赋值,使得在训练集上的度量下,程序的性能最优化。这涉及到优化程序在任务级别上的表现,而没有直接访问到LM的权重以及中间阶段指标。

高质量prompt优化策略

为了能够获取与任务、程序、数据和指标性质一致的候选提示。可以从以下三个方面来思考:(i) 构建指导性示例轨迹(即每个模块的输入和输出),以展示 LM 应如何执行任务,(ii) 收集和总结可能影响高质量指令构建的重要因素,和/或 (iii) 对如何使用 LM 提出高性能指令进行元优化。

对于多种配置组合选择,作者提出了三种解决方案来解决该问题:贪婪(greedy)方法、代理(surrogate)方法和基于历史(history-based)的方法。

  • 贪婪方法可能侧重于在每一步选择最优的配置,以期望快速获得最佳结果。
  • 代理方法可能使用某种形式的模型或代理来预测不同配置的性能,从而指导搜索过程。
  • 基于历史的方法则可能利用过去的搜索结果和经验来指导当前的决策,以避免重复低效的尝试。

MIPRO优化器

以上方法各有优势和局限性,为此作者提出了一种创新算法,专为优化多阶段语言模型(LM)程序设计:MIPRO(Multi-prompt Instruction PRoposal Optimizer)。MIPRO通过其设计和变体展示了在多阶段LM程序优化中的高效率和灵活性,尤其在提升程序性能方面表现突出。具体来说:

它通过应用贝叶斯优化技术,有效预测不同变量组合的质量,从而提高参数空间检索的效率。MIPRO的一个关键特点是将多配置组合选择与提示任务分离,使得语言模型能够专注于生成高质量的任务提示。此外,它采用元优化过程来不断改进提示策略,并通过在小批量训练数据上的评估来增加优化过程的效率。

MIPRO的工作流程包括初始化、提案、更新和提取优化集四个步骤。在初始化阶段,算法根据提案超参数提出一组指令和任务示例,并对贝叶斯模型中的潜在变量进行均匀先验初始化。提案阶段利用树状Parzen估计器的采样规则来提出部分指令和示例赋值。更新阶段在随机选择的小批量样本上评估这些赋值,并据此更新模型的先验认知。最后,在提取优化集阶段,定期评估候选参数化并返回得分最高的配置。

MIPRO还包括几个变体,如0-Shot MIPRO专注于指令优化,Bayesian Bootstrap专注于示例优化,MIPRO++则进一步使用贝叶斯模型来优化提案超参数,0-Shot MIPRO++专注于通过元优化(meta-optimization)过程来调优和改进指令提案策略。这些变体使得MIPRO能够灵活适应不同的任务和条件。

实验结果

如下图所示,作者展示了不同优化器在多个任务上的性能表现,涵盖了不同的领域和难度级别,以评估和比较不同优化策略的有效性。可以发现:1)优化引导示例(few-shot demonstrations)对于提高性能至关重要,尤其是在复杂任务上。2)对于具有复杂规则的任务,如HotPotQA Conditional,指令优化显示出其重要性,能够指导LM生成符合特定格式的输出。3)MIPRO通过联合优化指令和示例,可以获得最佳的整体性能。


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询