当前位置: 首页 > news >正文

解锁 LLMs 的“思考”能力:Chain-of-Thought(CoT) 技术推动复杂推理的新发展

1.简介

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

起源:CoT 技术的概念是在 Google 的论文“Chain-of-Thought Prompting Elicits Reasoning in Large Language Models”中被首次提出。

现状:随着大语言模型(LLM)的发展,CoT 技术已成为提高 LLM 在复杂推理任务中性能的重要手段。通过特定的提示(prompt)或训练策略,可以引导模型生成详细的推理过程,从而提高模型的准确性和可解释性。

定义:CoT 技术指的是一种推理过程,其中模型在生成最终答案之前,先逐步推导出一系列的中间步骤或子目标。这些中间步骤构成了一个“思维链”,最终引导模型得到正确的结果。

核心思想:模仿人类的推理过程,即人们往往在解决问题时不是直接得出答案,而是通过一系列的思考、分析和推理步骤。

特点与优势

中间步骤:模型在生成最终答案之前,会先产生一系列的中间推理步骤。

可解释性:由于 CoT 提供了推理过程的可见性,因此它有助于提高模型决策的可解释性。

逻辑推理:CoT 可以帮助模型进行复杂的逻辑推理,尤其是在需要组合多个事实或信息片段的问题上。

上下文利用:在 CoT 中,模型可以利用上下文信息,通过逐步推理来解决问题,而不是仅仅依赖于直接的答案。

拓展技术自动思维链(Auto-CoT):这是一种更高级别的 CoT 技术,通过简单的提示,促使模型自我思考,自动展示从设置方程到解方程的整个推理过程。这种技术可以在保证每个思维链正确性的同时,实现更精简的提示词设计。

思路

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

在这里插入图片描述

2.CoT 方法

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

1.1 Few-shot CoT

假设基于 ICL 的测试样本输入表示为<input,demonstrations>,那么加入 Few-shot CoT 的测试样本输入,可表示为<input,CoT>。

1.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

种不同的 prompt(即由不同 demonstration 构造的 prompt)

对于每种不同的 prompt,让 LLM 生成M


条推理路径。

则对于同一个测试问题,共生成了M
条结果

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条不同的推理链+答案;

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 生成推理链。

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

在这里插入图片描述

CoT 中示例顺序的影响
《Chain of thought prompting elicits reasoning in large language models》

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

1.1.2 CoT 的增强策略
COT(Chain-of-Thought)的增强策略主要包括以下几种:

结合验证和细化:

思维链推理过程中可能会出现误差,产生错误的推理步骤。为了减少这种现象,可以结合验证来获取反馈,并根据反馈改进推理过程。这与人类的反思过程类似。

例如,VerifyCoT 设计了一种自然程序(NaturalProgram),允许模型产生精确的推理步骤,每个后续步骤都严格基于之前的步骤。

问题分解:

COT 通过将多步骤推理问题分解成多个中间步骤,分配给更多的计算量,生成更多的 token,再进行求解。这种策略有助于更好地推理问题的每个部分。

利用外部知识:

在某些情况下,为了促进知识密集型任务,可以结合外部知识对不确定的例子进行重新推理,从而减少再分析中的事实错误。

投票排序:

DIVERSE 等策略利用投票机制消除错误答案,然后对每个推理步骤进行独立的细粒度验证,从而提高推理的准确性。

提高效率:

通过优化模型结构和算法,减少不必要的计算量,提高推理的效率。

偏差增强一致性训练(BCT):

针对 COT 可能产生的系统性偏见问题,引入了 BCT 无监督微调方案。这种方法可以训练模型在包含和不包含偏见特征的提示下给出一致的推理,减少偏见推理。实验表明,BCT 可以显著降低偏差推理率,提高模型解释的可信度。

Zero-shot-COT:

引入了一种简单的零样本提示方法,通过在问题的结尾附加“Let’s think step by step”等词语,使大语言模型能够生成一个回答问题的思维链。这种方法无需额外的训练数据,可以直接应用于各种推理任务。

1.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 数据,会全面提高所有评测任务的表现

3.总结

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

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

那么,我们该如何学习大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一、大模型全套的学习路线

学习大型人工智能模型,如GPT-3、BERT或任何其他先进的神经网络模型,需要系统的方法和持续的努力。既然要系统的学习大模型,那么学习路线是必不可少的,下面的这份路线能帮助你快速梳理知识,形成自己的体系。

L1级别:AI大模型时代的华丽登场

L2级别:AI大模型API应用开发工程

L3级别:大模型应用架构进阶实践

L4级别:大模型微调与私有化部署

一般掌握到第四个级别,市场上大多数岗位都是可以胜任,但要还不是天花板,天花板级别要求更加严格,对于算法和实战是非常苛刻的。建议普通人掌握到L4级别即可。

以上的AI大模型学习路线,不知道为什么发出来就有点糊,高清版可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

相关文章:

  • 数智教育创新如何向未来?腾讯云与你探索革新之路
  • 捋清UITableView展示不同类型数据的差异
  • 聚合分析是Elasticsearch中非常强大的工具
  • nginx 配置2级目录 刷新404
  • 建议收藏!AIGC绘画基础,Midjourney风格码style reference code策展汇总合集
  • 后端项目实战--瑞吉外卖项目软件说明书
  • 升级和维护老旧LabVIEW程序
  • 主动元数据平台详解(下):BIG 十一问,详解定位、对接、血缘保鲜等问题
  • Zookeeper高频面试题整理(入门到精通)
  • 【Mars3d】config.json中的蓝色底图map.basemap = 2017代码实现
  • Jenkins For Windows编译构建C#项目环境搭建(完整版)
  • leetcode168:Excel表列名称
  • Linux函数localtime和time使用整理
  • 动捕技术服务+虚拟人动画制作:让ip形象更自然生动的“动”起来
  • 蓝桥杯软件测试第十五届蓝桥杯模拟赛1期题目解析
  • ➹使用webpack配置多页面应用(MPA)
  • Docker入门(二) - Dockerfile
  • ECMAScript6(0):ES6简明参考手册
  • Java 多线程编程之:notify 和 wait 用法
  • java 多线程基础, 我觉得还是有必要看看的
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JS数组方法汇总
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • magento 货币换算
  • magento2项目上线注意事项
  • mysql 5.6 原生Online DDL解析
  • Puppeteer:浏览器控制器
  • Python3爬取英雄联盟英雄皮肤大图
  • 第十八天-企业应用架构模式-基本模式
  • 京东美团研发面经
  • 什么软件可以剪辑音乐?
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 网页视频流m3u8/ts视频下载
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • Mac 上flink的安装与启动
  • Spring第一个helloWorld
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​ubuntu下安装kvm虚拟机
  • ​业务双活的数据切换思路设计(下)
  • !$boo在php中什么意思,php前戏
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (八十八)VFL语言初步 - 实现布局
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (正则)提取页面里的img标签
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .NET Core中Emit的使用
  • .net 程序发生了一个不可捕获的异常
  • /*在DataTable中更新、删除数据*/
  • ?.的用法
  • @JSONField或@JsonProperty注解使用
  • @PostConstruct 注解的方法用于资源的初始化
  • @Resource和@Autowired的区别