admin管理员组

文章数量:1534194

大模型Chain-of-Thought(CoT)与Agent基础知识与介绍

参考文献:Exploring Equation as a Better Intermediate Meaning Representation for Numerical Reasoning of Large Language Models

仓库:https://github/Zoeyyao27/CoT-Igniting-Agent


在学习Chain-of-Thought和Agent之前,如果你没有大语言模型和提示学习基础知识的,请先阅读博客Prompt-Tuning——深度解读一种新的微调范式。

大规模模型现在能够完成一些较为复杂的推理任务,不论是在大量的经验评测基准上,还是理论证明上都验证了其推理性能。
最近发现提高大模型推理能力的方式是让模型step-by-step进行思考,通过提示的方式实现该目标的策略称为chain-of-thought prompt。
针对大模型的推理有三个方面的:

  • prompt pattern:cot、icl等;
  • reasoning format:无结构化的文本、结构化的推理等;
  • application:单一语言、多语言、多模态等;
CoT

It provides a proficient strategy for deconstructing intricate issues into smaller, manageable sub-problems, systematically enabling solutions through a step-by-step approach
利用在预训练期间开发的推理能力,CoT 提示能够熟练地识别推理过程所必需的原子知识组件,并无缝集成它们的关系,从而构建中间的、连贯的推理步骤。

通过将CoT拓展到perception(感知)、memory(记忆)、reasoning(推理)和language agent,提高推理性能,解决这些sub-question可以借助知识检索和验证工具。Agent可以划分为两种类型:

  • 自主性Agent(autonomous agents);
  • 对话交互式Agent(communicative agents);

CoT的优势:
  1. 提高推理性能:通过将复杂的多步骤问题分解为中间阶段,CoT最大限度地减少了忽视关键细节的风险。
  2. 提高可解释性:CoT为LLM的决策过程提供了可解释的一瞥。将复杂的推理任务分解成一连串相互关联的思考,使得理解LLM作出的决策或结论背后的逻辑和推理更加容易。
  3. 提高可控性:通过提示LLM输出一系列相互关联的思考,用户可以对LLM的认知过程施加更大的影响。一些研究探索了识别和纠正"走偏了"的推理路径或需要额外信息的地方。这种增强的可控性使得回答更加深思熟虑和准确。
  4. 提高灵活性:CoT的灵活性(比如问题末尾加指令,以及{n}-shots等)使其适用于广泛的领域,包括经典NLP任务、Science和Agents Systems。
CoT起作用的条件

从提示工程角度看,CoT有效的条件是:

  • 使用大模型;
  • 目标任务需要进行多步推理;
  • 通过增加模型的参数规模,传统的prompt(ICL等)无法很好地提升推理效果;

从理论角度看:证明了当训练数据(可能被视为 LLM 中的参数知识)包含由相互强烈影响的一组变量时,CoT 推理是有帮助的。也就是说,大模型中需要包含与目标任务相关的知识,称之为**“atomic knowledge”**。

“当大模型的训练数据表现出了图中的变量局部簇结构(Local Clusters of Variables)时,CoT 将会展现极好的效果”

为什么CoT有效

从经验角度看,CoT有效主要包含多个方面:

  • 大模型的涌现能力,其在包括语义理解、符号匹配、主题消解、运算能力和忠实性等方面;
  • 大模型CoT是在输出空间中充当一种形式上的引导和约束,从而约束大模型按照step-by-step的形式给出推理结果。
  • CoT 技术有助于迫使(compel)模型进行推理,而不是教(teach)它如何完成推理;

从理论层面上看,可将CoT归因于贝叶斯推断:

  • 大模型中的参数化知识(parametric knowledge)包含若干与目标问题任务相关的knowledge piece,且这些knowledge piece之间存在高度的隐式相关性;
  • CoT may help identify the atomic pieces of knowledge used for reasoning and bridge the relationship between the atomic pieces of knowledge with intermediate reasoning steps.
CoT在具体任务上的范式分析

挑选常用的三种推理任务,包含总共7个数据集。

SC:Self-Consistency,通过生成多个CoT并增加投票的方式挑选最佳推理路径和答案。

目前效果最佳的CoT相关的方法(截止23年10月):

CoT推理的三个方面介绍


(1)Prompt Pattern
提示工程部分,包括instruction生成和exemplar生成。
instruction生成
指令是指一个自然语言提示,用于提示大模型完成推理。
Zero-shot-CoT:通过在Query的末尾添加“Let’s think step by step”,大模型可以根据指令给出推理的过程,无需添加其他exemplar。

参考文献:Large language models are zero-shot reasoners

Plan-and-Solve:将一个任务分解为若干子任务,并分别解决各个子任务。其包含两个步骤:

  • 第一步,通过添加固定的指令“Let’s first understand the problem and devise a plan to solve the problem. Then, let’s carry out the plan and solve the problem step by step”,促使模型给出任务分解的过程和规划,以及每个问题的推理路径;
  • 第二步:通过指令“Therefore, the answer (arabic numerals) is”获取答案,

参考文献:Plan-and-solve prompting: Improving zero-shot chain-of-thought reasoning by large language models

不过人工编写的指令通常是局部最优的,且难以验证(需要设计很多指令来进行对比)。
Automatic Prompt Engineer(APE):自动生成提示指令。其中指令生成主要为自然语言程序合成,通过搜索大模型生成的指令,并维护一个score function来作为优化和挑选最佳指令的目标。具体地说,首先用一些固定的模板来提示大模型生成一堆候选指令,其次,利用大模型和ICL(In-Context Learning)推断出最佳的指令并给予其得分,最后根据得分来挑选最佳的指令。
Exemplar生成
Exemplar是指若干标注样本组成的演示,从而在形式上提示大模型完成推理。
Manual-CoT:对于采样的K个标注样本,除了Input和Output外,对于每个样本人工编写了对应的推理路径(rationale);
Active Prompt:在样本的挑选上使用了主动学习的不确定性(uncertainty)。首先使用根据Manual-CoT来引导大模型来回答每一个问题,且每个问题生成多次推理路径和结果。其次基于不确定性度量方法(disagreement, entropy, variance, self-confidence)来度量每个问题的不确定性(如果一个问题大模型多次回答结果都一样或都正确,说明该问题不确定性程度较低)。最后挑选那些不确定的问题,并对推理路径进行人工标注。该策略非常类似于主动学习。
Auto-CoT:对于所有的标注样本,基于bert embedding进行聚类,获得若干簇,这些簇被认为是problem cluster;其次对于每个簇采样一个样本,代表当前类别的problem,并对于每个样本使用Zero-shot-CoT构建推理路径。
Automate-CoT :首先让模型生成若干pseudo chain,其次根据ground-truth和投票规则对不符合条件的chain进行裁剪,最后基于variance-reduced policy gradient strategy来挑选最佳的chain-of-thought。

(2)Reasoning Format
CoT Formulation

Program-of-Thought:解决复杂的数学推理任务,生成程序代码来实现推理;
Tab-CoT:使用类似表格的形式约束大模型给出推理过程。每一行代表一个推理步骤,各个列分别为“∣ step ∣ subquestion ∣ process ∣ result ∣”。因此,每一个问题都可以最终形成一个表格;
Tree-of-Thought:将推理路径建模为树中的一条路径,每个节点代表一个推理步骤,基于树可以通过树搜索的方式寻找最准确的路径。
Graph-of-Thought:将文本推理任务转换为graph。其包含四个主要部分:

  • Promper:提供提示模板引导大模型给出推理结果;
  • Parser:从大模型生成的结果抽取必要信息;
  • Scorer:生成的结果进行打分;
  • Controller:该过程由两个元素控制:操作图 (GoO) 和图形推理状态 (GRS)。GoO 是一种静态结构,用于指定给定任务的图形分解,这意味着它规定了要应用于 LLM 思想的转换及其顺序和依赖关系。GRS 是一种动态结构,用于维护正在进行的 LLM 推理过程的状态,其中包括其思想及其状态的历史。实验结果表明,GoT 在排序、集合运算、关键字计数和文档合并等任务中的表现优于最先进的技术。

Recursion of Thought:设置了诸如GO、THINK和STOP的触发词,当生成THINK词时,模型递归思考当前问题并给出相应的subtask和推理路径,当解决完毕后生成GO进入下一个subtask,或者STOP完成所有推理。

参考文献:Recursion of thought: A divide-and-conquer approach to multi-context reasoning with language models.

Skeleton-of-Thought:SoT 包含两个阶段:(i)骨架阶段:SoT 通过手动设计的骨架提示模板引导 LLM 输出答案的简洁骨架,并从骨架响应中提取点;(ii)点扩展阶段:SoT 通过点扩展模板提示 LLM 在每个点上并行扩展,最后将所有点连接起来得到最终答案。简单的来说就是一开始的思考过程是串行的,每一步可以先生成一个大概,从而减少整体的时间,其次并行地对每一步进行完善。

Reasoning Aggregation
Self-Consistency:对大模型生成的多个推理路径进行投票;
ensembling framework:从三个角度实现推理路径的集成投票:

  • self-consistency:指令和提示都一样,大模型依靠采样生成策略生成若干条推理路径,并进行集成投票;
  • prompt-order:ICL中的exemplar都一样,只是顺序不同,不同的顺序可以得到若干推理路径,并进行集成投票;
  • input-output rationale:不同的examplar对应不同的推理路径,并进行集成投票;

参考文献:Rationale-augmented ensembles in language models

其他最新的一些CoT方法:
XoT: CoT, AutoCoT, Zero-shot CoT, ComplexCoT, PAL/PoT, Tab-CoT, ToT, EoT, GoT, X-of-Thoughts, Chain-of-Knowledge, Chain-of-Verification.
详情可以看这篇综述:A Survey of Chain of Thought Reasoning: Advances, Frontiers and Future

CoT Verification
Self-Verification:包含两个主要步骤:

  • 前向推理:采样多个可能的推理路径;
  • 后向验证:通过屏蔽原始条件并依次预测其结果来计算每个候选人答案的验证分数

参考文献:Large language models are reasoners with self-verification

奖励法:以数学推理为力,对大模型推理的过程和结果分别训练奖励模型,即判断推理过程和推理结果是否正确。发现基于推理过程的奖励函数更能有效地判断推理的有效性。相应的用于训练奖励函数的数据集为PRM800K;

参考文献:Let’s verify step by step.

Natural Program:Ling 等(2023)提出了一种使用“自然程序”格式的验证过程。自然程序将推理过程分解为单独的步骤,并附有相应的最小前提集。然后,作者采用了两阶段序列生成策略,即一致多数投票来验证演绎推理过程。一致多数投票首先对抽样的推理链进行演绎验证,然后在经过验证的候选链中进行多数投票以获得最终答案。
Verify-and-Edit:首先对低于平均投票的预测结果进行过滤,其次通过设置verifying question来让大模型来检测推理结果的事实性;最后检索外部知识库来编辑存在错误的推理路径。基于编辑过的推理路径,最终让大模型生成答案。

参考文献:Verify-and-edit: A knowledge-enhanced chain-of-thought framework.

CRITIC:允许大型语言模型 (LLM) 通过工具交互式批评来验证和修改自己的输出。将各种类型的tool形式化为text-to-text function。因此,给定一个输出的推理路径,大模型可以通过交互的形式选择合适的tool对结果进行验证;
AuRoRA:通过抽取多源知识库来提高信息的准确性;
Degeneration-of-thought(DoT):人们提出了多智能体辩论来提高推理性能,而不是使用单个 LLM 根据之前输出的反馈来改进输出 (Du et al., 2023)。Liang et al. (2023) 发现了一个思维退化 (DoT) 问题——一旦 LLM 对其解决方案建立了信心,即使其初始立场不正确,LLM 也无法通过反思产生新颖的想法。可以通过使用多智能体辩论 (MAD) 框架允许发散思维来解决 DoT 问题,在该框架中,多个智能体表达他们的论点,法官管理辩论过程以获得最终解决方案。Du et al. (2023) 还利用 LLM 的多个实例在多轮中辩论他们各自的推理过程,以得出一致的最终答案。该方法已被证明可以提高生成内容的事实有效性,并减少错误答案和幻觉

参考文献:Encouraging divergent thinking in large language models through multi-agent debate
Improving factuality and reasoning in language models through multiagent debate

CoT Verification是否可靠?
LLM 很难仅依靠自身能力来纠正最初的反应(LLMs encounter difficulties in rectifying their initial responses solely relying on their inherent capabilities—which we regard as imperfect verification
可靠的做法可以是借助外部知识库、工具或者计算执行器等进行评估验证。

CoT Application

跨语言,跨模态。
CoT应用在通用的NLP任务上:

  • SummaryCoT:通过CoT引导大模型step-by-step思考,并生成摘要。首先通过人工设计的instruction来引导大模型抽取原始文本中的核心关键细腻下,其次基于这些核心信息来生成摘要;
  • Self-Prompting:首先通过context paragraphs和explanation来构建QA对;其次从这些QA对中基于聚类检索方法获得少量的样本作为exemplar;最后这些exemplar作为上下文提示(CoT)来引导大模型完成其他目标任务的预测;
CoT与Language Agent


上图展示了CoT在Agent中的一些应用场景

Language Agent与RL Agent的区别:

  • RL Agent通过定义奖励函数和策略来优化Agent在环境中的表现,但是通常RL Agent只能够对具体的任务完成交互,很难具备跨任务跨领域的泛化;
  • Language Agent通过大模型的涌现能力实现泛化。

Agent通用的框架形式

参考文献:
Survey on factuality in large language models: Knowledge, retrieval and domain-specificity.
The rise and potential of large language model based agents: A survey.
Agents: An open-source framework for autonomous language agents.

针对先前工作对Language Agent的定义和使用形式,抽象描绘了目前Agent的通用框架形式如下图所示:

原始Paper: Cognitive Architectures for Language Agents 对这个部分下了更加深入的定义

Language Agent作为主体,其包含Planner、Controller和Decision。给定一个Instruction(任务或者query)。Agent基于这三个组件完成对任务指令的规划和推理,并与所处的环境进行交互(操作系统、APP、网页等)。当Decision涉及到执行动作action时,可操作具体的工具完成辅助任务。
截止23年10月,常用的Agent包括如下表所示:

(1)Agent Backbone模型
一个符合Agent条件的大模型,需要能够完成Planing、Action和Reasoning。
Agent类型:

  • autonomous agents:能够自主地完成一个任务的planing、reasoning和tool use等工作。例如AutoGPT、BabyGPT、AgentGPT等;
  • communicative agents:通过个性化或者社交的形式模拟人类完成交流、协同和辩论,属于沉浸式环境。

(2)环境交互
环境通常包括操作系统、第三方工具、搜索引擎等,可供与大模型Agent进行交互的外部环境。

  • 对于文本模态的大模型,环境通常是上下文对话或者通过自然语言描述来解析(例如OCR、ASR、XML、HTML解析等方法)环境。
  • 如果是多模态大模型,则可以接收来自视觉、语音等多模态感官信息,例如CLIP、BLIP-2等;

(3)Tool Use
使用外部工具可以拓展大模型的能力和知识边界。

Tool use can be seen as an expansion of a language model’s ability boundary, compensating for parametric knowledge for reasoning and grounding the language model’s capabilities to interact with environments.

外部工具可以包含知识图谱、搜索引擎、代码执行器、在线工具模型、应用APP、数据库、一些垂类的API等。
使用外部工具主要有三个方面的目的:

  • Action执行:语言模型不仅限于预测下一步动作;它还能够在真实环境中执行该动作。这包括通过网页上的 JavaScript 元素选择执行代码或查询、通过代码解释器或编译器执行程序(Gur 等人,2023;Ni 等人,2023;Dídac 等人,2023;Ruan 等人,2023a;Gou 等人,2023b),以及与作为可调用 API 的在线专家模型交互(Shen 等人,2023;Patil 等人,2023;Ge 等人,2023)。这些步骤可以根据任务要求和计算能力通过有效扩展工具集进行动态调整(Yuan 等人,2023)。
  • 外部知识利用:RAG可以通过搜索引擎来调用外部环境中的工具汲取最新的知识,提高大语言模型的性能;
  • 推理与验证:外部的工具和知识可以辅助验证和纠正大语言模型生成的错误结果。
CoT对Agent的促进作用

Agent与环境之间是一种持续循环的交互模式,例如如下图所示:

通过CoT进行感知(Perception)
通过prompt来提高大语言模型对外部环境和上下文的理解,例如对视觉感官时,可以定义CoT提示:“Answer: Let’s think step by step. I see , I need to …”,其中“”可以是外部工具Image Caption模型识别图像并给出的文本描述。
Self-correction:大模型还需要能够获得环境给予的反馈。例如在调用代码执行器的时候,可能会执行错误,或者给出错误的信息,大模型需要理解这种反馈,还需要迭代进行修正以达到预期。
感官部分也包含language-centric、image-centric和unified。

  • language-centric:将文本、视觉、语音等模态信息通过一些模型、工具转换为自然语言或者embedding形式,align到文本模态上;
  • image-centric:通过text renderer将文本渲染为图像;
  • unified:直接使用多模态大模型来完成多模态表征感知和生成。
Memory as CoT

Memory分为long-term memory(长期记忆)和short-term memory(短期记忆)

  • 短期记忆:表示可用于促进大模型理解和生成的临时性信息,可以在 Agent 的多轮交互中灵活的改变(对标人类的工作记忆)
  • 长期记忆提供历史事件中的静态信息的记录(可以参数化知识,也可以是外部知识库、数据库等)

长期记忆可以包括存储生产系统本身的程序记忆、存储有关世界的事实的语义记忆和存储代理过去行为序列的情景记忆(Sumers 等人,2023 年)。例如,给定一个目标,为最新帖子点赞,在不同的环境状态下,观察到两种实现该目标的动作链:(i)[打开 Instagram,转到主页动态,查看最新帖子,为最新帖子点赞] 和 (ii) = [转到主页屏幕,打开 Instagram,转到主页动态,查看帖子,为最新帖子点赞]。可以发现,原子动作 [打开 Instagram,转到主页动态,查看最新帖子,为最新帖子点赞] 可以作为此目标的长期记忆,即静态记忆链。

Memory高效执行
Memory可以是以长文本形式存储,但是一般情况下大模型在与环境交互过程中存在输入长度限制,不见得要把所有记忆都检索到模型输入中。为此,高效的memory的存储和提取可以使用如下两种方法:
(1)Tree Search:Memory存储为一个树结构
MemWalker:将textual memory存储为树结构,每个节点为memory对应的摘要信息。当给定一个query时,agent通过树搜索寻找相关的节点,并将相关的信息进行聚合形成答案;

参考文献:Walking down the memory maze: Beyond context limit through interactive reading.

GITM:通过一个LLM分解器将目标任务递归地分解为若干子任务,由于是递归分解,所以一个任务可以变成子任务组成的树。基于这个分层的树结构,从memory中寻找相应的plan。

Ghost in the minecraft: Generally capable agents for open-world enviroments via large language models with text-based knowledge and memory

其他例子:斯坦福AI小镇的论文 Generative Agents: Interactive Simulacra of Human Behavior提到的 Reflection tree

(2)Vector retrieval
通过向量存储记忆是另一种常用的方法。向量数据库可以将复杂的数据存储到数据库中。
Agentsims:使用向量数据库来实现长期记忆的有效存储和检索。具体来说,它将日常记忆作为embedding存储在这个向量数据库中。当Agent遇到新情况并需要回忆过去的记忆时,长期记忆系统会熟练地检索相关信息,从而确保Agent行为的一致性。

Reasoning as CoT

推理能力:
借鉴 CoT 的思路,让智能体分解任务逐步进行计划与决策以增强智能体解决问题的可靠性。在 Agent 中,CoT 主要的功能在于将计划、行动与观察相互结合。

  博客记录着学习的脚步,分享着最新的技术,非常感谢您的阅读,本博客将不断进行更新,希望能够给您在技术上带来帮助。


【大模型&NLP&算法】专栏

近200篇论文,300份博主亲自撰写的markdown笔记。订阅本专栏【大模型&NLP&算法】专栏,或前往https://github/wjn1996/LLMs-NLP-Algo即可获得全部如下资料:

  • 机器学习&深度学习基础与进阶干货(笔记、PPT、代码)
  • NLP基础与进阶干货(笔记、PPT、代码)
  • 大模型全套体系——预训练语言模型基础、知识预训练、大模型一览、大模型训练与优化、大模型调优、类ChatGPT的复现与应用等;
  • 大厂算法刷题;

本文标签: 基础知识模型chainThoughtCoT