文献阅读:Large Language Models as Optimizers

  • 文献阅读:Large Language Models as Optimizers
    • 1. 文章简介
    • 2. 方法介绍
      • 1. OPRO框架说明
      • 2. Demo验证
        • 1. 线性回归问题
        • 2. 旅行推销员问题(TSP问题)
      • 3. Prompt Optimizer
    • 3. 实验考察 & 结论
      • 1. 实验设置
      • 2. 基础实验结果
        • 1. GSM8K
        • 2. BBH
        • 3. 泛化性
      • 3. 消融实验
        • 1. meta-prompt
        • 2. 生成prompt的数目
        • 3. 起始点
        • 4. diversity
      • 4. 过拟合分析
      • 5. 与EvoPrompt的对比
    • 4. 总结 & 思考
  • 文献链接:https://arxiv.org/abs/2309.03409

1. 文章简介

这篇文章是Google在23年9月发表的一个工作,在这篇文章当中,他们提出了一个OPRO的框架,在这个框架当中,他们使用LLM来模拟模型训练当中的optimizer,然后通过迭代的方式不断地预设的NLP问题进行持续迭代,从而获得最优的问题回答。

基于这个框架,文中首先在两个简单的问题上做了可行性验证:

  1. 线性回归问题
  2. 旅行推销员问题(TSP问题)

这个框架天然地适用于prompt的优化问题,因为这同样是一个有明确定义的文本优化问题,因此文中使用这个框架同样进行了LLM的prompt优化,然后在GSM8K和BBH两个NLP数据集当中获得了SOTA的结果。

在这里插入图片描述

以下就是OPRO获得的GSM8K上面的prompt与其他当前使用的主流的prompt的一些对比示例:

在这里插入图片描述

下面,我们来看一下OPRO的具体设计以及文中给出的实验及其效果。

2. 方法介绍

1. OPRO框架说明

OPRO的全称为Optimization by PROmpting,具体来说就是使用LLM来作为optimizer来通过另外一个prompt来持续迭代优化输入的文本。

我们首先回想一下模型训练当中的Optimizer是怎么工作的,对于一般的training过程,就是通过输入的训练数据,计算出来一个loss,然后计算出梯度之后通过optimizer来反向更新模型当中的参数值。

文中的OPRO框架也基本就是这么个思路,给出一段文本,然后计算出这段文本的score,然后通过一个meta prompt交给LLM来迭代优化这段文本,直到计算出来的score达到一个最大值。

我们给出文中的OPRO框架的整体示意图如下:

在这里插入图片描述

2. Demo验证

下面,我们来通过两个具体的case来说明一下OPRO框架的具体运行方式。

1. 线性回归问题

首先,文中在线性回归问题当中进行了一下考察,具体来说,就是用下述公式生成50个点:

y = k x + b + ϵ y = kx + b + \epsilon y=kx+b+ϵ

然后让OPRO进行 ( k , b ) (k, b) (k,b)的学习。

给出这个问题的meta prompt如下:

在这里插入图片描述

得到结果如下:

在这里插入图片描述

可以看到:

  • OPRO框架确实可以来拟合学习 ( k , b ) (k, b) (k,b)的值,且GPT4的效果优于其他模型。
2. 旅行推销员问题(TSP问题)

然后,文中还考察TSP问题,具体来说,就是给定一些点和边,求遍历所有点所需经过的边的权重总和最小值。

同样的,给出文中对于这个问题的meta prompt如下:

在这里插入图片描述

对应的实验结果如下:

在这里插入图片描述

可以看到:

  • OPRO同样可以一定程度上解决掉TSP问题,且GPT4模型效果优于其他模型。

3. Prompt Optimizer

有了上面的基础,我们来看一下如何使用OPRO框架来优化prompt,同样的,我们就是给出一个prompt,然后通过几个case考察以下这个prompt的效果,然后给出一个score,然后让LLM重新基于之前的一系列prompt以及其对应的打分score,去尝试迭代优化下一个版本的prompt。

给出文中在GSM8K下的prompt迭代优化的meta prompt的示例如下:

在这里插入图片描述

可以看到,整体上这个meta prompt就是包含了几个部分:

  1. prompt examples & scores
    • 过去给出prompt以及对应的打分结果
  2. problem examples
    • 一些具体的case以及给出prompt然后给出的答案
  3. instruction
    • instruction to optimize prompt

然后就是整体上不断地加入case进行迭代优化,直至获得最优的prompt内容即可。

下面,我们来看一下文中关于OPRO对prompt优化的实验结果。

3. 实验考察 & 结论

1. 实验设置

首先,我们来看一下文中给出的OPRO优化的prompt的实验设置。

在模型方面,文中使用的prompt优化模型和打分模型分别如下:

  1. Optimizer:
    • Pre-trained PaLM 2-L
    • instruction-tuned PaLM 2-L
    • text-bison
    • gpt-3.5-turbo
    • gpt-4
  2. Scorer:
    • Pre-trained PaLM 2-L
    • text-bison

而实验使用的测试数据方面,则主要为:

  1. GSM8K
  2. BBH

2. 基础实验结果

1. GSM8K

下面,我们首先来看一下文中给出的GSM8K上的实验结果如下:

在这里插入图片描述

可以看到:

  • 随着迭代的深入,prompt的效果确实可以得到持续地优化。

文中还给出了OPRO优化得到的GSM8K上的prompt示例如下:

在这里插入图片描述

2. BBH

下面,我们来看一下文中在BBH数据集上的实验结果。

在这里插入图片描述

可以看到,以"Let’s think step by step"作为baseline,OPRO获得的prompt在BBH数据集的各个子任务下基本都有明显的accuracy的提升。

另外,文中同样给出了accuracy与迭代的关系示意图:

在这里插入图片描述

可以看到,随着迭代的增加,prompt的效果确实是越来越好的。

最后,文中同样给出了一些BBH数据集下的OPRO的prompt例子如下:

在这里插入图片描述

3. 泛化性

除了上述两个数据集下的基础实验之外,文中还考察了一下OPRO生成的prompt的泛化能力,具体来说,就是使用在BBH上优化得到的prompt在其他数据集上测试效果,得到结果如下:

在这里插入图片描述

可以看到:

  • 在GSM8K上迭代得到的prompt在Multi-Arith以及AQuA数据集上同样有着优秀的效果。

3. 消融实验

下面,我们来看一下文中给出的消融实验的实验结果。

文中主要考察了以下几个部分的消融实验:

  1. meta-prompt的设计
  2. 每一步生成的prompt的数目
  3. 起始点
  4. Diversity per step

下面,我们具体来看一下各个部分对结果的影响。

1. meta-prompt

关于具体的meta prompt的设计方面,文中又细化到了以下三个部分的影响:

  • 输入之前prompt的顺序
  • scores
  • exampler的作用

得到实验结果如下:

在这里插入图片描述

可以看到:

  • 迭代中prompt历史的给出顺序最好是按照递增顺序给入,可以使模型得到最好的学习优化;
  • 评估时使用buckets越多,模型训练的效果往往越好;
  • 一定的examplar有利于模型的学习,但是过多的examplar会导致模型效果下滑,可能是由于prompt的混淆。
2. 生成prompt的数目

其次,我们考察一下文中对于单次迭代中生成的prompt数目的考察,类比到ML当中,可以视作learning rate的选择。

给出文中的实验结果如下:

在这里插入图片描述

可以看到:

  • 同样的,一定程度上增加生成数目有利于模型的学习,但也不是越大越好,文中给出的建议值是一轮生成8个prompt。
3. 起始点

然后,文中还考察了一下起始点对OPRO效果的影响,即最开始的prompt设置对效果的影响。

给出文中的实验结果如下:

在这里插入图片描述

可以看到:

  • 不同的起始点对于OPRO最终的收敛效果并不会有太大的影响。
4. diversity

最后,文中还考察一下迭代中diversity对迭代效果的影响。

具体来说,就是在生成中temperature参数对实验效果的影响,即调整生成过程中的随机性,看生成效果的影响,得到结果如下:

在这里插入图片描述

可以看到,这里也存在一个trade-off,当temperature取1.0时,可以获得一个最优的效果。

4. 过拟合分析

此外,由于文中将LLM视为一个optimizer进行prompt的优化,那么自然也可能会出现过拟合的现象,因此文中也对过拟合进行了一下考察,得到结果如下:

在这里插入图片描述

可以看到,在文中的两个case当中,过拟合现象并不明显,但是文中提到,确实存在一些case可能会有过拟合现象的发生,因此可以的话最好还是设置一下early stop机制比较好。

5. 与EvoPrompt的对比

最后,文中还和当前其他的一些类似工作进行了比较(EvoPrompt),得到结果如下:

在这里插入图片描述

可以发现:

  • OPRO的效果是明显优于EvoPrompt的。

4. 总结 & 思考

综上,文中给出了一个新的Prompt的调优方式,即将LLM视为一个optimizer来通过反向传播迭代的方式来自行优化prompt的方法。

坦率地说,还是比较巧妙的,感觉后面可以试试,或许真能获得一些惊喜也说不定,就是迭代成本文中没提,可能不太好搞,但是即便不好搞,直接使用文中给出的这个"Take a Deep Breath"或许也能获得一些意外的惊喜,毕竟按文中的意思,他们调出来的prompt是具有一定的泛化能力的。

不过还是得说,我是真的不喜欢prompt tuning啊,唉,不知道是不是只有我一个人这么想……

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux建立基本网站

网站需求: 1.基于域名[www.openlab.com]可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站,基于[www.openlab.com/student] 网站访问学生信息 [www.openlab.com/data]网站访问教学资…

微机原理常考填空以及注意事项

以下: 1,两条高位地址线未参加地址译码,则对应的地址范围它的容量是多少倍? 答:公式CPU的地址线(假设16位)(它的低位地址线一般进入片内A0~A10,高位A11就是A、A12就是B、…

微信小程序(一)简单的结构及样式演示

注释很详细&#xff0c;直接上代码 涉及内容&#xff1a; view和text标签的使用类的使用flex布局水平方向上均匀分布子元素垂直居中对齐子元素字体大小文字颜色底部边框的宽和颜色 源码&#xff1a; index.wxml <view class"navs"><text class"active…

任务7:安装MySQL数据库

任务描述 知识点&#xff1a; MySQL数据库安装与使用 重 点&#xff1a; 基于CentOS系统&#xff0c;安装MySQL数据库 内 容&#xff1a; 安装MySQL数据库修改root用户密码 任务指导 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c…

【汽车销售数据】2015~2023年各厂商各车型的探索 数据分析可视化

数据处理的思路&#xff1a; 1 各表使用情况&#xff1a; 汽车分厂商每月销售表&#xff0c;该表主要分析展示top10销量的厂商销量、占比变化情况&#xff08;柱形图、饼图&#xff09;&#xff1b;中国汽车分车型每月销售量表&#xff0c;该表主要分析展示top20销量的车型销…

UML-顺序图

提示&#xff1a;用例图从参与者的角度出发&#xff0c;描述了系统的需求&#xff08;用例图&#xff09;&#xff1b;静态图定义系统中的类和对象间的静态关系&#xff08;类图、对象图和包图&#xff09;&#xff1b;状态机模型描述系统元素的行为和状态变化流程&#xff08;…

计算机体系结构基础复习

1. 计算机系统可划分为哪几个层次,各层次之间的界面是什么? 你认为这样划分层次的意义何在? 答&#xff1a; 计算机系统可划分为四个层次&#xff0c;分别是&#xff1a;应用程序、 操作系统、 硬件系统、 晶体管四个大的层次。 注意把这四个层次联系起来的三个界面。各层次…

css 怎么绘制一个带圆角的渐变色的边框

1&#xff0c;可以写两个样式最外面的div设置一个渐变的背景色。里面的元素使用纯色。但是宽高要比外面元素的小。可以利用里面的元素设置padding这样挡住部分渐变色。漏出来的渐变色就像边框一样。 <div class"cover-wrapper"> <div class"item-cover…

春节回家前,请一定给你的电脑装上KKView远程控制软件

马上春节了&#xff0c;电脑不能带回家&#xff0c;有时候要处理点意外的事情&#xff0c;怎么办&#xff1f;只要走之前&#xff0c;给你电脑装上KKView远程控制软件&#xff0c;就可以随时随地用手机或电脑控制你的工作电脑&#xff0c;远程办公、传文件、看摄像头都没问题。…

人脸识别为何老是不过?是什么原因导致的?

人脸识别可能无法通过的原因有很多&#xff0c;以下是可能的一些原因&#xff1a; 1. 非常规面部表情&#xff1a;如果你做出了与常规面部表情不同的表情&#xff0c;如张大嘴巴或瞪大眼睛等&#xff0c;可能会干扰人脸识别系统的准确性。 2. 光线条件&#xff1a;人脸识别系统…

30 3D导航栏

效果演示 实现了一个导航栏&#xff0c;其中包含了五个图标&#xff0c;每个图标都有一个悬浮的文字标签&#xff0c;当鼠标悬停在图标上时&#xff0c;文字标签会旋转并向上移动&#xff0c;同时底部会出现一个阴影效果。整个导航栏的背景颜色为浅灰色。 Code <ul><…

js(JavaScript)数据结构之堆(Heap)

什么是数据结构&#xff1f; 下面是维基百科的解释&#xff1a; 数据结构是计算机存储、组织数据的方式。数据结构意味着接口或封装&#xff1a;一个数据结构可被视为两个函数之间的接口&#xff0c;或者是由数据类型联合组成的存储内容的访问方法封装。 我们每天的编码中都会…

docker安装部署Elasticsearch(ES)以及相关配置

Elasticsearch简介 mysql用作持久化存储&#xff0c;ES用作检索 基本概念&#xff1a;index库>type表>document文档 index索引&#xff08;相当于MySQL的数据库&#xff09; 动词&#xff1a;相当于mysql的insert 名词&#xff1a;相当于mysql的db Type类型&#xff…

Spring Cloud整体架构解析

Spring Cloud整体架构 本文已收录至我的个人网站&#xff1a;程序员波特&#xff0c;主要记录Java相关技术系列教程&#xff0c;共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源&#xff0c;让想要学习的你&#xff0c;不再迷茫。 Spring Cloud的中文名我们就…

Flask架构--路由和蓝图

学习视频&#xff1a;第二章&#xff1a;路由和蓝图 1 Flask查询路由的方式_哔哩哔哩_bilibili 参考&#xff1a;Flask框架之路由与蓝图的使用_flask 路由和蓝图-CSDN博客 1.路由的概念&#xff1a; 用于将http请求与特定的python函数相匹配。定义路由后&#xff0c;flask程…

电子学会C/C++编程等级考试2023年09月(六级)真题解析

C/C++编程(1~8级)全部真题・点这里 第1题:生日相同 在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。 时间限制:1000 内存限制:65536 输入 第一行为整数n,表示有n个学生,n ≤ 180。此后每行包含一…

利用XSS漏洞打cookie

目录 1、为什么要打cookie&#xff1f; 2、怎样利用XSS来打cookie&#xff1f; 3、利用Bluelotus_xssReceiver平台来打cookie 4、利用beef-xss平台来打cookie 上一篇给大家介绍了xss漏洞的基础知识&#xff0c;在本篇章将会介绍和演示一下利用xss漏洞打cookie的演示&#x…

【用法总结】LiveData组件要点

1、如何实现和生命周期的关联&#xff1f; 调用observe()方法时&#xff0c;第一个参数传入LifecycleOwner对象&#xff0c;而LifecycleOwner能通过getLifecycle()方法获取到lifecycle对象&#xff0c;然后执行lifecycle.addObserver()添加LiveData中数据&#xff08;mData&am…

1116: 删除元素(数组)

题目描述 输入一个递增有序的整型数组A有n个元素&#xff0c;删除下标为i的元素&#xff0c;使其仍保持连续有序。注意&#xff0c;有效下标从0开始。 定义如下两个函数分别实现删除元素操作和数组输出操作。 void del(int a[], int n, int i); /*删除数组a中下标为i的元素*…

Matlab怎样合并两个矩阵(怎样合并多个矩阵)为一个矩阵

1.合并两个矩阵 a [1 2 3;4 5 6] b [7 8 9;1 2 3] c [a,b] %按行&#xff08;横向&#xff09;合并 c [a;b] %按列&#xff08;纵向&#xff09;合并 2.合并多个矩阵 clc clear temp dir([D:\文件夹\,*.txt]); N length(temp);for i 1:N %先读取文件内所有文件 …