语言模型微调:提升语言Agent性能的新方向

 人工智能咨询培训老师叶梓 转载标明出处

大多数语言Agent依赖于少量样本提示技术(few-shot prompting)和现成的语言模型。这些模型在作为Agent使用时,如生成动作或自我评估,通常表现不佳,且鲁棒性差。

论文《FIREACT: TOWARD LANGUAGE AGENT FINE-TUNING》中主张为了提高语言Agent的性能,应当对语言模型进行微调(fine-tuning),而不是仅仅依赖于少量样本提示。论文提出了FireAct方法,它通过从多个任务和提示方法中生成的轨迹来微调语言模型。这些轨迹被统一在ReAct格式下,以便于微调过程。

方法

FireAct方法是一种针对语言Agent进行微调的新方法。FireAct方法的核心思想是通过将多种任务和提示方法生成的多样化ReAct轨迹用于微调较小的语言模型(LM),以此来提高语言代理的性能和鲁棒性。

如图5所示,由多个“思考-行动-观察”循环构成。在此过程中,语言模型(LM)会生成自由形式的“思考”,以完成多种任务,例如从观察中提取信息、提出和调整行动计划、追踪任务进度。同时,模型会执行结构化的“行动”,与环境(工具)进行互动,并接收“观察”反馈。ReAct方法通过推理指导行动,行动支持推理,从而超越了单一推理或行动的基线方法。

FireAct方法借鉴了ReAct的轨迹生成方式,利用少量样本提示一个强大的LM来产生多样化的ReAct轨迹,用于微调一个较小的LM。与之前的工作不同,FireAct明确地通过结合多个训练任务和提示方法来促进数据多样性。

图2展示了 FireAct 方法的两个阶段:微调阶段和推理阶段。

(a) 微调阶段: 在微调过程中,一个大型语言模型(例如,GPT-4)根据不同数据集的问题和不同方法的提示生成任务解决轨迹。然后,成功的轨迹被转换成ReAct格式,用于微调一个较小的语言模型。这个过程利用了大型模型的生成能力来创建多样化的训练数据,这些数据随后被用来训练和优化一个更小、更高效的模型。

(b) 推理阶段: 在推理阶段,微调后的模型可以不依赖于少量样本提示(few-shot prompting)独立运作。它能够隐式地选择一个合适的提示方法来完成具有灵活长度的ReAct轨迹,以适应不同复杂性的问题。例如,对于一个简单的问题,可能只需要一个思考-行动-观察循环就能解决,而无需使用任何工具。这展示了微调模型在处理问题时的灵活性和自适应性,能够根据问题的具体情况选择最合适的解决策略。

CoT方法通过生成中间推理来连接问题与答案之间的差距。每个CoT轨迹可以转换为一个简单的一轮ReAct轨迹,其中“思考”是中间推理,“行动”则是返回答案。CoT对于不需要工具的简单问题特别有用,如图2(b)所示。

Reflexion方法在遵循ReAct轨迹的同时,还加入了额外的反馈和自我反思。在本项工作中,研究者在第6和第10个ReAct轮次提示进行反思,以便在解决当前任务时能够调整策略,例如“电影搜索至今无帮助,我现在应该搜索导演”。

在推理过程中,FireAct代理减少了对少量样本提示的需求,这使得推理过程更加高效和方便。FireAct代理还能够根据任务的复杂性隐式选择适合的方法,并显示出比提示更强的泛化和鲁棒性,这是由于它通过更广泛的多样化学习支持获得的。

通过这种方法,FireAct不仅提升了语言Agent的灵活性和效率,还通过多样化的微调数据增强了Agent对各种任务的适应能力和鲁棒性。这种综合性的方法为未来语言Agent的发展和应用提供了新的可能性。

想要掌握如何将大模型的力量发挥到极致吗?2024年10月26日叶老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具。

留言“参加”即可来叶老师的直播间互动,1小时讲解让您轻松上手,学习如何使用 Llama Factory 微调模型。互动交流,畅谈工作中遇到的实际问题。

实验

研究者选择了四个成熟的QA数据集进行训练和测试:

  • HotpotQA:一个挑战多步推理和知识检索的数据集,答案通常是短实体或yes/no。
  • Bamboogle:一个包含125个多跳问题的测试集,这些问题的格式与HotpotQA相似,但精心设计以避免直接通过谷歌搜索解决。
  • StrategyQA:一个需要隐式推理步骤的yes/no QA数据集。
  • MMLU:涵盖57个多选QA任务,涉及小学数学、历史和计算机科学等多个领域。

为了构建一个谷歌搜索工具,研究者使用了SerpAPI,这个工具返回“答案框”、“答案片段”、“高亮词”或“第一个结果片段”中的第一个存在项,确保响应简短且相关。

研究者调查了三个系列的语言模型:

  • OpenAI GPT:使用GPT-4生成所有微调数据,并使用GPT-3.5进行微调和提示。
  • Llama-2:在“聊天”模式下具有7B和13B参数。
  • CodeLlama:在“指导”模式下具有7B、13B和34B参数,有助于进一步理解模型规模和代码微调对于Agent任务的重要性。

微调方法主要使用低秩适应(LoRA)进行微调实验,但也进行了全模型微调以进行比较。

实验被分为三个部分,复杂性逐渐增加:

  1. 使用单一提示方法对单一任务进行微调。
  2. 使用多种方法对单一任务进行微调。
  3. 使用多种方法对多个任务进行微调。

单一任务、单一方法微调

简单且受控的设置能够确认微调相对于提示的各种好处(性能、效率、鲁棒性、泛化能力),并研究不同LMs、数据规模和微调方法的效果。

表1 展示了提示结果,其中GPT-4和GPT-3.5在不同提示方法下的性能表现不同。

表2 显示了提示与微调的对比,包括绝对和相对提升。微调显著提高了Agent的性能,即使是强大的LMs,如GPT-3.5,性能也提高了25%。另外CodeLlama-7B的表现优于Llama-2-7B,而CodeLlama-13B的表现不如Llama-2-13B,这表明编码微调并不总是对Agent用例有益。

微调的Agent在推理期间更便宜、更快。因为微调的LMs不需要少量样本的上下文示例,它们的推理变得更高效。

研究者考虑了语言Agent与不总是可信的工具或环境交互时的鲁棒性。例如,搜索API有0.5的概率返回“无”或随机搜索响应,研究者询问语言Agent是否仍能稳健回答问题。

表3 比较了微调与提示的GPT-3.5在成本、鲁棒性和泛化方面的性能。微调的Agent在面对“无”或随机搜索响应时,能够更稳健地回答问题。

对于Llama-2-7B,全模型微调(30.2 EM)比LoRA微调(26.2 EM)高出15.3%。

图3显示了FireAct性能如何随着微调轨迹数量的增加而扩展。GPT-3.5表现出非常高的样本效率,只需要100个样本就能达到大约35的EM,而且200个样本之后的增益是边际的。

多方法微调

研究者探讨了将CoT(Chain of Thought)和Reflexion与ReAct结合进行多方法微调的效果。他们通过GPT-4生成了500个少量样本提示轨迹,并使用了47个包含自我反思的长Reflexion轨迹,以及187个成功的CoT轨迹,这些CoT轨迹被重新格式化为单轮ReAct轨迹,并添加到现有的500个ReAct轨迹之上。

研究者通过图5(前面)中的两个示例问题展示了多方法FireAct微调的好处。对于第一个问题(a),仅使用ReAct微调的Agent(a1)搜索了一个过于复杂的查询,导致分心和错误答案。相比之下,同时使用CoT和ReAct微调的Agent选择在一轮内解决问题,依靠自信的内部知识。对于第二个问题(b),仅使用ReAct微调的Agent(b1)不断搜索没有有用信息的查询。相比之下,同时使用Reflexion和ReAct微调的Agent反思了这个问题,并调整了搜索策略,将时间限制改为“在他的统治期间”,从而得出正确答案。这种根据不同问题隐式选择合适的方法的灵活性是微调相对于提示的另一个关键优势。

尽管直观上有益,图4显示混合更多方法并不总是提高结果,最佳方法组合取决于基础LM。例如,对于GPT-3.5和Llama-2模型,ReAct+CoT优于ReAct,但对CodeLlama模型则不利。ReAct+CoT+Reflexion对于CodeLlama7/13B是最差的,但对于CodeLlama-34B是最好的。这些非平凡的结果需要进一步研究基础LMs和微调数据之间的交互。

表4显示了基于GPT-3.5的各种FireActAgent在HotpotQA测试结果,以及它们轨迹中ReAct轮数的平均值(µ)和标准差(σ)。与仅使用ReAct微调相比,ReAct+CoT提高了EM并减少了轨迹长度,而ReAct+Reflexion降低了EM并增加了轨迹长度。这表明两种方法组合将方法选择推向了两个不同的方向,CoT可能对HotpotQA问题更有帮助。为了更好地理解多方法Agent是否能够选择合适的方法,研究者计算了在推理过程中随机选择方法的结果。结果是32.4,远低于所有多方法Agent,表明方法选择并非微不足道。但是,为每个实例应用最佳方法将导致“预言者”结果为52.0,这表明改进提示方法选择还有空间。未来的工作可以探索更系统的网格搜索或轨迹统计与性能之间的联系,以建立更好的方法混合比例。

多任务微调

研究者扩展了他们的实验,不仅使用HotpotQA数据进行微调,而是使用了三个数据集的混合训练数据:HotpotQA、StrategyQA和MMLU。这些样本来自通过GPT-4生成的成功ReAct/CoT少量样本提示轨迹。

表5 显示,当添加StrategyQA/MMLU数据(“多任务”)时,HotpotQA/Bamboogle的性能几乎保持不变。一方面,StrategyQA/MMLU轨迹包含非常不同的问题(例如,MMLU问题为多项选择)和工具使用策略(例如,MMLU ReAct轨迹倾向于搜索答案选择),这使得转移变得困难。另一方面,尽管分布发生了变化,添加StrategyQA/MMLU并没有损害HotpotQA/Bamboogle的性能,这暗示了微调一个多任务Agent来替代多个单任务Agent的前景,而不必担心跨任务的负面影响。

当从多任务、单一方法微调切换到多任务、多方法微调时,研究者发现所有任务的性能都有所提高,再次强化了多方法Agent微调的价值。有趣的是,所有微调Agent(加上CoT/ReAct提示)在MMLU上的表现都不如简单的输入输出(IO)提示。可能的解释是这些问题可能太简单,不需要推理和行动,另一种解释可能是答案选择记忆。

尽管这项研究为语言Agent的微调提供了初步的见解和方法,但仍有许多未解决的问题和潜在的研究方向,包括将这些方法扩展到更广泛的任务和环境,以及探索更复杂的Agent系统设计。未来的研究将继续推动这一领域的发展,以实现更智能、更可靠的语言Agent。

论文链接:https://arxiv.org/abs/2310.05915

代码链接:FireAct: Toward Language Agent Fine-tuning

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

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

相关文章

随机抽取学号

idea 配置 抽学号 浏览器 提交一个100 以内的整数。,后端接受后,根据提供的整数,产生 100 以内的 随机数,返回给浏览器? 前端:提供 随机数范围 ,病发送请求后端:处理随机数的产生&…

学习记录:js算法(七十四):跳跃游戏II

文章目录 跳跃游戏II思路一:贪心算法思路二:动态规划思路三:广度优先搜索 (BFS)思路四:深度优先搜索 (DFS) 跳跃游戏II 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的…

python表格处理prettytable vs pandas

prettytable和pandas简介 Python中prettyTable和pandas都是用于处理和展示数据的工具,但它们在设计目标、功能和使用场景上有显著的不同。 PrettyTable是一个轻量级的库,主要用于创建美观的ASCII表格,让表格数据在命令行或文本界面中看起来更…

【电机应用】变频器控制——变频水泵、变频空调

【电机应用】变频器控制——变频水泵、变频空调 文章目录 [TOC](文章目录) 前言一、变频器1、变频器的组成2、变频器的工作原理3、变频器常用算法 二、变频器的应用场景1、变频水泵2、变频空调 三、参考文献总结 前言 使用工具: 提示:以下是本篇文章正文…

QHeaderView添加复选框以及样式

实现这个效果,需要重写paintSection来实现效果,同时重写mousePressEvent来执行是否勾选复选框。 paintSection实现一些复选框样式 void CheckBoxHeaderView::paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const {if (m_…

Android 原生开发与Harmony原生开发浅析

Android系统 基于Linux ,架构如下 底层 (Linux )> Native ( C层) > FrameWork层 (SystemService) > 系统应用 (闹钟/日历等) 从Android发版1.0开始到现在15,经历了大大小小的变革 从Android6.0以下是个分水岭,6.0之前权限都是直接卸载Manifest中配置 6.0开始 则分普…

Matlab|基于氢储能的热电联供型微电网优化调度方法

目录 1 主要内容 模型求解流程 2 部分程序 3 程序结果 日前调度 日内调度 4 下载链接 1 主要内容 该程序复现《基于氢储能的热电联供型微电网优化调度方法》,针对质子交换膜燃料电池和电解槽的热电联供特性,为避免氢能系统的热能浪费并进一步提高…

k8s 综合项目笔记

综述 这篇笔记主要是为了记录下自己写 k8s 综合项目的过程。 由于自己之前已经写过简单的开发和运维项目,所以这里就结合一下,在搭建 k8s 集群后安装运维常用服务,比如 ansible 和 prometheus,用 NFS 实现数据存储同步&#xff0c…

Windwos下Docker下载安装centos7.6

操作步骤: 1.打开docker软件进入到DockerHub页面搜索contos镜像 2.在终端通过命令获取镜像并创建容器运行 docker run -itd --name test_centos7.6 centos:7.6.1810 test_centos7.6表示容器的名称 centos:7.6.1810表示镜像的名称,如果镜像不存在会默认拉…

k8s 部署 emqx

安装cert-manager 使用Helm安装 helm repo add jetstack https://charts.jetstack.io helm repo update helm upgrade --install cert-manager jetstack/cert-manager \--namespace cert-manager \--create-namespace \--set installCRDstrue如果通过helm命令安装失败&#x…

网络层知识点总结4

目录 前言 一、什么是NAT?什么是NAPT?NAT的优点和缺点有哪些?NAPT有哪些特点? 二、建议IPv6协议没有首部检验和。这样做的优缺点是什么? 三、当使用IPv6时,协议ARP是否需要改变?如果需要改变…

线性可分支持向量机代码 举例说明 具体的变量数值变化

### 实现线性可分支持向量机 ### 硬间隔最大化策略 class Hard_Margin_SVM:### 线性可分支持向量机拟合方法def fit(self, X, y):# 训练样本数和特征数m, n X.shape# 初始化二次规划相关变量:P/q/G/hself.P matrix(np.identity(n 1, dtypenp.float))self.q matr…

ArcGIS计算多个面要素范围内栅格数据各数值的面积

本文介绍在ArcMap软件中,基于面积制表工具(也就是Tabulate Area工具),基于1个面要素数据集与1个栅格数据,计算每一个面要素中各栅格数据分布面积的方法。 首先,来看一下本文的需求。现有一个矢量面的要素集…

Springboot整合原生ES依赖

前言 Springboot整合依赖大概有三种方式: es原生依赖:elasticsearch-rest-high-level-clientSpring Data ElasticsearchEasy-es 三者的区别 1. Elasticsearch Rest High Level Client 简介: 这是官方提供的 Elasticsearch 客户端,支持…

小问题解决方法汇总(2024.10.24水个勋章)

问题1:”因为在系统上禁止运行脚本“ 我们在使用命令行时经常遇到类似文章这样的提示,或者是如下截图中显示的那样: 仅需要在“管理员权限下的Powershell”中输入下面的命令即可解决: set-ExecutionPolicy RemoteSigned 输入命…

【数据分享】全国科技-产品质量国家监督抽查(1995-2021年)

数据介绍 一级标题指标名称单位科技国家监督抽查产品种类种科技国家监督抽查食品种类种科技国家监督抽查日用消费品种类种科技国家监督抽查建筑与装饰装修材料种类种科技国家监督抽查农业生产资料种类种科技国家监督抽查工业生产资料种类种科技国家监督抽查企业家科技国家监督抽…

Dns_在Ubuntu和Centos上安装并配置Dns服务器

Dns_在Ubuntu和Centos上安装并配置Dns服务器 一、Ubuntu上安装Dns1.安装 BIND92.配置 DNS 服务器3.配置防火墙(如果启用 UFW)4.在客户端使用 DNS 服务器5.测试 DNS 服务器6.常见问题及解决方案 二、Centos上安装Dns 以下记录在Ubuntu和Centos系统上安装D…

软工毕设开题建议

文章目录 🚩 1 前言1.1 选题注意事项1.1.1 难度怎么把控?1.1.2 题目名称怎么取? 1.2 开题选题推荐1.2.1 起因1.2.2 核心- 如何避坑(重中之重)1.2.3 怎么办呢? 🚩2 选题概览🚩 3 项目概览题目1 : 深度学习社…

一文讲明白大模型分布式逻辑(从GPU通信原语到Megatron、Deepspeed)

1. 背景介绍 如果你拿到了两台8卡A100的机器(做梦),你的导师让你学习部署并且训练不同尺寸的大模型,并且写一个说明文档。你意识到,你最需要学习的就是关于分布式训练的知识,因为你可是第一次接触这么多卡…

聚合值和非聚合值比较【SQL】

文章目录 聚合值和非聚合值比较背景可以在HAVING中使用的聚合条件如何实现与非聚合值的比较与非聚合值的特殊比较 聚合值和非聚合值比较 背景 在数据库中,聚合值和非聚合值通常不直接比较,因为它们的上下文和用途不同。聚合值是通过聚合函数计算出来的…