尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

解密Prompt系列9. 模型复杂推理-思维链COT基础和进阶玩法

解密Prompt系列9. 模型复杂推理-思维链COT基础和进阶玩法 前言终于写了一篇和系列标题沾边的博客这一篇真的是解密prompt我们会讨论下思维链(chain-of-Thought)提示词究竟要如何写如何写的更高级。COT其实是Self-ASKReACT等利用大模型进行工具调用方案的底层逻辑因此在Agent调用章节之前我们会有两章来讲思维链先打预防针COT当前的研究多少存在一些玄学成分部分COT的研究使用的模型并非SOTA模型以及相同的COT模板在不同模型之间可能不具备迁移性且COT的效果和模型本身能力强相关哈哈可以去围观COT小王子和Claude友商的Prompt决战]。本章只是为大家提供一些思维链设计的思路以及给Agent调用做一些铺垫。思维链的核心是为了提高模型解决复杂推理问题的能力包括但不限于符号推理数学问题决策规划等等Chain-of-Thought让模型在得到结果前模拟人类思考推理的过程生成中间的推理步骤。适用于以下场景有挑战的任务解决任务本身需要多步推理模型规模对任务效果的提升相对有限COT基础用法Few-shot COTChain of Thought Prompting Elicits Reasoning in Large Language Models开篇自然是COT小王子的成名作也是COT的开山之作单看引用量已经是一骑绝尘。论文的核心是通过Few-shot的方案来引导模型生成中间推理过程并最终提高模型解决复杂问题的能力。核心逻辑很SimpleNaive通过在Few-shot样本中加入推理过程可以引导模型在解码过程中先给出推理过程再得到最终答案类似中间推理过程的加入可以显著提高模型在常识推理数学问题符号推理等复杂推理问题上的模型表现。先看效果见上图可以得到几个insightsCOT带来的效果提升具有涌现性只在100B左右的大模型上才出现显著更优的效果但作者没有给出模型规模的影响原因COT带来的效果提升在复杂问题例如GSM8K上表现更显著让我们直观来看下COT的Few-shot模板构建以及对解码的影响。这里我们使用Belle的数学COT指令样本采样10个构建了一组few-shot思维链指令如下测试数学能力嘛小学奥数经典的汽车相遇问题走一个问题两辆汽车从相距500千米的两城同时出发相向而行一辆摩托车以每小时80千米的速度在两辆汽车之间不断往返联络已知这两辆汽车的速度分别是每小时40千米和60千米求两汽车相遇时摩托车共行驶了多少千米题目不复杂500/(4060)*80 400千米以下分别使用ChatGPT和ChatGLM在Greedy-search模式下进行解码分别是直接提问和加入few-shot-cot后再提问promptchatgptchatglm-6b直接提问设两汽车相遇时间为\(t\)小时则两汽车相遇时的距离为\((4060)t100t\)千米。摩托车在这\(t\)小时内不断往返相当于在两汽车之间来回行驶了\(2\times 80t160t\)千米。因此摩托车共行驶了\(160t\)千米。根据题意两汽车相遇时的距离为500千米因此\(t\frac{500}{100}5\)小时。代入可得摩托车共行驶了\(160\times 5\boxed{800}\)千米。设两汽车相遇时摩托车行驶了 \(x\) 小时。根据题意两汽车相向而行它们的相对速度为 \(4060100\) 千米/小时。因此两汽车相遇时它们行驶的距离之和为\(500\times(10040)50000\)因为两汽车相遇时摩托车一直在行驶所以摩托车行驶的距离等于两汽车相遇时它们行驶的距离之和\(x\times8050000\)解得\(x4000\)因此两汽车相遇时摩托车共行驶了 \(4000\) 千米。few-shot COT设摩托车共行驶了x千米则两辆汽车相遇时摩托车往返的次数为x/500。在每次往返中摩托车行驶的距离为80千米所以摩托车共行驶的距离为x (80千米) × (x/500) 0.16x千米两辆汽车相遇时它们的总路程为500千米所以它们相遇所用的时间为t 500千米 / (40千米/小时 60千米/小时) 5小时根据摩托车的速度和时间可以得到x 80千米/小时 × 5小时 400千米因此摩托车共行驶了400千米。设两汽车相遇时摩托车行驶了 \(x\) 小时。由题意可知两汽车相遇时它们已经行驶了 500 千米所以有\(40x 60x 500\)解得 \(x50/9\)即两汽车相时摩托车行驶了 50/9 小时。因此摩托车共行驶了\(80 \times (50/9) 400\)加入COT之后chatgpt和chatglm都双双答对了虽然有运气成分且推理过程还显得有点智障吧。但你会发现不加入few-shot COT模型同样会进行推理再给出答案而非像论文中给出的模型会直接直接给一个答案没有任何推理。原因是论文使用的是text-davinci-002是没有经过RLHF的旧版本模型。我们在一些需要推理的多项选择问题上也进行了测试不管是使用few-shot COT还是加入COT指令样本进行微调确实都能带来一定程度上推理/数学能力的提升。论文还进行了一些消融实验包括准确率提升是否来自数学公式的引入论文尝试了few-shot部分只加入公式并不能显著提升效果。个人感觉这个消融实验不太完整因为很多复杂MWP问题模型很难映射到单一的公式而先进行问题分解后再逐步映射到中间公式在我们的场景里是可以提升效果的。这里推荐两个数据集APE210K和Math23K分别是猿辅导和腾讯开源的数学世界问题转化成公式的数据集大家可以自己试试看准确率提升是否因为few-shot-cot帮助模型更好的召回相应的知识论文尝试了先给出答案再进行推理的prompt模板发现效果显著变差。说明few-shot-COT只是激活模型给出推理推理过程本身才是模型效果提升的核心。我们在一些需要推理的多项选择问题上也发现先推理再回答选项的效果显著优于先回答选项再给出推理过程zero-shot COTLarge Language Models are Zero-Shot Reasoners除了使用Few-shot-COT样本可以让模型给出推理过程单纯用指令也可以让模型给出思维链且能进一步提升模型复杂问题推理能力。论文中效果最好的激活思维链的指令是Let’s think step by step哈哈哈我当时论文看到这里感觉空气都凝固了zero-shot-COT在论文中需要两步解码第一步用Let’s think step by step让模型给出推理过程第二步把推理过程和问题一起输入模型让模型给出结果。但实际使用时你会发现基本上第一步解码模型就会在推理结束时给出结果而把带结果的输入再输入模型极大概率第二步模型会给出相同的答案所以其实zero-shot-COT也可以直接一步到位。咱主打一个和相遇问题死磕还是摩托车和货车相遇咱使用几组不同的激活词再来问一遍激活词chatgptchatglm请一步步的推理分析解决以下问题设两汽车相遇时间为t小时则两汽车相遇时的距离为(4060)t100t千米。由于两汽车相向而行所以它们的相对速度为4060100千米/小时。因此摩托车在t小时内往返的距离为2×80t160t千米。根据题意摩托车在两汽车相遇时停止往返因此摩托车共行驶的距离为160t千米。将上述两个式子联立解得t2.5小时。因此摩托车共行驶的距离为160×2.5400千米。设两汽车相遇时摩托车行驶了 \(x\) 小时。根据题意两汽车相向而行它们的相对速度为 \(4060100\) 千米/小时。因此两汽车相遇时它们之间的距离为 \(500-x\) 千米。根据题意摩托车以每小时 \(80\) 千米的速度在两辆汽车之间不断往返联络因此摩托车每行驶 \(x\) 小时会在两汽车相遇时行驶 \(80x\) 千米。因此可以列出方程\(80x 500-x\)解方程可得\(x 50\)因此两汽车相遇时摩托车共行驶了 \(80x3000\) 千米。请逐步推理回答问题设两汽车相遇时间为t小时则两汽车相遇时的距离为(4060)t100t千米。根据题意摩托车以80千米/小时的速度在两汽车之间不断往返因此摩托车在t小时内往返的路程为2×80×t160t千米。所以摩托车共行驶了160t千米。将两式相等得到100t500t5此两汽车相遇时摩托车共行驶了160×5160*5800800千米。设两汽车相遇时摩托车行驶了 \(x\) 小时。根据题意两汽车相向而行因此它们相遇的时间可以用以下方程计算\(t \frac{500}{40 60} 10\)因为两汽车相遇时摩托车一直在行驶所以摩托车行驶的时间也是 \(x\) 小时。根据题意摩托车的速度是每小时 \(80\) 千米因此摩托车行驶的距离可以用以下方程计算\(x \times 80 500 - t\)将 \(t\) 的值代入上式得到\(x \times 80 500 - 10 490\)因此两汽车相遇时摩托车共行驶了 \(490\) 千米。2组提示词只有第一组让chatgpt给出了正确的答案整体上提示词的效果很玄学我们在不同问题上例如多项选择数学计算也试过很多不同的方案没找到啥规律。论文作者也尝试了不同的指令词来验证zero-shot-COT对指令词的依赖程度见下表。整体上只要指令词有引导模型逐步推理的含义在对模型效果都是有提升的。我个人也是看到这里才觉得zero-shot-COT可能确实有一定的合理性因为指令提供的上文语义确实和模型推理的解码语义存在一定的相关性。效果上论文在MultiArith和GSM8k上和few-shot-cot进行了对比整体上比few-shot略差但是要显著超越只使用指令的baseline。不过需要注意这里的评测模型还是是text-davinci-002是没有经过RLHF只做了SFT的版本并不是当前的最强模型因此下图的效果提升放到GPT4上会打不小的折扣。毕竟GPT-4使用few-shot-COT在GSM8k上准确率已经奔着90%去了。在模型大小上zero-shot-COT同样具有规模效应只在大模型上才表现出超越常规指令的效果COT进阶用法以上不论是few-shot还是zero-shot COT都还是基于模型自身给出推理过程而人工不会过多干预推理过程。在进阶用法中会对推理过程做进一步的人工干预来引导解码步骤进一步提升解码准确率且以下的进阶方案是可以组合使用的。Self-ConsistencySELF-CONSISTENCY IMPROVES CHAIN OF THOUGHT REASONING IN LANGUAGE MODELSself-consistency是在few-shot-cot的基础上用Ensemble来替换Greedy Search来提高解码准确率的一种解码策略论文显示加入self-consistency可以进一步提升思维链的效果GSM8K (17.9%)。在使用大模型进行固定问题回答例如多项选择数学问题时我们往往会采用Greedy-Search的方式来进行解码从而保证模型解码生成固定的结果不然的话使用随机解码我采样4次模型把ABCD都选了一遍那这题模型到底是答对了还是答错了但每一步都选Top Token的局部最优的解码方案很显然不是全局最优的而self-consistency其实提供了一种无监督的Ensemble方案来对模型随机解码生成的多个回复“投票”出一个更准确答案如下图self-consistency的基础假设很人性化同一个问题不同人也会给出不同的解法但正确的解法们会殊途同归得到相同的正确答案。以此类比模型解码同一问题不同随机解码会得到不同的思维链推理过程期望概率最高的答案准确率最高。那核心就变成针对多个解码输出如何对答案进行聚合。论文对比了以下几种方案给定指令prompt和问题question模型通过随机解码会生成一组\(a_1,a_2,…a_m\)答案候选以及对应的思维链路径\(r_1,r_2,…r_m\)。效果最好的两种聚合方案分别是major vote直接对解码后的结果投票大法投出一个出现概率最高的答案。该说不说大道至简最简单的方案往往是最好的, 论文后面的结果都是基于投票法给出的normalized weighted sum: 计算\((r_i, a_i)\)路径的概率,既模型输出的每一个token条件解码概率求和并对解码长度K进行归一化。虽然这里略让人惊讶本以为加权结果应该会更好可能一定程度也说明模型的解码概率在答案的正确性上其实不太有区分度。\[p(r_i,a_i|prompt, question)exp(\frac{1}{k}\sum_{k1}^K logP(t_k|prompt,question,t_1,…t_{k-1})) \]针对解码参数论文还做了一些测试随机参数self-consistency支持不同的随机解码策略在参数设定上需要平衡解码的多样性和准确率例如temperature太低会导致解码差异太小投票投了个寂寞太高又会影响最终的准确率。看测试可能top-p40, temperature0.5是一个不错的测试起点采样次数major vote的效果很依赖候选样本数论文中很豪横采样了40次地主家的儿子也不敢这么玩…看效果采样5次以上就能超过Greedy解码具体解码次数看你家有多少余粮吧…Least-to-MostLEAST-TO-MOST PROMPTING ENABLES COMPLEX REASONING IN LARGE LANGUAGE MODELS如果说上面的Self-Consisty多少有点暴力出奇迹那Least-to-Most明显更优雅一些。思路很简单在解决复杂问题时第一步先引导模型把问题拆分成子问题第二步逐一回答子问题并把子问题的回答作为下一个问题回答的上文直到给出最终答案主打一个循序渐进的解决问题。也可以理解为通过few-shot来引导模型给出更合理更一致的推理思路再根据这个思路在解决问题。设计理念很好但我最好奇的是few-shot-COT要如何写才能引导模型针对不同场景进行合理的问题拆解。这里我们还是看下针对数学问题的few-shot应该如何构建的论文中的few-shot-prompt是纯手工写制作这里我采用chatgpt来生成再人工调整。从APE21K中随便抽了3个问题注意不要太简单已经有论文证明few-shot-COT样本的推理步骤越多效果越好。这里我拆解问题的Prompt(未调优)是对以下数学问题进行问题拆解分成几个必须的中间解题步骤并给出对应问题, 问题来让ChatGPT生成中间的解题步骤作为few-shot-cot模板Problem Reducing 问题拆解还是同一道相遇问题通过Reduce promptChatGPT输出要解答摩托车共行驶了多少千米我们需要回答以下问题:“两辆汽车相遇需要多长时间”摩托车在这段时间内共行驶了多少千米以上的问题拆解不是非常稳定有时会包括最终的问题有时只包括中间的解题步骤为了保险起见你可以在解析的问题后面都再加一个原始的问题。Sequentially Solve 子问题有序回答把Reduce步骤的子问题解析出来按顺序输入chatgpt先回答第一个子问题再把第一个子问题和回答一起拼接作为上文这里使用对话history也可以拼接只是为了直观展示Least-to-Most最值得借鉴的还是它问题拆分的思路这在后面被广泛借鉴例如Agent调用如何拆分每一步的调用步骤以及如何先思考再生成下一步Action在这些方案里都能看到Least-to-Most的影子。最后感谢你们的阅读和喜欢我收藏了很多技术干货可以共享给喜欢我文章的朋友们如果你肯花时间沉下心去学习它们一定能帮到你。因为这个行业不同于其他行业知识体系实在是过于庞大知识更新也非常快。作为一个普通人无法全部学完所以我们在提升技术的时候首先需要明确一个目标然后制定好完整的计划同时找到好的学习方法这样才能更快的提升自己。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】一、全套AGI大模型学习路线AI大模型时代的学习之旅从基础到前沿掌握人工智能的核心技能二、640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。三、AI大模型经典PDF籍随着人工智能技术的飞速发展AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型如GPT-3、BERT、XLNet等以其强大的语言理解和生成能力正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。四、AI大模型商业化落地方案五、面试资料我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
返回列表