当前位置: 首页 > article >正文

Re-ReST: Reflection-Reinforced Self-Training for Language Agents论文学习

文章首先提到了一个推理-动作轨迹数据集的问题。这些数据集经常会包括一些需要多步推理的任务。但是,无论是让人去取得这些数据,还是让更高质量的模型代劳,成本都太高了。因此最好是自我监督,自己产生数据来学习(self-instruct还在追我)

文章使用Re-ReST(反射增强自训练)来优化生成的样本。具体地讲,模型先生成样本(比如说一段代码)然后把他交出去(比如说拿去运行)然后看反馈的结果,结合反馈结果优化生成样本,这样就可以得到高质量样本了。

文章做了很多方面的实验,多跳问答、顺序决策、代码生成、视觉问答和文本到图像生成都有涉及。最后还展示了一种不需要真实反馈的反射增强自训练方法(比如说不需要真的把生成的代码拿去运行的方法)

流程大致如下:

这里比较一下Re-ReST与Self-Instruct之间的区别啊。Self-Instruct是人工制作一批种子任务,然后让agent仿照产生新任务,用查重等方法筛选,最后用产生的数据集去微调。

Re-ReST是命令agent去生成某种数据(比如说代码,图像与文字啥的)然后把这些数据放到真实情况中去使用,把使用结果反馈给agent,让他自己修改自己原本生成的数据,从而得到新的高质量数据,最后用这些高质量数据去微调。

总之,Self-Instruct是根据查重筛选,而这个方法是根据真实反馈修改。

可以注意到,这个流程中实际上涉及了两个模型,一个是负责产生数据的agent(M),一个是负责修改不合格数据的Reflector(R)。其中反射模型R是可以访问外部环境的。

流程中文章会先把task输入给agent,agent会给出k种解法(文章推荐3个),然后交给环境。环境会进行反馈,没问题的话,那就把这一对input和output作为合格数据加入数据池,有问题就交给R这边。

其中M是一个大语言模型,可以接受一个task然后输出对应的解决思路,动作步骤。这个task是数据集提供的。具体做法是使用这个公开数据集中的一部分作为训练集,使用上文提到的过程进行训练啥的,然后用剩下的数据集进行测试。感觉这样子其实有一点赖皮,最后实验的时候应该测试一下假如不适用Re-ReST法,单纯的用一部分数据微调一下然后用剩下数据测试看看两者区别。

R也是一个大语言模型,可以访问外部环境获取反馈,从而修改M的输出,提高数据质量直到环境反映说达标了(也可以在修改之前生成cot)。文章发现假如R不能访问外部环境,得到真实反馈的话,其效果会很差。

M,R的参数不互通。

接下来是模型微调的具体细节。文章首先微调了R。R其实不微调也行,不过还是调了。具体做法是让M生成数据,正确的就直接拿来用,不正确的就加上环境给的反馈一起拿来给R微调用。此外,R自己也要生成一批数据(做法和M一样),也拿来微调自己。这些数据都是给R微调用的,没有做Re-ReST,就算有低质量数据也只是加上环境反馈就拿来用了。反正R也不需要太好。

这样,我们拥有了一个比较好的R之后,就可以开始使用上文提到的Re-ReST过程生成数据了。最后拿精修过的高质量数据交给agent(M)来微调。

这样训练部分就完成了。做inference的时候只需要agent(M)就可以了,R不用。

接下来是实验部分。在信息检索任务方面,文章使用HotpotQA数据集,其包含大量有关在维基百科上搜索信息之类的任务(是多步的)。agent能做的动作就三种,(1) 搜索[实体],在维基百科上搜索确切的实体,(2)查找[关键字],在检索到的段落中定位关键字,以及(3)完成[答案]。agent要做的就是给出一系列动作,给出之后会用维基百科的api执行这些动作,看看能不能完成task。具体的检查方法就是看agent最后得到的答案和数据集里的一样不一样,不一样就把检索结果和评估结果作为环境反馈交给R去矫正。这里提到了用LoRA来训练,什么意思?可以学一下LoRA。

此外,文章还做了序列决策,代码生成,用文字生成图片等方面的实验。

最后,文章进行了分析,证明了使用Re-ReST方法比单纯的让agent生成数据,不做反馈精修的方法更好。同时,实验开头的先微调R的做法被证明具有一定的作用。

最后,文章还做了一个小测试。之前有提到做inference的时候是没有R参与的,毕竟按照之前的思路,难不成做inference的时候还要把agent输出的结果先用api试一遍,然后把反馈交给R再把精修过的结果交给用户?但R不一定要这么用,这里测试了一下假如让R也来会怎么样。这里使用了一种self-consistent方法,就是让M和R各自生成三个output(总共6种解法)然后少数服从多数,选择最多人选择的那种方法,发现效果更好了。这样可以让R也参与进来,而且不需要环境反馈那一步,这里的R相当于只是普通的模型,不是负责精修数据的。


http://www.kler.cn/a/300541.html

相关文章:

  • 人工智能之数学基础:线性代数中的线性相关和线性无关
  • LabVIEW桥接传感器数据采集与校准程序
  • AudioGPT全新的 音频内容理解与生成系统
  • PHP 8.4 安装和升级指南
  • postgres数据库中_varchar的数组存储方法如何查找
  • 讲一下ZooKeeper的持久化机制?
  • 建筑电焊工模拟试题(单选题附答案)
  • 大语言模型(LLM)与多模态大模型(MLLM)结合行人重识别(Reid)领域最新文献方法调研
  • C++ | Leetcode C++题解之第400题第N位数字
  • Java控制台+activiti+springboot+mybatis实现账务报销工作流程
  • 苹果发布新款iPhone 16,与Apple Intelligence配套:查看功能和价格
  • Chisel隧道
  • LeetCode之常用函数
  • CCF刷题计划——解压缩(stoi+bitset双管齐下)
  • git下载安装windows
  • SpringBoot MybatisPlus 打印SQL及参数
  • UnLua调用C++函数
  • 单链表的实现(C语言)
  • MongoDB高可用和分片集群知识
  • 火语言RPA流程组件介绍--鼠标拖拽元素
  • Node.js运行环境搭建
  • 算法题:找出1到1亿中“只有一个重复的”自然数
  • Flask中的钩子函数
  • SpringCloud之配置中心svn示例和refresh
  • go-mciro系列(四)使用nacos作为配置中心_go使用nacos
  • 【无人机设计与控制】固定翼四旋翼无人机UAV俯仰姿态飞行模糊自整定PID控制Simulink建模