Chain of Thought 开山之作论文详解

  • chain of thought 也就是 CoT ,一经提出就引发了社区对它的热烈讨论,CoT 能够帮助大规模语言模型解决复杂的算术、常识及字符推理等任务。

背景知识

语言模型

  • 语言模型的本质是对任意一段文本序列的概率进行建模

  • 如果将语言模型看成一个大黑盒的话,它的输入是一段文本序列,输出也是一段文本序列,通过训练语言模型,就能使得给定的文本序列和输出的文本序列拼接起来所组成的一整段文本序列的概率尽可能比较大

Large Language Model: GPT-3

Chain of Thought 开山之作论文详解_第1张图片

  • 为了得到更好的泛化模型,以及提高模型在执行多种通用任务上的能力,基于大数据的预训练模型越来越多。 给定更大的预训练数据,Transformer 架构在增加模型大小和训练中计算量的情况下表现更好,展示了卓越的 scalability。具体来说,基于 transformer 的语言模型的性能与模型参数、数据量和训练计算量的呈幂律关系(Kaplan 等人,2020 年)。transformer 在语言模型上的架构有三种不同的设计模式:encoder-only(Bert)\encoder-decoder(Bart\T5)\decoder-only(GPT)。

  • 大规模语言模型所采用的都是 decoder-only 架构,并采用世界上丰富的未标签文本进行自监督训练。预训练任务通常是Next word prediction,这种方式又被称为 Causal language modeling。这个Causal就是“因果”的意思,对于decoder,它在训练时是无法看到全文的,只能看到前面的信息。因此这类模型适合做文本生成任务.使用decoder transformer的 GPT 预训练,其中目标序列是移动了一个标记的输入序列。请注意,transformer 解码器中的因果注意力模式强制每个 token 只能关注其过去的 token。GPT 有 1 亿个参数,需要针对下游任务进行微调。一年后引入的更大的语言模型 GPT-2(Radford 等人,2019 年)。与 GPT 中的原始 transformer decoder 相比,GPT-2 中采用了pre-normalization以及改进的初始化和权重缩放。在 40 GB 的文本上进行预训练,15 亿参数的 GPT-2 在语言建模基准上获得了 sota,并在不需要更新参数和架构的情况下在多个其他任务上获得了可观的结果。

Chain of Thought 开山之作论文详解_第2张图片

  • GPT-2 展示了在不更新模型的情况下将相同的语言模型用于多个任务的潜力。而不需要再加入梯度计算进行微调。GPT-3 没有采用微调而是将输入文本序列作为任务的描述,输入输出样例作为任务的说明,提示作为任务的输入。GPT-3 可以被分类为 3 种学习范式:

Chain of Thought 开山之作论文详解_第3张图片

  • 少样本与零样本的唯一区别就是中间多出了一些参考样例,它们其实都是在续写前缀(只是零样本的输入没有任何参考,而少样本的输入有一些参考样例来帮助语言模型推断如何根据任务输入生成相应的任务输出)

用一个训练好的大语言模型来求解推理任务的几种范式

  • 这里以需要推理的数学题举例

1、Zero-shot

Chain of Thought 开山之作论文详解_第4张图片

  • 文献:Large Language Models are Zero-Shot Reasoners(https://arxiv.org/abs/2205.11916)

  • 语言模型的输入是一道数学题连接一个字符串“The answer is”,然后让语言模型进行续写

2、Zero-Shot-CoT

Chain of Thought 开山之作论文详解_第5张图片

Chain of Thought 开山之作论文详解_第6张图片

  • 语言模型的输入还是一道数学题连接一个字符串“Let's think step by step”,然后让语言模型进行续写

  • 这种情况下,语言模型会续写出中间推理步骤,并最终生成答案

3、Manual-CoT

Chain of Thought 开山之作论文详解_第7张图片

Chain of Thought 开山之作论文详解_第8张图片

  • 文献:Chain of Thought Prompting Elicits Reasoning in Large Language Models(https://arxiv.org/abs/2201.11903)

  • 这种情况下使用到了少样本学习,在输入问题之前,手动设计一些问题和答案的样例(样例的答案给出中间推理步骤),这些问题和答案都需要手动构造,所以叫 Manual-CoT

  • 语言模型的输入是一些手动设计的问题和答案的参考样例连接一个真正需要求解的问题,然后让语言模型进行续写

  • Manual-CoT 比 Zero-Shot-CoT 的性能要好,因为它采用的是 few shot ,在输入中提供了一些问题、中间推理步骤以及答案的样例给语言模型进行参考。但是,提供这些样例需要进行人工设计,这就需要一定的人工成本

4、Auto-CoT

Chain of Thought 开山之作论文详解_第9张图片

  • 文献:Automatic Chain of thought Prompting in Large Language Models(https://arxiv.org/abs/2210.03493)

  • auto-CoT 分为两个步骤

  1. 通过多样性选取有代表性的问题

  2. 对于每一个采样的问题拼接上“Let's think step by step”(类似于 Zero-Shot-CoT )输入到语言模型,让语言模型生成中间推理步骤和答案,然后把这些所有采样的问题以及语言模型生成的中间推理步骤和答案全部拼接在一起,构成少样本学习的样例,最后再拼接上需要求解的问题一起输入到语言模型中进行续写,最终模型续写出了中间的推理步骤以及答案

  • 在十个数据集上 Auto-CoT 是可以匹配甚至超越 Manual-CoT 的性能,也就说明自动构造的 CoT 的问题、中间推理步骤和答案样例比人工设计的还要好,而且还节省了人工成本

CoT 这个领域刚发展不久,所以还有很多未解之谜,尽管刚提出才几个月,但是已经受到了社区的广泛关注

Abstract

现在语言模型的规模越来越大,但是即便是现在最大的语言模型,它们也往往很难在涉及到推理方面的任务取得很好的表现,也就是说,他们通常很难在数学,符号,以及常识的推理上取得尚佳的表现

这篇文章主要是针对大语言模型在遇到语言推理任务时的局限性,提出了 chain of thought,也就是思维链

  • 文中也给出了 CoT 的定义:人类在遇到一系列问题时所产生的推理步骤,而它们的表现形式就是一系列的短句子(比如说在背景介绍中所提到的遇到数学问题时所产生的中间推理步骤)

最终的实验效果非常好,比如说在使用谷歌内部的 540B 参数量的 PaLM 大语言模型,CoT 能够在像 GSM8K 这样比较难一点的数学问题数据集上取得新的 state of art

Chain of Thought 开山之作论文详解_第10张图片

1.Introduction

在此前关于大规模语言模型的推理任务中,有两种方法:针对下游任务对模型进行微调;为模型提供少量的输入输出样例进行学习。但是这两种方法都有着局限性,前者微调计算成本太高,后者采用传统的输入输出样例在推理任务上效果很差,而且不会随着语言模型规模的增加而有实质性的改善。

Chain of Thought 开山之作论文详解_第11张图片

语言模型的规模达到 100B 的参数量之后,就能够在像 sentiment analysis and topic classification 这种分类任务上取得非常好的结果

  • 作者将这类任务归纳为 system-1,也就是能够人类很快很直观地理解的任务

  • 还有一类任务需要很慢而且是很仔细的考虑,作者将其归纳为 system-2 (比如一些设计逻辑、常识的推理任务)

作者发现,即便语言模型的规模达到了几百B的参数量,也很难在 system-2 这类任务上获得很好的表现

  • 作者将这种现象称为 flat scaling curves:如果将语言模型参数量作为横坐标,在 system-2 这类任务上的表现作为纵坐标,则折线就会变得相当平缓,不会像在 system-1 这类任务上那么容易就实现模型的性能随着模型参数量的增长而提升,也就是说,在 system-2 这类任务上语言模型就很难大力出奇迹了

针对这个问题,作者提出了 chain of thought (CoT)这种方法来利用大语言模型求解推理任务

Chain of Thought 开山之作论文详解_第12张图片

  • 上图展示了在 CoT 诞生之前是怎样使用标准的 prompting 方法来求解推理任务的

  • 首先这是一个少样本学习的方法,需要给出一些问题和答案的样例,然后拼接这正想要求解的问题,最后再拼接一个字符串“A:”之后输入到大语言模型中,让大语言模型进行续写

  • 大语言模型会在所提供的问题和答案的样例中学习如何求解,结果发现很容易出错,也就是上面提到的大语言模型在 system-2 上很容易遇到瓶颈

Chain of Thought 开山之作论文详解_第13张图片

  • 上图展示了 CoT 的做法,CoT 与 Standard prompting 唯一的区别就是,CoT 在样例中在给出问题的同时,不仅给出了答案,在答案之前还给出了人为写的中间推理步骤

  • 在把问题、中间推理步骤和答案的若干样例拼接上所想要求解的问题和字符串“A”,再输入到语言模型之后,语言模型会自动地先续写中间推理步骤,有了这些推理步骤之后,它就会更容易地给出正确答案,也就是能够更好地解决 system-2 这类的问题

2.Chain of thought Prompting

因为 CoT 是作者所提出的一个新事物,所以作者强调了 CoT 中几个比较有意思的地方

  • 首先,CoT 原则上能够让模型把一个多步的问题分解出各种中间步骤,使那些具有更多推理步的问题有机会分配到更多的计算量(如果是从最后的将拼接好的问题、答案样例以及所要求解的问题和前缀输入到语言模型中产生最后的答案这一步来看,对于一个更难的问题,在续写的时候,CoT就使得语言模型能够产生更多的中间推理步骤,因为语言模型在生成输出的时候是一个一个 token 进行生成的,那么如果问题越难,CoT 又使得生成的中间步骤越多,那么整体上生成的 token 的数量也会越多,自然而然在求解更难的问题的时候就会使用到更多的计算量。就好比人类在遇到更难得问题的时候,可能就会耗费更多的脑力,这样 CoT 也能够让计算机能够对更难的问题分配更多的计算资源)

  • CoT 提供了可解释性,也就是在不知道答案的情况下,也能够知道答案是怎样得来的,也就是所谓的中间推理步骤

  • 作者认为 CoT 在原则上能够适用于任何人类能够用语言所能解决的问题,而不仅仅是数学、逻辑、常识这类的问题。因为 CoT 本身的载体就是一系列的短句子,本身也是人类语言

  • 当一个语言模型训练好之后,就能够通过 few-shot prompting 这种范式,在每个样例中写上中间推理步骤,再拼接好所要求解的问题输入到语言模型,就能够引发语言模型续写中间推理步骤,再得出最后的答案(像 Zero-Shot CoT 就发现,甚至都不需要在 few-shot 这些样例中添加 CoT ,可以仅凭“let's think step by step”作为 CoT 的推理;而 Auto CoT ,也就是“Let's think not just step by step but one by one”使用了多个“let's think step by step”就可以自动地构造 few-shot 的样例,从而弥补了 Zero-shot 和 Few-shot 之间的性能差异)

3.Arithmetic Reasoning

这里的算数推理所考虑的问题范围集中在小学数学问题,也就是 6-10 岁的小朋友所能解决的数学问题

实验设计

benchmarks: 五个数学问题的数据集

standard prompting: baseline

chain of thought prompting:

作者人工设计了一套 8 个带有 CoT 推理链条的 few-shot 样例,而且作者在五个数据集中统一使用了这 8 个带有 CoT 推理链条的 few-shot 样例

  • 其中的一个原因是因为人工构造 CoT 推理链条的 few-shot 样例的成本是很高的,因为不仅要找到具有代表性的问题,还要为每个问题设计中间推理步骤以及答案,而最后的性能对这些人工设计非常敏感,所以需要反复进行调试。

language model: GPT-3\LaMDA\PaLM\UL2 20B\Codex.

Chain of Thought 开山之作论文详解_第14张图片

  • CoT 会随着模型规模的提高会涌现出更强大的能力。也就是说 CoT 对于小规模模型没有太大影响,只有在使用参数为 100B 以上的模型时才会产生性能提升。并且作者发现,在较小规模的模型中产生了流畅但不符合逻辑的 CoT,导致了比 Standard prompt 更低的表现。

  • 其次,CoT 对于更复杂的问题有更大的性能提升。例如,对于 GSM8K(baseline 性能最低的数据集),最大的 GPT 和 PaLM 模型的性能提高了一倍以上。而对于 SingleOp(MAWPS中最简单的子集,只需要一个步骤就可以解决),性能的提高要么是负数,要么是非常小。

  • 在 GPT 和 PaLM 模型下,CoT 超越了之前的 sota(之前的 sota 采用的是在特定任务下对模型进行微调的模式)

消融实验

  • Equation Only:把 CoT 替换成只包含 CoT 中的算式部分。

  • Variable compute only:把 CoT 替换成与中间 CoT 长度相等的...

  • 结果发现上述两种方法都比 CoT 差了很多,这就说明了 CoT 虽然简单,但是不能再简单了,而且这也更能体现出 CoT 中自然语言所起的作用

  • Thought after answer:把中间推理步骤放在答案的后面。

  • 实验结果显示:把中间推理步骤放在答案的后面所得到的结果也不是很好,这就说明,在训练数据集中大部分情况下依然还是先给出中间推理步骤再给出答案,而不是先给出答案再给出中间推理步骤

Chain of Thought 开山之作论文详解_第15张图片

鲁棒性实验

在本节的最后,作者也提到 CoT 的性能可能也会对人工设计的 prompt 比较敏感,因此有必要评测所提出的方法的鲁棒性

Chain of Thought 开山之作论文详解_第16张图片

  • different annotator 表示有三个作者分别设计了一套带有 CoT 的样例

  • concise style 表示作者专门又设计了一套更加简单的带有 CoT 的样例

  • exemplars 从带有中间推理步骤的数据集中随机地选取一些问题,并附上这些数据集中自带的中间推理步骤构成 CoT 的样例,再拼接上答案来进行评测

  • 最后的结果显示:带 CoT 的方法都要比不带 CoT 的 standard prompting 要带来更加显著的性能提升,尤其是在图三中的两个更加困难的数学推理数据集中,这种性能提升更加明显

4.Symbolic Reasoning

文章中在本节和下一节中还提到了一些其他类型的任务

符号推理任务

Chain of Thought 开山之作论文详解_第17张图片

Chain of Thought 开山之作论文详解_第18张图片

5. Commonsense Reasoning

常识推理任务

Chain of Thought 开山之作论文详解_第19张图片

Chain of Thought 开山之作论文详解_第20张图片

  • 上图展示了 CoT 模型在这些任务的性能,和之前类似,尤其是当你的语言模型的规模很大的时候,CoT 相对普通的 prompting 方法能够带来更加显著的性能提升

6.Discussion

  • 在文章的末尾,作者强调,在 CoT 诞生之前的标准的 prompting 只是大语言模型语言能力的一个下限

  • 虽然 CoT 模拟了人类推理的思维过程,但这并不能回答神经网络是否真的“推理”,我们将其作为一个悬而未决的问题

  • 在大规模语言模型上使用 CoT 推理使得在实际应用中服务的成本很高;进一步的研究可以探索如何在较小的模型中进行推理

参考文献

  1. Chain of Thought Prompting Elicits Reasoning in Large Language Models

  2. Chain of Thought论文、代码和资源【论文精读】

你可能感兴趣的:(深度学习,transformer,人工智能,nlp,语言模型)