CoT: 思路链提示促进大语言模型的多步推理

2023-11-06 20:01

本文主要是介绍CoT: 思路链提示促进大语言模型的多步推理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CoT

    • 总览
    • 摘要
    • 1 引言
    • 2 Chain-of-Thought Prompting
    • 3 算术推理 (Arithmetic Reasoning)
      • 3.1 实验设置
      • 3.2 结果
      • 3.3 消融实验
      • 3.4 CoT的鲁棒性
    • 4 常识推理 (Commonsense Reasoning)
    • 5 符号推理 (Symbolic Reasoning)
    • 附录
      • A.1 为什么增加模型的规模,能提升CoT的能力?
      • A.2 提示词工作的作用是什么?

总览

题目: Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
机构:Google Brain, NeurIPS 2022
论文: https://arxiv.org/pdf/2201.11903.pdf
任务: 设计CoT prompting,促进大模型推理能力(特别是多步推理),更具体地,它隶属于一种离散提示学习,即在大模型下的上下文学习(即不进行训练,将例子添加到当前样本输入的前面,让模型一次输入这些文本进行输出完成任务)
特点: 思维链路的开山之作
前置相关工作:GPT,PaLM,Language models are few-shot learners

摘要

我们探索如何生成一条思想链(一系列中间推理步骤)来显著提高大语言模型执行复杂推理的能力。特别是,我们展示了这种推理能力如何通过一种称为思维链提示(chain-of- thought prompting)的简单方法在足够大的语言模型中自然出现,其中提供了一些思维链演示作为提示的范例。

对三种大语言模型的实验表明,思维链提示可以提高一系列算术、常识和符号推理任务的表现。经验收益可能是惊人的。例如,仅用八个思维链示例来提示 PaLM 540B,即可在数学解题的 GSM8K 基准上达到SOTA,甚至超过带有验证器的微调 GPT-3。

BLIP model

从摘要想到的一些QA:

  1. 这种step by step看着是以一种自然语言的形式进行组织,有没有一种更加逻辑化/规则化的组织方式?形式化语言进行描述?
  2. 对于一个问题,推理链路可能是不同的,但是都能得到正确答案,如果进行推理链路的定义还是说是一个ensemble的方式?
  3. 一步错步步错的问题如何解决?
  4. 模型涌现的原因?

1 引言

NLP 领域最近因语言模型而发生了革命性的变化。扩大语言模型的规模已被证明可以带来一系列好处,例如提高性能和采样效率(sample efficiency)。然而,事实证明,仅扩大模型大小不足以在算术、常识和符号推理等具有挑战性的任务上实现高性能

这项工作受到两个想法的启发,来探讨了大语言模型的推理能力如何可以通过简单的方法来进行解锁。

  1. 生成最终答案所需要的理由(rationale),能够对数学推理有增益。
  2. 大型语言模型提供了令人兴奋的通过提示进行in-context few-shot learning的前景。

然而,上述两种想法都有关键的局限性。对于理由增强(rationale augmented)训练和微调方法来说,创建大量高质量理由的成本很高,这比普通机器学习中使用的简单输入输出对要复杂得多。对于 Brown 等人 Language Models are Few-Shot Learners使用的传统少样本提示方法。,它在需要推理能力的任务上表现不佳,并且通常不会随着语言模型规模的增加而得到实质性改善 (Rae et al., 2021 Scaling Language Models: Methods, Analysis & Insights from Training Gophe)。在本文中,我们将这两种想法的优点结合起来,避免了它们的局限性。具体来说,我们探索语言模型在推理任务中执行few-shot prompting的能力,给出由三元组组成的提示:⟨输入、思维链、输出⟩。思维链是一系列导致最终输出的中间自然语言推理步骤,我们将这种方法称为思维链提示。图 1 给出了一个示例。

我们对算术、常识和符号推理基准进行了实证评估,表明思维链提示优于标准提示,有时甚至达到了惊人的程度。图 2 展示了这样一个结果:在数学解题的 GSM8K 基准上,PaLM 540B 的思维链提示大大优于标准提示,并实现了SOTA。

BLIP model

A prompting only approach很重要,因为它不需要大型训练数据集,并且单个checkpoint可以执行许多任务而不失通用性。这项工作强调了大语言模型如何通过一些带有有关任务的自然语言数据的示例来学习(自动学习隐藏在大型训练数据集中输入输出的patterns)。

2 Chain-of-Thought Prompting

在解决复杂的推理任务(例如多步骤数学题)时,请考虑自己的思维过程,通常我们是将问题分解为中间步骤并在给出最终答案之前解决每个步骤:“Jane 给了她妈妈 2 朵花后,她有 10 朵……” 。 。那么当她给她爸爸 3 朵后,她将得到 7 …所以答案是7。”本文的目标是赋予语言模型生成类似思维链的能力——一系列连贯的中间推理步骤,从而得出问题的最终答案。我们将证明如果在小样本提示的范例中提供了思想链推理的演示,那么大语言模型就可以生成思想链。

图 1 提供一个示例,用于展示大模型产生用于解决数学应用题的一系列思路,否则该模型可能会出错。在这种情况下,思维链路可以被resemble为一个完整的解决方案,但是我们依旧倾向于把它称之为思维链路,因为它模拟了达到最终答案所需要的一步接一步的思考过程。

对于促进大模型的推理能力,CoT拥有如下的吸引人的性质:

  1. 首先,思想链原则上允许模型将多步骤问题分解为中间步骤,这意味着可以将额外的计算分配给需要更多推理步骤的问题。
  2. 其次,思想链提供了模型行为的可解释窗口,表明模型如何得出特定答案,并提供调试推理路径出错位置的机会(充分刻画模型用于支持最终答案的中间计算过程,依旧是一个开放性的问题)。
  3. 思想链推理可用于数学解题、常识推理和符号操作等任务,并且可能适用于(至少原则上)人类可以通过语言解决的任何任务。
  4. 最后,只需将思维链序列的示例包含到少样本提示的示例中,就可以在足够大的现成语言模型中轻松引发思维链推理。

3 算术推理 (Arithmetic Reasoning)

我们首先考虑图 1 中形式的数学解题,它衡量语言模型的算术推理能力。虽然算术推理对人类来说很简单,但语言模型经常难以完成算术推理任务。引人注目的是,与 540B 参数大语言模型一起使用时的思想链提示在多项任务上的表现与特定于任务的微调模型相当,甚至在具有挑战性的 GSM8K 基准上实现了SOTA。

3.1 实验设置

在多个大语言模型以及多个benchmarks上进行了CoT prompting的探索:
数据集 GSM8K, SVAMP, ASDiv, AQuA, MAWPS
标准Prompting : 参见图1
思维链路Prompting

BLIP model BLIP model

大语言模型 : 我们评估了五个大型语言模型。第一个是 GPT-3 ,我们使用 text-ada-001、text-babbage-001、text-curie-001 和 text-davinci-002,它们大概对应于 InstructGPT 模型350M、1.3B、6.7B 和 175B 参数的模型。第二个是LaMDA,它有 422M、2B、8B、68B 和 137B 参数的模型。第三个是PaLM,有8B、62B、540B参数的模型。第四个是 UL2 20B,第五个是 Codex OpenAI API 中的 code-davinci-002。我们通过贪婪解码从模型中进行采样(尽管后续工作表明,可以通过在许多采样代中采用大多数最终答案来改进思想链提示(Wang 等人,2022a))。对于 LaMDA,我们报告了五个随机种子的平均结果,其中每个种子都有不同的随机洗牌顺序的样本。由于 LaMDA 实验并未显示不同种子之间存在较大差异,为了节省计算量,我们报告所有其他模型的单个示例顺序的结果。

3.2 结果

BLIP model

有三个关键要点。首先,图4表明,思维链提示是模型规模的一种涌现能力(Wei et al., 2022b)。也就是说,思想链提示不会对小型模型的性能产生积极影响,并且仅在与 ~100B 参数的模型一起使用时才会产生性能增益。我们定性地发现,较小规模的模型会产生流畅但不合逻辑的思维链,导致表现低于标准提示。

其次,对于更复杂的问题,思维链提示可以带来更大的性能提升。例如,对于 GSM8K(基线性能最低的数据集),最大的 GPT 和 PaLM 模型的性能提高了一倍多。另一方面,对于 SingleOp(MAWPS 最简单的子集)来说,只需要一步即可解决,性能改进要么是负的,要么非常小(参见附录表 3)。

第三,通过 GPT-3 175B 和 PaLM 540B 进行的思想链提示优于现有有监督的技术。图 4 显示了 PaLM 540B 如何使用思想链提示在 GSM8K、SVAMP 和 MAWPS 上实现新的技术水平(但请注意,标准提示已经超过了 SVAMP 的先前最佳状态)。在另外两个数据集 AQuA 和 ASDiv 上,具有思维链提示的 PaLM 与现有技术的差距在 2% 以内(附录表 2)。

为了更好地理解为什么思考链提示有效,我们手动检查模型LaMDA 137B 在GSM8K产生的思想链。我们随机选择了50个模型预测出正确答案的样例,发现除了两个误打误撞预测正确之外,其余的cases全部给出了符合逻辑的解释。此外,我们也随机验证了50个给出错误答案的cases,我们发现46%的cases其CoT过程几乎是正确的,但是由于一些微小的错误(比如计算错误,符号映射错误,某步骤的推理过程缺失)造成推理过程错误,其余54%的CoT过程错误,主要是在语义理解以及一致性理解上存在比较大的问题。为了更好地理解为什么模型规模会造成能力的涌现,我们也在PaLM 62B上进行了类似的实验,我们发现将 PaLM 扩展到 540B 修复了 62B 模型中的很大一部分推理步骤缺失和语义理解错误的cases。

3.3 消融实验

使用思维链提示所观察到的好处自然引发了一个问题:是否可以通过其他类型的提示来实现相同的性能改进。图 5 显示了具有下述三种思路变化的消融研究。

仅等式。思维链提示可能有帮助的一个原因是它会产生要评估的等式,因此我们测试了一种变体,其中提示模型在给出答案之前仅输出等式。图5显示,仅等式提示对GSM8K没有太大帮助,这意味着GSM8K中问题的语义太具有挑战性,无法在没有思维链中的自然语言推理步骤的情况下直接翻译成等式。然而,对于一步或两步问题的数据集,我们发现仅提示方程确实可以提高性能,因为可以很容易地从问题中推导出等式(参见附录表 6)。
仅变量计算:
CoT过程在answer之后: 是否有可能CoT仅仅是能够让模型接触到预训练相关的一些知识。因此,设置了一个CoT after answer的实验,发现CoT的确是能激发推理,而非单纯的激发知识。

3.4 CoT的鲁棒性

  • 不同的标注人
  • 精细的标注
  • 不同的样例
BLIP model

4 常识推理 (Commonsense Reasoning)

BLIP model

5 符号推理 (Symbolic Reasoning)

BLIP model

附录

A.1 为什么增加模型的规模,能提升CoT的能力?

文中是通过失败案例分析,从语义理解,推理步骤缺失,幻觉,重复输出,符号映射错误等维度,去对比不同规模的模型表现。(Future work could more thoroughly investigate what properties of pretraining data, model architecture, and optimization objective causally enable such reasoning capabilities.)

A.2 提示词工作的作用是什么?

比较分析了如下的一些维度:

  • 不同的标注人员
  • 标注人员是否有机器学习背景
  • 不同的样例
  • 样例的顺序
  • 样例的数量
  • 不同的语言模型

如何进行CoT的标注,保持鲁棒性,依旧有比较多的探索空间

这篇关于CoT: 思路链提示促进大语言模型的多步推理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用

电脑提示Winmm.dll缺失怎么办? Winmm.dll文件丢失的多种修复技巧

《电脑提示Winmm.dll缺失怎么办?Winmm.dll文件丢失的多种修复技巧》有时电脑会出现无法启动程序,因为计算机中丢失winmm.dll的情况,其实,winmm.dll丢失是一个比较常见的问... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态: