“ 谷歌的研究人员提出了一种通用的方法,将推理(Reson)和行动(Acting)相结合,使得语言模型能够处理多种语言推理和决策任务。该研究表明,采用“推理+动作”范式(ReAct)要优于仅有推理或仅有动作的范式。通过紧密结合推理和动作,这种方法呈现出与人类类似的任务解决方式,从而提升了模型的可解释性、可诊断性和可控性。”
01
—
上一篇《5分钟玩转PDF聊天机器人!超简单的Langchain+ChatGPT实现攻略》发出去后,有朋友对Langchain 这个开源框架比较感兴趣。
之前的文章《解锁人工智能项目开发的关键:Python 基础库详解与进阶学习》中有过Langchain 的简单介绍。
今天介绍一下这个开源框架的理论起源,arxiv 上的一篇论文《REAC T: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS》(REACT:在语言模型中协同推理与行动)。
Langchain 是这个论文 REACT 思想的软件工程实现。
REACT = Reason + Act = 推理 + 行为。
论文地址:
https://arxiv.org/pdf/2210.03629.pdf
项目页面:
https://react-lm.github.io/
02
—
论文主要内容:
在实验过程中,分别进行仅执行(only-Act),思维链(CoT-Chain of Thought)以及将ReAct与CoT框架相结合,并在四个不同的数据集上进行了比较评估。结果显示ReAct取得了显著的改进效果。
相对以往的研究常将大型模型的推理能力(通过CoT提示)和行动能力(生成行动计划)分开探究。
论文作者团队以交叉方式将推理(reasoning traces)和行动(task-specific actions)相结合,实现了协同作用。
ReAct使语言模型能够交替地产生推理路径和文本动作。尽管动作可能会引发来自外部环境(如下图中的"Env")的反馈,但推理本身不会对外部环境产生影响。
通过基于上下文的推理,模型获取了有益信息并对内部状态进行更新,从而进一步支持未来的推理和动作。
其中推理部分有助于模型进行归纳、跟踪和更新行动计划,并处理异常情况;而行动部分则使模型能够与外部信息源(知识和环境)进行交互,以收集所需信息。
实验结论:这种方法显著提升了模型的可解释性和可信度。在HotpotQA(问题问答)和Fever(事实验证)数据集上,成功克服了CoT存在的错误传播问题。
在ALFWorld和WebShop数据集上,相比模仿和强化学习等方法,论文作者团队的方法分别取得了34%和10%的性能提升,而且仅需1到2个上下文示例。
03
—
人类智能的一个独特特征是能够将任务导向的行为与言语推理无缝结合,这在人类认知中起着重要作用,可以实现自我调节或策略化。
以在厨房里烹饪一道菜为例。在任何两个具体动作之间,我们可以用语言进行推理,以跟踪进度:
“现在所有的东西都切好了,我应该把锅里的水加热”,
根据情况处理异常或调整计划:
“我没有盐,那就让我用酱油和胡椒代替吧”,
并意识到什么时候需要外部信息:
“我怎么准备面团?让我上网搜索一下”。
我们也可以采取行动:
打开烹饪书阅读食谱,打开冰箱,检查食材
来支持推理和回答问题:
“我现在可以做什么菜?”。
这种“表演”和“推理”之间的紧密协同,即使是在看不见的情况下或面临信息不确定性的情况下,也能使人类快速学习新任务,并执行稳健的决策或推理。
案例一:针对来自Hotspot数据集的问答
Q:Aside from the Apple Remote, what other device can control the program Apple Remote was originally designed to intect with?
除了苹果遥控器之外,还有哪些设备可以控制最初设计用于连接的苹果遥控器所配合的程序?
图1
标准(直接问大模型):直接回答iPod,错误。
CoT(Chain of Through):step by step 进行思考,获取不到实时信息,形成错误传播,回答错误。
Act-only:去外界获取信息,不进行推理,最终行动方向不对。
ReAct(Reason + Act):思考-> 行动 -> 从外部获取信息 -> 思考-> 行动-> 从外部获取信息。
案例二:针对AlfwWorld数据集问答
Q:You are in the middle of a room. Looking quickly aroundyou, you see a cabinet 6, a cabinet 1, a coffee machine 1,a countertop 3, a stove burner 1, and a toaster 1.Your task is to: Put some pepper shaker on a drawer.
你站在一个房间的中央。迅速环顾四周,你看到一个柜子6,一个柜子1,一个咖啡机1,一个台面3,一个炉灶炉1,和一个烤面包机1。你的任务是:将一些胡椒瓶放在一个抽屉上。
仍然是Act-only错误,ReAct 获得了正确结果。
从上面的示例可以看出,“思维链(CoT)”推理是一个静态的黑箱,因为模型使用自己的内部表征来产生思想,而不以外部世界为基础,这限制了其反应
性推理或更新知识的能力。这可能导致在推理过程中出现事实幻觉和错误传播等问题(图中1b)。
另一方面,最近的工作探索了在交互式环境中使用预训练的语言模型进行规划和行动,重点是通过语言先验预测行为。
这些方法通常将多模态观察结果转换为文本,使用语言模型生成特定于领域的动作或计划,然后使用控制器选择或执行它们。然而,他们没有使用语言模型对高层次目标进行抽象推理,也没有维持工作记忆来支持行动,这阻碍了通过有限形式的口头推理来重申关于当前状态的空间事实。
除了这些简单的具体化任务与几个块交互之外,还没有研究推理和行为如何以协同的方式结合起来解决一般任务,以及与单独推理或行动相比,这种组合是否能带来系统的好处。
04
—
基于此,论文作者团队提出了ReAct。
考虑一个 Agent (智能模型)与解决任务的环境交互的一般设置:
在时间步t,agent从环境中接收到一个观测值ot∈o,并按照某个策略π(At|ct)采取一个动作at∈a,其中ct=(o1,a1,···,ot−1,At−1,ot)是agent的上下文。
当映射c7→是高度t隐式的并且需要t大量计算时,学习策略是具有挑战性的。
例如,
图(1c)所示的智能模型无法生成正确的最终动作(第4步)来完成QA任务,因为它需要对轨迹上下文进行复杂的推理(问题,第1-3步,任务1-3步)。
同样,图(2a)中所示的智能模型无法从上下文中理解水槽1不包含胡椒搅拌器1,因此不断产生幻觉动作。
ReAct的思想很简单:
我们将agent的操作空间扩展到A↑=A∪L,其中L是语言的空间。语言空间中的一个动作a∈L,我们将t其称为一个思想或推理轨迹,它不影响外部环境,从而导致没有观察反馈。
相反,一个思想a旨在通过对当前t上下文c的推理来组成有用的信息,并更新上下文c=(c,a)以支持未来的推理或行为t。t+1tt如图1所示,可以有各种类型的有用想法,例如:
分解任务目标并创建行动计划(2b,Act1;1d,Thought1),注入与任务解决相关的常识性知识(2b,Act1),从观察中提取重要部分(1d,Thoughtt2,4),跟踪进度
和过境行动计划(2b,Act8),处理异常和调整行动计划(1d,Thought3),等等。
我们使用大型语言模型PaLM-540B来实验,该模型使用少量上下文示例提示生成特定领域的操作和用于任务解决的自由形式的语言思想(图1(1d),(2b))。
每个上下文示例都是解决任务实例的行动、思想和环境观察的人类轨迹。对于推理最重要的任务(图1(1)),我们交替生成思想和行动,以便任务解决轨迹由多个思考-行动-观察步骤组成。我们让语言模型自行决定思想和动作的异步发生。
具体的设计Prompt 可参考 github 上源码:
https://github.com/ysymyth/ReAct/tree/master
针对强调推理的任务,ReAct会交替生成推理路径和动作,形成多个“推理-动作-观测”步骤。与之相反,对于偏重决策的任务,可能只在有限的步骤内进行推理,因此推理路径在提示中会呈现出稀疏的模式,并由语言模型自主决定是否以异步方式进行推理和动作。
推理与动作之间的协同作用使模型能够通过状态推理来建立、维护和调整动作计划(推理→动作),同时还能够与外部环境(如维基百科)进行互动,在推理过程中参考额外信息(动作→推理)。
使用LLM进行推理的最著名的工作是思维链(Chain-of-Thought,CoT)。它揭示了LLM制定自己的“思维过程”来解决问题的能力。
此后进行了几项后续工作,包括解决复杂任务的最小到最大(least-to-most)提示,zero-shotCoT(不需要任何训练数据,只需要输入问题,模型就可以生成解决这个新问题的CoT思维链)和自一致性推理( self-consistency)()。
最近,Madaan & Yazdanbakhsh 系统地研究了CoT的形成和结构,并观察到符号、模式和文本的存在对CoT的有效性至关重要。其他工作也被扩展到更复杂的推理架构,而不是简单的提示。
与这些方法相比,ReAct执行的不仅仅是孤立的、固定的推理,还将模型操作及其相应的观察集成到一个连贯的输入流中,以便模型更准确地推理并处理推理之外的任务(例如交互式决策)。
05
—
Fine-tuning(微调):用ReAct生成3000个trace和正确的答案,对大模型进行fine-tuning。
ReAct 微调:初步结果
因为大模型提示的上下文窗口和token长度支持有限,使用 ReAct 提示轨迹在 HotpotQA 上进行的初步微调结果表明:
总结
ReAct是一种简洁而高效的方法,能够在语言模型中协同推理和行动。它证明了将模型的推理能力、动作生成以及与外部环境的反馈整合到语言模型中是可行的。这也为语言模型在处理涉及与外部环境交互的任务时充当代理提供了机会。
阅读推荐:
从内存墙到高效计算|如何提升大模型在推理中的计算速度:MQA、GQA优化策略
ChatGPT时代LLM大模型技术入门全攻略!顶会论文与实践干货一网打尽
OpenAI放开ChatGPT微调接口!国内厂商压力山大!|附详细微调操作指南
中文大模型 Chinese-LLaMA-Alpaca-2 开源且可以商用