【论文解读】如何使用1B参数的小模型打败GPT3.5

news2025/7/23 22:03:35

大型语言模型 (LLM) 通过利用思维链 (CoT) 提示生成中间推理链作为推断答案的基本原理,在复杂推理上表现出了令人印象深刻的性能。 然而现有的 CoT 研究主要集中在语言模态上。 我们提出 Multimodal-CoT(多模态思维链推理模型),它将语言(文本)和视觉(图像)模态结合到一个两阶段框架中,该框架将基本原理生成和答案推理分开。 通过这种方式,答案推理可以利用基于多模态信息的更好的生成原理。 使用 Multimodal-CoT,作者提出的模型在 对ScienceQA 数据集进行评估,结果显示在少于 10 亿个参数下比之前 LLM(GPT-3.5)高出 16 个百分点(75.17%→91.68% )的准确率。

论文地址:https://arxiv.org/abs/2302.00923
代码地址:https://github.com/amazon-science/mm-cot

本文研究在小于 10 亿参数的情况下就产生了性能提升,是如何做到的呢?简单来讲,本文提出了包含视觉特征的 Multimodal-CoT,通过这一范式(Multimodal-CoT)来寻找多模态中的 CoT 推理。

1 什么是COT

COT全称为Chain-of-Thought,定义是在应对推理任务时,在给出最终答案之前所产生的中间推理步骤,载体是一系列的短句子 。简单来说,思维链是一种离散式提示学习,更具体地,大模型下的上下文学习(即不进行训练,将例子添加到当前样本输入的前面,让模型一次输入这些文本进行输出完成任务),相比于之前传统的上下文学习,即通过x1,y1,x2,y2,…x_test作为输入来让大模型补全输出y_test,思维链多了中间的一些闲言碎语絮絮叨叨,以下面这张图为例子:

上图展示了在 CoT 诞生之前是怎样使用标准的 prompting 方法来求解推理任务的。首先这是一个少样本学习的方法,需要给出一些问题和答案的样例,然后拼接这正想要求解的问题,最后再拼接一个字符串“A:”之后输入到大语言模型中,让大语言模型进行续写。大语言模型会在所提供的问题和答案的样例中学习如何求解,结果发现很容易出错,也就是上面提到的大语言模型在推理任务上很容易遇到瓶颈

上图展示了 CoT 的做法,CoT 与 Standard prompting 唯一的区别就是,CoT 在样例中在给出问题的同时,不仅给出了答案,在答案之前还给出了人为写的中间推理步骤。在把问题、中间推理步骤和答案的若干样例拼接上所想要求解的问题和字符串“A”,再输入到语言模型之后,语言模型会自动地先续写中间推理步骤,有了这些推理步骤之后,它就会更容易地给出正确答案,也就是能够更好地解决推理这类的问题

2 研究背景

2.1 使用LLM进行CoT推理

最近,CoT 已被广泛用于激发多步LLM 的推理能力。具体来说,CoT 技术鼓励 LLM 生成用于解决问题的中间推理链,主要技术有Zero-SHot-CoTFew-Shot-CoTManual-CoTAuto-CoT

优化推理演示

Few-Shot-CoT的性能比较依赖于演示的质量,使用不同人员编写的演示例子在符号推理任务中产生的准确性浮动比较大。除了手工制作演示之外,最近的研究还研究了调整演示选择过程的方法,比如Auto-CoT。除此之外,还有作者提出了基于复杂性的语言模型中的强化学习(RL)和多模态思维链推理策略,已经获得有效的论证,比如GPT-3.5。

优化推理链

优化推理链的一个常用的方法是问题分解,有人提出了最小到最大的提示,将复杂问题分解为子问题,然后依次解决这些子问题。因此,对先前解决的子问题的答案有助于解决一个给定的子问题。

2.2 通过微调模型引出CoT推理

最近的一个兴趣是通过微调语言模型来引出CoT推理。在一个带有CoT注释的大规模数据集上对Encoder-Decoder结构的T5模型进行了微调。然而,当使用CoT来推断答案时,可以观察到性能的急剧下降,即在答案(推理)之前生成推理链,相反,CoT只被用作答案之后的解释。后续有人通过对一个更大的教师模型产生的思维链输出的学生模型来微调知识蒸馏,该方法在算术、常识和符号推理任务方面都表现出了性能的提高。具体论文和代码可以查阅《Large Language Models Are Reasoning Teachers》:
论文链接:https://arxiv.org/pdf/2212.10071.pdf

项目地址:https://github.com/itsnamgyu/reasoning-teacher

3 多模态CoT的挑战

现有研究表明,CoT推理能力可能以一定规模出现在语言模型中,例如超过1000亿个参数。然而,在1b模型中引出这种推理能力仍然是一个未解决的挑战,更不用说在多模态场景中了。本篇论文工作的重点是1b模型,因为它们可以用消费者级gpu(例如,32G内存)进行微调和部署。在本节中,作者进行了一些列实验,研究了为什么1b模型在CoT推理中失败,并研究如何设计一个有效的方法来克服挑战。

3.1 CoT的作用

首先,作者在ScienceQA基准测试上微调了CoT推理的纯文本基线,采用UnifiedQABase作为文本主体模型。3我们的任务被建模为一个文本生成问题,其中模型将文本信息作为输入,并生成由基本原理和答案组成的输出序列。如图1所示的一个示例,该模型将问题文本(Q)、上下文文本©和多个选项(M)的标记串联起来作为输入。

为了研究CoT的影响,我们将其性能与三种变量进行了比较: (i)直接预测答案(QCM→A)(无CoT);(ii)推理+预测答案(QCM→RA);(iii)预测答案+解释(QCM→AR)。


令人惊讶的是,我们观察到,如果模型在答案之前预测原因或者原理(QCM→RA),准确率下降↓了12.54%(80.40%→67.86%)。结果表明,这些理论原理不一定有助于预测正确的答案。在其他研究中也观察到类似的现象,其中合理的原因可能是模型在获得所需的答案之前超过了最大长度限制,或提前停止生成预测。然而,我们发现生成的输出(RA)的最大长度总是小于400个字符,这低于语言模型的长度限制(即UnifiedQABase中的512个)。因此,它值得更深入地研究为什么这些理论原理会影响答案推理效果。

3.2 模型被“幻觉”推理误导

为了深入研究推理如何影响答案预测,我们将CoT问题分为两个阶段,推理生成和答案预测。我们计算出了推理生成和答案预测的RougeL分数和准确性。表3显示了基于两阶段框架的结果。虽然两阶段基线模型获得了91.76的RougeL分数,但答案推理精度仅为70.53%。与表2中的QCM→A(80.40%)相比,结果显示,在两阶段框架中生成的基本原理并没有提高答案的准确性。

然后,我们随机抽样50个错误案例,发现该模型倾向于产生误导答案推断的幻觉理由。如图2所示,

模型(左部分)产生幻觉,“一个磁铁的南极最靠近另一块磁铁的南极”。我们发现,这些错误在错误情况中发生的比例为64%

3.3 多模态有助于实现有效的基本推理

我们推测,这种幻觉推理现象是由于缺乏必要的来执行有效的多模态cot的视觉环境。为了注入视觉信息,一种简单的方法是将成对的图像转换为标题然后在两个阶段的输入中附加标题。然而,如表3所示,使用标题只能产生边际的性能提高(↑0.59%)。然后,我们通过将视觉特征合并到语言模型中来探索一种高级技术。具体地说,我们将成对的图像输入DETR模型来提取视觉特征。

然后我们在输入解码器之前 将视觉特征和语言表示融合。有趣的是,有了视觉特征,理论基础生成的RougeL得分已经提高到96.97%(QCM→R),这相应地有助于更好的回答准确率达到84.91%(QCMR→A)。有了这些有效的理由,幻觉现象就得到了缓解,其中62.5%的幻觉错误已经被纠正所示,视觉特征确实有利于产生有效的理由,并有助于准确的答案推断。由于表3中的两阶段方法(QCMR→A)比表2中的所有单阶段方法都有更好的性能,因此我们在多模态-cot框架中选择了双阶段方法。

4 多模态COT

总的来说,我们需要一个可以生成文本特征和视觉特征并利用它们生成文本响应的模型。又已知文本和视觉特征之间存在的某种交互,本质上是某种共同注意力机制,这有助于封装两种模态中存在的信息,这就让借鉴思路成为了可能。为了完成所有这些,作者选择了 T5 模型,它具有编码器 - 解码器架构,并且如上所述,DETR 模型用于生成视觉特征。


class T5ForMultimodalGeneration(T5ForConditionalGeneration):
    _keys_to_ignore_on_load_missing = [
        r"encoder.embed_tokens.weight",
        r"decoder.embed_tokens.weight",
        r"lm_head.weight",
    ]
    _keys_to_ignore_on_load_unexpected = [
        r"decoder.block.0.layer.1.EncDecAttention.relative_attention_bias.weight",
    ]

    def __init__(self, config: T5Config, patch_size, padding_idx, save_dir):
        super().__init__(config)
        self.model_dim = config.d_model
        
        self.padding_idx = padding_idx
        self.out = open(os.path.join(save_dir, 'gate.txt'), 'w')

        self.shared = nn.Embedding(config.vocab_size, config.d_model)
        self.patch_num, self.patch_dim = patch_size

        self.image_dense = nn.Linear(self.patch_dim, config.d_model)
        self.mha_layer = torch.nn.MultiheadAttention(embed_dim=config.hidden_size, kdim=config.hidden_size, vdim=config.hidden_size, num_heads=1, batch_first=True)
        self.gate_dense = nn.Linear(2*config.hidden_size, config.hidden_size)
        self.sigmoid = nn.Sigmoid()

        encoder_config = copy.deepcopy(config)
        encoder_config.is_decoder = False
        encoder_config.use_cache = False
        encoder_config.is_encoder_decoder = False
        self.encoder = T5Stack(encoder_config, self.shared)

        decoder_config = copy.deepcopy(config)
        decoder_config.is_decoder = True
        decoder_config.is_encoder_decoder = False
        decoder_config.num_layers = config.num_decoder_layers
        self.decoder = T5Stack(decoder_config, self.shared)

        self.lm_head = nn.Linear(config.d_model, config.vocab_size, bias=False)

        # Initialize weights and apply final processing
        self.post_init()

        # Model parallel
        self.model_parallel = False
        self.device_map = None

4.1 编码器

模型F (X)同时接受语言和视觉输入,并通过以下功能得到文本表示 H l a n g u a g e H_{language} Hlanguage和图像特征 H v i s i o n H_{vision} Hvision

T5 模型的编码器负责生成文本特征,但 T5 模型的解码器并没有利用编码器产生的文本特征,而是使用作者提出的共同注意式交互层(co-attention-styled interaction layer)的输出。

拆解来看,假设 H l a n g u a g e H_{language} Hlanguage是 T5 编码器的输出。 X v i s i o n X_{vision} Xvision 是 DETR 的输出。第一步是确保视觉特征和文本特征具有相同的隐藏大小,以便我们可以使用注意力层。

4.2 交互层

在获得语言和视觉表示后,我们使用单头注意网络将文本字符与图像像素相关联,其中查询(Q)、键(K)和值(V)为 H l a n g u a g e H_{language} Hlanguage X v i s i o n X_{vision} Xvision X v i s i o n X_{vision} Xvision ,其中注意力输出 H v i s i o n a t t n ∈ R n ∗ d H^{attn}_{vision} \in R^{n*d} HvisionattnRnd被定义为:

然后,我们应用门控融合机制如去融合文本和视觉特征

hidden_states = encoder_outputs[0]
image_embedding = self.image_dense(image_ids)
image_att, _ = self.mha_layer(hidden_states, image_embedding, image_embedding)
merge = torch.cat([hidden_states, image_att], dim=-1)
gate = self.sigmoid(self.gate_dense(merge))
hidden_states = (1 - gate) * hidden_states + gate * 

4.3 解码层

最后,解码器将融合的输出 H f u s e H_{fuse} Hfuse输入transformers,预测目标Y。算法1显示了多模态COT的完整过程。

5 实验结果

作者使用 UnifiedQA 模型的权重作为 T5 模型的初始化点,并在 ScienceQA 数据集上对其进行微调。他们观察到他们的 Multimodal CoT 方法优于所有以前的基准,包括 GPT-3.5。有趣的地方在于,即使只有 2.23 亿个参数的基本模型也优于 GPT-3.5 和其他 Visual QA 模型!这突出了拥有多模态架构的力量。

作者还展示了他们的两阶段方法优于单阶段方法。

6 实验结论

文本深刻研究了多模态CoT的问题,提出了多模态cot,它将语言和视觉模式整合到一个两阶段的框架中,将基本推理生成和答案预测分开,因此答案推理可以利用从多模态信息中更好地生成的基本推理。通过多模态cot,结果表明该方法在ScienceQA基准上的准确率超过GPT-3.5 有16个百分点。

这篇论文带来的最大收获是多模态特征在解决具有视觉和文本特征的问题时是多么强大。

  • 作者展示了利用视觉特征,即使是小型语言模型(LM)也可以产生有意义的思维链 / 推理,而幻觉要少得多,这揭示了视觉模型在发展基于思维链的学习技术中可以发挥的作用。
  • 从实验中,我们看到以几百万个参数为代价添加视觉特征的方式,比将纯文本模型扩展到数十亿个参数能带来更大的价值。

参考资料

  • 超越GPT 3.5的小模型来了!
  • Chain of Thought论文、代码和资源【论文精读】 - 哔哩哔哩
  • 思维链(Chain-of-thoughts)作为提示 - 知乎<
  • Chain of Thought 开山之作论文详解 - 知乎
  • 思维链微调Fine-tune-CoT方法:大型语言模型教小模型一步一步推理 - 智源社区
  • 有了Fine-tune-CoT方法,小模型也能做推理,完美逆袭大模型 - 智源社区
  • 首个标注详细解释的多模态科学问答数据集,深度学习模型推理有了思维链-51CTO.COM
  • 上海交大&亚马逊|语言模型的多模态思想链推理 - 智源社区

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

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

相关文章

GCC:从源文件到可执行文件

GCC&#xff1a;从源文件到可执行文件 假设我们有hello.c 文件 #include <stdio.h> int main(){printf("hello world!\n");return 0; }怎么在linux上利用GCC命令生产可执行文件&#xff08;单文件编译&#xff09;呢&#xff1f; 一、流程 C文件从源文件到…

二极管温度补偿电路工作原理分析

众所周知&#xff0c;PN结导通后有一个约为0.6V&#xff08;指硅材料PN结&#xff09;的压降&#xff0c;同时PN结还有一个与温度相关的特性&#xff1a;PN结导通后的压降基本不变&#xff0c;但不是不变&#xff0c;PN结两端的压降随温度升高而略有下降&#xff0c;温度愈高其…

Git天天用,不得不看的那些事

作为一个工作两年的开发同学&#xff0c;git是每天都要接触的工具。但IDEA对git的封装已经满足了日常的代码提交需求&#xff0c;所以一直是以点点点的形式进行代码提交与更新&#xff0c;几乎没用命令行提交过&#xff08;现在想来也是有些惭愧&#xff09;&#xff0c;对于gi…

【华为OD机试模拟题】用 C++ 实现 - 环中最长子串(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

VMware ESXi 7.0 U3k Unlocker OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版)

ESXi 7 U3 标准版集成 Intel 网卡、USB 网卡 和 NVMe 驱动 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-7-u3-sysin/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org 本次针对 2023-02-21 发布的 ESXi …

Tina_Linux_系统软件 开发指南

Tina_Linux_系统软件 开发指南 1 概述 编写目的&#xff1a;本文档作为Allwinner Tina Linux系统平台开发指南&#xff0c;旨在帮助软件开发工程师、技术支持工程师快速上手&#xff0c;熟悉Tina Linux系统的开发及调试流程。 适用范围&#xff1a;Tina Linux v3.5及以上版本…

5.35 综合案例2.0 -称重数据上传云端

综合案例2.0 - 称重数据上传云端案例说明连线功能实现1.阿里云平台连接代码应用开发3.1新建‘普通项目’3.2关联产品和设备3.3新建‘移动应用’3.4添加组件3.5配置组件信息3.6保存预览案例说明 使用hx711串口模块称重,结合IOT studio制作手机APP远程控制并采集物体重量。 hx7…

自学前端,你必须要掌握的3种定时任务

当你看到这篇博客的时候&#xff0c;一定会和狗哥结下不解之缘&#xff0c;因为狗哥的博客里不仅仅有代码&#xff0c;还有很多代码之外的东西&#xff0c;如果你可以看到最底部&#xff0c;看到投票环节&#xff0c;我相信你一定感觉到了&#xff0c;狗哥的真诚&#xff0c;狗…

主题模型-LDA

目录 一.LDA的应用方向 二.朴素贝叶斯的分析 三.Gamma函数 四.Beta分布 五.Beta分布的期望 六.LDA涉及的主要问题 1.共轭先验分布 ①.二项分布的最大似然估计 ②.二项分布与先验举例 ③.上述过程的理论解释 ④.先验概率和后验概率的关系 ⑤.伪计数 ⑥.共轭先…

什么品牌的游戏蓝牙耳机比较好?玩游戏延迟低的蓝牙耳机推荐

游戏耳机的出现其实最主要的作用就是让玩家能够更专注的沉浸在游戏世界内&#xff0c;在声音层面去享受游戏的沉浸感&#xff0c;游戏最重要的就是操作灵敏&#xff0c;需要快速通过声音来判断敌人走向&#xff0c;所以小编特意整理了一期玩游戏延迟低的蓝牙耳机。 一、南卡小…

python画图中的几个小技巧

主要解决pandas.DataFrame.plot及matlibplot.pyplot画图中&#xff0c;x轴太稠密及其他设置图中各个组件字体大小等问题&#xff0c;以示例展示为主。import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl pd.set_option(max_col…

扬帆优配|半天翻倍,“蹭热点”翻车,前期“牛股”已近腰斩

周五上午&#xff0c;A股商场整体走低&#xff0c;多数职业板块和个股跌落&#xff0c;军工和核算机等板块逆势上涨&#xff0c;北向资金半天净卖出额约38亿元。 个股方面&#xff0c;昨夜公告被证监会立案查询的奥联电子股价再度大跌&#xff0c;盘中最贱价较近期高位已腰斩。…

174万亿采购,奔向数字化

采购不单纯发生在外部&#xff0c;更发生在内部&#xff0c;只有两者同时进行&#xff0c;才能完成采购中心从成本到利润中心角色的转变。 作者|斗斗 编辑|皮爷 出品|产业家 数字化&#xff0c;让很多企业业务流程发生了质变。 《2022数字化采购发展报告》显示&#x…

怎么从零开始学黑客,黑客零基础怎么自学

很多朋友对成为黑客很感兴趣&#xff0c;很大原因是因为看到电影中黑客的情节觉的特别的酷&#xff0c;看到他们动动手指就能进入任何系统&#xff0c;还有很多走上黑客之路的朋友仅仅是因为自己的qq被盗了&#xff0c;或者游戏里的装备被别人偷了&#xff0c;想要自己盗回来&a…

第十二章 - 条件判断(case when 和 if)和视图

第十二章 - 条件判断&#xff08;case when 和 if&#xff09;&#xff0c;和视图&#xff08;view&#xff09;if 的用法case when 的用法视图&#xff08;view&#xff09;的用法if 的用法 通过使用if函数可以实现数据二分类或者多分类的功能&#xff0c;比如按年龄区分青年…

资源限制类题目七大技巧 解决所有大数据资源限制类问题

有一个无符号整数的文件&#xff0c;数据个数有40亿个&#xff0c;如何通过1G的内存返回出现次数最多的数 1. 对每个数调用哈希函数得到哈希值&#xff0c;将哈希值模上100&#xff0c;进行小文件分类&#xff08;相同的数一定在同一文件&#xff09; 2. 将每个小文件内出现次…

前向传播与反向传播参数的更新方式(附公式代码)

前向传播与反向传播意义及其参数的更新方式 文章目录前向传播与反向传播意义及其参数的更新方式一、前言二、前反向传播的作用三、前向传播四、反向传播代码一、前言 因为本身非科班出身&#xff0c;数学又学的很差&#xff0c;一直都是傻瓜式地用tensorflow和pytorch搭网络。…

「RISC-V Arch」SBI 规范解读(下)

第六章 定时器扩展&#xff08;EID #0x54494D45"TIME"&#xff09; 这个定时器扩展取代了遗留定时器扩展&#xff08;EID #0x00&#xff09;&#xff0c;并遵循 v0.2 中定义的调用规约。 6.1 函数&#xff1a;设置定时器&#xff08;FID #0&#xff09; struct sbi…

同花顺面试(部分)

又没录上&#xff0c;只能凭零星记忆来记录了 知识图谱有了解吗&#xff0c;知道用在你们系统哪个环节吗tomcat内存设置的多大。32位系统的话有限制吗&#xff1f;复盘&#xff1a;后面一想&#xff0c;可能是说32位系统地址寻址空间有限&#xff0c;内存最多4Ggprc你们用的序…

消息队列--Kafka

Kafka简介集群部署配置Kafka测试Kafka1.Kafka简介 数据缓冲队列。同时提高了可扩展性。具有峰值处理能力&#xff0c;使用消息队列能够使关键组件顶住突发的访问压力&#xff0c;而不会因为突发的超负荷的请求而完全崩溃。 Kafka是一个分布式、支持分区的&#xff08;partition…