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

论文标题: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.mzph.cn/news/894.shtml

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

相关文章

进制转换详解(解释原理简单易懂)

前言:在网上看了许多篇关于不同进制之间如何转换的文章,包括很多浏览量上万的博客。大多都只是把转换的规则罗列了出来,例如十进制转二进制,可能大家都知道方法,“除以2反向取余数,直到商为0”。应用该方法…

Kubespray v2.22.1 在线部署 kubernetes v1.26.5 集群

文章目录 1. 介绍2. 预备条件3. 配置 hostname4. yum5. 下载介质5.1 git 下载5.2 下载 kubespray v2.22.1 6. 编写 inventory.ini7. 配置互信8. 安装 ansible9. 关闭防火墙10. 安装 docker11. 配置内核参数12. 启动容器 kubespray13. 部署14. 配置连接集群 1. 介绍 kubespray​…

论文阅读—2023.7.13:遥感图像语义分割空间全局上下文信息网络(主要为unet网络以及改unet)附加个人理解与代码解析

前期看的文章大部分都是深度学习原理含量多一点,一直在纠结怎么改模型,论文看的很吃力,看一篇忘一篇,总感觉摸不到方向。想到自己是遥感专业,所以还是回归遥感影像去谈深度学习,回归问题,再想着…

5月更新,docsify综合漏洞知识库!

项目介绍 一个知识库,集成了Vulhub、Peiqi、EdgeSecurity、0sec、Wooyun等开源漏洞库,涵盖OA、CMS、开发框架、网络设备、开发语言、操作系统、Web应用、Web服务器、应用服务器等多种漏洞。 关注【Hack分享吧】公众号,回复关键字【230428】获…

spring boot security自定义认证

前言 前置阅读 spring boot security快速使用示例 spring boot security之前后端分离配置 说明 实际场景,我们一般是把用户信息保存在db中(也可能是调用三方接口),需要自定义用户信息加载或认证部分的逻辑,下面提供…

bug:file name too long文件名超出系统最大限制

各操作系统支持最长的文件和目录名称长度(Linux、Win、Mac) 今天开发需求的时候发现无法新建文件,提示file name too lang,于是翻阅和查询了一些资料,发现不同操作系统下文件名和目录名最长的长度不同。 操作系统文件名…

小程序主包超1.5MB分包处理流程优化方案

"subPackages": [// 分包1 {"root": "src, // 根目录"pages": [{"path": "views/business/index", // 页面路径"name": "business_index","aliasPath": "/business/index",&…

make/makefile的使用

make/makefile 文章目录 make/makefile初步认识makefile的工作流程依赖关系和依赖方法make的使用 总结 make是一个命令,是一个解释makefile中指令的命令工具,makefile是一个文件,当前目录下的文件,两者搭配使用,完成项…

Python采集课堂视频教程, m3u8视频解密

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 环境使用: Python 3.8 解释器 Pycharm 编辑器 模块使用: requests >>> pip install requests pycryptodome --> pip install pycryptodome re 第三方模块安装方法: win R 输…

7.14~7.15学习总结

Java的前置知识学习时间截至了,慌的一批~~。 看看自己学的,再看看要求学的,简直: 现在继续:IO流里面的Commons_IO的用法: public class Main {public static void main(String[]args) throws IOException…

【C++】多线程编程三(std::mutexstd::mutex、std::lock_guard、std::unique_lock详解)

目录 一、线程间共享数据 1.数据共享和条件竞争 2.避免恶性条件竞争 二、用互斥量来保护共享数据 1. 互斥量机制 2.mutex头文件介绍 三、C中使用互斥量mutex 1. 互斥量mutex使用 2.mutex类成员函数 ① 构造函数 ② lock() ③ unlock() ④ try_lock() 四、使用std::…

如何与ChatGPT愉快地聊天

原文链接:https://mp.weixin.qq.com/s/ui-O4CnT_W51_zqW4krtcQ 人工智能的发展已经走到了一个新的阶段,在这个阶段,人工智能可以像人一样与我们进行深度的文本交互。其中,OpenAI的ChatGPT是一个具有代表性的模型。然而&#xff0…

mac安装Golang开发环境及快速入门

目录 一、Mac brew 安装go环境 1.1 安装步骤 1.2 设置GOPATH 及环境变量 1.3 编写第一个go程序 二、快速入门 2.1 快速入门需求 2.2 go学习(自用) 2.2.1 go基础程序 2.2.2 变量声明 2.2.3 常量和枚举 2.2.4 函数与多种返回值 2.2.5 init函数…

18.Lucas-Kanade光流及OpenCV中的calcOpticalFlowPyrLK

文章目录 光流法介绍OpenCV中calcOpticalFlowPyrLK函数补充reference 欢迎访问个人网络日志🌹🌹知行空间🌹🌹 光流法介绍 光流描述了像素在图像中的运动,就像彗星☄划过天空中流动图像。同一个像素,随着时…

手写对象浅比较(React中pureComponent和Component区别)

PureComponent和Component的区别 PureComponent会给类组件默认加一个shouldComponentUpdate这样的周期函数 //PureComponent类似自动加了这段shouldComponentUpdate(nextProps,nextState){let { props, state } this;// props/state:修改之前的属性状态// nextProps/nextState…

047、TiDB特性_TopSQL

TopSQL 之前 之前没有办法找单个TiKV Server的语句。只能查找整个集群的慢语句。 TopSQL之后 指定TiDB及TiKV实例正在执行的SQL语句CPU开销最多的Top 5 SQL每秒请求数、平均延迟等信息 TopSQL 使用 选择需要观察负载的具体TiDB Server或TiKV实例 观察Top 5 类SQL 查看某…

用IDEA写第一个Spring程序 HelloWorld

用IDEA写第一个Spring程序 HelloWorld 环境 Orcal JDK:1.8.0_341 maven:3.9.3 Spring:5.3.10 IDEA:2023.1.2 1. 安装JDK和IDEA 2. 安装maven并配置环境变量、换源 3. IDEA中maven属性配置,主要是版本和settings文件及…

python+selenium进行cnblog的自动化登录测试

Web登录测试是很常见的测试,手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文就基于pythonselenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动化登录测试,可提供点参考!下面就包括测试代…

centos7 docker 安装sql server 2019

contos7安装sql server docker最低1.8或更高 卸载旧的docker sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 装docker依赖包 #安装所需资源包 sudo yum install -…

uniapp实现微信小程序自带的分享功能

定义 share.js 文件 export default {data() {return {// 默认的全局分享内容share: {title: 标题,path: /pages/index/index, // 全局分享的路径imageUrl: , // 全局分享的图片(可本地可网络)}}},// 定义全局分享// 1.发送给朋友onShareAppMessage(res) {return {title: this…