语言模型中的多模态链式推理

在这里插入图片描述
在这里插入图片描述

神经网络的公式推导

  • 简介
  • 摘要
  • 引言
  • 多模态思维链推理的挑战
  • 多模态CoT框架
  • 多模态CoT模型架构细节
    • 编码模块
    • 融合模块
    • 解码模块
  • 实验结果
  • 运行代码
  • 补充细节
    • 安装包
    • 下载Flan-T5
    • 数据集准备
    • rouge
    • nltk
    • all-MiniLM-L6-v2
    • 运行

简介


本文主要对2023一篇论文《Multimodal Chain-of-Thought Reasoning in Language Models》主要内容进行介绍。

  • 参考文献:本文所涉及的所有资源的获取方式:https://www.aspiringcode.com/content?id=17097068673785&uid=d71ed07048414e97a398197d8a22e512

摘要


大型语言模型(LLM)在解决复杂推理问题时,通过引入思想链(CoT)提示来生成中间推理步骤,展现出了卓越的能力。但目前的CoT研究大多局限于语言领域。本文提出了一种创新的多模态CoT方法,该方法将语言(文本)和视觉(图像)信息融合到一个两阶段的框架中,该框架明确区分了基本原理的生成和答案的推理过程。这样的设计使得答案推理能够基于更加丰富和准确的多模态信息进行,从而提升了推理的质量。采用多模态CoT后,即使在模型参数仅为10亿的情况下,其性能也远超之前的顶尖LLM(如GPT-3.5),准确率从75.17%大幅提升至91.68%,甚至超越了ScienceQA基准上的人类表现。

引言


阅读一本未包含数字或图表的教育书籍时,我们发现,通过综合不同形式的数据如视觉图像、语言文字及音频信息,我们的知识吸收效率显著提升。大型语言模型(LLM)在应对复杂推理任务时,能够先构建一系列中间逻辑步骤,再据此推导出答案,这种技巧被形象地称为思维链推理(CoT),并广受赞誉。

然而,遗憾的是,当前关于CoT推理的研究大多局限于语言领域,对多模态情境的探索显得不足。为了在多模态环境中激活CoT推理,本文提出了一种新的多模态CoT框架。

在这个框架下,面对来自不同模态的输入信息,多模态CoT会先将复杂问题拆解成一系列中间推理环节(即基本原理),随后基于这些环节推导出最终答案。鉴于视觉与语言是当前最为普及的两种信息形式,我们的研究特别聚焦于这两者。
在这里插入图片描述

一个示例如图1所示。
通常,有两种方法可以引发多模式CoT推理:
(i)提示LLM
(ii)微调小模型

执行多模式CoT的最直接方法是将不同模态的输入转换为一个模态,并提示LLM执行CoT。例如,可以通过字幕模型提取图像的字幕,然后将字幕与要输入LLM的原始语言连接起来。然而,在字幕制作过程中存在严重的信息丢失;因此,使用字幕(与视觉特征相反)可能会在不同模态的表示空间中缺乏相互协同作用。

为了促进模态之间的交互,另一个潜在的解决方案是通过融合多模态特征来微调较小的语言模型。

由于这种方法允许灵活地调整模型架构以包含多模式特征,在这项工作中研究了微调模型,而不是提示LLM。

我们都知道1000亿参数(100B)下的语言模型往往会产生幻觉推理,误导答案推理。

为了减轻幻觉的挑战,文章提出了多模态CoT,将语言(文本)和视觉(图像)模式结合到一个分为两个阶段的框架中,该框架将原理生成和答案推理分开。通过这种方式,答案推理可以利用基于多模式信息的更好生成的理由。我们的实验是在ScienceQA基准上进行的,这是最新的带有注释推理链的多模式推理基准。实验结果表明,我们的方法比以前的GPT-3.5模型提高了+16%(75.17%→91.68%)。文章的贡献总结如下:
(i) 这项工作是第一次以不同的方式研究CoT推理。

(ii)提出了一个两阶段框架,通过微调语言模型来融合视觉和语言表示,以执行多模式CoT。该模型能够生成信息理性,以便于推断最终答案。

(iii)文章的方法在ScienceQA基准上实现了最先进的新性能,比GPT-3.5的精度高出16%,甚至超过了人类的性能。

多模态思维链推理的挑战


现有研究表明,CoT推理能力可能在一定规模的语言模型中出现,例如超过100B参数的大模型。然而在1B模型中激发这种推理能力仍然是一个悬而未决的挑战,更不用说在多模式场景中了。

这篇文章的重点是在1B左右模型,因为这样可以与常规消费级GPU(例如,32G内存)一起进行微调和部署。接下来将阐述1B模型在CoT推理中失败的原因,并研究如何设计一种有效的方法来克服这一挑战。

下面有个有趣的现象:

在ScienceQA基准上微调了CoT推理的纯文本基准模型。采用UnifiedQA-Base作为主干语言模型。任务为文本生成问题,其中模型将文本信息作为输入,并生成由基本原理和答案组成的输出序列。如图1所示的示例,该模型将问题文本(Q)、上下文文本(C)和多个选项(M)的标记串联作为输入。
为了研究CoT的影响,我们将其与三种变体的性能进行了比较:
(i) 直接预测答案,无CoT(QCM→A)
(ii) 推理,其中答案推理以基本原理为条件(QCM→RA);
(iii) 使用基本原理解释答案推理的解释(QCM→AR)。

在这里插入图片描述

令人惊讶的是,我们观察到准确性下降12.54%(80.40%→67.86%),如果模型在回答之前预测理性(QCM→RA)。结果表明,这些理由可能不一定有助于预测正确的答案。

其中的原因可能是模型在获得所需答案之前超过了最大token限制,或者提前停止生成预测。

然而,文章发现生成的输出(RA)的最大长度总是小于400个token,这低于语言模型的长度限制。因此,对理性危害答案推理的原因进行更深入的探讨是值得的。

为了进一步探究上述情况形成的原因,并深入研究原理如何影响答案预测,本文将CoT问题分为两个阶段,即原理生成和答案推理。基本原理生成使用RougeL分数来评估和答案推理使用准确性评估。表3显示了基于两阶段框架的结果。尽管两阶段基线模型在基本原理生成方面获得了91.76的RougeL分数,但答案推理的准确率仅为70.53%。
在这里插入图片描述

与表2中的QCM→A(80.40%)相比,结果表明,在两阶段框架中生成的基本原理并不能提高答案的准确性。

在这里插入图片描述

随机抽取的50个错误案例分析揭示,模型常陷入一种虚幻的推理陷阱,导致答案推导偏离正确轨道。如图2所示,一个典型错误是,模型(左侧基线模型)在没有视觉信息辅助的情况下,错误地推断出“一个磁体的南极会靠近另一个磁体的南极”。在这些错误案例中,此类视觉缺失导致的推理幻觉占比高达64%。

文章推测,这种幻觉根源在于执行高效多模态CoT时视觉上下文的缺失。为了弥补这一不足,一种直观的做法是将图像转化为文字描述,并将这些描述作为额外信息加入两个阶段的输入中。然而,如表3所示,这种做法带来的性能提升十分有限(仅提升0.59%)。

随后,我们探索了一种更先进的技术,即将视觉特征直接融入语言模型中。具体做法是,利用DETR模型提取配对图像中的视觉特征,并在将这些特征传递给解码器之前,与编码后的语言表示相结合。引入视觉特征后,基本原理生成的RougeL分数跃升至96.97%(QCM→R),这一改进也相应地提升了84.91%的答案准确率(QCMR→A)。随着有效理由的生成,幻觉现象得到显著缓解——62.5%的幻觉错误得以纠正(见图3(b))。这表明,视觉特征对于构建有效推理路径和准确答案推断至关重要。作为两阶段方法(QCMR→A),表3中的方法相较于表2中的一阶段方法展现出更优越的性能,因此,在多模态CoT框架中,我们选择了这一两阶段方法。
在这里插入图片描述

多模态CoT框架


基于之前的分析,多模式CoT将语言(文本)和视觉(图像)模式合并到一个两阶段的框架中,以减少幻觉输出,提升模型的效果。

多模式CoT由两个训练阶段组成:
(i) 基本原理生成
(ii) 答案推理

两个阶段共享相同的模型体系结构,但输入X和输出Y不同。
整个过程如图4所示。

在这里插入图片描述

在基本原理生成阶段,模型的输入为X,其中X如下:
在这里插入图片描述
其中括号中的前者表示第一阶段中的语言输入,后者表示视觉输入,即图像。

X可以看做实例化为多选推理问题的问题、上下文和选项的拼接,如图4所示。目标是学习一个基本原理生成模型R=F(X),其中R是基本原理。

在答案推理阶段,将基本原理R融入到到原始语言输入Description
,因此继续构建第二阶段的语言输入:Description
其中◦ 表示拼接。然后,我们将更新后的输入Description
馈送到答案推理模型,以推断最终答案Description

现在回过头来看图4,应该就比较清晰明了了。

多模态CoT模型架构细节


上面我们已经知道了文章的多模态CoT流程是怎么样的了,接下来将分析其中关键的模型架构细节也就是上文提到的F( ),以便我们能够对多模态CoT有更深入的理解。

F( )可以分为三个模块:编码模块、融合模块、解码模块

编码模块

在这里插入图片描述
其中
LanguageEncoder(·)指的就是transformer的encoder部分,输出的就是Transformer编码器中最后一层的隐藏状态。

VisionExtractor(·) 用于将输入图像矢量化为视觉特征,使用的应该是现成的视觉提取模型(DETR),其实应该也是类似transformer的encoder,因为计算机视觉中,也有vision transformer。

融合模块


在编码模块获得到文本和图片的表示后,先进行注意力计算,将文本和图像信息联系起来:
在这里插入图片描述
其中Q、K、V分别为Description

然后使用门控融合机制进行特征融合:在这里插入图片描述
其中Description
都是可训练的参数。

解码模块


这里就比较简单,使用的就是transformer的decoderDescription
作为输入,输出为我们需要的Y

至此,我们对多模态CoT应该有一个比较深入的了解了,关键内容其实就是使用encoder将文本信息和图像信息表示出来,使用门控融合机制进行特征融合,然后预测出我们需要的结果这个过程就是F( )。

所以多模态CoT完整的流程就是先将初始的文本和图像输入F( )得到图片和原始文本融合之后的CoT,然后再使用CoT的结果增强原始文本信息后得到的结果,再和图片信息输入F( )得到我们最终需要的预测结果。此时再去看图4,应该就一目了然了。

实验结果


在这里插入图片描述

表4显示了主要结果。Mutimodal CoTLarge比GPT-3.5高16.51%(75.17%→91.68%),并超过人类表现。具体而言,在8个问题类别中,Mutimodal CoT Large的得分为21.37%(67.43%→88.80%)的性能增益。与现有的UnifiedQA和GPT-3.5方法相比,这些方法利用上下文中的图像字幕来提供视觉语义,结果表明使用图像特征更有效。此外,根据表5中的消融研究结果,我们的两阶段框架有助于获得优异的结果。总体而言,结果验证了多模态的有效性以及通过两阶段框架使用1B模型实现CoT推理的潜力。

运行代码


在这里不得不吐槽一句,huggingface被禁了,下载模型还得用镜像,这就导致代码里设计模型加载的部分都得自己弄了,再加上有些库版本不兼容,一些代码还需要进行修改…历时3天终于跑通了。

在这里插入图片描述

因为我batch_size开的比原文大了2倍,训练的时候显存用的就比较多了,自己硬件是否符号复现条件,可供参考。

测试运行代码(epoch小、batch_size大方便加速调试):

# rationale generation 生成理由
python main.py \--data_root data/ScienceQA/data \--caption_file data/instruct_captions.json \--model declare-lab/flan-alpaca-base \--user_msg rationale --img_type resnet \--bs 16 --eval_bs 32 --epoch 1 --lr 5e-5 --output_len 512 \--use_caption --use_generate --prompt_format QCM-E \--output_dir experiments

训练一个epoch大约30min左右,评估+预测得几h+

在这里插入图片描述

得到图像增强理由后,对答案进行增强得到结果:

# answer inference 回答
python main.py \--data_root data/ScienceQA/data \--caption_file data/instruct_captions.json \--model declare-lab/flan-alpaca-base \--user_msg answer --img_type resnet \--bs 16 --eval_bs 32 --epoch 1 --lr 5e-5 --output_len 64 \--use_caption --use_generate --prompt_format QCMG-A \--output_dir experiments \--eval_le experiments/rationale_declare-lab-flan-alpaca-base_resnet_QCM-E_lr5e-05_bs16_op512_ep1/predictions_ans_eval.json \--test_le experiments/rationale_declare-lab-flan-alpaca-base_resnet_QCM-E_lr5e-05_bs16_op512_ep1/predictions_ans_test.json

这段就比较快了
在这里插入图片描述

补充细节


安装包


pip install -r requirements.txt

下载Flan-T5


从百度网盘下载Flan-T5模型参数,解压到
declare-lab\flan-alpaca-base\

数据集准备


文本数据集:
https://github.com/lupantech/ScienceQA/tree/main/data
的内容下载到data/ScienceQA/data/

图像数据集:
https://hf-mirror.com/cooelf/vision_features/tree/main
的内容下载到vision_features/
这是已经提取好的图像特征有resnet、vit等,想用哪个下哪个

rouge

metric = evaluate.load(r"/mmcot/mm-cot-main/mm-cot-main/myrouge/evaluate-main/evaluate-main/metrics/rouge")

main.py中rouge的路径要修改成自己的路径

nltk


下载nltk需要的数据

import nltk
nltk.download('punkt')

如果下载不下来,就把需要的tokenizers复制到对应的文件夹
cp -r tokenizers /root/nltk_data

all-MiniLM-L6-v2


在utils_evaluate.py中

model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2').cuda()

如果网络不行需要自行下载模型
下载地址:
https://hf-mirror.com/sentence-transformers/all-MiniLM-L6-v2/tree/main
里面所有的东西放在一个文件夹即可
代码里面模型的路径要改成自己的

运行

注意这里为了测试运行,epoch只设置了1,并且batch size设置的比较大
跑通了之后可以参考原文作者参数进行实验。

# rationale generation 生成理由
python main.py \--data_root data/ScienceQA/data \--caption_file data/instruct_captions.json \--model declare-lab/flan-alpaca-base \--user_msg rationale --img_type resnet \--bs 16 --eval_bs 32 --epoch 1 --lr 5e-5 --output_len 512 \--use_caption --use_generate --prompt_format QCM-E \--output_dir experiments# answer inference 回答
python main.py \--data_root data/ScienceQA/data \--caption_file data/instruct_captions.json \--model declare-lab/flan-alpaca-base \--user_msg answer --img_type resnet \--bs 16 --eval_bs 32 --epoch 1 --lr 5e-5 --output_len 64 \--use_caption --use_generate --prompt_format QCMG-A \--output_dir experiments \--eval_le experiments/rationale_declare-lab-flan-alpaca-base_resnet_QCM-E_lr5e-05_bs16_op512_ep1/predictions_ans_eval.json \--test_le experiments/rationale_declare-lab-flan-alpaca-base_resnet_QCM-E_lr5e-05_bs16_op512_ep1/predictions_ans_test.json

  • 参考文献:本文所涉及的所有资源的获取方式:https://www.aspiringcode.com/content?id=17097068673785&uid=d71ed07048414e97a398197d8a22e512

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

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

相关文章

LLaMA-Mesh: Unifying 3D Mesh Generation with Language Models 论文解读

目录 一、概述 二、相关工作 1、LLMs到多模态 2、3D对象生成 3、自回归的Mesh生成 三、LLaMA-Mesh 1、3D表示 2、预训练模型 3、有监督的微调数据集 4、数据集演示 四、实验 1、生成的多样性 2、不同模型text-to-Mesh的比较 3、通用语境的评估 一、概述 该论文首…

【Go】-go中的锁机制

目录 一、锁的基础知识 1. 互斥量/互斥锁 2. CAS(compare and swap) 3. 自旋锁 4. 读写锁 5. 乐观锁 & 悲观锁 6. 死锁 二、go中锁机制 1. Mutex-互斥锁 2. RWMutex-读写锁 2.1 RWMutex流程概览 2.2 写锁饥饿问题 2.3. golang的读写锁源…

.NET9 - 新功能体验(二)

书接上回,我们继续来聊聊.NET9和C#13带来的新变化。 01、新的泛型约束 allows ref struct 这是在 C# 13 中,引入的一项新的泛型约束功能,允许对泛型类型参数应用 ref struct 约束。 可能这样说不够直观,简单来说就是Span、ReadO…

抗癌药物“曲妥珠单抗”,或将纳入2025版《中国药典》!

在抗癌药物的浩瀚星空中,曲妥珠单抗如同一颗璀璨的星辰,以其卓越的治疗效果和广泛的应用前景,照亮了无数HER2阳性癌症患者的生命之路。近日,从国家药典委员会传来振奋人心的消息——注射用曲妥珠单抗正式进入《中国药典》2025版国…

JavaParser 的全面介绍

JavaParser 是什么? JavaParser 的快速介绍可以参考: # JavaParser的快速介绍 JavaParser是一个用于解析Java源码的开源工具,它提供了一种简单而有效的方式来解析和操作Java代码。JavaParser解析源码的方式主要基于其将Java代码转换为抽象语…

图形化界面MySQL(MySQL)(超级详细)

1.官网地址 MySQL :: Download MySQL Workbench 1.1在Linux直接点击NO thanks..... 下载完后是这个页面 1.2任何远端登录,再把jj数据库给授权 1.3建立新用户 进行连接 点击这个就运行了 只执行show tables;要先选中 圆圈处支持自己输入 点击这个就执…

【夹板涨停战法】技术形态,原理和操盘技术图文教程

夹板涨停战法的基本形态和原理 夹板涨停是指两股强大的做多力量以夹击的方式紧紧的封夹空头,把空头力量打趴下,让空头的做空希望被破灭。 两股强大的多头力量对付空头,多头战胜,轻易灭掉空头,一切在强大做多力量的把…

【2024 Optimal Control 16-745】Julia语法

Lecture 2 θ和它的导数符号是通过 Julia 中的变量命名方式实现的 变量 θ 的输入: 在 Julia 中,θ 是一个合法的变量名,就像普通的字母 x 或 y 一样。要输入 θ,可以使用以下方法: 在 Jupyter Notebook 或 Julia REP…

Java项目实战II基于SPringBoot的玩具销售商城管理系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着儿童娱乐与教育需求的…

Linux系统使用valgrind分析C++程序内存资源使用情况

内存占用是我们开发的时候需要重点关注的一个问题,我们可以人工根据代码推理出一个消耗内存较大的函数,也可以推理出大概会消耗多少内存,但是这种方法不仅麻烦,而且得到的只是推理的数据,而不是实际的数据。 我们可以…

stm32如何接收舵机的控制信号(而不是控制舵机)

看到很多如何stm32用pwm信号控制舵机的文章,老生常谈了 我来写一个stm32接收pwm信号的例子 ,这个pwm信号是用来控制舵机的 背景: 我需要接收航模接收机的,用来控制舵机的pwm信号, 得到这个信号后,做其他事情. 初版代码 pwm.h#ifndef _pwm_H #define _pwm_H#include "s…

RK3588 HDMI2.1电路参考设计原理

RK3588是瑞芯微电子(Rockchip)旗下的一款高性能应用处理器芯片,采用了ARM的big.LITTLE架构,结合了四个高性能的Cortex-A76核心和四个高效能的Cortex-A55核心。 big.LITTLE技术通过结合高性能的“大核”(big cores&…

【大数据学习 | Spark-Core】详解分区个数

RDD默认带有分区的,那么创建完毕rdd以后他的分区数量是多少? 从hdfs读取文件的方式是最正规的方式,我们通过计算原理可以推出blk的个数和分区数量是一致的,本地化计算。 我们可以发现数据的读取使用的是textInputFormat&#xff…

艾体宝干货丨差异解读:IT 和 OT 网络的数据包和网络分析

IT 网络(传统网络) IT 网络是现代计算的支柱,为数据交换、通信和处理提供了基础设施。典型应用包括 办公网络数据中心云服务互联网连接 这些网络依靠 TCP/IP、DNS 和 HTTP 等标准协议来促进设备之间的通信。通信路径可能随时发生变化&…

AOC显示器915Sw按键失灵维修记

大家好,我是 程序员码递夫 今天给大家分享的是自己维修老古董AOC液晶显示器按键失灵的的过程,实属DIY记录。 1、引子 家里有台老古董的19寸AOC液晶显示器(型号915Sw), 一直作为我的副显示器陪伴着左右,显示还正常&a…

Vscode进行Java开发环境搭建

Vscode进行Java开发环境搭建 搭建Java开发环境(Windows)1.Jdk安装2.VsCode安装3.Java插件4.安装 Spring 插件5.安装 Mybatis 插件5.安装Maven环境6.Jrebel插件7.IntelliJ IDEA Keybindings8. 收尾 VS Code(Visual Studio Code)是由微软开发的一款免费、开…

【MATLAB源码-第218期】基于matlab的北方苍鹰优化算法(NGO)无人机三维路径规划,输出做短路径图和适应度曲线.

操作环境: MATLAB 2022a 1、算法描述 北方苍鹰优化算法(Northern Goshawk Optimization,简称NGO)是一种新兴的智能优化算法,灵感来源于北方苍鹰的捕猎行为。北方苍鹰是一种敏捷且高效的猛禽,广泛分布于北…

戴尔 AI Factory 上的 Agentic RAG 搭载 NVIDIA 和 Elasticsearch 向量数据库

作者:来自 Elastic Hemant Malik, Dell Team 我们很高兴与戴尔合作撰写白皮书《戴尔 AI Factory with NVIDIA 上的 Agentic RAG》。白皮书是一份供开发人员参考的设计文档,概述了实施 Agentic 检索增强生成 (retrieval augmented generation - RAG) 应用…

第十六届蓝桥杯模拟赛(第一期)-Python

本次模拟赛我认为涉及到的知识点: 分解质因数 Python的datetime库 位运算 简单dp 1、填空题 【问题描述】 如果一个数 p 是个质数,同时又是整数 a 的约数,则 p 称为 a 的一个质因数。 请问 2024 有多少个质因数。 【答案提交】 这是一道结…

统⼀数据返回格式快速⼊⻔

为什么会有统⼀数据返回? 其实统一数据返回是运用了AOP(对某一类事情的集中处理)的思维。 优点: 1.⽅便前端程序员更好的接收和解析后端数据接⼝返回的数据。 2.降低前端程序员和后端程序员的沟通成本,因为所有接⼝都…