【论文极速读】 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu环境|FileNotFoundError: [Errno 2] No such file or directory: ‘soundstretch‘

一 问题描述 二 问题解决 使用ubuntu命令安装soundstretch&#xff08;How To Install soundstretch on Ubuntu 20.04 | Installati.one&#xff09; sudo apt -y install soundstretch 安装完成&#xff0c;问题解决。

yolov8实战第九天——pyqt5-yolov8实现道路病害识别系统(参考论文(6000+字)+环境配置+完整部署代码+代码使用说明+训练好的模型+数据集)

基于 pyqt5-yolov8实现道路病害识别系统,包括图片、批量图片、视频、视频流的道路病害识别。包括病害历史记录栏显示,训练好的模型和数据集,可直接进行工程应用和论文书写。 效果展示(图片检测,检测到的内容添加到历史记录): 效果展示(批量图片检测,检测到的内容添加…

pod install 报错 ‘SDK does not contain ‘libarclite‘ at the path...‘

报错内容&#xff1a; SDK does not contain ‘libarclite’ at the path ‘/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a’; 这是报错已经很明确告诉我们&#xff0c;Xcode默认的工具链中缺少一个工具…

Android-自定义三角形评分控件

效果图 序言 在移动应用开发中&#xff0c;显示数据的方式多种多样&#xff0c;直观的图形展示常常能带给用户更好的体验。本文将介绍如何使用Flutter创建一个自定义三角形纬度评分控件&#xff0c;该控件可以通过动画展示评分的变化&#xff0c;让应用界面更加生动。 实现思…

前端项目使用docker编译发版和gitlab-cicd发版方式

项目目录 app/ ├── container/ │ ├── init.sh │ ├── nginx.conf.template ├── src/ ├── .gitlab-ci.yml └── deploy.sh └── Dockerfile └── Makefilecontainer目录是放nginx的配置文件&#xff0c;给nginx镜像使用 .gitlab-ci.yml和Makefile是c…

【工具使用】搜狗输入法如何输入希腊字母等特殊字符

步骤&#xff1a; 1&#xff0c;点击悬浮框的输入方式&#xff0c;选择“符号大全”&#xff1a; 2&#xff0c;根据自己需要选择对应的符号即可&#xff1a;

QT7_视频知识点笔记_4_文件操作,Socket通信:TCP/UDP

1.事件分发器&#xff0c;事件过滤器&#xff08;重要程度&#xff1a;一般&#xff09; event函数 2.文件操作&#xff08;QFile&#xff09; 实现功能&#xff1a;点击按钮&#xff0c;弹出对话框&#xff0c;并且用文件类读取出内容输出显示在控件上。 #include <QFi…

第八课,分支语句嵌套、随机数函数、初识while循环

一&#xff0c;分支结构的嵌套语法 在 Python 中&#xff0c;分支结构可以嵌套&#xff0c;这意味着你可以在一个条件语句中包含另一个条件语句。嵌套的分支结构可以让你更灵活地控制程序的逻辑流程。 怎么理解呢&#xff1f;打个比方&#xff1a;放学后&#xff0c;请三年级…

深度学习之基于Tensorflow卷积神经网络(CNN)实现猫狗识别

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 在人工智能和深度学习的热潮中&#xff0c;图像识别是一个备受关注的领域。猫狗识别作为图像识…

AcWing 217:绿豆蛙的归宿 ← 搜索算法

【题目来源】https://www.acwing.com/problem/content/219/【题目描述】 给出一个有向无环的连通图&#xff0c;起点为 1&#xff0c;终点为 N&#xff0c;每条边都有一个长度。 数据保证从起点出发能够到达图中所有的点&#xff0c;图中所有的点也都能够到达终点。 绿豆蛙从起…

DDR5—新手入门学习(一)【1-5】

目录 1、DDR背景 &#xff08;1&#xff09;SDR SDRAM时代 &#xff1a; &#xff08;2&#xff09;DDR SDRAM的创新 &#xff1a; &#xff08;3&#xff09;DDR技术的演进 &#xff1a; &#xff08;4&#xff09;需求推动&#xff1a; 2、了解内存 &#xff08;1&…

k8s笔记 | Prometheus安装

kube-prometheus 基于github安装 选择对应的版本 这里选择 https://github.com/prometheus-operator/kube-prometheus/tree/release-0.11 下载修改为国内镜像源 image: quay.io 改为 quay.mirrors.ustc.edu.cn image: k8s.gcr.io 改为 lank8s.cn 创建 prometheus-ingres…

教师专属的成绩发布小程序

还在为成绩发布而烦恼&#xff1f;还在担心家长无法及时获得孩子的学习反馈&#xff1f;是否想要一个既安全又高效的工具来简化你的教学工作&#xff1f;那么&#xff0c;易查分小程序可能是你一直在寻找的答案。 现在的老师们有了超多的工具来帮助我们减轻负担&#xff0c;提高…

Harmony学习笔记一——项目创建及配置

文章基于Harmony Next Preview2 进行学习&#xff0c;其他版本可能会稍有不同 准备工作 由于目前Harmony Next仅有Preview版本&#xff0c;想要进行Harmony Next开发需要向华为申请权限&#xff0c;具体操作参考: https://developer.huawei.com/consumer/cn/forum/topic/02081…

YOLOV8 如何训练自己的数据

1、git code 项目 地址 2、数据标注&#xff1a;使用yolov8官方推荐的roboflow 地址 2.1 上传数据 2.2 标注 2.3 生成数据集 2.4 导出数据 3 训练 3.1 建.yaml 文件 建立.yaml 文件 3.2 修改.yaml文件里面的内容 1.这是roboflow 网站下下来的数据&#xff0c;只需要把.…

常见算法(2)

1.冒泡排序 定义&#xff1a;相邻的数据两两比较&#xff0c;小的放前面&#xff0c;大的放后面。 public class test {public static void main(String [] arg) {int [] arr {2,4,5,3,6,1};//冒泡排序&#xff0c;排序次数arr.length-1for(int i0;i<arr.length-1;i) {f…

Blazor入门-简单svg绘制+导出图像

参考&#xff1a; SVG 教程 | 菜鸟教程 https://www.runoob.com/svg/svg-tutorial.html 本地环境&#xff1a;win10, visual studio 2022 community 注意&#xff1a;本文只给出思路和框架&#xff0c;对于具体的计算细节&#xff0c;考虑到日后会写入软件著作权和专利文书&am…

visio生成pdf文件有黑边(边框),插入latex输出有边框

解决办法&#xff1a; 1 文件-导出pdf-点击“选项” 2 选择取消勾选

HTML静态网页成品作业(HTML+CSS)——利物浦足球俱乐部介绍网页设计制作(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;共有5个页面。 二、作品演示 三、代码目录 四、网站代码 HTML部分代…

TikTok矩阵管理系统:品牌增长的新引擎

随着社交媒体的快速发展&#xff0c;TikTok已成为全球最受欢迎的短视频平台之一。品牌和企业纷纷涌入这个平台&#xff0c;寻求新的增长机会。然而&#xff0c;随着内容的激增和用户群体的多样化&#xff0c;管理TikTok账号变得越来越复杂。这时&#xff0c;TikTok矩阵管理系统…