(论文蒸馏)语言模型中的多模态思维链推理

(论文总结)语言模型中的多模态思维链推理

  • 论文名称
  • 研究背景
  • 动机
  • 主要贡献
  • 研究细节
    • 两阶段框架
    • 实验结果
      • 促进收敛性
      • 摆脱人工标注
      • 错误分析与未来前景

论文名称

Multimodal Chain-of-Thought Reasoning in Language Models

http://arxiv.org/abs/2302.00923

研究背景

CoT一开始出现了两种发展路径:一种是和CoT原始论文一致的,使用一个或几个和任务类似的示例进行提示的少样本(Few-Shot)CoT;一种是只在调用时给予启发(“请逐步思考”)的零样本(Zero-Shot)CoT。经过测试,少样本CoT会比零样本CoT更强(为什么?),因此成为了主流的研究方向。
少样本CoT的研究方向主要和优化示例和优化推理链有关。对于优化示例而言,首先是示例的生成,一种是和CoT原始团队相同的人工标注方法,称为手动生成示例;一种是基于LLMs的零样本CoT生成示例方法,称作自动生成示例。其次是示例的优化。第一,少样本CoT性能很大程度取决于示例质量,手动生成的示例会因为标注者不同而对性能有很大影响(有待进一步考证。原始CoT论文中提到少样例CoT性能和标注者语言习惯没有太大关联,这里提到性能有影响可能是因为不同的标注者提供的示例质量不同,例如准确性、逻辑性、步骤颗粒度等等);第二,对于示例的选择会产生很大影响。如果选择和要解决的问题语义相近的示例,一旦示例中出现错误,会导致极大的性能下降;因此开发出了自动CoT),将数据集问题划分为不同的簇,每次从每个簇中选择代表性问题并用零样本CoT生成其推理链,再把这种自动生成的示例用于少样本CoT。此外还有基于RL的方法和基于复杂度的方法。
对于优化推理链而言,也有多个趋势。一个是将问题进行分解,先将大问题分解成一个个小问题,再依次解答;每个小问题用得到之前问题的结果。(如果遇到含有条件分支的问题是否会指数级膨胀?如果中间答案错误会不会导致结果崩溃?)小问题还可以选择进行提示以提高输出质量。还有人提出了思维程序(PoT),将推理过程建模为一个程序,让LLM去执行它;另外还有对推理路径进行投票的方法。可以对大模型多个输出进行采样并进行多数表决,还可以增强随机性来输出更多的推理路径。
在文章发布之前,另一个趋势是通过微调大语言模型来引发思维链推理。主要方法是用老师模型的思维链输出微调学生模型,另一种是⼀种迭代的上下文感知提示方法,以根据当前步骤的上下文动态合成提示。

动机

对于多模态的输入(图+文)而言,100B以下的纯文本大模型很难输出对于输出正确结果有价值的思维链;无论是将思维链用于推理还是解释,效果都比直接输出结果要差。对于两阶段框架的CoT用法,也就是(1)QCM->R(2)QCMR->A,第一阶段的推理依据生成的RougeL分数及准确率都很高,但第二阶段的推理依然不如直接生成答案。通过对错误答案的分析发现,绝大多数情况都是因为没有视觉特征的参与,模型出现了幻觉,从而生成了虚假的推论依据。即使将图片内容用字幕表示出来,依然只有很微弱的提升。所以,应当将视觉特征与语义特征进行正交,从而得到正确的结果。

主要贡献

提出了一种两阶段框架,通过微调语言模型实现融合视觉和语言表征,从而实现多模态思维链。

研究细节

简要介绍:通过使用ViT模型提取出图片的视觉特征,然后在将其输入解码器之前与编码后的语言表示进行融合,就可以显著提升这种两阶段框架的多模态场景下的CoT效果。

两阶段框架

两阶段分别用带不同注释数据集训练同架构模型。第一阶段将原始的语言和视觉输入提供给模型,生成理由;第二部分将原始语言输入和生成的理由连接起来,在和视觉输入一起提供给模型生成答案。
[图片]

该基于Transformer的网络有三个步骤:编码,交互和解码。
编码:设模型为F(X),同时接受语言和视觉输入,文本表示H_{language}和视觉特征H_vision获得方式如下:
H l a n g u a g e = L a n g u a g e E n c o d e r ( X l a n g u a g e ) H v i s i o n = W h ⋅ V i s i o n E x t r a c t o r ( X v i s i o n ) H_{language} = LanguageEncoder(X_{language})\\ H_{vision} = W_h · VisionExtractor(X_{vision}) Hlanguage=LanguageEncoder(Xlanguage)Hvision=WhVisionExtractor(Xvision)
其中,· 由Transformer网络实现。 H l a n g u a g e ∈ R n ∗ d H_{language}\in R^{n*d} HlanguageRnd是Transformer编码器最后一层隐藏状态,其中n是输入语言长度,d是隐藏维度;视觉方面,通过ViT等冻结视觉提取模型提取块级视觉特征,然后通过一个可学习的投影矩阵 W h W_h Wh将特征转换为和 H l a n g u a g e H_{language} Hlanguage同形状的 H v i s i o n ∈ R m ∗ d H_{vision} \in R^{m*d} HvisionRmd,其中m是块的数量。
交互:编码结束后,使用单头注意力网络(为什么?)将文本标记和图像块相关联得到 Q ( H l a n g u a g e ) K ( H v i s i o n ) V ( H v i s i o n ) Q(H_{language})K(H_{vision})V(H_{vision}) Q(Hlanguage)K(Hvision)V(Hvision)。注意力输出为
H v i s i o n a t t n = S o f t m a x ( Q K T √ d k ) V H_{vision}^{attn} = Softmax(\frac{QK^T}{√ d_k})V Hvisionattn=Softmax(dkQKT)V
然后通过门控融合机制将 H l a n g u a g e H_{language} Hlanguage H v i s i o n H_{vision} Hvision融合:
λ = S i g m o i d ( W l H l a n g u a g e + W v H v i s i o n a t t n ) H f u s e = ( 1 − λ ) ⋅ H l a n g u a g e + λ ⋅ H v i s i o n a t t n , \lambda = Sigmoid(W_l H_{language} + W_v H_{vision}^{attn})\\ H_{fuse} = (1 − λ) · H_{language} + λ · H_{vision}^{attn} , λ=Sigmoid(WlHlanguage+WvHvisionattn)Hfuse=(1λ)Hlanguage+λHvisionattn,
融合后的输出即为 H f u s e ∈ R n ∗ d H_{fuse}\in R^{n*d} HfuseRnd W l W_l Wl W v W_v Wv是可学习参数。
解码:将 H f u s e H_{fuse} Hfuse输入Transformer解码器,以此来进行预测结果。

实验结果

从上图可以看到,多模态思维链的两种十亿以下的实现均做到了最尖端;第四部分的三种几个月后同期发布的模型和改论文的实现是正交且可融合的。他们可以联合起来达到没有人工标注推理依据的场景。

促进收敛性

两阶段与单阶段相比,在较低的训练轮次就可以取到较高的正确率,但后续的训练收益也就相对较低;多模态与Base模型相比,在每一个轮次都有更高的正确率。对于单阶段而言,多模态和Base模型在后期训练的成果基本一致,均强于两阶段基线模型;而两阶段多模态模型则强于所有模型。

摆脱人工标注

当用ChatGPT和InstructBLIP代替人工标注去进行推理链的生成时,第二阶段答案正确的概率和人工标注的准确率区别不大。
不同模型实现的有效性
将底层模型替换成不同类型其他变体之后,准确率没有太大的波动;而将视觉特征也进行替换后,ViT对比其他特征的优势是最大的。

错误分析与未来前景

对于这种基于十亿级模型的两阶段结构多模态思维链而言,最大的问题是对于常识的运用,这类错误占了总错误的80%。例如在解读地图、计算图像中的物体数量等。因此,后续的研究可以:(1)融入常识知识(2)整合更具信息性的视觉特征(3)实现过滤,剔除不相干的思维链(为什么会出现这种情况?)

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

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

相关文章

React Native 接入 eCharts

React Native 图表接入指南 概述 本文档详细介绍了在React Native项目中接入ECharts图表的完整步骤,包括依赖安装、组件配置、数据获取、图表渲染等各个环节。 目录 1. 环境准备2. 依赖安装3. 图表组件创建4. 数据获取Hook5. 图表配置6. 组件集成7. 国际化支持8…

基于C#的OPCServer应用开发,引用WtOPCSvr.dll

操作流程: 1.引入WtOPCSvr.dll文件 2.注册服务:使用UpdateRegistry方法注册,注意关闭应用时使用UnregisterServer取消注册。 3.初始化服务:使用InitWTOPCsvr初始化 4.使用CreateTag方法,创建标签 5.读写参数使用下面三…

Java类加载器getResource行为简单分析

今天尝试集成一个第三方SDK,在IDE里运行正常,放到服务器上却遇到了NPE,反编译一看,原来在这一行:String path Test.class.getClassLoader().getResource("").getPath(); // Test.class.getClassLoader().ge…

【CodeTop】每日练习 2025.7.4

Leetcode 1143. 最长公共子序列 动态规划解决,比较当前位置目标和实际字符串的字母,再根据不同情况计算接下来的情形。 class Solution {public int longestCommonSubsequence(String text1, String text2) {char[] t1 text1.toCharArray();char[] t2…

ES6从入门到精通:Promise与异步

Promise 基础概念Promise 是 JavaScript 中处理异步操作的一种对象,代表一个异步操作的最终完成或失败及其结果值。它有三种状态:Pending(进行中)、Fulfilled(已成功)、Rejected(已失败&#xf…

数据结构:二维数组(2D Arrays)

目录 什么是二维数组? 二维数组的声明方式 方式 1:静态二维数组 方式 2:数组指针数组(数组中存放的是指针) 方式 3:双指针 二级堆分配 💡 补充建议 如何用“第一性原理”去推导出 C 中…

HAProxy 和 Nginx的区别

HAProxy 和 Nginx 都是优秀的负载均衡工具,但它们在设计目标、适用场景和功能特性上有显著区别。以下是两者的详细对比:1. 核心定位特性HAProxyNginx主要角色专业的负载均衡器/代理Web 服务器 反向代理/负载均衡设计初衷高性能流量分发高并发 HTTP 服务…

基于Java+SpringBoot的健身房管理系统

源码编号:S586源码名称:基于SpringBoot的健身房管理系统用户类型:多角色,用户、教练、管理员数据库表数量:13 张表主要技术:Java、Vue、ElementUl 、SpringBoot、Maven运行环境:Windows/Mac、JD…

【MySQL安装-yum/手动安装,卸载,问题排查处理完整文档(linux)】

一.使用Yum仓库自动安装 步骤1:添加MySQL Yum仓库 sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm步骤2:安装MySQL服务器 sudo yum install mysql-server -y步骤3:启动并设置开机自启 sudo systemctl start mysqld sudo systemct…

自定义线程池-实现任务0丢失的处理策略

设计一个线程池,要求如下:队列最大容量为10(内存队列)。当队列满了之后,拒绝策略将新的任务写入数据库。从队列中取任务时,若该队列为空,能够从数据库中加载之前被拒绝的任务模拟数据库 (TaskDa…

【NLP入门系列四】评论文本分类入门案例

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 博主简介:努力学习的22级本科生一枚 🌟​;探索AI算法,C,go语言的世界;在迷茫中寻找光芒…

Ubuntu安装ClickHouse

注:本文章的ubuntu的版本为:ubuntu-20.04.6-live-server-amd64。 Ubuntu(在线版) 更新软件源 sudo apt-get update 安装apt-transport-https 允许apt工具通过https协议下载软件包。 sudo apt-get install apt-transport-htt…

C++26 下一代C++标准

C++26 将是继 C++23 之后的下一个 C++ 标准。这个新标准对 C++ 进行了重大改进,很可能像 C++98、C++11 或 C++20 那样具有划时代的意义。 一:C++标准回顾 C++ 已经有 40 多年的历史了。过去这些年里发生了什么?这里给出一个简化版的答案,直到即将到来的 C++26。 1. C++9…

【MySQL】十六,MySQL窗口函数

在 MySQL 8.0 及以后版本中,窗口函数(Window Functions)为数据分析和处理提供了强大的工具。窗口函数允许在查询结果集上执行计算,而不必使用子查询或连接,这使得某些类型的计算更加高效和简洁。 语法结构 function_…

微型气象仪在城市环境的应用

微型气象仪凭借其体积小、成本低、部署灵活、数据实时性强等特点,在城市环境中得到广泛应用,能够为城市规划、环境管理、公共安全、居民生活等领域提供精细化气象数据支持。一、核心应用场景1. 城市微气候监测与优化热岛效应研究场景:在城市不…

【仿muduo库实现并发服务器】eventloop模块

仿muduo库实现并发服务器一.eventloop模块1.成员变量std::thread::id _thread_id;//线程IDPoller _poll;int _event_fd;std::vector<Function<Function>> _task;TimerWheel _timer_wheel2.EventLoop构造3.针对eventfd的操作4.针对poller的操作5.针对threadID的操作…

Redis 加锁、解锁

Redis 加锁和解锁的应用 上代码 应用调用示例 RedisLockEntity lockEntityYlb RedisLockEntity.builder().lockKey(TradeConstants.HP_APP_AMOUNT_LOCK_PREFIX appUser.getAccount()).value(orderId).build();boolean isLockedYlb false;try {if (redisLock.tryLock(lockE…

在 Windows 上为 WSL 增加 root 账号密码并通过 Shell 工具连接

1. 为 WSL 设置 root 用户密码 在 Windows 上使用 WSL&#xff08;Windows Subsystem for Linux&#xff09;时&#xff0c;默认情况下并没有启用 root 账号的密码。为了通过 SSH 或其他工具以 root 身份连接到 WSL&#xff0c;我们需要为 root 用户设置密码。 设置 root 密码步…

2730、找到最长的半重复子字符穿

题目&#xff1a; 解答&#xff1a; 窗口为[left&#xff0c;right]&#xff0c;ans为窗口长度&#xff0c;same为子串长度&#xff0c;窗口满足题设条件&#xff0c;即只含一个连续重复字符&#xff0c;则更新ans&#xff0c;否则从左边开始一直弹出&#xff0c;直到满足条件…

MCP Java SDK源码分析

MCP Java SDK源码分析 一、引言 在当今人工智能飞速发展的时代&#xff0c;大型语言模型&#xff08;LLMs&#xff09;如GPT - 4、Claude等展现出了强大的语言理解和生成能力。然而&#xff0c;这些模型面临着一个核心限制&#xff0c;即无法直接访问外部世界的数据和工具。M…