谈谈NLP中 大语言模型LLM的 思维链 Chain-of-Thought(CoT)

news/2024/4/29 6:23:53/文章来源:https://blog.csdn.net/Neleuska/article/details/131510678

Chain-of-Thought(CoT)

1.介绍

在过去几年的探索中,业界发现了一个现象,在增大模型参数量和训练数据的同时,在多数任务上,模型的表现会越来越好。因而,现有的大模型LLM,最大参数量已经超过了千亿。

然而,增大模型参数规模,对于一些具有挑战的任务(例如算术、常识推理和符号推理)的效果,并没有太大提升。对于算术类推理任务,我们期望模型生成自然语言逻辑依据来指导并生成最终答案,但是获得逻辑依据是比较复杂昂贵的(标注成本层面)。

自从发现了大模型ICL(In-Context Learning)的能力后,这个问题有个新的解决思路:对某个Task,能否为大模型提供一些上下文in-context example作为Prompt,以此来提升模型的推理能力?实验表名,在复杂推理任务上加入ICL带来的增益不明显。因此,变衍生出了CoT的技术。

Chain-of-Thought(CoT)是一种改进的Prompt技术,目的在于提升大模型LLMs在复杂推理任务上的表现,如算术推理(arithmetic reasoning)、常识推理(commonsense reasoning)、符号推理(symbolic reasoning)。

2.思路

ICL的思路是在新测试样本中加入示例(demonstration)来重构prompt。

与ICL(In-Context Learning)有所不同,CoT对每个demonstration,会使用中间推理过程(intermediate reasoning steps)来重新构造demonstration,使模型在对新样本预测时,先生成中间推理的思维链,再生成结果,目的是提升LLM在新样本中的表现。

在这里插入图片描述

3.CoT方法

一般来说CoT会分为两种:基于人工示例标注的Few-shot CoT和无人工示例标注的Zero-shot CoT。下面将逐一介绍。

3.1 Few-shot CoT

假设基于ICL的测试样本输入表示为 < i n p u t , d e m o n s t r a t i o n s > <input, demonstrations> <input,demonstrations>,那么加入Few-shot CoT的测试样本输入,可表示为 < i n p u t , C o T > <input, CoT> <input,CoT>

3.1.1 CoT Prompt设计

我们知道了加入CoT的示例后,能提升LLM的表现。那么我们应该如何构造或使用CoT?

投票式CoT

《Self-Consistency Improves Chain of Thought Reasoning in Language Models》

论文基于一个思想:一个复杂的推理任务,其可以有多种推理路径(即解题思路),最终都能够得到正确的答案。故Self-Consistency在解码过程中,抛弃了greedy decoding的策略,而是使用采样的方式,选择生成不同的推理路径,每个路径对应一个最终答案。

具体做法为:

  • 对于单一的测试数据,通过多次的解码采样,会生成多条推理路径和答案。
  • 基于投票的策略,选择最一致的答案。
    在这里插入图片描述

实验表明,对于同一问题生成更多的推理链以供投票往往能取得更好的效果。当推理链数量足够多时,这种方法效果能够胜过使用greedy decoding的CoT方法。

《On the advance of making language models better reasoners》

论文在Self-Consistency的基础上,进一步做了优化。

  • 1.Diverse Prompts
    • 对于每个测试问题,构造了 M 1 M_1 M1种不同的prompt(即由不同demonstration构造的prompt)
    • 对于每种不同的prompt,让LLM生成 M 2 M_2 M2条推理路径。
    • 则对于同一个测试问题,共生成了 M 1 ∗ M 2 M_1*M_2 M1M2条结果
  • 2.Verifier
    • 训练了一个Verifier,用于判断当前推理路径得出的答案正确与否。
    • 关于样本构建,使用LLM生成的推理路径和答案,与grandtruth进行对比,一致的即视为正样本,否则负样本。
  • 3.Vote
    • 训练好Verifier后,对与一个测试问题与LLM生成的多条推理路径,Verifier进行二元判别
    • 结合判别结果和投票结果,得出模型的最终预测。
      在这里插入图片描述

实验结果显示,本论文的方法相对基于Greedy Decode和Self-Consistency能得到更优的效果。

使用复杂的CoT

《Complexity-based prompting for multi-step reasoning》

面对这么多可选的CoT,简单的CoT示例和复杂的CoT示例,对新的样本推理结果会不会产生影响?答案是Yes。

论文探讨了一个问题,在包含简单推理路径的demonstrations和复杂推理路径的demonstrations下,哪个效果会表现较好?(这里的简单和复杂是指 推理链/推理步骤的长度)

本论文继承了Self-Consistency的思想,具体方法:

  • 1.对于同一个测试问题,使用功能LLM(GPT-3)生成 N N N条不同的推理链+答案;
  • 2.对于生成的推理链+答案,按照推理链的长度进行倒序排序;
  • 3.保留TopK条推理链+答案,并使用投票的方式,选取最终预测。

实验结果表明,本论文的方法效果优于以下方法: (1)人工构建Cot、(2)random Cot、(2)Complex CoT(数据集中最长的多个思维链作为demonstrations)。
在这里插入图片描述

自动构建CoT

《Automatic chain of thought prompting in large language models》

上面提到的方法是基于人工构造CoT,那我们能否让模型自己来生成CoT?本论文就提供了这样一种自动生成CoT的思路。

本论文提到的Manual-CoT,可以等同于Few-shot CoT来理解。
在这里插入图片描述

由于Zero-Shot-CoT方法存在不稳定性,而Manual-CoT方法需要大量人工成本投入。作者提出了一种基于Auto-CoT的方法,自动构建包含问题和推理链的说明样例(demonstrations)。

整个过程分了两个阶段:

1.question cluster: 目的是将数据集中的question划分到不同簇中。

  • 使用Sentence-Bert计算每个question的向量表示;
  • 使用k-means方法将question记性簇划分;
  • 最后对每个簇中的question,根据距离中心点距离,升序排序。

2.demostration sampling: 目的是从每个簇中选取一个代表性的question,基于LLMs,使用Zero-Shot-CoT生成推理链。

  • 对于每一个簇 i i i里的每一个问题 q j ( i ) q^{(i)}_j qj(i),使用Zero-Shot-CoT的方法,将 [ Q : q j ( i ) , A : [ P ] ] [Q:q^{(i)}_j,A:[P]] [Q:qj(i),A:[P]](其中 [ P ] [P] [P]表示"Let’s think step by step")输入到LLMs,LLMs生成该问题的推理链 r j ( i ) r^{(i)}_j rj(i)和答案 a j ( i ) a^{(i)}_j aj(i)

  • 若问题 q j ( i ) q^{(i)}_j qj(i)不超过60个tokens,且推理链 r j ( i ) r^{(i)}_j rj(i)不超过5个推理步骤,则将问题+推理链+答案,加入到demostrations列表中: [ Q : q j ( i ) , A : r j ( i ) 。 a j ( i ) ] [Q:q^{(i)}_j,A:r^{(i)}_j。a^{(i)}_j] [Q:qj(i),A:rj(i)aj(i)]

  • 遍历完所有簇,将得到k个demostrations,将其拼接上测试question,构造成新的Prompt,输入LLMs便可得到生成结果。

值得一提的是,Auto-CoT在多个开源推理任务的数据集上,效果与Manual-CoT相当,甚至某些任务表现得更好。
在这里插入图片描述


CoT中示例顺序的影响

《Chain of thought prompting elicits reasoning in large language models》

尽管CoT是ICL的一种特殊形式,但是与ICL有所不同的是,CoT中demonstrations的排序对其在新测试样本中的生成结果影响较小,论文对demonstrations进行重排序,在多数推理任务上仅导致小于2%的性能变化。(demonstrations顺序对ICL影响较大)

3.1.2 CoT的增强策略

3.2 Zero-shot CoT

与Few-shot CoT不同,Zero-shot CoT并不需要人为构造demonstrations,只需要在prompt中加入一个特定的指令,即可驱动LLMs以思维链的方式生成结果。

当然这种不需要人工构造demonstrations的方式,效果相对Few-shot CoT会表现稍微差一点点。但是相对Zero-shot和Few-shot的方法而言,Zero-shot CoT在复杂任务推理上却能带来巨大的效果提升。

在这里插入图片描述

《Large language models are zero-shot reasoners》

论文首先提出了Zero-shot CoT的方法,整个流程包含两部分:

  • 1.Reasoning Extraction
    • 使用一个特定的"reasoning" prompt,是语言模型LLM生成原始问题的思维链,如"Let’s think step by step."(让我们一步步来思考)
  • 2.Answer Extraction
    • 基于第一步的结果,添加一个"answer" prompt,要求LLM生成正确的结果。
    • 这一个步骤中,LLM的输入格式为:quesiton + “reasoning” prompt + result(CoT) + “answer” prompt,输出为:result(answer)

值得一提的是,论文同时发现了,当模型LLM变得越来越大,对于使用Zero-shot的结果带来的增益不大,但是对使用Zero-shot CoT的结果带来的增益较大。

在这里插入图片描述

《Scaling Instruction-Finetuned Language Models》

既然在上一篇论文中,已经发现了LLM存在Zero-shot CoT的能力,那如果事先对LLM进行基于CoT的instruction tuning,那模型使用Zero-shot CoT方式在对unseen样本进行预测时,效果会不会更好?本论文给出了肯定的答案。

论文探索了以下可能影响LLM在unseen task上表现的因素:

  • 1.任务数量
  • 2.模型大小
  • 3.指令微调(instruction tuning)

论文微调数据集包含了1836种指令任务,473个数据集和146种任务类型构成,数据集中包含了9个人工标注的CoT数据集。同时保留一个没出现过的held-out数据集作为模型评估数据集。
在这里插入图片描述
在这里插入图片描述

使用的模型是PaLM,而经过instruction tuning的模型,称为FlanPaLM(Finetuned Language PaLM)。

得到了以下结论:

  • 1.增加微调任务数量,可以提高LLM表现。但任务数量超过一定值后,不管模型尺寸是否增大,受益都不大。推测原因有:
    • (1) 额外的任务多样化不足,没有为LLM提供新的知识;
    • (2) 多任务指令微调只是更好地激发了模型从预训练任务中学习到知识的表达能力,而微调任务超过一定值后,对表达能力没有太大帮助。
  • 2.微调和未微调的PaLM,从8B增大到540B,在unseen任务上效果越来越好;
  • 3.微调数据与CoT数据的关系
    • (1) 微调数据中删除CoT数据,会降低PaLM的推理能力
    • (2) 微调数据包含CoT数据,会全面提高所有评测任务的表现

5.总结

对于大模型LLM涌现的CoT能力,业界目前的共识是:当模型参数超过100B后,在复杂推理任务中使用CoT是能带来增益的;而当模型小于这个尺寸,CoT并不会带来效果增益。

还记得在Pretrain+Fine-tuning时代下,对于复杂数学推理任务,如MultiArith、GSM8K下,效果还是不太理想,而短短几年时间,LLM+CoT的模式已经大大提升了该领域的解决能力。随着LLM的继续发展,未来必定会发现更多LLM隐藏的能力和使用方法,让我们拭目以待。

6.Reference

Chain-of-Thought Prompting Elicits Reasoning in Large Language Models

Large language models are zero-shot reasoners

Scaling Instruction-Finetuned Language Models

Self-Consistency Improves Chain of Thought Reasoning in Language Models

On the advance of making language models better reasoners

Chain of thought prompting elicits reasoning in large language models

Complexity-based prompting for multi-step reasoning

Chain of thought prompting elicits reasoning in large language models

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

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

相关文章

kong-dashboard安装

简介 kong-dashboard提供了UI界面操作和查看kong&#xff0c;可以进行api、consumers、plugins操作 官网&#xff1a;https://hub.docker.com/r/pgbi/kong-dashboard/ 安装 联网安装 [slviewDEMO:~]$ docker search kong-dashboard INDEX NAME …

【VB6|第19期】vb6通过COM组件操作Excel

日期&#xff1a;2023年7月3日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xff…

【elementplus】解决el-table开启show-overflow-tooltip后,tooltip的显示会被表格边框遮挡的问题

如图所示&#xff1a; 原因&#xff1a; 1. el-table没有设置高度&#xff1b;2.就是被遮住了 解决&#xff1a; 方法一&#xff1a;给el-table设置高度 方法二: .el-table {overflow: visible !important;}如果不想给el-table设置高度&#xff0c;就直接使用方法二解决即可

MyBatisPlus基础知识

一、MyBatisPlus 1.MyBatisPlus入门案例与简介 这一节我们来学习下MyBatisPlus的入门案例与简介&#xff0c;这个和其他课程都不太一样&#xff0c;其他的课程都是先介绍概念&#xff0c;然后再写入门案例。而对于MyBatisPlus的学习&#xff0c;我们将顺序做了调整&#xff0…

初级保育员专业知识生活管理考试题库及答案

​本题库是根据最新考试大纲要求&#xff0c;结合近年来考试真题的重难点进行汇编整理组成的全真模拟试题&#xff0c;考生们可以进行专项训练&#xff0c;查漏补缺巩固知识点。本题库对热点考题和重难点题目都进行了仔细的整理和编辑&#xff0c;相信考生在经过了针对性的刷题…

JAVA开发( 腾讯云消息队列 RocketMQ使用总结 )

一、问题背景 之所以需要不停的总结是因为在java开发过程中使用到中间件实在太多了&#xff0c;久久不用就会慢慢变得生疏&#xff0c;有时候一个中间很久没使用&#xff0c;可能经过了很多版本的迭代&#xff0c;使用起来又有区别。所以还是得不断总结更新。最近博主就是在使用…

jenkins的环境搭建

jenkins 环境 安装 我之前使用war安装、安装比较简单、就是jenkins的 对应的插件不能下载下来、后来发现是版本的问题、使用docker-compose 安装、jenkins安装 插件很容易安装下来 1、安装jdk 解压jdk 配置环境变量 #set java environment JAVA_HOME/usr/local/jdk1.8.0_281…

blender 之点云渲染(论文渲图)

blender 之点云渲染&#xff08;论文渲图&#xff09; 一、导入点云1.新建2.导入点云3.位置移动&放大缩小 二、Geometry Nodes实体化点云1.新建节点2.实体化 三、给实体化点云添加材质四、设置渲染引擎更换为Cycles。 五、对准视角1.新建一个球2.创建相机视角跟踪3.将uv球挪…

二、Spring Cloud Eureka 简介、快速入门

注册发现中心 Eureka 来源于古希腊词汇&#xff0c;意为“发现了”。在软件领域&#xff0c; Eureka 是 Netflix 在线影片公司开源的一个服务注册与发现的组件&#xff0c;和其他 Netflix 公司的服务组件&#xff08;例如负载均衡、熔断器、网关等&#xff09; 一起&#xff0…

LLM prompt提示构造案例

参考&#xff1a; https://github.com/PlexPt/awesome-chatgpt-prompts-zh 吴恩达 prompt工程应用&#xff1a; https://www.bilibili.com/video/BV1No4y1t7Zn prompt构造案例代码 prompt """文本分类任务&#xff1a;将一段用户给外卖服务的评论进行分类…

初级保育员专业知识配合教育考试题库及答案

本题库是根据最新考试大纲要求&#xff0c;结合近年来考试真题的重难点进行汇编整理组成的全真模拟试题&#xff0c;考生们可以进行专项训练&#xff0c;查漏补缺巩固知识点。本题库对热点考题和重难点题目都进行了仔细的整理和编辑&#xff0c;相信考生在经过了针对性的刷题练…

Linux基础笔记

已经有很长很长一段时间没有更新帖子了&#xff0c;一眨眼2023 已经过半&#xff0c;这些日子里&#xff0c;有太多太多事情要做了&#xff0c;今年只更新了几篇&#xff0c;这几天刚好有空&#xff0c;浅浅更新一篇叭&#xff01;~~~ 首先&#xff0c;Linux是一种开源的操作系…

手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(下篇)

本文承接上篇上篇在此和中篇中篇在此&#xff0c;继续就Sepp Hochreiter 1997年的开山大作 Long Short-term Memory 中APPENDIX A.1和A.2所载的数学推导过程进行详细解读。希望可以帮助大家理解了这个推导过程&#xff0c;进而能顺利理解为什么那几个门的设置可以解决RNN里的梯…

git push origin masterEverything up-to-date解决方法

按住这个看一下很简单的问题&#xff0c;我在网上看了很多就是没找到能用的&#xff0c;最后找到了这个看起来写的很简单的一个文章&#xff0c;但他写的真的有用。 出现的问题 解决步骤第一步 git add . 第二步 git commit -m “message” 第三步 git push origin master…

PyTorch示例——ResNet34模型和Fruits图像数据

PyTorch示例——ResNet34模型和Fruits图像数据 前言导包数据探索查看数据集构建构建模型 ResNet34模型训练绘制训练曲线 前言 ResNet34模型&#xff0c;做图像分类数据使用水果图片数据集&#xff0c;下载见Kaggle Fruits Dataset (Images)Kaggle的Notebook示例见 PyTorch——…

综合实验---基于卷积神经网络的目标分类案例

文章目录 配置环境猫狗数据分类建模猫狗分类的实例基准模型猫狗分类的实例基准模型之数据增强问题回答 配置环境 ①首先打开 cmd&#xff0c;创建虚拟环境。 conda create -n tf1 python3.6如果报错&#xff1a;‘conda’ 不是内部或外部命令,也不是可运行的程序 或批处理文件…

[github-100天机器学习]day1 data preprocessing

https://github.com/LiuChuang0059/100days-ML-code/blob/master/Day1_Data_preprocessing/README.md#step-6-feature-scaling—特征缩放 数据预处理 数据帧(Data Frame) 二维的表格形式&#xff0c;类似于电子表格或关系型数据库中的表。数据帧通常被用来存储和操作结构化数据…

科技项目验收测试报告有什么注意事项和疑惑?

科技项目验收测试报告是一份重要的文件&#xff0c;用于评估科技项目的质量和可靠性&#xff0c;对项目的成功交付具有关键作用。在项目完成的最后阶段&#xff0c;通过对项目进行全面测试和评估&#xff0c;以确保项目符合预期的目标和需求&#xff0c;并满足用户的期望。 一…

3D深度视觉与myCobot 320机械臂无序抓取

今天我记录使用myCobot320 M5跟FS820-E1深度相机进行一个无序抓取物体的分享。 为什么会选择深度相机和机械臂做一个案例呢&#xff1f; 2D相机&#xff08;最常见使用的相机&#xff09;可以捕捉二维图像&#xff0c;也就是在水平和垂直方向上的像素值。它们通常用于拍摄静态…

卷积神经网络--猫狗系列【VGG16】

数据集&#xff1a;【文末】 ​ 数据集预处理 定义读取数据辅助类&#xff08;继承torch.utils.data.Dataset&#xff09; import osimport PILimport torchimport torchvisionimport matplotlib.pyplot as pltimport torch.utils.dataimport PIL.Image # 数据集路径train_p…