跳到主要内容 多模态大模型技术路线与构建实践指南 | 极客日志
Python AI 算法
多模态大模型技术路线与构建实践指南 本文系统梳理了视觉语言模型(VLMs)的技术路线,涵盖架构选择、训练策略及评估挑战。文章对比了交叉注意力与自注意力架构的优劣,分析了多阶段预训练、图像 - 文本对及文档数据的使用效果,并指出了基准测试中的污染与偏差问题。重点介绍了 Idefics3 的构建实践,包括基于 Llama 3.1 和 SigLIP-SO400M 的架构设计、像素重排策略及三阶段预训练方案,同时分享了 Docmatix 数据集的构建经验。内容旨在为开发者提供从理论到实践的 VLM 构建指南。
魔法巫师 发布于 2025/2/6 更新于 2026/4/20 1 浏览视觉 - 语言模型(Vision-Language Models, VLMs)领域正迅速发展,但在数据、架构和训练方法等关键方面还未达成共识。本文旨在为构建 VLM 提供指南,概述当前的最先进方法,指出各自的优缺点,解决该领域的主要挑战,并为未被充分探索的研究领域提供有前途的研究方向。
主要贡献
系统性综述 :提供了对当前最先进 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 的数量。然而,这种方法可能会丢失全局上下文,为此可以将缩小比例的原始图像添加到子图像列表中。
多阶段训练数据的实验发现 多阶段预训练的主要目标是对齐骨干模型并训练模型中新初始化的参数。通过使用大规模数据集,使 VLM 接触到各种示例,以构建广泛的知识并提高对域外数据的鲁棒性。为了保持 LLM 的初始性能,一些模型如 VILA 和 LLaVA-NeXT 在训练开始时冻结骨干模型,仅关注新初始化的参数(连接器),直到达到令人满意的性能水平。此后,可以逐渐解冻视觉编码器和/或语言模型。如果出现不稳定性,或需要在增加正则化的同时增强模型的表现力,可以在预训练阶段使用 LoRA 方法。
在大量图像上高效训练时,图像分辨率通常保持较低,并随着训练时间逐步增加。一旦分辨率足够高,包含大图像的数据集(如 PDF)可以被纳入训练数据。
图像 - 文本对数据集通常通过抓取网页、下载图像并从原始 HTML 文件中提取相应的 alt 文本来创建。由于收集这些原始图像 - 文本对的方便性及其在图像与文本之间建立强对齐方面的有效性,已经创建了许多大规模数据集,如 LAION、COYO 和 DataComp。然而,这些数据集中的 alt 文本通常是噪声、不合语法或过于简短的,导致训练困难。最近的方法通过使用合成重标注获得了更好的结果,即使用另一个模型对原始数据集中的相同图像重新标注。
交错的图像 - 文本文档训练首次在 Flamingo 中引入,使用的是专有的 M3W 数据集。OBELICS 是一个开源的交错图像 - 文本文档数据集,包含 141 million 个文档和 353 million 张图像。该数据集是从 Common Crawl 的 HTML 文件中过滤构建的。这些文档保持了图像和文本在网站上出现的原始线性顺序,同时去除了垃圾邮件和广告。
两个主要的 PDF 文档数据集是 OCR-IDL 和 PDFA。OCR-IDL 包括 26M 页工业文档,而 PDFA 的英语过滤版包含 18M 页来自 Common Crawl 的文档,提供了比 OCR-IDL 更大的多样性。这两个数据集通过 OCR 工具获得对应的文本及其在文档中的位置,可以线性化为完整的文档转录。
类似于 LLM 的常见方法,微调通常分为两个阶段:监督微调(SFT)和对齐阶段。
文献中提供了许多高质量的数据集,包含多样的图像并涵盖广泛的任务。这些数据集通常由人工注释,确保了准确的 QA 对。尽管它们大多相对较小,但结合起来为有效的 SFT 提供了足够的示例。
在监督微调之后包括对齐阶段有几个原因。首先是使模型的输出与人类偏好对齐,使其更直观并更善于遵循复杂指令。此外,这一阶段有效地减少了幻觉现象,即模型可能描述图像中实际上不存在的对象或细节。它还通过减少生成有害内容的风险来提高模型的安全性,并可能进一步提高整体模型性能。
例如,RLAIF-V 提供了 80K 对偏好对,用于 MiniCPM-V 2.5 的训练。VLFeedback 提供了 380K 对比较对,其中从 12 个 VLM 中采样的模型响应由 GPT-4V 进行排名。类似地,SPA-VL 通过类似的方法生成了 100K 对偏好对。在对齐阶段通常应用 DPO 来处理这些数据集。
当前评估 VLM 的挑战
开放式和多选题基准测试 早期和最流行的多模态基准测试,如 VQAv2、OKVQA、TextVQA 和 COCO Captioning,主要是开放式的。这些基准测试依赖于每个问题的特定真实答案,因此即使是模型回答中的细微变化也可能导致得分被标记为不正确。这种评估方法倾向于有利于生成答案与基准测试预期格式或写作风格密切对齐的模型 。例如,VQAv2 通常期望简短的答案,通常只有一到两个词。即使评估提示明确规定了这种格式,像 Gemini 1.0 Ultra 和 GPT-4V 这样的模型的得分分别为 77.8 和 77.2,显著低于一些在其微调数据中包含小部分 VQAv2 的小模型。这种差异突出了在不让基准测试模板影响结果的情况下评估不同模型的挑战 。
为了减轻这种偏差,可以进行少量示例评估,尽管这种方法不如在基准测试训练集上训练有效,目前也不用于评估指令模型。然而,这些评估中的模糊程度可以因基准测试而异。例如,TextVQA 和 DocVQA 要求模型直接从图像中读取和提取文本而不重新措辞,从而减少了模糊性。在 MathVista 中,答案始终是数值的,每个问题都有特定的说明,如答案应为整数或四舍五入至两位小数。
最近提出的 LAVE 指标通过问 LLM 评估 VLM 生成的响应是否正确,给定真实答案和具体问题,从而减少了模板问题。减少模糊性的另一种方法是使用包含选择题的基准测试,模型通过选择相应的字母来选择正确选项。许多最近的基准测试采用了这种方法,如 MMMU、MMStar 和 MMBench。
预训练阶段模型评估的挑战 VLM 在预训练阶段与微调后性能之间存在显著差异 。例如,Idefics2-base 在预训练期间使用 8 个上下文示例在 TextVQA 上得分 57.9,在 DocVQA 上得分低于 55。然而,经过微调后,在 TextVQA 上达到 70.4,在 DocVQA 上以零样本设置达到 67.3,而无需使用图像分割策略。一个原因是模型仅在微调阶段开始学习视觉问答的具体任务(超越仅图像描述或文本转录),除非在第三预训练阶段使用大规模合成 VQA 数据集,这些数据集提供与基准测试中存在的示例更一致的示例。
当在预训练期间省略指令数据时,文档理解等更复杂的任务可能表现不佳,VLM 中的开发选择的影响可能仅在微调后变得明显,导致反馈循环延迟。例如,在 Idefics2 中,作者发现使用 128 个视觉 tokens 而不是 64 个在其架构中进行预训练时没有明显的改进。然而,在使用图像分割策略微调后,使用更多视觉 tokens 在 OCR 任务中的好处变得明显。因此,为了在预训练消融期间获得更准确的见解,建议将指令数据纳入数据混合中 。
一些基准测试中的污染和过度优化风险 一些基准测试源自现有学术数据集的验证或测试集。例如,用于评估推理和数学能力的领先基准测试 MathVista 显示出潜在污染的迹象。我们发现至少 6.6% 的问题包含经常用于监督微调的学术数据集的训练集中的图像,2.2% 的问题包含图像和问题是相同或高度相似的 。此外,这个基准测试通常包含一些问题,除非模型在训练期间遇到过,否则很难回答。例如,我们发现 MathVista 中至少 6.1% 的问题是关于'这两个人在图像中的年龄差是多少?'的变体。类似的问题在 KVQA 中也很常见。因此,在其微调数据中包含这些问题的模型在 MathVista 上会有优势。
最终,基准测试应该用来衡量模型性能,而不是作为训练目标。在类似示例上进行微调可以提高分数,但这对模型在真实世界场景中的泛化能力提供了很少的证据。因此,我们鼓励研究人员排除在他们评估的基准测试中使用的图像,从他们的监督微调数据中。
构建 Idefics3 的架构和训练方法 Idefics3 是基于 Llama 3.1 和 SigLIP-SO400M 构建的视觉语言模型(VLM)。其架构和训练方法如下:
模型结构选择
视觉编码器和语言模型
视觉编码器:使用 SigLIP-SO400M。
语言模型:使用 Llama 3.1 instruct,替换了 Idefics2 中的 Mistral-7B。
图像编码策略
Idefics2 中使用的感知重采样器被更换为像素重排策略,作为一种池化技术,将图像的隐藏状态数量减少了四倍。
每个图像被编码为 364x364 像素的 169 个视觉 token。
在训练和推理过程中,图像被分割成 364x364 像素的 patch 矩阵,视觉编码器分别处理每个 patch,生成视觉 token 序列。
为了保留图像的二维结构,在每行 Patch 后插入一个文本 token '\n',并将原始图像缩小至 364x364 像素附加到 patch 序列后面。
在每个 patch 前添加表示 patch 在矩阵中位置的文本 token。
训练过程
第一阶段预训练:冻结模型的骨干部分,以保留其性能,同时学习新初始化的参数,逐步将最大图像分辨率从 364²增加到 1820²。
第二阶段预训练:使用 DoRA 方法高效训练骨干部分,并引入更大的图像。
第三阶段预训练:专注于使用大型合成数据集进行训练。
监督微调阶段:应用 NEFTune 噪声到输入,并仅在答案 token 上计算损失。前两个预训练阶段学习率保持恒定,最后一个预训练阶段和监督微调阶段学习率线性衰减至零。
整个训练过程,包括重启,共完成于 32 个 H100 节点上,耗时 5 天。
改进机会
完全解冻骨干部分可能会带来更好的性能,尽管当前使用 LoRA 方法以提高训练效率。
在前两个预训练阶段,虽然损失函数未完全收敛,文章为减少计算成本而进入下一个阶段。
第三阶段预训练中,仅使用了所选数据集的一部分样本,进一步的改进可以通过创建和合并更大的合成数据集。
通过这些方法,Idefics3 在多个基准测试中表现显著提升,特别是在文档理解任务上。
模型训练数据选择
数据集准备 训练 Idefics3 的过程主要利用了 Idefics2 的训练数据集,同时增加了几个补充数据集以扩展任务范围。
扩展 The Cauldron The Cauldron 是一个由 50 个高质量数据集组成的集合,本文在此基础上增加了 6 个新的数据集,包括:
Cord-v27:用于训练模型输出 JSON 格式信息
LNQA:用于大规模真实世界的视觉问答
ShareGPT-4o 和 IIW-400:用于生成详细的描述
Geo170K:涉及几何任务
Docmatix:用于文档理解
增强文档理解能力的 Docmatix 文档理解是 VLMs 的重要应用领域,现有的开源数据集数量有限。为此,构建了一个大规模的文档理解数据集 Docmatix:
利用现有的 OCR 工具从 PDF 文档中提取文本。
使用 Phi-3-small 生成问答对。
通过正则表达式过滤低质量问答对,删除含有"unanswerable"关键词的答案。
最终得到的数据集 Docmatix 包括 2.4M 张图片和 9.5M 个问答对,显著提升了文档理解任务的规模。
通过这些方法,Idefics3 在多个基准测试中表现显著提升,特别是在文档理解任务上。
总结 在本文中,详细介绍了构建视觉语言模型(VLMs)的完整教程,强调了架构、数据和训练方法在开发流程中的重要性。通过对当前最先进方法的深入分析,突出了各种设计选择的优缺点,并提出了改进模型的潜在研究方向。
接着,本文详细阐述了构建 Idefics3-8B 的实际步骤,这是一种在文档理解任务中表现显著提升的 VLM,特别是通过引入 Docmatix 数据集实现了这一进步。通过公开发布模型和数据集,作者希望为下一代负责任且开放的 VLMs 的发展做出贡献。
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online