语言模型的预训练[6]:思维链(Chain-of-thought,CoT)定义原理详解、Zero-shot CoT、Few-shot CoT 以及在LLM上应用
大语言模型的预训练[6]:思维链(Chain-of-thought,CoT)定义原理详解、Zero-shot CoT、Few-shot CoT 以及在LLM上应用
1.思维链定义
- 背景
在 2017-2019 年之间,随着 Transformer 模型的提出,计算资源与大规模语料库不断出现,自然语言处理领域发生了翻天覆地的变化,传统的全监督学习的范式逐渐达到了瓶颈,很难在传统的训练方式上取得大幅度提升。这时大规模预训练模型的如 Bert、RoBERTa 等模型的出现使得研究方向转向了以预训练模型为基础 + 下游任务 Fine-tune 的范式。
然而随着语言模型规模的不断增大,Fine-tune 的成本变得越来越高,以 GPT-3 为例,其参数量已经达到了惊人的 175B,对于这样大规模的参数,仅依靠传统 Fine-Tune 已经很难对模型起到有效的迁移,且如此大规模的参数量使得梯度的反向传播的代价也急剧增加。在这样的背景下,提示学习应运而生。提示学习通过改造下游任务、增加专家知识等形式,使得目标任务的输入输出更加贴合原始语言模型训练时的数据。
2021 年,提示学习经历了以离散提示学习(提示词的组合)为开始,连续化提示学习(连续空间表示)为复兴的多个阶段,逐步达到高潮。但基于连续空间的提示学习同样存在较多的局限性,比如资源消耗与训练不稳定等多种问题。这一时期,虽然大多数研究者普遍认同提示学习将会带来自然语言处理领域下一代革命,但这一时期大多数研究工作主要还是与模型训练或新的语言模型结构相关。
直到 2022 年,大规模语言模型的效果 “肉眼可见” 的变好,同时随着模型规模的不断增大,模型也变得更好“提示”,尤其是之前一些没有办法做很好的任务不断取得突破。但是大模型在做算术推理、常识推理和符号推理时的表现还不够好。 大模型的 in-context few shot 能力是极强的,但是创建很多的中间步骤用来做监督 finetune 是非常耗时的,而且传统的 prompt 方式在数学计算、常识推理等做的又不好,怎么结合 in-context few shot 和 中间步骤来改善算术推理、常识推理和符号推理等能力是一个问题。思维链的一系列工作就是在这样的大环境下诞生的。
- 定义
思维链 (Chain-of-thought,CoT) 的概念是在 Google 的论文 "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models" 中被首次提出。思维链(CoT)是一种改进的提示策略,用于提高 LLM 在复杂推理任务中的性能,如算术推理、常识推理和符号推理。CoT 没有像 ICL 那样简单地用输入输出对构建提示,而是结合了中间推理步骤,这些步骤可以将最终输出引入提示。简单来说,思维链是一种离散式提示学习,更具体地,大模型下的上下文学习(即不进行训练,将例子添加到当前样本输入的前面,让模型一次输入这些文本进行输出完成任务),相比于之前传统的上下文学习(即通过x1,y1,x2,y2,....xtest
作为输入来让大模型补全输出ytest
),思维链多了中间的中间的推导提示,以下图为例:
可以看到,类似的算术题,思维链提示会在给出答案之前,还会自动给出推理步骤:
“罗杰先有 5 个球,2 罐 3 个网球等于 6 个,5 + 6 = 11”
“食堂原来有 23 个苹果,用 20 个做午餐,23-20=3;又买了 6 个苹果,3+6=9”
思维链提示给出了正确答案,而直接给出答案的传统提示学习,结果是错的,连很基本的数学计算都做不好。简单来说,语言模型很难将所有的语义直接转化为一个方程,因为这是一个更加复杂的思考过程,但可以通过中间步骤,来更好地推理问题的每个部分。
一个有效的思维链应该具有以下特点:
- 逻辑性:思维链中的每个思考步骤都应该是有逻辑关系的,它们应该相互连接,从而形成一个完整的思考过程。
- 全面性:思维链应该尽可能地全面和细致地考虑问题,以确保不会忽略任何可能的因素和影响。
- 可行性:思维链中的每个思考步骤都应该是可行的,也就是说,它们应该可以被实际操作和实施。
- 可验证性:思维链中的每个思考步骤都应该是可以验证的,也就是说,它们应该可以通过实际的数据和事实来验证其正确性和有效性。
2.思维链用于上下文学习的方法(In-context learning)
2.1 Few-shot CoT
Few-shot CoT 是 ICL 的一种特殊情况,它通过融合 CoT 推理步骤,将每个演示〈input,output〉扩充为〈input,CoT,output〉。
【CoT prompt 的设计】
- 作为一种直接的方法,研究表明,使用不同的 CoT(即每个问题的多个推理路径)可以有效地提高它们的性能。
- 另一个直观的想法是,具有更复杂推理路径的提示更有可能引发 LLM 的推理能力,这可以导致生成正确答案的准确性更高。
然而,这两种方法都依赖于带标注的 CoT 数据集,这限制了在实践中的应用。为了克服这一限制,Auto-CoT 建议利用 Zero-shot-CoT,通过专门提示 LLM 来生成 CoT 推理路径,从而消除了手动操作。为了提高性能,Auto-CoT 进一步将训练集中的问题划分为不同的聚类,然后选择最接近每个聚类中心的问题,这应该很好地代表训练集中的提问。尽管 Few-shot CoT 可以被视为 ICL 的一种特殊提示情况,但与 ICL 中的标准提示相比,演示的顺序似乎影响相对较小:在大多数任务中,重新排序演示只会导致小于 2% 的性能变化。
【增强的 CoT 策略】
除了丰富上下文信息外,CoT 提示还提供更多选项来推断给定问题的答案。现有的研究主要集中在生成多条推理路径,并试图在得出的答案中找到共识。例如,在生成 CoT 和最终答案时,提出了 self-consistency 作为一种新的解码策略。它首先生成几个推理路径,然后对所有答案进行综合(例如,通过在这些路径中投票来选择最一致的答案)。self-consistency 在很大程度上提高了 CoT 推理的性能,甚至可以改进一些 CoT 提示通常比标准提示差的任务。此外,将自一致性策略扩展到更通用的集成框架(扩展到提示上的集成),发现不同的推理路径是提高 CoT 推理性能的关键。
2.2 Zero-shot CoT
与 Few-shot CoT 不同,Zero-shot CoT 在 prompt 中不包括人工标注的任务演示。相反,它直接生成推理步骤,然后使用生成的 CoT 来导出答案。其中 LLM 首先由 “Let's think step by step” 提示生成推理步骤,然后由 “Therefore, the answer is” 提示得出最终答案。他们发现,当模型规模超过一定规模时,这种策略会大大提高性能,但对小规模模型无效,显示出显著的涌现能力模式。
为了在更多的任务上解锁 CoT 能力,Flan-T5 和 Flan-PaLM 进一步在 CoT 标注上执行指令调优,并且改进了在不可见任务上的零样本性能。
3. 结论
CoT 对小模型作用不大,模型参数至少达到 10B 才有效果,达到 100B 效果才明显。并且,从小模型的输出可以看出,它们大部分是输出了流畅但不合逻辑的 CoT,因此得到错误的结果。
CoT 对复杂的问题的性能增益更大,例如 GSM8K(更难,因为基线最低)上 GPT-3 和 PaLM 的性能增加了一倍多。而对于 MAWPS-SingleOp(更简单的任务),性能改进非常小甚至是负面的。
加上 CoT 的 PaLM 540B 超过了任务特定的用监督学习训练的模型的最优结果。不加 CoT 的话 GSM8K 和 MAWPS 任务上 LLM 的结果比不过最优的监督学习模型。
思维链是解决推理任务时人类思维过程遵循的一系列典型步骤。 它可以帮助我们将一个问题分解成一系列的子问题,然后逐个解决这些子问题,从而得出最终的答案。在大型语言模型中,思维链可以用来引出推理。思路链方法带来以下好处:
- CoT 允许模型将多步推理问题分解为中间步骤,这意味着额外的计算可以分配到需要推理的复杂问题上;
- CoT 使大语言模型更具可解释性,更加可信,并提供了调试推理路径错误的机会;
- CoT 推理能够被用于数学应用题、常识推理和符号操作等任务,并且可能适用任何人类需要通过语言解决的问题;
- CoT 可以通过将其加入到 few-shot prompting 示例中,从而在足够大的语言模型中引导出推理能力。
当前的思维链也存在着许多局限性:
- 首先,尽管设计的思维链是在模拟人类的推理过程,但模型是否真正的学会了推理仍需进一步进行验证。
- 人工设计思维链仍然是代价过大,大规模的人工标注思维链是不可行的。
- 思维链只在大规模模型上有效(10B 以上)
4.未来对思维链的思考
- (1)什么时候 CoT 对 LLMs 有用
由于 CoT 是一种涌现能力,只对足够大的模型(例如,通常包含 10B 或更多的参数)有积极影响,但对小模型没有影响。此外,由于 CoT 通过中间推理步骤增强了标准提示,因此它主要有效地改进了需要逐步推理的任务,如算术推理、常识推理和符号推理。然而,对于不依赖于复杂推理的其他任务,它可能显示出比标准提示更差的性能,例如 GLUE 的 MNLI-m/mm、SST-2 和 QQP。
- (2)为什么 LLMs 可以执行 CoT 推理
关于 CoT 能力的来源,人们普遍假设它可以归因于对代码的训练,因为在代码上训练的模型显示出强大的推理能力。从直觉上讲,代码数据通过算法逻辑和编程流程进行了良好的组织,这可能有助于提高 LLM 的推理性能。然而,这一假设仍然缺乏消融实验的公开报道证据。此外,指令调优似乎不是获得 CoT 能力的关键原因,因为经验表明,对非 CoT 数据的指令调优并不能提高保持的 CoT 基准的性能。
总之,CoT 提示为诱导 LLM 的推理能力提供了一种通用而灵活的方法。也有一些初步尝试将该技术扩展到解决多模态任务和多语言任务。除了将 LLM 与 ICL 和 CoT 直接结合使用外,最近的一些研究还探讨了如何将 LLM 的能力专门化到特定任务,这被称为模型专门化。例如,研究人员通过微调 LLM 生成的 CoT 推理路径上的小规模 Flan-T5,专门研究 LLM 的数学推理能力。模型专业化也可用于解决各种任务,如问答、代码合成和信息检索。
5.关键知识点
有效的思维链应具备的特点是:逻辑性、全面性、可行性
思维链只能在大语言模型中起作用。
Few-shot CoT是ICL的一种特殊情况。
Zero-shot CoT在prompt中不包括人工标注的任务演示。
CoT使大语言模型更具可解释性,更加可信。
更多优质内容请关注公号:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。
语言模型的预训练[6]:思维链(Chain-of-thought,CoT)定义原理详解、Zero-shot CoT、Few-shot CoT 以及在LLM上应用的更多相关文章
- 002/区块链核心概念与原理详解(Mooc)
1.课程介绍 (一).区块链前世今生 密码朋克--神秘组织(邮件组) 2.区块链核心概念与原理 (一)比特币是数字货币 为什么叫区块链? 因为比特币系统里面的数据是一个个的区块来存储,并且通过hash ...
- PHP实现链式操作的三种方法详解
这篇文章主要介绍了PHP实现链式操作的三种方法,结合实例形式分析了php链式操作的相关实现技巧与使用注意事项,需要的朋友可以参考下 本文实例讲述了PHP实现链式操作的三种方法.分享给大家供大家参考,具 ...
- XMind *思维导图的安装步骤(图文详解)
不多说,直接上干货! XMind中文官网: http://www.xmindchina.net/ 这一款软件,是非常实用和棒,也帮助我了很多地方.推荐给大家 需要正版和激活的,请见博文最下端的QQ技 ...
- 学习AI之NLP后对预训练语言模型——心得体会总结
一.学习NLP背景介绍: 从2019年4月份开始跟着华为云ModelArts实战营同学们一起进行了6期关于图像深度学习的学习,初步了解了关于图像标注.图像分类.物体检测,图像都目标物体检测等 ...
- 预训练语言模型的前世今生 - 从Word Embedding到BERT
预训练语言模型的前世今生 - 从Word Embedding到BERT 本篇文章共 24619 个词,一个字一个字手码的不容易,转载请标明出处:预训练语言模型的前世今生 - 从Word Embeddi ...
- 预训练语言模型整理(ELMo/GPT/BERT...)
目录 简介 预训练任务简介 自回归语言模型 自编码语言模型 预训练模型的简介与对比 ELMo 细节 ELMo的下游使用 GPT/GPT2 GPT 细节 微调 GPT2 优缺点 BERT BERT的预训 ...
- 从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史(转载)
转载 https://zhuanlan.zhihu.com/p/49271699 首发于深度学习前沿笔记 写文章 从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史 张 ...
- 【中文版 | 论文原文】BERT:语言理解的深度双向变换器预训练
BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding 谷歌AI语言组论文<BERT:语言 ...
- zz从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史
从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史 Bert最近很火,应该是最近最火爆的AI进展,网上的评价很高,那么Bert值得这么高的评价吗?我个人判断是值得.那为什么 ...
- 预训练中Word2vec,ELMO,GPT与BERT对比
预训练 先在某个任务(训练集A或者B)进行预先训练,即先在这个任务(训练集A或者B)学习网络参数,然后存起来以备后用.当我们在面临第三个任务时,网络可以采取相同的结构,在较浅的几层,网络参数可以直接加 ...
随机推荐
- Exception in thread "main" joptsimple.UnrecognizedOptionException: zookeeper is not a recognized option
背景: 在kafka集群上使用topic相关的命令时,报错: Exception in thread "main" joptsimple.UnrecognizedOptionExc ...
- 解决Github中使用Octotree时,出现 Error: API limit exceeded 报错 或者 Error: Connection error报错的问题(详细操作)
对于科研工作者来说,Github 是不可多得的利器,那么Octotree 插件的使用将会让用户在使用 Github 时拥有更好的体验,提高学习工作的效率.但是笔者在使用的过程中遇到以下这样的问题,下面 ...
- L2-020 功夫传人 (25分)
分析: ⽤⼆维数 组v存储师⻔谱系关系,v[i]表示编号为i的师傅所拥有的徒弟,如果徒弟个数等于0, 也就是说这是个得道者,那么v[i][0]保存放⼤的倍数,⽽且⽤visit[i] = true标记当 ...
- 🚀Flutter应用程序的加固原理
在移动应用开发中,Flutter已经成为一种非常流行的技术选项,可以同时在Android和iOS平台上构建高性能.高质量的移动应用程序.但是,由于其跨平台特性,Flutter应用程序也面临着一些安 ...
- Vue中使用el-menu高亮显示问题
https://blog.csdn.net/weixin_43336525/article/details/132541500 <template> <el-menu :defaul ...
- 每天学五分钟 Liunx 000 | 计算机与 Liunx
计算机 计算机是具有数据处理与逻辑运算的机器. 它有输入单元,输出单元,CPU 内部的控制单元,逻辑处理单元以及内存组成. 输入单元如鼠标键盘等输入设备: 输出单元如打印机,显示屏,等输出 ...
- linux 命令使用总结:vim,nohup,find,df,du,sudo,netstat,ll,curl,lastlog
1.Vim命令使用 vim 为编辑文本命令: vim 文件 回车即可查看文件 按 字母 i 键,即可进入 insert 编辑模式. 按 ESC 键即可退出编辑模式 输入冒号:wq 即可保存修改 输入 ...
- Keep English Level-01
state -- 声称,宣称,国家,政府 state-owned -- 国有的 He stated that "hell will break loose,politically and m ...
- Kafka的部分初始化参数的学习与整理
Kafka的部分初始化参数的学习与整理 背景 前段时间跟同事一起处理过kafka的topic offset的retention 时间与 log 的retention时间不一致. 导致消息还有, 但是o ...
- [转帖]是什么让 Redis“气急败坏”回击:13 年来,总有人想替 Redis 换套新架构
https://www.infoq.cn/article/AlF5NIhHdskayl0MTyQG 回击就代表输了?! 今年年中,一位前谷歌.前亚马逊的工程师推出了他创作的开源内存数据缓存系统 Dra ...