AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


有了Chain of Thought Prompting,大模型能做逻辑推理吗?
发布日期:2024-05-02 18:27:19 浏览次数: 2540


作者:林俊旸,阿里巴巴集团 · 多模态&NLP
声明:本文只做分享,版权归原作者,侵权私信删除!
原文:https://zhuanlan.zhihu.com/p/589087074

Prompt的简单回顾

开始介绍CoT前,先简单从GPT-3开始回顾Prompting的实现。原论文其实用zero-shot和fewshot的实现就说明了如何prompt大模型做这两个任务,如下图所示:

zeroshot就是给GPT传入输入,希望LM根据输入输出正确结果,是比较常规的做法,但是fewshot就很不一样,相比传统方法很多利用BP训练模型的方法来做fewshot,GPT-3提出了一个demonstration的概念,在输入前面给定几个输入和正确答案的例子,对于要测试的样例,则接在例子之后希望其能生成正确答案,这个做法也经常被称为in-context learning。这个问题蛮有意思的,今年很多文章都开始广泛研究为何in-context learning能work,感兴趣的可以搜索相关文章,目前看其实也没什么明确结论。

但是,这种方法还是有比较大的缺陷的。如果你的问题相对简单,不需要什么逻辑推理,可能靠LM背答案就能做得不错,但是对于一些需要推理的问题,都不用太难,就一些简单的算术应用题,LM就大概率不太work。于是,Chain-of-Thought很自然地被提出了。

Chain-of-Thought Prompting

在解释何为CoT前,不妨来看个论文展示的结果:

不难看出,在解数学问题上,同样使用PaLM这个540B的超级LLM,CoT的表现是传统prompting的300%以上,甚至超过了此前有监督的最优表现。这看起来很不可思议,然而方法却极其简单。以一个数学题为例,如果我们用经典的demonstration作为例子来激发LLM的in-context learning:

可以看到模型无法做出正确的回答。但如果说,我们给模型一些关于解题的思路,也就是题解,就像我们数学考试,都会把解题过程写出来再最终得出答案,不然无法得分。CoT做的就是这件事,示例如下:

左侧是输入,右侧是输出,那么可以看到,实现上无非就是修改了demonstration每个example的target,source保留原样,但target从原先的answer(a)换成了rationale(r) + a。因此可以看到右侧,所有内容均由模型生成,模型不是生成a,而是生成r+a。

作者提到了很多CoT的优势,其中包括它把一个多步推理问题分解出多个中间步骤,并且让LLM更加可解释。它能解决的问题很多,除了上述的数学应用题,还有常识推理、以及symbolic manipulation这类任务(就是一些手造的考验大模型的问题,比如最典型的Last Letter Concatenation和coin flip),下面补充几个例子方便理解:

说实话,像Last Letter Concatenation这种任务,直接交给LLM,我甚至都能猜到它几乎无法完成。但配上Chain of Thought让它更好理解任务要求模型做什么,显然它就能做得更好。尽管我依然觉得很难,因为我们的LLM是基于subword训练的,LLM除了理解任务,还得事先了解一些subword之间的connection。

而作者们还指出一个问题是,当遇到这类涉及推理的问题时,standard prompting配合模型的scaling就显得作用不是很大,但换成CoT,提升就明显不少。而且在作者提出的OOD的setup里面(这里OOD意思是,比如Last letter concatenation,例子给的都是2个词的,问题问的是4个词的,或者coin flip里,例子都是flip了2次,但问题flip了4次),scaling在CoT的帮助下效果相当显著。这也可以看到,LLM真的强,越大越强,如果不强,可能是你不会用:)

但CoT有个天然的缺陷,它是靠着例子去激励模型生成解题过程+答案的,但如果是Zeroshot的场景呢?

Zeroshot CoT:让我们一步一步来

这文章粗看有种“离谱给离谱他妈敲门”的感觉,这里把standard prompting和CoT的fewshot以及zeroshot都放在一起便于理解:

先看左边,fewshot和zeroshot画风都很正常但解决推理问题有困难,于是看到右边,就有了右上方的CoT,通过例子来展示解题过程,但如果是zeroshot的setup呢,就直接画风突变,来一句“let's think step by step”来哄哄LLM,然后就work了。有多work呢,不如直接来看实验结果

简直可以说是杀疯了,MultiArith直接能让GPT-3从17提升到78,换到PaLM上稍微小点,25到66,然而配上self consistency(一句话说,让模型通过sampling生成多条路径和答案,用投票的方式选择概率最高的一条),直接干到88了。GSM8K也是类似,提升相当巨大。Scaling的表现也是看出来这方法尤其在超大模型才好使。

这不禁让人觉得,真的这么离谱吗,你哄一哄它它就生成解题过程和答案??

然而多看一下细节,其实会发现它事实上是一个pipeline。也就是说“Let‘s think step by step”这句话,只是通过这个prompt让LLM尽可能生成一些思考过程,然后再将生成的rationale和question拼在一起,重新配合一个answer指向的prompt如“The answer is ”来激励模型生成答案。这么一看还算是合理一些。

作者还做了解释,说明这句“Let's think step by step”是经过验证的,比如对比下面的其他的instruction,尤其那些不相关的和误导的,效果就非常差,说明大模型真的是在理解这句instruction的意思。(换句话说,就是试出来的呗)

不过个人认为,它给了一个启示,就是你可以让大模型一点点去生成思路和过程,然后再把生成结果拼进输入中,就有点类似多轮对话,context就包含此前生成的结果,生成质量也会因为context而变得更高。下面这一篇,个人认为跟这个思路是有关联的。

Least-to-Most Prompting,把大问题分解成一个个小问题逐个击破

其实如果Google搜索least-to-most,搜出来的往往不是这篇论文。作者在开篇就提到了,这个概念其实来自于教育心理学,我粗浅理解是一种渐进式的激励话术帮助学习新技能,简单来说就是一步一步来,其实不就是上文的step by step嘛。那么它针对的问题是,单纯的CoT不足以解决复杂问题,比如组合泛化等,但是我们可以把它分解成一个个小问题,然后再使用CoT,这样模型就能把问题解出来。所以从这个角度看,Least-to-Most和CoT不是选择关系,而是可以互相打配合的。具体怎么做呢?其实就是两步走,分别是:

  • • 分解问题

  • • 解决问题

这么说可能还有些许抽象,下面给一个原文的例子,先看第一阶段:

大多问题都可以定义成“输入-输出”的格式,同样两步走的两个任务也不例外。Stage 1做的事情就是要求大模型根据输入和提示“To solve {problem}, we need to ”,生成绿色的部分,即子问题。换句话说,这个任务的目标就是生成子问题,利用LLM和prompt去生成。

而Stage 2做的事情则是利用Stage 1得到的子问题和其解题结果拼进Stage 2的输入当中,让模型来生成最终答案,如下图所示:

可以看到图的上半部分即把问题替换成Stage 1的子问题,模型就根据context和新问题生成子问题的答案。当然你可能会产生疑问,问题虽然变简单了,但是它可能还是会做错不少,配合后面Stage 2,是不是就错上加错,最后也提升不了多少呢?这时候就可以看到,这一步也是可以用CoT来做的,可以看到右上角的框其实把解子问题的解题过程也列出来了。这也是为什么我前文提到Least-to-Most是可以配合使用的。

下一步做法就是把子问题和解题过程及答案全部拼到context后面,最后将最终要解的问题拼在最后,让模型去生成解题过程和正确答案,那么这一步也是用CoT来做的。

显然这是一个两步走的pipeline,具体不同任务怎么做这个pipeline是有些具体细节需要考虑的,因此作者给了比较多例子来做说明。比如针对Last Letter Concatenation这类问题,比如4个单词的case,其实Stage 1就不需要劳烦LLM了,写个规则让它先解2个词的case,再解3个词,最后解4个词的。因此只需要考虑Stage 2。以一个问题的生成过程为例:

模型逐步解决子问题,每解决下一个问题的context是会拼上上一个问题的输出结果。如果换到更加复杂的连续的action指令上,则需要上文提到的完整的流程。首先让LLM学习分解问题:

接着S2的prompt可以看到这里的CoT经过一些设计,比如prompt里面的Q是3个action的问题,rationale里面包含的是2个action的解法和1个action的解法,真实模拟了inference时逐步解决复杂问题的过程,一个复杂问题逐个增加简单问题最终达到终点。生成过程也就不需过多解释了,就是把action逐个预测出来。

在SCAN这个数据集上,Least-to-Most的表现可以说是让人惊诧,如果使用GPT-3的code-davinci-002(GPT-3有很多版本,每个版本对应的模型是什么建议翻墙去官网看介绍。),准确率能从16提到接近100%。你甚至可以直接认为这个数据集已经被它直接解决了……

另外还有数学题方面也是在原版CoT上很有进一步明显提升,这里就不再赘述了。

综上,可以看到LLM其实有很多潜力可以挖,很多时候我们可能不是能够一步到位挖出来,需要设计一些精巧的pipeline。所以,当你发现LLM在什么问题不work时,不要轻易否定它,看看是不是有什么固定的套路能把它的知识激发出来。

扩展:CoT+Finetuning一样效果很好

这里我用finetuning来帮助理解,而在实现上则是instruction tuning,后续有机会我再总结一些instruction tuning相关的内容,这个方法我认为是很好适配当前以GPT形态为主的LLM的,比原来那种加head的方法好得多也合理得多。而最新的比较火爆的文章FLAN-PaLM/T5,则是在吸收FLAN的精华的基础上,加入了CoT的数据来做finetune:

这么finetune过后的模型,其实不论在CoT任务和非CoT任务上其实都表现得最好,而且在BBH上做zeroshot优势更是巨大。这也进一步证明了CoT是可以和当前流行的instruction tuning无缝衔接的。

新的发现:代码数据很重要

尽管只是猜测,但目前看这个事情的可能性还是很大的。我最早是在Yao Fu的火遍全网的blog看到这个事情,仔细一思考,似乎是那么回事,你很难再找到类似代码这样step by step的instruction的数据了,它就和人类的大多推理的过程类似。评论区陈文虎老师提到他们的工作Program of Thoughts,个人觉得还是很impressive的。这里补充介绍这个工作,颇有意思。

PoT的角度比较极致。CoT是说我如何激发LLM的推理能力,以数学为例,但PoT谈的是LLM其实就不太适合做这事。毕竟它一股脑学一大堆文字的数据等等,其实本身很有可能学的东西就有错,自己做推理也很容易出错,此外数学问题往往是复杂的可能包含很多表达式,LLM其实用起来很不方便。PoT的策略就是让模型模仿程序来实现推理。作者给的例子谈到循环和递归的问题,如果LLM配合传统ICL(in-context learning)或者CoT,序列就会无比长,而模拟程序的PoT在形式上就看起来一步到位:

方法层面其实并不复杂,私以为核心就是在把CoT的chain替换成程序代码,看了一些问题和对应程序代码之后根据新问题写出程序,然后利用sympy拿到执行结果返回。比较有意思的是zero-shot,模仿“let‘s think step by step”替换成代码的开头和注释,似乎更能激发模型做出高质量的回答:

实验层面,背后的大模型用了GPT-3和Codex,但其实这里用的GPT-3是text-davinci-002,应该训练本身就包含了大量代码数据(不过它确实不是只针对代码),如果能看到davinci的结果可能会更有趣。结果非常优秀,配合self-consistency服用效果更佳:

总结与讨论

这次分享主要是介绍了CoT以及续作Least-to-Most的强大之处,目前从推特上观察,CoT已经被广泛应用,甚至很多人认为就是标准的玩法。但国内来看,似乎缺乏对它的重视,觉得不过是个简单的trick。其实不只是CoT,对整体LLM的认知我感觉和美国那边确实有些差距。至于为何,我觉得Jason Wei那条推特一定程度说明问题,知乎上也有人把他删掉的推特截图放出来,大致意思是20年后入门NLP的人比之前的幸福,他们对LM的认知来自于强大的LLM,而过去的人往往还停留在BERT的范式。只能说,这个认知差异,我深有感触吧。

此前有位老板问我们做通用模型的终极目标是什么,现在这样的LLM是不是终极模型的形态。我只能说,这个问题太深奥,甚至比标题提出的问题还要来得深奥得多,但至少现在看起来,可以通过一些方式激发出LLM的一定的逻辑推理能力(当然你也可以坚持认为这不是),我觉得这条路还是有希望的。尽管谈AGI让人看起来像个骗子,但事实上,全球范围真的有不少人相信这条路径能实现目标并为之努力着。

References

[1]Language Models are Few-Shot Learners
[2]Finetuned Language Models Are Zero-Shot Learners
[3]Chain of Thought Prompting Elicits Reasoning in Large Language Models
[4]PaLM: Scaling Language Modeling with Pathways
[5]Large Language Models are Zero-Shot Reasoners
[6]Self-Consistency Improves Chain of Thought Reasoning in Language Models
[7]Least-to-Most Prompting Enables Complex Reasoning in Large Language Models
[8]Scaling Instruction-Finetuned Language Models


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询