在Chain of Thought出来后,出现过许多的优化方案例如Tree of thought, Graph of Thought, Algorithm of Thought等等,不过这些优化的出发点都更加"Machine Like",而非"Human Like", 哈哈不是说机器化不好,仅仅是对AGI的一些个人偏好而已。

所以如果我们从人类思考的角度出发,能否把当前模型的思考方式和人类的思考方式进行关联呢? 我先问了下PPLX-70B人类思维有哪些分类(这个问题RAG真的不如模型压缩后回答的效果)

我们再把之前已经聊过的一些引导模型推理思考的prompt模板,以及工具调用的一些prompt方案和上面的人类思维逻辑进行下不完全的类比:

Prompt策略 类比人类思维
Chain of Thought 逻辑思维中的演绎推理
Few Shot Prompt 类比思维
SELF-REFINE,Relfection 自省思维
ReAct,SelfAsk 后续性思维(线性思维?)
情感思维 哈哈夸夸模型会更好

和上面的人类思维模式相比,似乎还少了抽象思维和发散思维,这一章我们就聊聊这两种思考方式如何通过prompt来引导。

抽象思维: Step Back Prompt

  • Take a Step Back: Evoking Reasoning via Abstraction in Large Language Models
  • LARGE LANGUAGE MODELS CAN LEARN RULES

DeepMind提出的新Prompt方式,在思维链之前加了一步抽象(后退一步思考)。通过把原始问题抽象成更高层次的概括性、概念性问题,降低原始问题中的细节对推理的影响,如下

在RAG场景里,这类prompt策略很适合解决用户query过于细节,导致召回效果不佳的问题。用户在大模型场景的提问往往比在搜索框中的提问更加具体,包含更多条件和细节,举个例子query = “哪些国家在经济陷入低谷时,因为通货膨胀严重,而不得不加息“,如果直接对以上query进行改写,Decompose拆分,会发现都无法召回有效的内容,因为问题本身粒度已经太细了,这时不需要进一步拆分,相反需要更高层次的总结和抽象。我们只需要把问题修改成“哪些国家发生过被动加息”,这类更高层次的抽象概念,召回效果立刻起飞。

StepBack推理和COT推理相同,都是通过few-shot prompt来引导模型进行后退思考。

论文对三个不同领域的任务进行了评估,分别是STEM领域的推理任务,知识密集的QA任务,和multi-hop推理任务。其中前者和后两者的prompt模板存在差异,前者是让模型先抽象理论概念,后两者是更通用的提出stepback问题,个人感觉是归纳推理从特殊到一般的推理抽象过程在不同领域的差异性

STEM推理的few-shot prompt模板如下

知识密集的QA任务和multi-hop推理任务都是使用的以下few-shot prompt模板

测试下了step back prompt中few-shot才是核心,因为在不同领域中归纳推理的思维是不同的,有需要对概念进行抽象,有需要对不同时间,实体进行抽象,有需要对条件进行放宽,以下是论文中在QA场景使用的一些few-shot案例

效果上在PaML-2的模型上进行试验,各个任务上step-back都能相比COT有进一步的显著提升,在多数任务上stepback + RAG都能超越GPT-4的效果。并且prompt效果和few-shot的个数无关,1-shot的效果就很好。

不过在我们的场景中测试,论文中提到的几个stepback的问题其实一定程度上被放大了,导致当前看效果比较一般,主要有以下几个问题

  1. Context Loss:在抽象问题的过程中,模型丢掉了核心的条件,导致问题丢失了核心信息,后面的RAG也随之错误
  2. Abstraction Error: 在垂直领域,模型的归纳推理效果有限,往往在第一步定位principle、concept就存在错误
  3. Timing:Step Back Prompt和Decompose其实是相对对立的关系,各自适合解决一部分问题,在RAG场景中Decompose更适合粗粒度Query,Step Back适合细粒度Query,但想让模型自己决策不同的思考方式难度有点高哦

另一篇论文Large Language Models can Learn Rule思路也有些类似,也是先归纳推理再演绎推理,通过把抽象出的通用知识注入prompt,用来帮助下游推理。这里就不细说了~

发散思维:Diversity of Thought

  • Diversity of Thought Improves Reasoning Abilities of Large Language Models

发散思维简单说就是“一题多解“,“一物多用”, 其实在Self-Consistency这类Ensemble方案中就出现过。Self-Consistency通过让模型随机生成多个推理,从中Major Vote出概率最高的答案,更像是发散思维的对立收敛思维,重心放在从四面八方的各种尝试中抽象问题的核心。

Self-Consistency的重心放在收敛,而Diversity of Thought的重心放在发散。这里论文提出了两个可以发散模型思维的prompt方式

  • Approaches:以XX方式思考,例如数学问题可以让模型直接计算,化简计算,可视化,逆推等等
  • Persona:像谁谁一样思考,例如金融问题可以像Buffett一样思考,数学问题像Turing一样思考,其实每个名人背后也是相关思维思维方式的一种抽象,例如沃伦巴菲特代表是价值投资。莫名出现了拘灵遣将的即视感......

基于以上的多个发散维度,论文给出了两种prompt构建的方案

  • 多个approach拼成一个one-shot让模型推理一次给出多个不同的结果
  • 1个approach作为one-shot让模型推理多次

分别对应以下两种prompt

那如何得到上面的这些approach呢?这里论文也采用了大模型自动构建的方案,在某一类问题中随机采样query,使用以下prompt让模型生成回答该问题可以使用的方案,最后每个领域选择出现频率最大的TopN个Approach用来构建prompt。挖掘approach的prompt如下

效果上,使用发散思维和COT进行配合,在GSM8K,AQUA等推理任务,CommenseQA等常识任务,和BlocksWorld等规划任务上均有显著提升。并且和Self-Consistency的结论相似,以上发散思维的Ensemble数量更多,效果越好。

整体上以上的两种思维逻辑都还相对初步,对比已经比较成熟的演绎推理的COT还有再进一步探索的空间,以及如何在不同场景下让模型选择不同的思维模式,进行思考,并最终收敛到正确的结果也值得再进行尝试。

想看更全的大模型相关论文梳理·微调及预训练数据和框架·AIGC应用,移步Github >> DecryPrompt

解密prompt系列26. 人类思考vs模型思考:抽象和发散思维的更多相关文章

  1. 解密Prompt系列6. lora指令微调扣细节-请冷静,1个小时真不够~

    上一章介绍了如何基于APE+SELF自动化构建指令微调样本.这一章咱就把微调跑起来,主要介绍以Lora为首的低参数微调原理,环境配置,微调代码,以及大模型训练中显存和耗时优化的相关技术细节 标题这样写 ...

  2. 解密prompt系列5. APE+SELF=自动化指令集构建代码实现

    上一章我们介绍了不同的指令微调方案, 这一章我们介绍如何降低指令数据集的人工标注成本!这样每个人都可以构建自己的专属指令集, 哈哈当然我也在造数据集进行时~ 介绍两种方案SELF Instruct和A ...

  3. 解密Prompt系列2. 冻结Prompt微调LM: T5 & PET & LM-BFF

    这一章我们介绍固定prompt微调LM的相关模型,他们的特点都是针对不同的下游任务设计不同的prompt模板,在微调过程中固定模板对预训练模型进行微调.以下按时间顺序介绍,支持任意NLP任务的T5,针 ...

  4. 解密Prompt系列4. 升级Instruction Tuning:Flan/T0/InstructGPT/TKInstruct

    这一章我们聊聊指令微调,指令微调和前3章介绍的prompt有什么关系呢?哈哈只要你细品,你就会发现大家对prompt和instruction的定义存在些出入,部分认为instruction是promp ...

  5. 解密Prompt系列3. 冻结LM微调Prompt: Prefix-Tuning & Prompt-Tuning & P-Tuning

    这一章我们介绍在下游任务微调中固定LM参数,只微调Prompt的相关模型.这类模型的优势很直观就是微调的参数量小,能大幅降低LLM的微调参数量,是轻量级的微调替代品.和前两章微调LM和全部冻结的pro ...

  6. 人脸检测及识别python实现系列(3)——为模型训练准备人脸数据

    人脸检测及识别python实现系列(3)——为模型训练准备人脸数据 机器学习最本质的地方就是基于海量数据统计的学习,说白了,机器学习其实就是在模拟人类儿童的学习行为.举一个简单的例子,成年人并没有主动 ...

  7. .NET Core加解密实战系列之——使用BouncyCastle制作p12(.pfx)数字证书

    简介 加解密现状,编写此系列文章的背景: 需要考虑系统环境兼容性问题(Linux.Windows) 语言互通问题(如C#.Java等)(加解密本质上没有语言之分,所以原则上不存在互通性问题) 网上资料 ...

  8. Java 加解密技术系列文章

    Java 加解密技术系列之 总结 Java 加解密技术系列之 DH Java 加解密技术系列之 RSA Java 加解密技术系列之 PBE Java 加解密技术系列之 AES Java 加解密技术系列 ...

  9. [转载]《C++0x漫谈》系列之:多线程内存模型

    <C++0x漫谈>系列之:多线程内存模型 By 刘未鹏(pongba) 刘言|C++的罗浮宫(http://blog.csdn.net/pongba) <C++0x漫谈>系列导 ...

  10. 11.Java 加解密技术系列之 总结

    Java 加解密技术系列之 总结 序 背景 分类 常用算法 原理 关于代码 结束语 序 上一篇文章中简单的介绍了第二种非对称加密算法 — — DH,这种算法也经常被叫做密钥交换协议,它主要是针对密钥的 ...

随机推荐

  1. UIE_Slim满足工业应用场景,解决推理部署耗时问题,提升效能。

    项目链接:fork一下即可 UIE Slim满足工业应用场景,解决推理部署耗时问题,提升效能! 如果有图片缺失查看原项目 UIE Slim满足工业应用场景,解决推理部署耗时问题,提升效能 在UIE强大 ...

  2. 强化学习从基础到进阶-常见问题和面试必知必答[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战

    强化学习从基础到进阶-常见问题和面试必知必答[3]:表格型方法:Sarsa.Qlearning:蒙特卡洛策略.时序差分等以及Qlearning项目实战 1.核心词汇 概率函数和奖励函数:概率函数定量地 ...

  3. 7.5 C/C++ 实现链表队列

    链表队列是一种基于链表实现的队列,相比于顺序队列而言,链表队列不需要预先申请固定大小的内存空间,可以根据需要动态申请和释放内存.在链表队列中,每个节点包含一个数据元素和一个指向下一个节点的指针,头节点 ...

  4. 从嘉手札<2023-10-25>

    晨辉明灭 启明星低垂的挂在天边 烟霞浅浅的铺满了东方的天幕 赤红中张扬着睥睨的紫光 可惜 不过又是无趣的一天 我百无聊赖的抬起头 从缝隙里看向窗外的天空的一角 只是觉得无趣 一天天的日子如流水般远去 ...

  5. Redis安装,数据类型及常用命令

    安装 - 可以使用yum 安装,要先配置epel源 ``` yum install -y redis ``` - 可以编译安装 ``` wget http://download.redis.io/re ...

  6. python截取字符串(字符串切片)

    python中使用[]来截取字符串,语法: 字符串[起始位置:结束位置] 一.起始位置:结束位置 先看几个例子: s = 'python' print(s) #输出 python 直接输出字符串 #从 ...

  7. 【双指针】双指针算法详解两道经典OJ【力扣27,力扣26,力扣38】超详细算法教程

    [双指针]双指针算法详解两道经典OJ[力扣27,力扣26,力扣38]超详细算法教程 今天又又到了我们刷力扣题的时间啦! 今天博主给大家带来的三道题是: 27. 移除元素 26. 删除有序数组中的重复项 ...

  8. 知乎利用 JuiceFS 给 Flink 容器启动加速实践

    本文作者胡梦宇,知乎大数据架构开发工程师,主要负责知乎内部大数据组件的二次开发和数据平台建设. 背景 Flink 因为其可靠性和易用性,已经成为当前最流行的流处理框架之一,在流计算领域占据了主导地位. ...

  9. 在Java中,对 byte 和 short 类型 进行位操作的时候,严重留意事项

    总结:在java中,对byte和short类型的 右移操作 必须先进行 & 0xff 后再右移,避免byte或short是负数的情况下,导致 右移操作前 自动升为int,前面补了很多1,此时右 ...

  10. Pandas分组聚合

    groupby分组操作详解 在数据分析中,经常会遇到这样的情况:根据某一列(或多列)标签把数据划分为不同的组别,然后再对其进行数据分析.比如,某网站对注册用户的性别或者年龄等进行分组,从而研究出网站用 ...