小模型也能COT

news2024/9/28 21:28:22

前两章我们分别介绍了COT的多种使用方法以及COT的影响因素。这一章更多面向应用,既现实场景中考虑成本和推理延时,大家还是希望能用6B的模型就不用100B的大模型。但是在思维链基础和进阶玩法中反复提到不论是few-shot还是zero-shot的思维链能力似乎都是100B左右的大模型才有的涌现能力,而在小模型上使用COT甚至会带来准确率的下降。

至于为啥小模型无法进行COT,论文[5]通过把小模型回答错误但大模型可以回答正确的问题进行归纳总结,认为小模型的COT能力受到有限的语义理解和数学计算能力的限制。不过我们在实际尝试中发现小模型的few-shot理解能力似乎是更大的短板,表现在小模型无法很好理解抽象few-shot中的推理模板和样本间的共性。

不过以上的观点都是针对模型的先天能力,那我们是否可以把COT推理作为一种生成风格,或者NLP任务类型,通过微调让模型获得COT能力呢ψ(`∇´)ψ

想要让小模型拥有COT能力,多数方案是通过COT样本微调来实现的,以下Reference[1]-[4]中的4篇论文的核心差异就在COT样本构造和微调方式。以下我们把几篇论文合在一起来说,下图来自[3]

img

COT样本

以下Reference中的论文都是使用大模型来生成COT样本不过在数据集,COT样本构建和过滤机制上存在差异。

论文[1]使用了GSM8k的数据集,用Code-Davinci-002随机生成40个的思维链推理,选择答案正确的一条作为训练样本。样本生成这块写的相对比较模糊。

论文[2]优化了COT样本准确率。使用Palm540B和GPT3 175B模型,用8个few-shot样本来引导模型生成COT,这里为了提高大模型COT的准确率,作者修改了指令,在few-shot+question之后会直接给出正确答案作为Hint,来引导模型倒推出正确的COT,同样是只过滤答案正确的样本

论文[3]优化了思维链的多样性。考虑同一个问题其实有很多种解法,以及不同的解法间往往存在逻辑共性,与其让模型拟合单一的推理结果,不如让模型从多个推理路径中去抽象重要信息。因此论文提出了diverse reasoning,每个样本用text-davinci-002生成多个思维链,保留所有答案正确且推理逻辑不同的样本。并且在论文中验证了一个样本生成更多思维链会带来显著的效果提升

论文[4]优化了COT数据集的多样性,整了个COT Collection数据集包含1.88M的COT样本。具体的数据筛选和构建逻辑详见论文。使用了Codex来生成思维链,方案融合了[2]和[3]

img

模型训练

不同论文选择了不同的student模型,指令样本构建和指令微调方式,简单对比如下

论文微调模型微调样本微调方式
[1]FlanT5 250M~11BFew-shot-COT+Zero-shot-COT+Few-shot-Answer Only蒸馏:Top5 Token的KL距离
[2]T5 60M~11BZero-shot-COT指令微调SFT
[3]GPT-3 0.3B~6.7Bprompt模板Zero-shot-COT指令微调SFT
[4]FlanT5 T0Few-Shot-COT + Zero-shot-COT两步指令微调

以上不同的指令样本Looklike如下,差异包括是否有few-shot上文,是否有COT推理

img

在指令样本构建上多数是直接输入问题,输出COT思维链的,但个人其实更偏好few-shot的COT方案。因为在实际应用中,其实需要分析和推理的很多场景都是非标准化的,远远不是解个数学题或者QA这类标准化问题可以覆盖。这种情况下需要定制场景所需的推理逻辑,这时zero-shot肯定就不行了,需要few-shot来给出不同场景所需的不同推理链路。例如问诊的流程要先问当前症状,病程,病史,用药,再基于用户不同的回答,选择是化验,拍片,还是听诊开药等等。因此大模型和小模型的能力差异除了小模型自身的推理能力有限,还有小模型的In-Context理解能力有限,而few-shot样本微调被证明可以提升模型In-context理解能力。

再说下微调的部分,除了常规的指令微调方案之外,[1]采用了蒸馏方案,不熟悉蒸馏的可以先看下Bert推理太慢?模型蒸馏。简单来说就是让Student模型拟合Teacher模型的分布,分布可以是对齐输出层也可以进一步对齐模型中间层,损失函数一般是两个分布的KL散度或者MSE。这里作者使用的蒸馏方案是对齐输出层分布,考虑OpenAI的接口每次只返回Top5 Token对应的概率,因此只对Student模型每步解码的Top5 Token计算KL散度作为loss。蒸馏过程还有一些例如tokenizer对齐的细节,详见论文

[4]采用了两步微调,第一步在指令微调模型的基础上,使用范围更广的COT Collection样本集对模型进行COT微调,再在该模型的基础上,使用单一领域/任务的COT样本进一步微调,效果会有进一步提升。这一点其实可能说明COT推理本身除了是一种生成风格,也是一种模型能力,所以不同的推理数据集之间存在可迁移性,我们在单任务推理中混入数学COT也发现有效果提升。

Insights

效果其实不用太多说,小模型在经过以上COT训练后,在对应数据集上都有很显著的能力提升。考虑不同论文使用的模型checkpoint不同,Benchmark数据集的划分也不同所以可比性不高,以及现在的很多random split的方案真的说不清楚是否有信息泄露问题。建议大家在自己的业务使用中去寻找更合适的方案。这里想更多说下论文中提到的一些insight

  • COT能力提升以其他任务能力下降为代价

论文[1]发现在数学COT能力提升的同时,模型在BigBench(BBH)上的打分会出现显著的下降,并且这个过程是随微调逐渐发生的。论文指出的可能原因是小模型能承载的能力有限,因此不像大模型可以许广泛任务上有很好的表现,小模型单一能力的提升,可能会以通用能力损失为代价。虽然这里我有些存疑,感觉BBH的效果下降也可能是因为COT的生成风格和很多通用任务的生成风格存在差异,如果在COT微调时在中加入额外的指令,把直接生成推理转化成基于指令推理的条件生成任务,可能会降低对其他任务的影响。

img

  • 小模型COT也存在规模效应

论文几乎都提到了这一点,简单说就是越大的模型越好,所以在ROI允许的范围内选择最大的小模型哈哈~

  • 使用Few-shot-COT微调,会同时提升zero-shot和few-shot能力,反之不成立

以上发现也是论文[1]使用混合样本(fewshot+zeroshot+无cot)样本进行微调的原因。其实比较好理解,因为COT推理的生成风格和其他指令任务是存在差异的(哈哈zero-shot-cot在我看来就像是无缘无故,别人问你问题,你本来可以直接给个答案,结果你突然开启柯南模式开始叭叭的推理)。因此如果用zero-shot-cot微调,会直接影响模型的解码分布,而使用few-shot-cot微调,充分的上文让模型更多拟合COT条件解码概率,只会有部分能力迁移到无条件解码概率,且对其他指令任务的影响也会更小。

img

  • 多步推理任务上COT微调可能比常规指令微调效果更佳,模型规模效应更明显

论文[3]对比了在同一个任务上使用COT样本微调和使用只有答案的常规样本微调,整体上在需要多步推理的任务上,COT微调有更明显的模型规模效应,随模型变大COT微调的效果会显著超过常规微调。

  • COT数据集的质量和数量都和重要

论文[2]论证了COT数据集存在规模效应,样本越多,微调效果越好,这里的规模效应可能更多来自思维链的多样性覆盖。而论文[3]论证了相同数量的COT样本,人工筛选的正确推理样本对比从模型预测答案正确的COT中采样相同量级的样本,效果会有显著提升。毕竟1个错误的样本可能需要10个正确的样本来纠偏,因此在保证数据集多样性和规模的同时,更有效的样本过滤逻辑也很重要。

 在线教程

  • 麻省理工学院人工智能视频教程 – 麻省理工人工智能课程
  • 人工智能入门 – 人工智能基础学习。Peter Norvig举办的课程
  • EdX 人工智能 – 此课程讲授人工智能计算机系统设计的基本概念和技术。
  • 人工智能中的计划 – 计划是人工智能系统的基础部分之一。在这个课程中,你将会学习到让机器人执行一系列动作所需要的基本算法。
  • 机器人人工智能 – 这个课程将会教授你实现人工智能的基本方法,包括:概率推算,计划和搜索,本地化,跟踪和控制,全部都是围绕有关机器人设计。
  • 机器学习 – 有指导和无指导情况下的基本机器学习算法
  • 机器学习中的神经网络 – 智能神经网络上的算法和实践经验
  • 斯坦福统计学习

请添加图片描述

人工智能书籍

  • OpenCV(中文版).(布拉德斯基等)
  • OpenCV+3计算机视觉++Python语言实现+第二版
  • OpenCV3编程入门 毛星云编著
  • 数字图像处理_第三版
  • 人工智能:一种现代的方法
  • 深度学习面试宝典
  • 深度学习之PyTorch物体检测实战
  • 吴恩达DeepLearning.ai中文版笔记
  • 计算机视觉中的多视图几何
  • PyTorch-官方推荐教程-英文版
  • 《神经网络与深度学习》(邱锡鹏-20191121)

  • 在这里插入图片描述

第一阶段:零基础入门(3-6个月)

新手应首先通过少而精的学习,看到全景图,建立大局观。 通过完成小实验,建立信心,才能避免“从入门到放弃”的尴尬。因此,第一阶段只推荐4本最必要的书(而且这些书到了第二、三阶段也能继续用),入门以后,在后续学习中再“哪里不会补哪里”即可。

第二阶段:基础进阶(3-6个月)

熟读《机器学习算法的数学解析与Python实现》并动手实践后,你已经对机器学习有了基本的了解,不再是小白了。这时可以开始触类旁通,学习热门技术,加强实践水平。在深入学习的同时,也可以探索自己感兴趣的方向,为求职面试打好基础。

第三阶段:工作应用

这一阶段你已经不再需要引导,只需要一些推荐书目。如果你从入门时就确认了未来的工作方向,可以在第二阶段就提前阅读相关入门书籍(对应“商业落地五大方向”中的前两本),然后再“哪里不会补哪里”。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

‘cnpm‘ 不是内部或外部命令,也不是可运行的程序

一、问题 昨天用npm 安装环境,实在太慢了,就想用cnpm,然后发现提示‘cnpm 不是内部或外部命令,也不是可运行的程序。 看了很多方法,选择了下面这个,运气好到爆棚,就直接可以用了。其他的方法暂未去了解。先…

【极数系列】Flink 初相识(01)

# 【极数系列】Flink 初相识(01) 引言 Flink官网:https://flink.apache.org/ Flink版本:https://flink.apache.org/blog/ Flink文档:https://ci.apache.org/projects/flink/flink-docs-release-1.12/ Flink代码库…

shell脚本-条件测试、

一.条件测试 1.( ) 和 { } ()会进/data ,开启子shell { } 直接切过去了,不开子shell 小案例: 2. test 命令 测试特定的表达式是否成立,当条件成立,测试语句的返回值为0&#xff…

[BUG] Authentication Error

前言 给服务器安装了一个todesk,但是远程一直就是,点击用户,进入输入密码界面,还没等输入就自动返回了 解决 服务器是无桌面版本,或者桌面程序死掉了,重新安装就好 sudo apt install xorg sudo apt inst…

PIL笔记:通道+模式+坐标系统+基本图像操作

PIL Python Imaging Library,Python的图像处理核心库 通道bands 灰度图片是单通道组成 彩色图片是三通道RGB组成 真彩色图片是四通道RGBA组成 模式 RGB RGBA … 坐标系统 左上角为原点(0, 0) 图像操作 显示图像 show 创建图像 open()打开图像new()创建I…

嵌入式学习-C++-Day1

嵌入式学习-CDay1 一、思维导图 二、作业 1.提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数&#xff08;要求使用C风格字符串完成&#xff09; #include <iostream> #include <string.h>using namespace…

shopee母婴选品:Shopee平台上进行母婴类目的选品

在Shopee平台上进行母婴类目的选品时&#xff0c;卖家可以通过一些策略来提高产品的市场竞争力和销售业绩。下面将详细介绍这些策略。 先给大家推荐一款shopee知虾数据运营工具知虾免费体验地址&#xff08;复制浏览器打开&#xff09;&#xff1a;D。dDqbt。Com/JU5o知虾是Sh…

考研C语言刷题基础篇之分支循环结构基础(二)

目录 第一题分数求和 第二题&#xff1a;求10 个整数中最大值 第三题&#xff1a;在屏幕上输出9*9乘法口诀表 第四题&#xff1a;写一个代码&#xff1a;打印100~200之间的素数 第五题&#xff1a;求斐波那契数的第N个数 斐波那契数的概念&#xff1a;前两个数相加等于第三…

3.Eureka注册中心

3.Eureka注册中心 假如我们的服务提供者user-service部署了多个实例&#xff0c;如图&#xff1a; 大家思考几个问题&#xff1a; order-service在发起远程调用的时候&#xff0c;该如何得知user-service实例的ip地址和端口&#xff1f;有多个user-service实例地址&#xff0…

git clone报错 fatal: unable to fork

1. 问题 git clone gitgithub.com:url-kaist/Quatro.git Cloning into Quatro... fatal: unable to fork 在使用Docker clone 代码时报错 2. 解决方法 查看是否安装openssh&#xff0c; 用以下命令查看系统是否已安装OpenSSH&#xff0c;如果有openssh-client和openssh-serve…

Oracle、MySQL数据库常规命令语法-简易记录(非常规持续更新)

前言:呈现的是非常基础必备命令以及常规关联语法,因涉及到不同数据库其表达都会有所区别,此篇纯属做个仓库记录更非常规持续更新,专业人士可忽略,且看且珍惜… MySQL: 关系型数据库、重点开源、支持大型规模、标准SQL数据语言、多平台多架构、高可用集群、可定制开发等…

php基础学习之变量

php使用变量的必要性 PHP 是一种动态网站开发的脚本语言&#xff0c;动态语言特点是交互性&#xff0c;会有数据的传递&#xff0c;而 PHP作为“中间人”&#xff0c;需要进行数据的传递&#xff0c;传递的前提就是 PHP 能自己存储数据(临时存储) php变量的命名规则 必须以do…

邯郸银行2023年营收、利润双降:四季度亏损超1亿元,承压明显

近日&#xff0c;邯郸银行发布《2024年度同业存单发行计划》&#xff0c;披露了2023年部分财务数据。信息显示&#xff0c;邯郸银行2023年实现营业收入34.03亿元&#xff0c;同比下降0.98%&#xff1b;净利润6.21亿元&#xff0c;同比下降58.51%。 而结合此前的财务数据测算可知…

grid布局,flex布局实现类似响应式布局的效果

一. grid布局 实现代码 <!DOCTYPE html> <html lang"en"><head><style>.box {display: grid;grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); /*自动填充&#xff0c;最小宽度300px*/justify-content: space-between;gap:…

CC工具箱使用指南:【平差工具】

一、简介 平差是一个摘自英文单词“adiustment”的中文翻译&#xff0c;它最初源于土地测量工程&#xff0c;并在后来广泛应用于各个测量领域在传统的测量中&#xff0c;由于各种误差的存在&#xff0c;例如仪器、人为、大地形态等因素&#xff0c;所得到的测量结果是不完全准…

Android开发之部署opencv4

1 新建一个空项目 不再多说 2从官网下载opencv https://opencv.org/releases/ 下载opencv-4.9.0-android-sdk 3 导入模块 点击file->new->Import Module选择解压之后的opencv-android-sdk文件夹中的SDk文件夹&#xff0c;并将:sdk修改为:opencv&#xff08;我的已安…

MySQL 初识MySQL

目录 1 数据库1.1 前言1.2 数据库分类1.2.1 关系型数据库&#xff08;RDBMS&#xff09;1.2.2 非关系型数据库1.2.3 关系型数据库与非关系型数据库的区别 2 链接数据库3 SQL分类4 存储引擎 1 数据库 1.1 前言 到底什么是MySQL? 大家都知道MySQL叫做数据库。那么什么是数据库…

设置 SSH 主机 xxx: (details) 连接到 VS Code Server - 重试 6

问题背景 在vscode上ssh连接到某台服务器的时候一直显示重试&#xff0c;但在本地终端里却可以正常ssh。 解决方案 按 Ctrl Shift P 打开命令面板。输入 Remote-SSH: Kill VS Code Server on Host…。选择出现问题的服务器即可。 猜测是本地的vscode与远程服务器的 ~/.vsc…

SpringBoot责任链与自定义注解:优雅解耦复杂业务

引言 责任链模式是一种行为设计模式&#xff0c;它允许你将请求沿着处理者链进行传递&#xff0c;直到有一个处理者处理请求。在实际应用中&#xff0c;责任链模式常用于解耦发送者和接收者&#xff0c;使得请求可以按照一定的规则被多个处理者依次处理。 首先&#xff0c;本…

编译和链接---C语言

引言 众所周知&#xff0c;C语言是一门高级的编程语言&#xff0c;是无法被计算机直接读懂的&#xff0c;C语言也不同于汇编PHP&#xff0c;无法直接翻译成机器语言&#xff0c;在学习的过程中&#xff0c;你是否好奇过我们所敲的C语言代码&#xff0c;是如何一步步翻译成机器…