文章目录
论文地址:https://arxiv.org/abs/2304.08485
model & dataset & code https://llava-vl.github.io/
当前LLM的指令微调的研究已见成效,但在结合视觉和语言的多模态任务中尚未得到充分探索。
LLaVA结合了语言理解(由LLM提供)和视觉理解(通过视觉编码器实现),通过在GPT-4生成的数据上进行指令微调。
文章提出了一种新的视觉指令微调方法,首次将指令微调扩展到语言-图像的多模态空间。
相关工作
多模态指令跟随代理
计算机视觉领域,现有的指令跟随代理的研究可以大致分为两类:
- 端到端训练的模型:不同模型只能针对特定的任务。
- 使用能够协调多种模型的框架:如LangChain或大型语言模型(LLMs)下的系统(例如Visual ChatGPT、X-GPT等)
本文主要关注开发一个端到端训练的语言-视觉多模态模型,以支持多任务。
指令微调
在NLP领域,为了使LLMs(如GPT-3、T5等)能够根据自然语言指令完成实际任务,指令微调取得了一些成功的成果,如InstructGPT和ChatGPT。
本文的目标是将这种指令调优的思想借鉴到计算机视觉中。更广泛地说,教师-学生蒸馏的思想也在图像分类等其他主题中得到了研究。注意,视觉指令微调与视觉提示调优不同:前者旨在提升模型的指令跟随能力,而后者则旨在提高模型适应性的参数效率。
-
视觉指令微调
视觉指令微调是指将视觉信息作为指令的一部分,让模型学会生成指令跟随(instruction-following)的数据,也就是基于视觉数据的对话能力。这种方法侧重于让模型理解视觉信息并根据这些信息执行特定的指令或任务。
例子:假设有一个模型需要根据一张图片中的内容来生成描述图片的文本。在视觉指令微调中,模型会被训练以理解图片内容并生成相应的描述,这涉及到对视觉信息的理解和指令的执行。
-
视觉提示微调
视觉提示调优是一种参数高效的微调方法,通过引入少量的可学习参数将图像映射到Prompt空间(任务相关的连续向量),学习最优的一个Prompt向量,来将预训练的模型迁移到特定的任务上。这种方法侧重于通过添加或调整提示符来适应特定的下游任务。
例子:在一个图像分类任务中,可以通过在输入图像中添加一个特定的提示符(例如,一个与分类任务相关的标记或符号),来微调一个预训练的模型,使其能够识别和分类图像中的对象。在训练过程中,只有提示符的参数会被更新,而模型的其他部分保持不变。
数据集
本文使用ChatGPT/GPT-4来生成指令数据。具体方法如下:
-
在第一步生成的指令跟随数据中,缺乏多样性和深入的推理,为了解决这个问题,本文采用纯语言 GPT-4 或 ChatGPT (可能当时还没有好的图文模型,所以才用这种方法 ),创建涉及视觉内容的指令跟随数据。为了将图片信息编码为纯文本,这里使用了两种不同类型文本,(i)图片描述; (ii) 定位场景中的对象的边界框,每个框对对象概念及其空间位置进行编码。
对于给定的图像 X v X_v Xv 和其相关的描述 X c X_c Xc,GPT-4生成一系列问题 X q X_q Xq。指令跟随形式:
Human: Xq Xv<STOP> Assistant: Xc<STOP>
。
- 把图像编码成LLM可识别的序列后,在COCO数据集的图像上生成三种类型的指令跟随数据,如下图所示。
-
对话。针对图像的视觉内容提出一系列不同的问题,包括对象类型、对象计数、对象动作、对象位置、对象之间的相对位置。仅考虑有明确答案的问题。以下是相关提示,要了解其他两类数据的生成提示可以去看源码:
-
详细描述。创建一个提示列表,每次随机抽取一个问题,要求 GPT-4 生成详细描述。
- 复杂的推理。以上两种类型侧重于视觉内容本身,在此基础上进一步创建深度推理问题。答案通常需要遵循严格的逻辑进行逐步推理过程。以下是相关提示:
总共收集了 158K 个语言图像指令跟随样本,其中对话样本 58K,详细描述样本 23K,复杂推理样本 77K。
视觉指令微调
架构
对于输入图像 X v X_v Xv,使用预训练的 CLIP 视觉编码器 ViT-L/14对图像进行编码,然后用一个简单的线性层将图像特征映射到词嵌入空间。
训练
数据格式是第一轮对话输入的指令包含问题和图像对,之后的几轮对话输入的是指令,当前对话之前所有的对话都可以用于对当前对话的预测。
绿色的标记就是用户需要去学习的部分,学习如何回答问题,并且知道在哪里停止,所以只有绿色的部分会用来计算自回归模型中的损失。
文中使用two-stage指令微调过程:
训练成本: 8×A100
-
Stage 1(lr=2e-3, batch size=128, 1 epoch):特征对齐预训练。从CC3M数据集中筛选出59.5万对图像-文本对,主要筛选方法是使用spacy计算CC3M数据集上每个名词短语出现的频率,首先筛选出频率大于3的名词短语,对于频率大于3小于100的名词短语对应的图像-文本对全部加入候选数据集,频率大于100的,随机抽取100个包含该名词短语的图像-文本对加入候选数据集。
将这些图像-文本对转换为指令跟随格式的数据,即对于每张图 X v X_v Xv,随机生成一个问题 X q X_q Xq,该问题是一个请求,提示模型简要描述图像内容。模型的"真实"预测答案 X a X_a Xa 是图像的原始描述。使用一个投影矩阵 θ = W θ=W θ=W 将图像特征 H v H_v Hv 转换到与语言模型词嵌入空间相同的维度,并最大化生成正确答案的概率,从而实现图像和文本的对齐,注意这里每个样本只有一轮对话。
- Stage 2(lr=2e-5, batch size=32, 3 epoch):端到端微调 。这一步把视觉编码器冻结,然后微调投影层和LLaVA中LLM的预训练权重,下面是两个具体的应用场景。
- 多模态对话机器人。使用上面收集的158K 个语言图像指令跟随样本,在三种类型的响应中,对话是多轮的,而其他两种是单轮的。它们在训练中用相同的比例进行采样。
- 科学问答。在 ScienceQA 基准上进行研究,数据集每个问题都以自然语言或图像的形式提供上下文。助手以自然语言提供推理过程,并在多项选择中选择答案。这里将数据组织为单轮对话,将问题和上下文组织为 X i n s t r u c t X_{instruct} Xinstruct,将推理和答案组织为 X a X_a Xa。
两个阶段均使用Adam优化器,cosine衰减学习率,warmup ratio 3%,对于第二阶段的微调,使用FSDP(全分片数据并行)和梯度检查点来节省显存,使用BF16和TF32混合精度。