LLM之Prompt(三)| XoT:使用强化学习和蒙特卡罗树搜索将外部知识注入Prompt中,性能超过CoT,ToT和GoT

本文主要是介绍LLM之Prompt(三)| XoT:使用强化学习和蒙特卡罗树搜索将外部知识注入Prompt中,性能超过CoT,ToT和GoT,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

​论文地址:https://arxiv.org/pdf/2311.04254.pdf

一、当前Prompt技术的局限性

       LLM使用自然语言Prompt可以将复杂的问题分解为更易于管理的“thought”可以回复用户的问题。然而,大多数现有的Prompt技术都有局限性:

  • 输入输出(IO)Prompt:仅适用于具有单步解决方案的简单问题,它缺乏灵活性;
  • 思维链(CoT):能够解决多步问题,但仅限于线性思维结构,也缺少灵活性;
  • 思维树(ToT)和思维图(GoT):允许更灵活的思维结构,如树或图。然而,它们需要LLM来评估中间的thought,由于多次调用LLM会产生巨大的计算成本。

PS:当前的Prompt技术面临“Penrose Triangle”约束——最多可以实现(性能、效率和灵活性)中两个属性,三个属性不能同时实现。

​常见Prompt技术对比,如下图所示:

输入输出(IO)Prompt(图1(a)):IO方法在不提供任何中间thought过程的情况下,直接指导LLM解决问题;

思维链(CoT)(图1(b)):CoT将待解决问题分解为一系列的thought链,让LLM能够一步一步地处理复杂的问题;

自洽CoT(CoT-SC)(图1(c)):CoT SC使用多个CoT实例从而让LLM生成多个输出,它从中选择最佳的输出,与普通的CoT相比,提供了更稳健和一致的推理;

思维树(ToT)(图1(d)):ToT以树状结构组织思想并利用搜索算法(例如,广度优先搜索、深度优先搜索)将树扩展到追求最佳解决方案。但是ToT中的thought评价依赖于LLM本身,需要多次调用LLM进行推理,这昂贵且低效;

思维图(GoT)(图1(e)):GoT扩展了ToT方法,通过thought聚合和细化生成类似图形的思想结构。

PS:在中间搜索阶段期间。尽管这种方法允许更灵活的思维结构仍然需要多次LLM推理调用进行评估,从而产生显著的计算成本。

二、XOT介绍

       为了解决上述Prompt的这些局限性,本文将介绍一种新的Prompt技术XOT(Everything of Thoughts)。XOT使用强化学习和蒙特卡罗树搜索(MCTS)将外部知识注入Prompt过程。

XOT的关键组成部分是:

  • MCTS模块——使用轻量级的策略和价值网络,通过模拟有效地探索任务的潜在思维结构;
  • LLM求解器——利用LLM的内部知识,对MCTS中的思想进行提炼和修正。这种协作过程提高了思维质量。

三、XOT工作原理

XOT框架包括以下关键步骤:

  1. 预训练阶段:对MCTS模块进行特定任务的预训练,以学习有关高效thought搜索的领域知识。轻量级策略和价值网络指导搜索;

  2. Thought搜索:在推理过程中,预训练的MCTS模块使用策略/价值网络来有效地探索和生成LLM的thought轨迹;

  3. Thought修正:LLM审查MCTS生成的thought,并识别其中可能的任何错误,如果有错误,再通过额外的MCTS模拟产生修正后的thought;

  4. LLM推理:把包括修改thought后的最终Prompt提供给LLM来解决问题。

下图说明了XOT框架:

       MCTS模块针对特定任务进行预训练,使用策略和价值网络来指导搜索和学习领域知识。

  1. thought搜索过程中,预训练的MCTS使用策略和价值网络来有效地探索搜索空间并生成thought轨迹。整个过程迭代地选择、扩展、评估和反向传播节点;

  2. thought轨迹提供给LLM作为Prompt;

  3. LLM使用其内部知识来检测thought中的任何错误

  4. 如果发现错误,MCTS模块将用于通过额外的模拟来修改thought;

  5. 该过程重复进行,直到LLM使用修订后的高质量thought解决问题。

四、XOT Pocket Cube问题实战

      我们使用Pocket Cube问题(2x2x2魔方)来看一下XOT是如何工作的?

  1. 选择:算法从根节点开始,从可用集合中选择一个动作,用于在当前状态下生成单步思想。这个过程一直持续到到达当前树中的一个叶节点为止。该选择由PUCT算法指导,旨在最大化置信上限(UCB);

  2. 评估和扩展:到达之前未选择的叶节点后,我们扩展到下一步新思想探索的状态。这种扩展涉及对其值和状态的作用概率的评估,这些值和作用概率由θ参数化的神经网络建模,(Pθ(s), vθ(s)) = fθ(s)。这里,Pθ(s)是s上所有动作的先验概率,vθ(s)表示其预测状态值。这两个值被保留和存储用于备份目的,状态s被标记为“已访问”;

  3. 反向传播:在上述阶段对叶节点进行扩展后,可能是未探索状态或终端状态,算法继续通过反向传播更新所有Q(s,a)值。对于未探索的节点,这种更新涉及计算其估计值vθ的平均值,而对于终止的节点,它是基于真实奖励r。这些更新是在信息沿着轨迹反向传播到后续节点时发生的。此外,每个状态操作对的访问计数也会增加;

  4. 思想推理:在MCTS完成搜索后,提取思想并将其提供给LLM。LLM然后审查和提炼这些想法,如果需要,继续MCTS搜索过程,并最终通过将这些外部想法与其内部知识相结合来制定最终答案。

PS:重复此过程,直到问题得到解决或达到预定义的迭代次数。

五、XOT的主要优点

       与现有Prompt技术相比,XOT有以下优点:

  • 性能:MCTS探索将领域知识注入思想来增强LLM能力。协作修订过程进一步提高了thought质量;
  • 效率:轻量级策略/价值网络指导MCTS,最大限度地减少昂贵的LLM呼叫。推理过程中只需要调用1-2次即可;
  • 灵活性:MCTS可以探索不同的思维结构,如链、树和图,从而实现创造性思维。

PS:XOT实现了其他Prompt范式不能同时满足“Penrose Triangle”。

六、XOT实验结果

     研究人员在需要长期规划的复杂任务上评估了XOT,如《24小时游戏》、《8拼图》和《口袋魔方》。一些关键发现:

  • XOT在所有任务中的准确性显著优于IO、CoT、ToT和GoT等基线;
  • 经过thought修正,XOT在《24小时游戏》中仅使用1–2个LLM调用就实现了高达90%的准确率,证明了高效性;
  • XOT高效地生成了多种多样的问题解决方案,展现了灵活性;
  • 对于8-Puzzle和Pocket Cube等空间推理任务,XOT使LLM能够解决他们以前遇到的问题。

PS:这些结果突出了XOT如何通过高效灵活的提示释放LLM在复杂问题解决方面的潜力。

参考文献:

[1] https://medium.com/@raphael.mansuy/xot-a-new-prompting-technique-for-ai-the-secret-sauce-to-level-up-your-llms-reasoning-prowess-3e19703ab582

这篇关于LLM之Prompt(三)| XoT:使用强化学习和蒙特卡罗树搜索将外部知识注入Prompt中,性能超过CoT,ToT和GoT的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/483710

相关文章

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa