视觉 - 语言模型(Vision-Language Models, VLMs)领域正迅速发展,但在数据、架构和训练方法等关键方面还未达成共识。本文旨在为构建 VLM 提供指南,概述当前的最先进方法,指出各自的优缺点,解决该领域的主要挑战,并为未被充分探索的研究领域提供有前途的研究方向。
参考论文:arXiv:2408.12637
主要贡献
- 系统性综述:提供了对当前最先进 VLM 方法的全面概述,探讨了不同方法的优缺点,提出了未来的研究方向。
- 实践指导:详细阐述了构建 Idefics3-8B 模型的实际步骤,这是一种强大的 VLM,显著优于其前身 Idefics2-8B。
- 数据集贡献:创建了 Docmatix 数据集,用于提升文档理解能力。该数据集包含 240 倍于之前开放数据集的规模,共计 2.4 百万张图片和 9.5 百万对问答对,从 1.3 百万个 PDF 文档中衍生而来。
- 模型与数据集共享:公开了训练所用的模型和数据集,以促进社区研究和应用。
对现有技术的讨论
如何连接语言预训练模型
- 交叉注意力架构
交叉注意力架构由 Flamingo 引入。视觉骨干编码的图像隐藏状态用于条件化冻结的语言模型,通过新初始化的交叉注意力层,这些层在预训练语言模型层之间交错插入。这些层中的键和值来自视觉特征,而查询来自语言输入。实践中,在 LLM 的每四个 Transformer 块之后插入一个交叉注意力块,新增的参数量大约为 LLM 大小的 1/4。这显著增加了模型的表达能力,使其在训练期间无需解冻 LLM 便能取得强大性能,同时保留了预训练 LLM 在仅文本任务上的性能。
- 自注意力架构
在自注意力架构(或完全自回归架构)中,视觉编码器的输出被视为 tokens 并与文本 tokens 序列连接。整个序列然后作为输入传递给语言模型。视觉 tokens 序列可以选择性地池化为更短的序列,提高模型在训练和推理过程中的效率。将视觉隐藏空间映射到文本隐藏空间的层被称为模态投影层。
- 哪种架构表现最好?
研究表明,当保持骨干网络冻结时,交叉注意力架构表现显著优于自注意力架构。然而,当部分视觉编码器和语言模型使用 LoRA 进行训练时,尽管交叉注意力架构的参数更多,其性能反而较差。
- 预训练骨干网络对性能的影响
研究发现,每个独立的单模态预训练骨干网络的性能与最终 VLM 的性能相关。例如,将 LLaMA-1-7B 替换为 Mistral-7B,或将 CLIP-ViT-H 替换为 SigLIP-SO400M,均显著提高了各项基准测试的性能。由于视觉编码器通常在不同的数据集上进行训练并针对各种任务进行优化,一些模型结合了多个编码器的表示,以创建更丰富的视觉嵌入序列,尽管这会牺牲计算效率。
其他架构选择的探讨
- 视觉编码器是否真的必要?
一些方法如 Fuyu,直接将图像补丁输入语言模型,并通过简单的线性投影调整维度。这种架构独立于其他预训练模型,并保留了原始图像的所有信息。然而,这种方法尚未在基准测试中表现出更好的性能。
- 如何将视觉编码器连接到语言模型?
许多模型使用简单的线性层连接视觉编码器和 LLM,但这会导致视觉 tokens 序列较长,降低训练和推理效率。为解决这一问题,一些模型使用交叉注意力模块来减少视觉 tokens 的数量。尽管感知重采样器的方法在计算效率上有优势,但一些研究建议更有效地利用图像的二维结构。
- 图像分割策略:增加视觉 tokens 数量的技巧
图像分割策略将原始图像分割成多个子图像,每个子图像分别由视觉编码器编码。这种方法在推理过程中具有灵活性,可以根据任务需求调整视觉 tokens 的数量。然而,这种方法可能会丢失全局上下文,为此可以将缩小比例的原始图像添加到子图像列表中。
多阶段训练数据的实验发现
- 多阶段预训练
多阶段预训练的主要目标是对齐骨干模型并训练模型中新初始化的参数。通过使用大规模数据集,使 VLM 接触到各种示例,以构建广泛的知识并提高对域外数据的鲁棒性。为了保持 LLM 的初始性能,一些模型如 VILA 和 LLaVA-NeXT 在训练开始时冻结骨干模型,仅关注新初始化的参数(连接器),直到达到令人满意的性能水平。此后,可以逐渐解冻视觉编码器和/或语言模型。如果出现不稳定性,或需要在增加正则化的同时增强模型的表现力,可以在预训练阶段使用 LoRA 方法。


