语言模型的自洽性思维链推理技术

论文标题:Self-Consistency Improves Chain of Thought Reasoning in Language Models

论文链接:https://arxiv.org/abs/2203.11171

论文来源:ICLR 2023

一、概述

尽管语言模型在一系列NLP任务中展现出了显著的成功,但它们在推理能力方面仍然面临一些限制,这种限制不能仅仅通过增加模型规模来克服。为了解决这些问题,Wei等人(2022)提出了思维链提示(chain-of-thought prompting),即提示语言模型生成一系列模拟人在解决任务时可能使用的推理过程的短句。例如,给出问题“If there are 3  cars in the parking lot and 2 more cars arrive, how many cars are in the parking lot?”时,不直接回答“5”,而是提示语言模型以完整的思维链回答:“There are 3 cars in the parking lot already. 2 more arrive. Now there are 3 + 2 = 5 cars. The answer is 5.”。实验结果显示思维链提示显著提高了模型在各种多步推理任务中的性能。

在本文中,我们引入了一种新的解码策略,称为自洽性(self-consistency),以替代思维链提示中使用的贪婪解码(greedy decoding)策略,这进一步显著提高了语言模型的推理性能。自洽性利用了一个直觉,即对于复杂的推理任务,通常可以通过多个推理路径达到正确的答案。对一个问题需要进行更多的深思熟虑和分析,可以得到答案的推理路径的多样性就越大。

下图用一个例子说明了自洽性方法。我们首先用思维链提示语言模型,然后我们不是贪婪地解码最优推理路径,而是提出了一种“采样和边际化”(sample-and-marginalize)解码程序:我们首先从语言模型的Decoder中采样,生成一套多样的推理路径;每个推理路径可能会导致不同的最终答案,因此我们通过边际化采样的推理路径来确定最优答案,找出在最终答案集合中最一致(consistent)的答案。这种方法类似于人类的经验,即如果多种不同的思考方式都能得出相同的答案,人们对最终答案的正确性就会更有信心。与其他解码方法相比,自洽性避免了贪婪解码中困扰的重复性(repetitiveness)和局部最优性(local-optimality),同时减轻了单一采样生成的随机性。

5c39428a07d9d407a52d02dbe1ddb538.jpeg
自洽思维链

自洽性思维链比之前那些要么训练额外的verifier,要么在给定额外人类标注以提高生成质量的情况下训练一个re-ranker的方法要简单得多。相反,自洽性完全是无监督的,可以直接与预训练的语言模型一起使用,无需额外的人类标注,也避免了任何额外的训练,辅助模型或微调。自洽性也不同于典型的集成(ensemble)方法,其中训练多个模型并聚合每个模型的输出,它更像是一个作用在单一语言模型之上的“自我集成”。

我们在广泛的算术和常识推理任务上评估了自洽性思维链,这些任务涵盖了四种不同规模的语言模型:UL2-20B、GPT-3-175B、LaMDA-137B和PaLM-540B。在所有四种语言模型上,自洽性在所有任务上都显著提高了思维链提示的效果。在额外的实验中,我们展示了自洽性可以在一些添加思维链可能会降低与标准提示相比的性能的NLP任务上鲁棒地提升性能。我们还展示了自洽性显著优于sample-and-rank,beam search以及基于集成的方法,并且对采样策略和不完美的提示具有鲁棒性。

二、方法

人类的一个显著特点是思考方式各异。很自然地,我们会假设在需要深思熟虑的任务中,可能有几种方法来解决问题。我们提出,这样的过程可以通过从语言模型的Decoder中进行抽样在语言模型中进行模拟。例如,如上图所示,一个模型可以针对数学问题生成几个可能的回答,所有的回答都能得出同样正确的答案(输出1和3)。由于语言模型并不是完美的推理者,模型也可能产生一个不正确的推理路径,或者在推理步骤中出现错误(例如,在输出2中),但是这样的解决方案不太可能得出相同的答案。也就是说,我们假设,即使正确推理过程是多样的(diverse),它们在最终答案上的一致性也往往大于错误的过程。

我们利用这个直觉,提出了以下的自洽性方法。首先,用一组手工编写的思维链示例提示语言模型。接下来,我们从语言模型的Decoder中抽取一组候选输出,生成一组多样的候选推理路径。自洽性与大多数现有的抽样算法兼容,包括温度抽样、top-k抽样,以及核采样。最后,我们通过边际化出采样的推理路径并聚合答案,选择在生成答案中最一致的答案。

更详细地说,假设生成的答案来自一个固定的答案集合,,其中索引的是从Decoder采样的个候选输出。给定一个提示和一个问题,自洽性引入了一个额外的隐变量,这是一个代表第个输出中推理路径的token序列,然后将的生成耦合在一起,其中,即,推理路径是可选的,只用于到达最终答案。例如,考虑上图中的输出3:前几句“She eats 3 for breakfast ... So  she has 9 eggs * $2 =$18.”构成了,而最后一句中的答案18,“The answer is $18”,即是。在从模型的Decoder中采样多个后,自洽性对进行边际化(边际化的意思就是说不管推理路径了,只看最终答案),并且在上应用多数投票,即将作为最终答案,或者我们定义为在最终答案集中最“一致”的答案。

在下表中,我们使用不同的答案聚合策略显示了一组推理任务的测试准确率。除了多数投票外,在聚合答案时,还可以通过为每个赋予权重。注意,要计算,我们可以给定(prompt,question)条件下生成的未归一化概率,也可以通过输出长度来归一化条件概率,也就是:

❝ ❞

其中,是在前一个token的条件下生成中第个token的对数概率,是中的总token数。下表中显示了,“unweighted sum”,即,直接对进行多数投票,得出的准确率与使用“normalized weighted sum”进行聚合的准确率非常相似。我们仔细查看了模型的输出概率,发现这是因为对于每个,归一化的条件概率彼此非常接近,即,语言模型认为这些生成是“同样可能的”。此外,当聚合答案时,下表中的结果显示,“normalized weighted sum”(即上面的等式)比对应的“unnormalized weighted sum”产生的准确率要高得多。为了完整起见,我们还在下表中报告了采取“weighted avg”的结果,即,每个得分为其weighted sum除以,这导致了性能大大降低。

4551a1133c7531b75e468f074207d0c3.jpeg
聚合策略

自洽性探索了在开放式文本生成和固定答案的最优文本生成之间的一个有趣的空间。推理任务通常有固定的答案,这就是为什么研究者们通常考虑贪婪解码方法。然而,我们发现,即使期望的答案是固定的,在推理过程中引入多样性也可以带来很大的益处;因此,我们利用常用于开放式文本生成的采样来实现这个目标。需要注意的是,自洽性只能应用于最终答案来自固定答案集的问题,但原则上,如果可以在多个生成之间定义一种一致性的合适的度量,比如,两个答案是否一致或者相互矛盾,那么这种方法就可以扩展到开放式文本生成问题。

三、实验

  1. 主要结果

9419122a9927c9bd7952108f284b33b9.jpeg
实验
cbb5d606a27eed62e891217db5ddff2a.jpeg
实验
06ae8efe7e403d4a4e45cfcb7b4f1318.jpeg
实验
b8c75266ce5e874f117299a59ec5e867.jpeg
实验
  1. 思维链会造成性能下降的实验

9d976cd233052952fb422cf38696c1ab.jpeg
实验
  1. 与其他先用方法的对比

0d1934423286c9aa4155f8ce40538506.jpeg
实验
070a169e0470cd8ace0dd3189fb89f3b.jpeg
实验
e12565a12081106c24ac6aa87aebc2e0.jpeg
实验
  1. 其他研究

1c61f959b726066d1caaa9ae31601e39.jpeg
实验
65cc4751ba0b63159aa168008727507c.jpeg
实验
3615e11b12df28160ff64ca782cf702d.jpeg
实验

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/29186.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

听GPT 讲K8s源代码--pkg(四)

/pkg/controlplane、/pkg/credentialprovider、/pkg/kubeapiserver是Kubernetes中的三个核心包,它们分别实现了不同的功能。 /pkg/controlplane包 /pkg/controlplane是Kubernetes的一个包,它包含了控制平面组件的实现,例如API Server、Contro…

Flask_自定义flask的cmd命令

创建自定义命令 from flask import Flaskapp Flask(__name__)app.cli.command() def hello():"""命令说明写这里"""print("hello python")if __name__ __main__:app.run() 执行flask --help 可以在命令查看定义的命令 注意事项&a…

请问如何用oracle触发器实现不允许新增/删除表/增加/减少/修改字段类型

请问如何用oracle触发器实现不允许新增/删除表/增加/减少/修改字段类型 给本帖投票 56211打赏收藏 分享 转发到动态举报 写回复 性能测试中发现oracle11g数据库每天22点,oralce进程CPU占用率突增>> 11 条回复 切换为时间正序 请发表友善的回复… 发表回复 microsof…

C++ 第三讲

1 >手动封装一个顺序栈类(数据元素为整形),要求私有成员属性:堆区空间的指针,用于存放数据,和一个指向栈顶元素的变量 main.cpp #include "zuoye.h"int main() {//实例化对象My_stack Stck;My_stack &st Stck;//入栈Stck…

数字图像学笔记 —— 19.肤色检测

文章目录 什么是肤色检测需要使用OpenCV函数颜色空间转换颜色范围位运算 什么是肤色检测 在没有AI之前,肤色检测是计算机视觉的一项常见任务。其根本思路是划定一个颜色区域,只要属于该颜色区域的像素就认为属于肤色。但是这种方法的精确度不高&#xf…

ubuntu中下载、构建、使用raylib

目录 先决条件 [1]下载raylib方式一方式二 构建 [1]使用终端中使用Clion中使用 先决条件 [1] ubuntu系统上需要先安装GCC, make(或者cmake)和git (下载raylib) 执行下面的命令可以安装GCC,make,cmake,git sudo apt install build-essential git #build-essential是一套工具集…

leetcode 445. Add Two Numbers II(两数相加)

用链表代表2个数字,这2个数字相加的和用链表返回。 最高位在链表的head. 思路: 1.链表逆序 数字相加是从低位到高位的,然而链表中的数字是从高位指向低位。 所以涉及到链表的逆序。 逆序之后只需从head到tail把两个链表的数字相加&#x…

Windows安装激活注意事项

选择语言、版本(Windows 10指的是专业版本)和体系结构(32位/64位),这里自行根据情况选择(如果机器预装的是Windows 10家庭中文版则选择家庭中文版,如果预装的是专业版则选择Windows 10。这样原先…

使用IDEA构建jar然后转执行程序exe的爬坑

https://download.csdn.net/download/leoysq/87939492 构建jar

划片机的作用将晶圆分割成独立的芯片

划片机是将晶圆分割成独立芯片的关键设备之一。在半导体制造过程中,晶圆划片机用于将整个晶圆切割成单个的芯片,这个过程被称为“晶圆分割”或“晶圆切割”。 晶圆划片机通常采用精密的机械传动系统、高精度的切割刀具和先进的控制系统,以确保…

018 - STM32学习笔记 - SPI读写FLASH(三)- 写入字符串、小数与整数

018 - STM32学习笔记 - SPI访问Flash(三)- 写入字符串、小数与整数 上节对Flash的跨页写入数据进行了完善,但是数据写入都是以Byte数组的方式进行写入,这节分别进行字符串的写入和小数整数的写入,本节内容对SPI的函数…

Storage、正则表达式

1 LocalStorage 2 SessionStorage 3 正则表达式的使用 4 正则表达式常见规则 5 正则练习-歌词解析 6 正则练习-日期格式化 Storage-Storage的基本操作 // storage基本使用// 1.token的操作let token localStorage.getItem("token")if (!token) {console.log(&q…