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

相关文章

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI