大模型从失败中学习 —— 微调大模型以提升Agent性能

news2024/12/25 1:30:47

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

以往的研究在微调LLMs作为Agent时,通常只使用成功的交互轨迹,而丢弃了未完成任务的轨迹。这不仅造成了数据和资源的浪费,也可能限制了微调过程中可能的优化路径。论文《Learning From Failure: Integrating Negative Examples when Fine-tuning Large Language Models as Agents》提出了负面感知训练(Negative-Aware Training, NAT)方法,通过适当的数据清洗和微调策略,使大模型能够从失败中学习,旨在提高模型在数学推理、多跳问答和策略性问答任务中的性能。

方法

图1为先前的方法和作者的NAT范式。在数据收集阶段,收集了LLMs与环境(工具)之间的交互。在数据处理阶段,先前的方法简单地过滤掉负面样本,而NAT通过在任务查询中添加提示来重新格式化轨迹,根据它们是正面还是负面。图1(c)给出了重格式化的正面和负面轨迹的示例。这里省略了系统提示,以简化说明。

如图1所示,Agent框架中任务解决过程被详细划分。首先,LLM被提供了一个系统提示,概述了(a)要解决的具体任务(例如,“解决一个数学问题”),(b)任务执行允许使用的工具,以及(c)预期的动作空间和输出格式(例如,finish[N]表示N是最终答案)。其次,引入一个查询实例。以ReAct格式提示模型回答查询,包括推理文本(称为“thoughts”)和“actions”。最后,在互动阶段,系统使用预定义的工具执行LLM生成的动作,将结果观察返回给LLM,并提示后续动作,直到生成任务的完成动作,或交互轮次超过预定义阈值。

对于数学任务,作者设计了一个由SymPy实现的计算器,它接受数学表达式作为输入并输出结果。对于两个问答任务,作者设计了一个搜索工具,使用Serper 2 API。它接受搜索查询作为输入并返回谷歌搜索结果。他们进一步使用MPNet和DPR对搜索结果进行重新排名。

负面感知训练范式的流程包括数据收集、数据清洗、负面感知重格式化和微调四个阶段。其中负面感知重格式化是范式的核心部分,使Agent调整得更好。

  • 数据收集:对于每个任务,获得初始问题和相应的真实答案作为种子数据。然后使用GPT-3.5生成三次轨迹,每次使用不同的温度(0.2、0.5和0.7)。这能够收集多样化的正面和负面样本。通过比较预测答案和真实答案,可以将每个轨迹标记为正面或负面。

  • 负面感知重格式化:在Agent调整过程中区分正面样本和负面样本有助于教模型辨别成功和不成功的结果。附加一个字符串后缀,告诉模型训练样本是正面还是负面。对于正面样本,附加“Please generate a solution that correctly answers the question.” 对于负面样本,附加“Please generate a solution that incorrectly answers the question。”

  • 微调和推理:使用重格式化后的轨迹对LLMs进行微调。损失只计算LLM生成的文本部分,这与微调聊天模型类似。在推理过程中,只使用正面样本的提示来提示微调后的Agent。

表格1展示了作者的方法与其他论文方法的比较。通过这些结果,可以看出NAT方法在不同任务上相较于其他方法有显著的性能提升。

想要掌握如何将大模型的力量发挥到极致吗?叶老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具。9月22日晚,实战专家1小时讲解让您轻松上手,学习如何使用 Llama Factory 微调模型。

加下方微信或评论留言,即可参加线上直播分享,叶老师亲自指导,互动沟通,全面掌握Llama Factory。关注享粉丝福利,限时免费录播讲解。

LLaMA Factory 支持多种预训练模型和微调算法。它提供灵活的运算精度和优化算法选择,以及丰富的实验监控工具。开源特性和社区支持使其易于使用,适合各类用户快速提升模型性能。

实验

作者在数学推理、多跳问答和策略性问答任务上进行了实验。对于数学任务,他们使用GSM8k作为种子数据,并在GSM8k、ASDiv、SVAMP和MultiArith上测试性能。对于问答任务,他们在HotpotQA和StrategyQA上分别收集轨迹并测试性能。

主要将NAT与两个基线进行比较。"Vanilla"设置仅使用正面样本对LLMs进行微调,这是之前研究的做法。第二个设置是"Negative-Unaware Training (NUT)",它在未添加任何前缀或后缀的情况下纳入负面样本。

在LLaMA-2-Chat 7B和13B模型上进行实验,所有模型均微调2个epoch,批量大小为64。使用余弦调度器,总步骤的3%作为预热。最大学习率设置为5×10^-5。使用4×A100 GPU和DeepSpeed ZeRO 3阶段进行模型训练。

表2展示了数学任务的总体结果,观察到:(1) 纳入负面样本可以提高模型性能;(2) 采用负面感知训练(NAT)的模型不仅优于仅使用正面样本训练的相应模型(Vanilla),而且也优于直接纳入负面样本训练的相同模型(NUT);(3) 当正面样本较少或模型较小时,NAT的改进更为显著。具体来说,使用2k正面样本的7B模型,NAT实现了8.74%的性能提升,而使用5k正面样本的13B模型,性能提升为0.52%。

表3和表4展示了在HotpotQA和StrategyQA上的结果。在这里,NAT-2是NAT的一个变体,它将负面数据分为两类,并为每类使用不同的提示。在HotpotQA上,NAT-2在EM和f1分数上分别比没有负面样本提高了2%和6%。与NUT相比,NAT在EM和f1上仍然分别提高了约1%。在StrategyQA上,NAT比没有负面样本和NUT分别提高了8%和3%。

表格2到4展示了LLMs在微调为Agent时从负面样本中学习的能力。作者深入探讨了可能影响负面感知训练有效性的各种因素。他们试图回答以下问题:(1) 给定固定数量的正面样本,应该使用多少负面数据?(2) 模型从负面轨迹中学到了什么?(3) 所有类型的负面样本都有益吗?(4) 哪些因素促成了负面感知训练(NAT)优于负面无感知训练(NUT)?

训练样本数量的影响:初步分析关注负面样本数量的影响。保持正面样本数量恒定在2k和5k,同时将负面样本从0调整到12k。结果显示,随着负面数据量的增加,性能得到提升,当负面样本数量约为11k时性能趋于平稳。

数据质量的重要性:从不同模型中获取负面数据,以研究负面数据质量在NAT中的影响。具体来说,将来自GPT-3.5的数据视为高质量示例。相比之下,使用微调后的LLaMA-2-7B模型生成了10k负面样本作为低质量数据的代表。实验结果强调了数据质量在NAT中的关键作用。

模型通过NAT学到了什么:分析了由LLaMA-2-7B训练的GSM8K测试集的轨迹,这些模型分别使用正面样本(Vanilla)、NUT和NAT。表6显示了不同训练策略下模型的准确性、动作错误率(错误调用工具的百分比)和平均回合数。纳入负面样本也引入了更多的动作错误,这可能导致微调模型与Vanilla相比有更多的动作错误。然而,在纳入负面样本后,NUT和NAT的准确性都提高了。这表明负面样本主要通过教授模型更好的“思想”(即推理和规划)来起作用。

负面样本与正面样本的相似作用:为了进一步探索模型是否像从正面轨迹中学习一样从负面轨迹中学习,作者随机抽取了100个成功的轨迹作为开发集,并测量了使用2k正面样本(不与开发集重叠)和不同数量负面样本训练的模型的困惑度。图4显示了随着负面数据量的增加,困惑度的变化。随着更多负面数据的纳入,困惑度降低,这表明模型学会用失败轨迹的知识来适应成功的轨迹。然而,这条曲线在最后似乎是水平的,并且与4k和5k正面样本的曲线之间仍然存在很大差距,这表明一些来自成功轨迹的属性或知识永远无法从失败的轨迹中学到。

添加提示的选择:已经有不同的研究表明,提示对LLM性能至关重要。在这里,作者探索了添加提示的可解释性。具体而言是提示的内容使LLMs能够从成功和失败的轨迹中不同地学习,还是仅仅区分这些轨迹?他们提出了两组提示。一组是具有可解释性的提示,例如让模型生成正确或错误的轨迹。另一组是没有可解释性的提示。例如,可以为查询添加不同的字母作为前缀。表7显示了使用可解释和不可解释提示训练的模型的结果。不同的提示在性能上没有显示出大的差异,这表明NAT的性能提升来自于简单地区分正面和负面数据。

实验结果表明,与传统的仅使用正面样本或简单地结合正面和负面样本的方法相比,NAT方法在多个任务和模型尺寸上都显示出了优越的性能。特别是在数据稀缺的场景下,NAT的性能提升更为显著。 

论文链接:https://arxiv.org/pdf/2402.11651

代码链接:https://github.com/Reason-Wang/NAT 

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

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

相关文章

1.基础计算01

1.基础计算 比方有10用户对象信息list对象,通过ID进行从小到大排序,如何进行,第一位对象信息除了ID复制到第二位,第二位复制到第三位,第三位复制到第4位,…一直到最后一位,将最后一位信息除ID外…

位运算符的优先级

四则运算在位运算符的中间,优先级从高到低排列如下: 口诀:反四夷,与异火。 反对四方蛮夷,拿什么反对呢?与异族火拼。 反指按位取反(~),四指四则运算(*、/、…

开发者说:使用通义灵码,参与开源项目全程纪实

缘起 OceanBase。作为一个充满好奇心的 DBA,一直一来想探寻数据库的内部世界。开源为我们这些好奇的猫打开了一扇新世界的大门。OceanBase 作为分布式关系型数据库的排头兵,自然进入了我的优选名单。起初走进了 OceanBase[1]的世界逛了一圈,这…

OpenAI 发布 o1 模型具备类似人类的推理能力,大模型已经达到人类博士水平了吗?

什么是OpenAI o1? OpenAI o1(后面简称o1)是OpenAI在2024.9.12号发布的最新大模型,主要针对的任务是复杂任务推理,比如竞赛难度的编程问题,奥赛难度的数学问题等。参考OpenAI原始介绍: https://openai.com…

学习笔记 - 知识图谱的符号表示方法

学习笔记 - 知识图谱的符号表示方法 说明: 首次发表日期:2024-09-13个人阅读学习并摘录成笔记 知识表示的相关名词定义 以下内容摘录自 Knowledge Graphs Applied 2.3小节,然后AI翻译人工润色。 实体(Entities)—表…

【CTF Web】BUUCTF BUU BURP COURSE 1 Writeup(X-Real-IP伪造+POST请求)

BUU BURP COURSE 1 1 点击启动靶机。 解法 用 hackbar 将 X-Forwarded-For 设为 127.0.0.1,无效。提示:只能本地访问。 将 Referer 设为 127.0.0.1,无效。提示:只能本地访问。 将 X-Real-IP 设为 127.0.0.1,成功&am…

快速开发与维护:探索 AndroidAnnotations

在移动应用开发的世界中,效率和可维护性是两个至关重要的要素。随着应用功能的不断增长和用户需求的不断变化,开发者们一直在寻找能够提高生产力的工具和框架。今天,我们将深入探讨一个能够帮助开发者实现快速开发和易于维护的框架——Androi…

Unity for Android使用蓝牙低功耗Bluetooth LE

Unity2021.3.35f1 插件&#xff1a;Bluetooth LE for iOS and Android v2.3.unitypackage 1、将插件资源包导入unity中 2.修改插件中的AndroidManifest文件 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schem…

交叉编译Python3.8

1. 交叉编译python 工程组织&#xff1a;根目录设置为/home/a123/xxx/tools/4python 内容创作不易&#xff0c;对您有帮助的话&#xff0c;可以支持打赏一下下 配置脚本统一命名为conig_arm/pc_<package>.sh 交叉编译出的头文件以及动态库文件统一放在cross_compile_de…

“爱学术”期刊采编系统的设计与实现---附源码 76126

摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用SpringBoot技术建设“爱学术”期刊…

【Qt】样式属性

样式属性 QSS 中的样式属性⾮常多, 不需要都记住. 核⼼原则还是⽤到了就去查. ⽂档的 Qt Style Sheets Reference 章节详细介绍了哪些控件可以设置属性, 每个控 件都能设置哪些属性等. 在样式属性中有一个“盒子模型需要重点介绍” 盒子模型 在⽂档的 Customizing Qt Widget…

Kubernetes从零到精通(10-服务Service)

Service简介 Deployment这种工作负载能管理我们应用Pod的副本数&#xff0c;并实现动态的创建和销毁&#xff0c;所以Pod本身是临时资源&#xff08;IP随时可能变化&#xff09;。现在如果某组Pod A需要访问另一组Pod B&#xff0c;A就需要在应用的配置参数里动态跟踪并更改B的…

java(1)数据类型,运算符,逻辑控制语句以及基本应用

目录 ​编辑 1.前言 2.正文 2.1数据类型与变量 2.1.1字面常量 2.1.2数据类型 2.1.3变量 2.1.3.1整型 2.1.3.2浮点型 2.1.3.3字符型 2.1.3.4布尔型 2.1.4类型转换与类型提升 2.1.4.1字符串的拼接 2.1.4.2整型转字符串 2.1.4.3字符串转整数 2.2运算符 2.2.1算术运…

【效果+教程】免费!实操用AI设计图标Logo,不仅省了设计费,还是副业新赛道!

Logo是一个品牌或公司的视觉标识 一个好的logo可以帮助消费者快速识别品牌&#xff0c;增强品牌的可见性和记忆度。 一个专业设计的logo能够提升品牌的可信度&#xff0c;给人一种专业和可靠的印象。 一个设计精美且富有意义的logo能够与消费者建立情感联系&#xff0c;增强…

10887辆 捷途旅行者8月再夺方盒子销冠

近日&#xff0c;8月汽车销量排行榜正式出炉。捷途旅行者年内第四次实现月销过万&#xff0c;以10887辆的优异成绩&#xff0c;持续领跑方盒子市场。作为名副其实的畅销车型&#xff0c;捷途旅行者自去年上市以来&#xff0c;不仅连续三个季度卫冕方盒子销量冠军&#xff0c;创…

C++类与对象(下)--最后的收尾

内部类 • 如果⼀个类定义在另⼀个类的内部&#xff0c;这个内部类就叫做内部类。内部类是⼀个独⽴的类&#xff0c;跟定义在 全局相⽐&#xff0c;他只是受外部类类域限制和访问限定符限制&#xff0c;所以外部类定义的对象中不包含内部类。 #include<iostream> using…

C++中string使用

目录 介绍 使用 迭代器&#xff08;Iterator&#xff09; begin&#xff0c;end rbegin&#xff0c;rend 容量&#xff08;Capacity&#xff09; size&#xff0c;length capacity empty clear resize reserve 元素访问&#xff08;Element access&#xff09; ope…

美国陆军发布下一代目标识别和感知倡议

文章目录 前言一、下一代目标识别与感知倡议的内容二、下一代目标识别与感知倡议重点关注领域(1)目标标记、跟踪和定位 (TTL)(2)侦察和监视 (R&S)(3)无人系统 (UMS)前言 2024年7月23日,美国陆军发布了下一代目标识别与感知倡议,希望工业界能够开发战场态势感知、侦…

LeetCode 692.前K个高频单词

LeetCode 692.前K个高频单词 C 思路&#x1f9d0;&#xff1a; 首先用map存储该字典&#xff0c;然后放进vector进行排序&#xff0c;注意sort的排序规则与我们想要的规则不一致&#xff0c;所以我们需要写一个伪函数来判断second(value值)&#xff0c;由于该题要求了稳定性&am…

Rider使用习惯

1.修改rider的快捷方式为VSCode样式的&#xff0c;修改设置方式 2.在项目中点击某个脚本文件&#xff0c;即在项目视图中选中这个文件&#xff0c;设置方式如下&#xff1a; 暂时先记录这么多&#xff0c;以后有零碎的随时记录