chain of thought (思维链, cot)

定义

思维链 (Chain-of-thought,CoT) 的概念是在 Google 的论文 "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models" 中被首次提出。思维链(CoT)是一种改进的提示策略,用于提高 LLM 在复杂推理任务中的性能,如算术推理、常识推理和符号推理

如上图,左边是传统的输入输出,右边是基于CoT思想的输入及输出。高亮部分及CoT, 说白了就是一个推理过程。

few-shot CoT

Few-shot CoT 是 ICL (in-context-learning)的一种特殊情况,它通过融合 CoT 推理步骤,将每个演示〈input,output〉扩充为〈input,CoT,output〉

类似上图所示右边的例子

zero-shot CoT

与 Few-shot CoT 不同,Zero-shot CoT 在 prompt 中不包括人工标注的任务演示。相反,它直接生成推理步骤,然后使用生成的 CoT 来导出答案。其中 LLM 首先由 “Let's think step by step” 提示生成推理步骤,然后由 “Therefore, the answer is” 提示得出最终答案。

举例:

假设我们有如下一个原始问题:

罗杰有5个网球。他又买了2罐网球。每个罐子有3个网球。他现在有多少个网球?

步骤一:构建prompt如下,让模型输出推理过程

问:罗杰有5个网球。他又买了2罐网球。每个罐子有3个网球。他现在有多少个网球?
答:让我们一步一步的思考。

模型输出结果:

首先,罗杰原本有 5 个网球。
然后,他买了 2 罐网球,每罐有 3 个网球,所以总共买了 2 * 3 = 6 个网球。
因此,罗杰现在有的网球数量为:
5(原来的网球) + 6(新买的网球) = 11 个网球。

步骤二:我们已经拿到了模型的推理过程了(即CoT),现在我们把CoT拼接起来,构造一个新的prompt给模型输出最终答案,prompt 如下:

问:罗杰有5个网球。他又买了2罐网球。每个罐子有3个网球。他现在有多少个网球?
答:让我们一步一步的思考。
首先,罗杰原本有 5 个网球。
然后,他买了 2 罐网球,每罐有 3 个网球,所以总共买了 2 * 3 = 6 个网球。
因此,罗杰现在有的网球数量为:
5(原来的网球) + 6(新买的网球) = 11 个网球。
所以最后的答案是:

模型输出:

罗杰现在有 11 个网球。

结论

  • CoT 对小模型作用不大,模型参数至少达到 10B 才有效果,达到 100B 效果才明显。并且,从小模型的输出可以看出,它们大部分是输出了流畅但不合逻辑的 CoT,因此得到错误的结果。

  • CoT 对复杂的问题的性能增益更大,例如 GSM8K(更难,因为基线最低)上 GPT-3 和 PaLM 的性能增加了一倍多。而对于 MAWPS-SingleOp(更简单的任务),性能改进非常小甚至是负面的。

  • 加上 CoT 的 PaLM 540B 超过了任务特定的用监督学习训练的模型的最优结果。不加 CoT 的话 GSM8K 和 MAWPS 任务上 LLM 的结果比不过最优的监督学习模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/112444.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【UE5】给模型指定面添加自定义材质

实现步骤 1. 首先我们向UE中导入一个简单的模型,可以看到目前该模型的材质插槽只有一个,当我们修改材质时会使得模型整体的材质全部改变,如果我们只想改变模型的某些面的材质就需要继续做后续操作。 2. 选择建模模式 3. 在模式工具栏中点击…

Linux学习之Ubuntu 20使用systemd管理OpenResty服务

sudo cat /etc/issue可以看到操作系统的版本是Ubuntu 20.04.4 LTS,sudo lsb_release -r可以看到版本是20.04,sudo uname -r可以看到内核版本是5.5.19,sudo make -v可以看到版本是GNU Make 4.2.1。 需要先参考我的博客《Linux学习之Ubuntu 2…

SpringBoot Mybatis 多数据源 MySQL+Oracle

一、背景 在SpringBoot Mybatis 项目中&#xff0c;需要连接 多个数据源&#xff0c;连接多个数据库&#xff0c;需要连接一个MySQL数据库和一个Oracle数据库 二、依赖 pom.xml <dependencies><dependency><groupId>org.springframework.boot</groupId&…

【Golang】go条件编译

交叉编译只是为了能在一个平台上编译出其他平台可运行的程序&#xff0c;Go 作为一个跨平台的语言&#xff0c;它提供的类库势必也是跨平台的&#xff0c;比如说程序的系统调用相关的功能&#xff0c;能根据所处环境选择对应的源码进行编译。让编译器只对满足条件的代码进行编译…

【Linux】centos8安装cmake3.27.4

第一步&#xff0c;去官网下安装包&#xff0c;一定不要下错了 下好了之后&#xff0c;用ftp软件传到云服务器或者虚拟机上&#xff0c;我用的是centos8系统&#xff0c;安装之前先准备好这些依赖项 yum install -y gcc gcc-c make automake yum install -y openssl openssl-…

多线程应用——单例模式

单例模式 文章目录 单例模式一.什么是单例模式二.如何实现1.口头实现2.利用语法特性 三.实现方式&#xff08;饿汉式懒汉式&#xff09;1.饿汉式2.懒汉式3.线程安全的单例模式4.双重检查锁5.禁止指令重排序 一.什么是单例模式 单例模式&#xff08;Singleton Pattern&#xff…

LLM本地知识库问答系统(二):如何正确使用LlamaIndex索引

推荐阅读列表&#xff1a; LLM本地知识库问答系统&#xff08;一&#xff09;&#xff1a;使用LangChain和LlamaIndex从零构建PDF聊天机器人指南 上一篇文章我们介绍了使用LlamaIndex构建PDF聊天机器人&#xff0c;本文将介绍一下LlamaIndex的基本概念和原理。 LlamaIndex简介…

视频分割合并工具说明

使用说明书&#xff1a;视频分割合并工具 欢迎使用视频生成工具&#xff01;本工具旨在帮助您将视频文件按照指定的规则分割并合并&#xff0c;以生成您所需的视频。 本程序还自带提高分辨率1920:1080&#xff0c;以及增加10db声音的功能 软件下载地址 https://github.com/c…

FPGA原理与结构——时钟IP核原理学习

一、前言 在之前的文章中&#xff0c;我们介绍了FPGA的时钟结构 FPGA原理与结构——时钟资源https://blog.csdn.net/apple_53311083/article/details/132307564?spm1001.2014.3001.5502 在本文中我们将学习xilinx系列的FPGA所提供的时钟IP核&#xff0c;来帮助我们进一…

TCP/IP五层模型、封装和分用

1.网络通信基础2.协议分层OSI七层协议模型TCP/IP五层/四层协议模型【重点】 3. 封装&分用 1.网络通信基础 IP地址&#xff1a;表示计算机的位置&#xff0c;分源IP和目标IP&#xff1b;举个例子&#xff1a;买快递&#xff0c;商家从上海发货&#xff0c;上海就是源IP&…

理虚实一体化全栈全场景云计算应用实训室解决方案

一、 云计算应用统概述 云计算应用系统是指基于云计算技术构建的应用系统&#xff0c;它将软件、数据、计算和存储资源部署在云服务器上&#xff0c;通过网络根据应用按照一定策略为用户提供相关服务。云计算应用系统广泛应用于各个领域&#xff0c;包括但不限于金融、教育、政…

Windows 系统彻底卸载 SQL Server 通用方法

Windows 系统彻底卸载 SQL Server 通用方法 无论什么时候&#xff0c;SQL Server 的安装和卸载都是一件让我们头疼的事情。因为不管是 SQL Server 还是 MySQL 的数据库&#xff0c;当我们在使用数据库时因为未知原因出现问题&#xff0c;想要卸载重装时&#xff0c;如果数据库…

零基础如何使用IDEA启动前后端分离中的前端项目(Vue)?

一、在IDEA中配置vue插件 点击File-->Settings-->Plugins-->搜索vue.js插件进行安装&#xff0c;下面的图中我已经安装好了 二、搭建node.js环境 安装node.js 可以去官网下载&#xff1a;安装过程就很简单&#xff0c;直接下一步就行 测试是否安装成功&#xff1a;要…

[JDK8下的HashMap类应用及源码分析] 数据结构、哈希碰撞、链表变红黑树

系列文章目录 [Java基础] StringBuffer 和 StringBuilder 类应用及源码分析 [Java基础] 数组应用及源码分析 [Java基础] String&#xff0c;分析内存地址&#xff0c;源码 [JDK8环境下的HashMap类应用及源码分析] 第一篇 空构造函数初始化 [JDK8环境下的HashMap类应用及源码分…

Java基础 数据结构一【栈、队列】

什么是数据结构 数据结构是计算机科学中的一个重要概念&#xff0c;用于组织和存储数据以便有效地进行访问、操作和管理。它涉及了如何在计算机内存中组织数据&#xff0c;以便于在不同操作中进行查找、插入、删除等操作 数据结构可以看作是一种数据的组织方式&#xff0c;不…

React + Next.js 搭建项目(配有对比介绍一起食用)

文章标题 01 Next.js 是什么02 Next.js 搭建工具 create-next-app03 create-react-app 与 create-next-app 的区别04 快速构建 Next.js 项目05 App Router 与 Pages Router 的区别 01 Next.js 是什么 Next.js 是一个 React 框架&#xff0c;它允许你使用 React 框架建立超强的…

Python(Web时代)—— Django数据库(多表)

两表联查 常见的两表关系&#xff1a; 一对多&#xff1a;ForeignKey 举例&#xff1a;一个学生对应多个地址 一般通过外键实现 需要在“多”的那个模型中使用ForeignKey 使用on_delete指定级联删除策略&#xff1a; CASCADE&#xff1a;当父表数据删除时&#xff0c;相对…

前端工程化

一、前端发展阶段概述 1、混沌期 整个江湖中只有一个传奇&#xff0c;就是”程序员” 这种模式下对人员的综合要求高&#xff0c;开发者既要会数据库开发&#xff08;SQL&#xff09;、又要会服务器端开发&#xff08;Java、C#、Php&#xff09;&#xff0c;还要会基本的前端…

使用 Netty 实现群聊功能的步骤和注意事项

文章目录 前言声明功能说明实现步骤WebSocket 服务启动Channel 初始化HTTP 请求处理HTTP 页面内容WebSocket 请求处理 效果展示总结 前言 通过之前的文章介绍&#xff0c;我们可以深刻认识到Netty在网络编程领域的卓越表现和强大实力。这篇文章将介绍如何利用 Netty 框架开发一…

<C++> STL_list

1.list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向 其前一个元素和后一个元素。list与…