【论文极速读】 LLava: 指令跟随的多模态大语言模型

【论文极速读】 LLava: 指令跟随的多模态大语言模型
FesianXu 20240331 at Tencent WeChat Search Team

前言

如何将已预训练好的大规模语言模型(LLM)和多模态模型(如CLIP)进行融合,形成一个多模态大语言模型(MLLM)是目前很火热的研究课题。本文将要介绍的LLava是一个经典的工作,其采用了指令微调的方式对MLLM进行训练,笔者在此笔记,希望对诸位读者有所帮助。如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注明出处,谢谢

∇ \nabla 联系方式:

e-mail: FesianXu@gmail.com

github: https://github.com/FesianXu

github page: https://fesianxu.github.io/

知乎专栏: 计算机视觉/计算机图形理论与应用

微信公众号:机器学习杂货铺3号店


之前笔者在博文中曾经介绍过不少MLLM的工作 [2-4],这些工作在模型结构和数据采集、利用上都有所创新。本文将会介绍LLava (Large Language and Vision Assistant) [1],一个视觉指令微调的工作,在这篇工作中收集了一个大规模的指令微调数据集llava-instruct-150k,可以供给下游的MLLM任务进行指令微调。这个工作为我们采集数据的实践提供了有价值的指导,让我们看看他是如何做的。

LLava采集多模态指令微调数据的思路很直接:先将图片的视觉信息转化为文本描述,然后通过ChatGPT/GPT4的强大文本理解能力,去构建指令微调数据。由于视觉信息和文本信息之间存在信息鸿沟,为了尽可能减少信息差,如Fig 1所示,作者不仅采用image caption对图片进行描述, 同时采用object detection模型对图中的物体进行检测和定位,丰富的文本信息有利于尽可能全面地描述图片的视觉上下文信息,为后续GPT4通过文字去理解图片的视觉信息提供了重要基础。

fig_1_image_context_to_text

Fig 1. 两种不同的文本化的图片上下文信息,分别采用image caption和object detection模型进行处理。

考虑到MLLM的下游应用可能有多种多样,比如聊天机器人,信息抽取器等多种场景,因此在指令微调数据的构建上也需要尽可能的多样化。如Fig 2所示,作者在构建指令微调数据的时候考虑了三种可能的类型,对话、细节描述和复杂推理,其中对话属于多轮交互,而其他则是单轮交互。引入对话形式的指令微调数据,有利于后续将MLLM应用到聊天机器人应用中,同时也为MLLM提供了多轮对话的能力。细节描述的问题,可以采样自固定的问题集合,如下所示,但是围绕图片展开讨论的对话显然不可能存在固定的问题集合,作者于是采用GPT4去围绕图片信息,同时产生问题和回答。

• “Describe the following image in detail”
• “Provide a detailed description of the given image”
• “Give an elaborate explanation of the image you see”
• “Share a comprehensive rundown of the presented image”
• “Offer a thorough analysis of the image”

为了更好地让GPT4产生的问题更符合指令微调的需求,除了在prompt中对任务进行清楚地定义外,如下prompt所示,作者还提供了例子(需要人工设计提供)去辅助GPT4生成问题和回答,即是采用了in-context learning的方式。最终,作者采集到了158k个图文指令微调数据,其中包括58k个对话,23k个细节描述和77k个复杂推理。

你是一个人工智能视觉助理,你在查看一张图片。你将看到五句话,用于描述你正在看到的同一幅图像。在你看到图像时回答所有问题。

设计一个你和一个询问这张照片的人之间的对话。答案应该是一个视觉人工智能助理看到图像并回答问题的语气。提出不同的问题并给出相应的答案。包括询问图像视觉内容的问题,包括对象类型、对象计数、对象动作、对象位置、对象之间的相对位置等。请提出仅包括有明确答案的问题:

(1) 人们可以看到问题所问的图像中的内容,并且可以自信地回答;

(2) 可以根据图像自信地确定它不在图像中。不要问任何没把握回答的问题。

你还可以提出包括与图像中的内容相关的复杂问题,例如,询问图像中对象的背景知识、询问讨论图像中发生的事件等。同样,不要询问不确定的细节。在回答复杂问题时提供详细答案。例如,给出详细的例子或推理步骤,使内容更有说服力和条理。如有必要,可以包括多个段落。

fig_2_response_types

Fig 2. 三种不同类型的指令微调数据类型,对话,细节描述和复杂推理,其中对话是多轮交互,而其他是单轮。

LLava的模型建模,如Fig 3所示,采用了类似于Frozen [5] 的visual prompt的方式,将图片进行视觉特征提取后,通过投影矩阵 W \mathbf{W} W将其映射到LLM同维度的特征空间之中,即是 H v = W f v ( X v ) \mathbf{H_v} = \mathbf{W} f_v(\mathbf{X}_v) Hv=Wfv(Xv),其中 f v ( ⋅ ) f_v(\cdot) fv()是视觉提取模型,比如CLIP,而 X v \mathbf{X_v} Xv是输入的图片。最后将视觉侧的特征 H v \mathbf{H_v} Hv和文本侧的特征 H q \mathbf{H}_q Hq拼接在一起,即可送给LLM。在训练过程中,对于多轮对话的数据 ( X q 1 , X a 1 , ⋯ , X q T , X a T ) (\mathbf{X}^{1}_{q}, \mathbf{X}^{1}_{a},\cdots,\mathbf{X}^{T}_{q}, \mathbf{X}^T_{a}) (Xq1,Xa1,,XqT,XaT),其中 T T T是对话的轮次,将所有的回答 X a t \mathbf{X}_a^{t} Xat都视为LLM的待预测内容,那么第 t t t轮的LLM的指令输入 X i n s t r u c t t \mathbf{X}_{instruct}^{t} Xinstructt则是:
X i n s t r u c t t = { R a n d c h o o s e [ X q 1 , X v ] o r [ X v , X q 1 ] t = 1 X q t t > 1 (1) \mathbf{X}^{t}_{instruct} = \begin{cases} \mathrm{Rand\ choose\ } [\mathbf{X}^1_q, \mathbf{X}_v] \ or \ [\mathbf{X}_v, \mathbf{X}^1_q] & t=1 \\ \mathbf{X}^{t}_q & t \gt 1 \end{cases} \tag{1} Xinstructt={Rand choose [Xq1,Xv] or [Xv,Xq1]Xqtt=1t>1(1)
在第一个轮次 t = 1 t=1 t=1的时候,会随机选择图片 X v \mathbf{X}_v Xv前置或者图片后置,这样有利于增加数据的多样性。如Fig 4所示,模型的输入包含有一个系统提示词(system prompt),在本文是X_{system message} = A chat between a curious human and an artificial intelligence assistant.The assistant gives helpful, detailed, and polite answers to the human’s questions. <STOP> = ###,注意到只有绿色字样部分的才会进行损失计算,不难发现都是<STOP>部分和 X a t \mathbf{X}_{a}^{t} Xat部分。整体损失就是LLM的自回归损失,如公式(2)所示:
p ( X a ∣ X v , X i n s t r u c t ) = ∑ i = 1 L p θ ( x i ∣ X v , X i n s t r u c t , < i , X a , < i ) (2) p(\mathbf{X}_a|\mathbf{X}_v, \mathbf{X}_{instruct}) = \sum_{i=1}^{L} p_{\theta}(x_i|\mathbf{X}_v, \mathbf{X}_{instruct,<i}, \mathbf{X}_{a, <i}) \tag{2} p(XaXv,Xinstruct)=i=1Lpθ(xiXv,Xinstruct,<i,Xa,<i)(2)
注意到,在第 i i i个令牌(token)之前的所有令牌(包括指令和回答部分)都会作为输入,去预测第 i i i个令牌。

fig_3_visual_prompt

Fig 3. 采用visual prompt的形式引入多模态向量。

fig_4_multiturn_input

Fig 4. 模型的输入示例,只有绿色字样部分才会进行损失计算。

在训练范式上,由于引入了投影矩阵 W \mathbf{W} W去对齐视觉特征和LLM文本特征,因此作者设计成两阶段训练,在第一阶段引入预训练的方式,除了投影矩阵外其余所有参数都固定住,其数据采用的是CC3M中过滤出来的595k个图文对数据,采用如下所示最简单的提示词输入

X_q, X_v \n Assistant: X_a \n

其中的 X a \mathbf{X}_a Xa直接采用图文对中的文本部分,即是图片的caption,而 X q \mathbf{X}_q Xq则随机采样自以下几个问题。

• “Describe the image concisely.”
• “Provide a brief description of the given image.”
• “Offer a succinct explanation of the picture presented.”
• “Summarize the visual content of the image.”
• “Give a short and clear explanation of the subsequent image.”
• “Share a concise interpretation of the image provided.”
• “Present a compact description of the photo’s key features.”
• “Relay a brief, clear account of the picture shown.”
• “Render a clear and concise summary of the photo.”
• “Write a terse but informative summary of the picture.”
• “Create a compact narrative representing the image presented.”

在第二阶段的训练中,作者只对视觉编码器的参数就行固定,而LLM和投影矩阵的参数都进行端到端的训练,训练数据就来在于之前采集的158k个指令微调数据。

Reference

[1]. Liu, Haotian, Chunyuan Li, Qingyang Wu, and Yong Jae Lee. “Visual instruction tuning.” Advances in neural information processing systems 36 (2024). aka llava

[2]. https://blog.csdn.net/LoseInVain/article/details/136428429, 《Kosmos-1: 通用接口架构下的多模态大语言模型》

[3]. https://blog.csdn.net/LoseInVain/article/details/136072993, 《【论文极速读】Flamingo:一种交织图文的视觉语言大模型方法》

[4]. https://blog.csdn.net/LoseInVain/article/details/136013909,《BLIP2——采用Q-Former融合视觉语义与LLM能力的方法》

[5]. Tsimpoukelli, Maria, Jacob L. Menick, Serkan Cabi, S. M. Eslami, Oriol Vinyals, and Felix Hill. “Multimodal few-shot learning with frozen language models.” Advances in Neural Information Processing Systems 34 (2021): 200-212. aka Frozen

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

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

相关文章

【MATLAB】基于EMD-PCA-LSTM的回归预测模型

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 1 基本定义 基于EMD-PCA-LSTM的回归预测模型是一种结合了经验模态分解&#xff08;Empirical Mode Decomposition, EMD&#xff09;、主成分分析&#xff08;Principal Component Analysis, PCA&#xff09;和长短期记忆…

redis集群不允许操作多个key解决方案、redis key负载均衡方案

前提 在cluster redis 中进行同一个命令处理不同的key会报错:CROSSSLOT Keys in request dont hash to the same slot,例如: 此示例使用sdiff 命令对pool_1与pool_2进行diff操作。 那么我们在业务场景中就需要将集群redis中的不同key进行操作,我们该如何处理呢? 本次的…

CSS单行、同行文本左右对齐

再项目需求中&#xff0c;UI小姐姐常常要考虑项目的排版样式更简洁高级&#xff0c;常常会在项目设置内容或者字体两端对齐的效果&#xff0c;比如&#xff0c;在做表单时我们经常遇到让上下两个字段对齐的情况&#xff0c;比如姓名&#xff0c; 手机号码&#xff0c; 出生地等…

0406 组合放大电路

组合放大电路 共射-共基放大电路共集-共集放大电路 4.6.1 共射—共基放大电路 4.6.2 共集—共集放大电路 共射-共基放大电路 共集-共集放大电路 (a) 原理图 (b)交流通路 T1、T2构成复合管&#xff0c;可等效为一个NPN管

Docker搭建mysql性能测试环境

OpenEuler使用Docker搭建mysql性能测试环境 一、安装Docker二、docker安装mysql三、测试mysql连接 一、安装Docker 建立源文件vim /etc/yum.repos.d/docker-ce.repo增加内容[docker-ce-stable] nameDocker CE Stable - $basearch baseurlhttps://repo.huaweicloud.com/docker…

OpenAI、微软、智谱AI 等全球 16 家公司共同签署前沿人工智能安全承诺

人工智能&#xff08;AI&#xff09;的安全问题&#xff0c;正以前所未有的关注度在全球范围内被讨论。 日前&#xff0c;OpenAI 联合创始人、首席科学家 Ilya Sutskever 与 OpenAI 超级对齐团队共同领导人 Jan Leike 相继离开 OpenAI&#xff0c;Leike 甚至在 X 发布了一系列…

webpack5零基础入门-15样式兼容性问题处理

1.下载相关依赖 npm i postcss-loader postcss postcss-preset-env -D 2.在webpack.config.js中配置 注意&#xff1a;postcss-loader要在css-loader后面配置 3.写一个flex布局&#xff0c;flex是存在一定的兼容性问题的 4.打包 可以看到打包后未被处理 1.下载相关依赖 np…

YOLOv8绘制map曲线图

yolov8源码绘制的map曲线图不够清晰&#xff0c;python代码绘制的曲线图导入word之后清晰度也不够高&#xff0c;所以选择使用matlab来绘制曲线图&#xff0c;matlab可以直接复制图窗到word中&#xff0c;在转换成pdf也不会失真。点击编辑&#xff0c;复制图窗即可复制到word中…

C - Sigma Problem(AtCoder Beginner Contest 353)

题目的链接: C - Sigma Problem (atcoder.jp) 题目&#xff1a; 样例&#xff1a; 题目大致含意: 给你n个数&#xff0c;让你对这n个数进行操作&#xff0c;比如当前是第i个&#xff0c;那么让a[i] 和 后面的每个数进行相加, 例如a[i] a[i 1] 注意的是a[i] a[i 1]的结果…

linux的用户管理

新建用户&#xff1a;1.useradd 2.passwd 完成的操作&#xff1a; (1)/etc/passwd添加一行 (2)/etc/shadow添加一行 (3)/etc/group添加一行 (4)创建用户家目录 (5)创建用户邮件文件 例&#xff1a;创建用户jerry&#xff0c;要求: uid:777&am…

【git】开发提交规范(feat、fix、perf)

这段时间收到的需求很多&#xff0c;可能是临近两周一次的大版本灰度上线&#xff0c;这次产生了一个关于git的思考&#xff0c;就是各个版本之间怎么管理的问题&#xff0c;这里做出我自己的一些方法。 首先&#xff0c;既然已经明确了remote分支中的release分支为主分支&…

多线程讲解(详解)

目录 什么是多线程&#xff1f; 为什么要使用多线程&#xff1f; 线程的创建 使用Thread实现 从以上代码我们梳理一下多线程创建步骤&#xff1a; 注意&#xff1a; 小示例 首先&#xff0c;引入依赖 然后&#xff0c;按照我们刚刚说的构建多线程的步骤进行构建&#…

Arthas,应用诊断利器!【送源码】

Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c;类加载信…

Qt快速入门到熟练(电子相册项目(一))

经过一段时间的学习&#xff0c;相信大家对QT的基本用法都有所了解&#xff0c;从这篇文章开始&#xff0c;我准备记录一下电子相册的项目的一个学习过程。 实现项目创建功能 对于这个电子相册的项目&#xff0c;我并没有在一开始就把所有可能用到的功能模块去事无巨细的考虑周…

通过域名接口申请免费的ssl多域名证书

来此加密已顺利接入阿里云的域名接口&#xff0c;用户只需一键调用&#xff0c;便可轻松完成域名验证&#xff0c;从而更高效地申请证书。接下来&#xff0c;让我们详细解读一下整个操作过程。 来此加密官网 免费申请SSL证书 免费SSL多域名证书&#xff0c;泛域名证书。 首先&a…

Intellij IDEA创建springboot项目

1、点击 Create New Project 2、选择 Spring Initializr —> 点击下一步 3、备注&#xff1a; Artifact为项目名称 group为项目组名 language设置为java packaging为打包方式 3、选择相应的依赖&#xff0c;也可以自己导入&#xff0c;在Developer Tools 、Web 、SQL 中选…

开箱即用,简单上手体验LobeChat搭建私人ChatGPT

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【LeetCode算法】第69题:x的平方根

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路&#xff1a;第一次想到的是让i从1开始遍历&#xff0c;看i*ix是否成立&#xff0c;但是这样就会导致i*i超出了int的范围&#xff0c;无法正常求解。第二次&#xff0c;想着比较x/…

H800基础能力测试

H800基础能力测试 参考链接A100、A800、H100、H800差异H100详细规格H100 TensorCore FP16 理论算力计算公式锁频安装依赖pytorch FP16算力测试cublas FP16算力测试运行cuda-samples 本文记录了H800基础测试步骤及测试结果 参考链接 NVIDIA H100 Tensor Core GPU Architecture…

【传知代码】从零开始搭建图像去雾神经网络-论文复现

文章目录 概述原理介绍网络结构 核心逻辑迁移学习子网数据拟合子网 环境配置训练本次复现代码所用数据集测试本次复现代码所用的评价指标 结果展示在O-Haze数据集上的结果在I-Haze数据集上的结果 小结 本文涉及的源码可从从零开始搭建图像去雾神经网络该文章下方附件获取 本文复…