提示优化 | PhaseEvo:面向大型语言模型的统一上下文提示优化

【摘要】为大型语言模型 (LLM) 制作理想的提示是一项具有挑战性的任务,需要大量资源和专家的人力投入。现有的工作将提示教学和情境学习示例的优化视为不同的问题,导致提示性能不佳。本研究通过建立统一的上下文提示优化框架来解决这一限制,旨在实现提示指令和示例的联合优化。然而,在离散和高维自然语言空间中制定这种优化在收敛和计算效率方面带来了挑战。为了克服这些问题,我们提出了 PhaseEvo,这是一种高效的自动提示优化框架,它将法学硕士的生成能力与进化算法的全局搜索能力相结合。我们的框架采用多阶段设计,结合了基于 LLM 的创新变异算子,以提高搜索效率并加速收敛。我们对 35 项基准任务的方法进行了广泛的评估。结果表明,PhaseEvo 的性能大幅优于最先进的基线方法,同时保持良好的效率。

原文:PhaseEvo: Towards Unified In-Context Prompt Optimization for Large Language Models
地址:https://arxiv.org/abs/2402.11347
代码:未知
出版: 未知
机构:intui

1 研究问题

本文研究的核心问题是: 如何设计一个统一的in-context学习prompt优化框架,以实现prompt指令和示例的联合优化。

假设我们要优化一个仇恨言论检测任务的prompt。现有的方法要么只优化一个简短的零样本指令,比如"检测下面的文本是否包含仇恨言论",要么在固定的指令下优选一组few-shot示例。这往往得不到最优的效果。比如加入一些few-shot的正负面例子,再稍微修改一下指令的表述,可能会带来更好的提示效果。本文要解决的就是如何在指令和示例两个维度上同时搜索最优的prompt。

本文研究问题的特点和现有方法面临的挑战主要体现在以下几个方面:

  • 离散的自然语言空间具有极高的维度,优化搜索难度大。联合优化指令和示例需要在一个超大规模的离散空间中探索最优解,收敛速度慢,计算成本高。

  • 全局探索容易陷入局部最优。现有的随机搜索方法虽然能全局探索,但也更容易陷入局部最优,难以持续优化。

  • 纯粹的局部搜索优化幅度有限。一些基于梯度的局部搜索方法虽然能快速收敛,但往往只能在初始解附近小幅优化,难以跳出次优区域。

针对这些挑战,本文提出了一种兼顾"全局探索"和"局部优化"的"PhaseEvo"方法:

PhaseEvo巧妙地将进化算法中的"探索"和"利用"思想与LLMs的生成能力相结合。它设计了一个四阶段的迭代优化框架,在"全局探索"和"局部优化"之间反复切换:先用随机初始化种群全局探索解空间,再用反馈突变局部优化当前解,然后用进化算子重新探索新区域,最后再用语义突变加速收敛。这好比先撒一张大网到处探索,然后围绕探索到的好位置精细捕捞,接着再撒网到新水域,最后收缩网兜聚焦最佳区域。同时,PhaseEvo还根据算子的特性,设计了任务感知的相似度度量和自适应的阶段切换策略,大幅提升了搜索效率。

2 研究方法

论文提出了一种名为PhaseEvo的统一in-context学习prompt优化框架,以实现prompt指令和示例的联合优化。PhaseEvo的核心思想是将进化算法中的"探索"和"利用"思想与LLMs的生成能力相结合,通过"全局探索→局部优化→全局探索→局部优化"的四阶段迭代优化流程,在探索整个搜索空间和利用当前最优解之间求得平衡。

2.1 突变算子

PhaseEvo使用了5类LLM驱动的突变算子,每类算子在添加/删除示例、改进概率、收敛速度、是否支持多父代、计算成本等关键属性上各有特点。

  1. Lamarckian算子: 给定一组输入输出对,利用LLM的few-shot学习能力反向生成对应的prompt。该算子能够引入全新的语义片段,为初始种群提供多样性。

  2. Feedback算子: 利用LLM作为"考官"找出当前prompt的缺陷,并作为"梯度"反馈给另一个LLM"学生",后者据此生成改进后的prompt。该算子能同时修改指令和示例,改进概率高,收敛速度快,但容易陷入局部最优。

  3. EDA算子: 从当前种群中选出一组语义相似但表述多样的parents,交由LLM生成它们的"遗传重组"。若按照适应度对parents排序,则称为EDA+I算子。该算子支持多父代,探索能力强,但改进概率和速度一般。

  4. Crossover算子: 选择种群中适应度最高的两个个体作为parents,让LLM对它们执行"交叉重组"。若两个parents的相似度最低,则称为Crossover+D算子。其特点与EDA算子类似。

  5. Semantic算子: 对当前prompt执行语义改写,生成表述不同但意思相近的新prompt。该算子探索能力较弱,但改进概率高,资源消耗低。

下表比较了不同算子的关键属性:

算子能否增删示例改进概率收敛速度多父代计算成本
--

2.2 四阶段优化流程

PhaseEvo采用四阶段迭代优化流程,每个阶段的初始种群、突变算子、种群规模、迭代方式等如下:

  • 阶段0(全局初始化):使用算子从任务数据或人工prompt中随机采样生成初始种群。该阶段探索空间最广,为后续阶段提供多样性的起点。

  • 阶段1(局部反馈突变):对中的每个个体,迭代使用算子,让LLM"考官"反复找出其缺陷并让LLM"学生"迭代改进,直到无法再提升。所有改进后的个体形成新种群。该阶段在初始探索的基础上快速爬坡,为后续阶段提供局部最优解。

  • 阶段2(全局进化突变):从中随机采样一组parents,用或算子生成它们的"遗传重组",加入种群形成。通过引入多样性的parents,该阶段能跳出阶段1的局部最优区域,在更大范围内探索。

  • 阶段3(局部语义突变):对中的每个个体,使用算子生成其语义相近的变体,形成最终种群。该阶段在全局探索的基础上做局部微调,提升收敛速度。

算法1描述了PhaseEvo的总体流程:

不同阶段通过巧妙的组合,形成了"大范围撒网 → 精细捕捞 → 换址撒网 → 重点围捕"的高效探索利用策略。

2.3 关键设计改进

除了四阶段流程,PhaseEvo还在两个细节上进行了改进。

首先,它采用基于任务的相似度度量来评估不同个体的差异性。传统的做法通常基于prompt嵌入的余弦相似度,但这不能反映它们在下游任务上的性能差异。PhaseEvo为每个个体构造一个performance vector,记录其在验证集每个样本上的预测结果(例如[1,1,1,0,0]代表前三个样本预测正确,后两个预测错误),并用vector之间的汉明距离度量相似性。这种做法能更准确地评估个体之间的互补性,避免选择到冗余的parents。

其次,PhaseEvo为不同阶段设计了自适应的终止条件。原有的进化算法通常给每个阶段设置固定的迭代次数,但这忽略了不同算子的优化效率差异。PhaseEvo根据算子的特点,动态调整每个阶段的耐受度:

  • 对于Feedback和Semantic等局部算子,若连续k(默认为1)次迭代都不再改进,则终止该阶段;

  • 对于EDA和Crossover等全局算子,由于优化效率较低,即使连续若干次迭代都不再改进,也会给予更大的耐受度(如k=4)再做尝试。

这种自适应终止策略充分利用了高效算子的快速收敛能力,也给低效算子更多的探索机会,从而在优化效果和计算成本之间取得了良好的平衡。

2.4 算法复杂度分析

设为prompt语料库大小,为平均prompt长度,分别为全局和局部阶段的基因代数,则PhaseEvo的时间复杂度为,其中为涉及的下游任务数。与穷举搜索的指数级复杂度相比,PhaseEvo在大规模搜索空间上的伸缩性更好。

在空间复杂度上,PhaseEvo在整个优化过程中最多维护的内存消耗,远低于需要缓存所有中间结果的贪心搜索和beam search等方法。

实验结果表明,PhaseEvo在35个常见benchmark上平均只需12次迭代和4000次API调用(感觉有点昂贵啊!),就能达到超越现有最优方法20%的显著提升。这体现了PhaseEvo在计算效率和优化效果上的显著优势。

3 实验效果

为全面评估PhaseEvo的有效性,论文在35个常见benchmark上进行了大规模实验。这些数据集涵盖了Big Bench Hard(BBH)、NLP检测、指令理解等不同类型的任务。其中,BBH包含8个具有挑战性的推理数据集,每个数据集有50个训练样本、50个验证样本和125个测试样本。NLP检测任务包括Ethos、Liar和Sarcasm,分别取50/50/150个样本作为训练集/验证集/测试集。指令理解任务使用了24个多样化的数据集,每个任务从原有训练集中取50个样本作为验证集,保留原有测试集。所有任务的评估指标均基于测试集计算,包括准确率、F1值等。

3.1 对比方法

论文将PhaseEvo与6种最新的基于LLMs的prompt优化方法进行了比较,包括:

  • APE和APO:分别强调exploration和exploitation,前者采用迭代式的蒙特卡洛搜索,后者用错误示例作为梯度近似。

  • OPRO:作为一种meta-prompt方法,它利用LLMs对solution-score对和任务描述做进一步优化。

  • PromptBreeder和EvoPrompt:基于遗传算法,分别采用思维风格突变和差分进化作为搜索策略。

  • AELP:针对长prompt优化,它在句子级别做语义突变,搭配历史感知搜索。

所有实验中,这些方法使用相同数量的训练数据和API调用预算,以确保公平比较。

3.1.1 Big Bench Hard

表2展示了haseEvo与最优基线在8个有代表性的BBH任务上的性能对比。可以看到,PhaseEvo在大部分任务上都取得了显著的提升,平均超过AELP 46.0%、EvoPrompt 20.3%和OPRO 23.5%。这体现了PhaseEvo在复杂推理任务上的优越性。不过,PhaseEvo在个别任务如Disambiguation QA上的表现略逊于部分基线,这可能是由于其对歧义消解的建模能力有限。

此外,论文还比较了不同初始化方式的影响。如表2所示,使用人工示例初始化(PhaseEvo-example)在Dyck Languages、Logical Five等任务上优于从原始数据采样初始化(PhaseEvo-pair),这得益于额外的先验知识引入。但在Causal Judgment等任务上,PhaseEvo-pair却表现更优,这可能是因为过于特定的人工示例限制了探索的广度。总的来说,这两种初始化方式在不同场景下各有优劣,论文建议根据任务的先验知识可获得性进行选择。

3.1.2 NLP检测任务

表3比较了PhaseEvo与APO在3个检测任务上的性能。可以看到,在Ethos和Sarcasm等简单任务上,PhaseEvo(GPT-3.5)与APO的性能相当;但在更复杂的Liar任务上,PhaseEvo的提升幅度高达19.6%,这得益于其在指令和示例两个方面的联合优化。当使用更强大的GPT-4作为base model时,PhaseEvo的性能进一步提升,但与GPT-3.5版本的差距并不显著。这表明PhaseEvo在充分利用GPT-3.5的同时,也具备了一定的鲁棒性。

3.1.3 指令理解任务

论文表17展示了PhaseEvo生成的prompt与人工few-shot示例在24个指令任务上的性能对比。APE和PromptBreeder的zero-shot和few-shot结果作为参考。可以看到,PhaseEvo在大部分任务上都显著超过了人工示例,且在17个任务上超过APE few-shot、18个任务上超过PromptBreeder。这验证了PhaseEvo在巨大的探索空间内寻找最优prompt的能力。

有趣的是,通过定性分析PhaseEvo生成的prompt,论文发现其可解释性和连贯性都明显优于人工设计的示例。在Rhymes任务中,PhaseEvo不仅给出了易于理解的任务定义,还提供了丰富的正面和负面示例,以及写作建议。相比之下,人工示例和其他方法的prompt则显得不够清晰和完整。这说明PhaseEvo不仅在优化prompt的性能,也在优化其语义和结构。

3.2 效率比较

除了有效性,论文还评估了PhaseEvo的计算效率。图5比较了不同方法在优化过程中的API调用次数和迭代次数。可以看到,PhaseEvo在35个任务上平均只需12次迭代和4000次API调用,就达到了超越现有方法的性能,而其他基于进化算法的方法如PromptBreeder则需要数十万次API调用。这得益于PhaseEvo对探索和利用的平衡,以及对不同阶段的适应性控制。此外,PhaseEvo的计算开销与APO等基于梯度的方法具有可比性,这进一步凸显了其在效率和效果间的良好权衡。

从理论上看,设为prompt语料库规模,为平均长度,分别为全局和局部阶段的代数,则PhaseEvo的时间复杂度为,空间复杂度为,均显著优于穷举搜索等暴力方法。这表明PhaseEvo能够支持在百万级语料上的实时优化。

3.3 消融实验

为验证PhaseEvo的一些关键设计,论文做了多组消融实验。

首先,相比随机选择算子的传统进化策略,PhaseEvo的phase进化方式在4个具有代表性的任务上都取得了更高的性能,尤其是在优化后期阶段。这说明exploration和exploitation的有序织交对于最终的收敛质量至关重要。

其次,论文比较了不同相似度度量对EDA/Crossover算子的影响。使用performance vector+汉明距离在所有任务上都优于余弦相似度,平均提升1.23%。这验证了任务感知的相似度度量在选择互补parents时的优越性。

最后,展示了优化过程中prompt长度的动态变化。可以看到,在不同任务上,最优prompt长度呈现不同的变化模式,这体现了PhaseEvo对搜索空间的灵活适应能力。值得一提的是,在部分任务中,最终的prompt长度反而低于初始值,这挑战了"prompt engineering必然导致冗长"的传统观念。

综上所述,大规模实验表明,PhaseEvo在优化few-shot prompts的性能和效率上都达到了新的高度,这得益于其在全局探索和局部利用间的动态平衡,以及对探索过程的精细把控。相信这一全新的优化范式能为后续的prompting研究提供重要的参考和补充。

4 总结后记

本论文针对联合优化prompt指令和示例的问题,提出了一种名为PhaseEvo的迭代优化框架。通过在"全局探索"和"局部利用"间的动态平衡,以及对不同阶段的适应性控制,PhaseEvo在35个benchmark任务上实现了显著超越现有方法的性能,且在计算效率上也达到了新的高度。实验结果表明,PhaseEvo生成的prompt在可解释性和连贯性上也优于人工设计,为自动prompt优化开辟了新的范式。

疑惑和想法:

  1. PhaseEvo目前主要关注单任务prompt优化,如何扩展到多任务场景?是否可以引入任务间的知识迁移和few-shot泛化?

  2. 除了准确率等常见指标,如何评估优化后prompt的可解释性、稳健性和公平性?这些属性如何纳入优化目标?

  3. PhaseEvo的搜索空间目前局限于离散token序列,是否可以引入连续嵌入表示,实现更细粒度的优化?

可借鉴的方法点:

  1. "探索-利用"平衡的思想可以推广到其他需要在连续空间和离散空间混合搜索的优化问题,如神经架构搜索、强化学习等。

  2. 将LLM作为优化器参与问题求解的范式值得借鉴,可以利用LLM的先验知识指导优化过程,减少盲目搜索。

  3. 基于performance vector的个体表示方法可以应用到其他进化算法中,提高种群多样性和优化效率。

  4. 自适应阶段划分的思想可以用于控制其他迭代优化算法的收敛速度和资源分配,提高鲁棒性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/334778.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习300问】103、简单的经典卷积神经网络结构设计成什么样?以LeNet-5为例说明。

一个简单的经典CNN网络结构由:输入层、卷积层、池化层、全连接层和输出层,这五种神经网络层结构组成。它最最经典的实例是LeNet-5,它最早被设计用于手写数字识别任务,包含两个卷积层、两个池化层、几个全连接层,以及最…

【数据结构】AVL树——平衡二叉搜索树

个人主页:东洛的克莱斯韦克-CSDN博客 祝福语:愿你拥抱自由的风 目录 二叉搜索树 AVL树概述 平衡因子 旋转情况分类 左单旋 右单旋 左右双旋 右左双旋 AVL树节点设计 AVL树设计 详解单旋 左单旋 右单旋 详解双旋 左右双旋 平衡因子情况如…

宿舍管理系统代码详解(操作界面)

目录 一、前端代码 1.样式展示 2.代码详解 <1>主页面列表部分 &#xff08;1&#xff09;template部分 &#xff08;2&#xff09;script部分 <2>新增页面 &#xff08;1&#xff09;template部分 &#xff08;2&#xff09;script部分 <3>修改页面…

【头歌】计算机网络DHCP服务器配置第四关配置路由器子接口答案

头歌计算机网络DHCP服务器配置第四关配置路由器子接口操作步骤 任务描述 本关任务&#xff1a;配置路由器的子接口。 操作要求 在第一关的拓扑图的基础上&#xff0c;配置路由器及 PC 机&#xff0c;具体要求如下&#xff1a; 1、打开路由器物理接口 F0/0 &#xff1b; 2、配置…

设计模式——概述

1.设计模式定义 ​ 设计模式是软件设计中常见问题的典型解决方案,可用于解决代码中反复出现的设计问题。设计模式的出现可以让我们站在前人的肩膀上&#xff0c;通过一些成熟的设计方案来指导新项目的开发和设计&#xff0c;以便于我们开发出具有更好的灵活性和可扩展性&#…

港口与航运3D三维虚拟仿真展区让更多人了解到海洋知识

在短短20天内&#xff0c;搭建起200多家线上3D展厅&#xff0c;听起来似乎是一项艰巨的任务。然而&#xff0c;对于我们的3d云展平台而言&#xff0c;这早已成为常态。连续三年&#xff0c;我们已成功为众多会展公司在短时间内构建出几百家甚至上千家的线上3D展会&#xff0c;见…

通过date命令给日志文件添加日期

一、背景 服务的日志没有使用日志工具&#xff0c;每次重启后生成新日志文件名称相同&#xff0c;新日志将会把旧日志文件冲掉&#xff0c;旧日志无法保留。 为避免因旧日志丢失导致无法定位问题&#xff0c;所以需要保证每次生成的日志文件名称不同。 二、解决 在启动时&am…

使用uniapp编写的微信小程序进行分包

简介&#xff1a; 由于小程序发布的时候每个包最多只能放置2MB的东西&#xff0c;所以把所有的代码资源都放置在一个主包当中不显示&#xff0c;所以就需要进行合理分包&#xff0c;&#xff0c;但是分包后整个小程序最终不能超过20MB。 一般情况下&#xff0c;我习惯将tabba…

牛客NC362 字典序排列【中等 DFS Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/de49cf70277048518314fbdcaba9b42c 解题方法 DFS&#xff0c;剪枝Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回…

Go 错误日志处理

是不是所有的 if err ! nil 的地方都应该输出错误日志&#xff1f; 打印过多的错误日志会导致日志文件变得冗长和难以阅读。 其次&#xff0c;重复的错误信息会增加冗余。 此外&#xff0c;每一层都打印错误日志&#xff0c;一旦错误信息设计不当&#xff0c;可能会导致上下…

vite+js配置

vite js 配置路径 npm install types/node --save-dev vite.config.js import { defineConfig } from vite import vue from vitejs/plugin-vue //需要引入 import path from path// https://vitejs.dev/config/ export default defineConfig({plugins: [vue()],resolve: {a…

Java | Leetcode Java题解之第118题杨辉三角

题目&#xff1a; 题解&#xff1a; class Solution {public List<List<Integer>> generate(int numRows) {List<List<Integer>> ret new ArrayList<List<Integer>>();for (int i 0; i < numRows; i) {List<Integer> row new…

windows ollama 指定模型下载路径

为Ollama指定模型的下载路径 在Windows系统中&#xff0c;如果想为Ollama指定模型的下载路径&#xff0c;可以通过设置环境变量来实现。以下是详细的步骤&#xff1a; 确定默认下载路径&#xff1a; 默认情况下&#xff0c;Ollama的模型可能会下载到C:\Users\<用户名>…

中心入侵渗透

问题1. windows登录的明文密码&#xff0c;存储过程是怎么样的&#xff1f;密文存在哪个文件下&#xff1f;该文件是否可以打开&#xff0c;并且查看到密文&#xff1f; 回答&#xff1a; Windows登录的明文密码的存储过程是&#xff1a; 当用户尝试登录Windows时&#xff0…

VCRUNTIME140_1.dll丢失是怎么回事?vcruntime140_1.dll无法继续执行代码的处理方法

VCRUNTIME140_1.dll丢失是怎么回事&#xff1f;问出这样的问题的人&#xff0c;一般是遇到vcruntime140_1.dll无法继续执行代码的问题了&#xff0c;找不到VCRUNTIME140_1.dll文件&#xff0c;那么程序就肯定是启动不了的&#xff0c;程序的启动是需要VCRUNTIME140_1.dll文件的…

【Mybatis】映射文件中获取单个参数和多个参数的写法

xml的映射文件中获取接口方法中传来的参数是直接用#{}的方式来获取的 那么接下来&#xff0c;我们就具体来说一下获取参数里边的各种规则和用法 1.单个参数&#xff0c;比如上面的getOneUser&#xff0c;只有一个id值作为参数 Mybatis对于只有一个参数的情况下&#xff0c;不…

unity回到低版本报错解决

用高版本2022打开过后的再回到2020就报了一个错。 报错如下&#xff1a; Library\PackageCache\com.unity.ai.navigation1.1.5\Runtime\NavMeshSurface.cs 看了一下是Library&#xff0c;然后我删除了整个Library文件夹&#xff0c;重启启动生成Library&#xff0c;然后还是…

基于BP神经网络和小波变换特征提取的烟草香型分类算法matlab仿真,分为浓香型,清香型和中间香型

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...................................................................................... …

学至乎没而后止也

开场白 学至后没而后止也这个题目的原话来自与荀子《劝学》。大家知道什么意思吗&#xff1f;学习要学到你人没了&#xff0c;才算停止了。通俗点说就是只要没学死就往死里学&#xff0c;高雅点说就是要保持终身学习。 在以前说终身学习好像是一种良好习惯或品德&#xff0c;…

系统思考—决策

风险来自于你不知道你在做什么。——沃伦巴菲特 今天和一个合作伙伴的创始人交流&#xff0c;她提出了一个引人深思的问题&#xff1a;“策略性陪伴和战略复盘&#xff0c;什么原因不由客户自己来做&#xff1f;”这个问题让我深入思考了第三方策略性陪伴顾问的独特价值和重要…