温馨提示:
本篇文章已同步至"AI专题精讲" Idefics2:构建视觉-语言模型时,什么是重要的

摘要

随着large language models和vision transformers的进步,视觉-语言模型(VLMs)受到了越来越多的关注。尽管关于该主题的文献非常丰富,我们观察到在VLMs设计中的关键决策往往缺乏充分的论证。我们认为,这些未经支持的决策阻碍了该领域的进展,因为它们使得很难判断哪些选择能够真正提升模型性能。为了解决这个问题,我们围绕预训练模型、架构选择、数据和训练方法进行了大量实验。我们对研究结果的整合促成了Idefics2的开发——一个高效的、拥有80亿参数的基础VLM。Idefics2在多个多模态基准测试中,在同尺寸模型中达到了state-of-the-art的性能,并且常常能与体量大四倍的模型相媲美。我们发布了该模型(base、instructed和chat版本),以及为其训练所创建的数据集。

在这里插入图片描述

1 引言

视觉-语言模型(VLMs)以图像和文本作为输入并输出文本,可应用于许多任务,例如检索扫描PDF中的信息(Hu et al., 2024)、解释图表或示意图(Carbune et al., 2024)、识别图像中的文字(Blecher et al., 2023)、统计图片中的物体数量(Goyal et al., 2017),或将网页截图转换为代码(Laurençon et al., 2024)。强大的开放large language models(Touvron et al., 2023;Jiang et al., 2023;Google, 2024b)与image encoders(Zhai et al., 2023;Sun et al., 2023;Radford et al., 2021)的发展,使研究者能够基于这些单模态预训练模型构建先进的VLMs,从而以更高精度解决上述问题(Dai et al., 2023;Liu et al., 2023;Bai et al., 2023;Lin et al., 2024, 2023;Li et al., 2024;Wang et al., 2024)。尽管该领域取得了显著进展,但已有文献中存在大量不同的设计选择,这些选择通常未经过充分实验证明,或仅有非常简略的描述。

这种情况使得我们很难判断哪些决策真正决定了模型性能,从而也阻碍了整个社区在该方向上取得有依据的实质性进步。例如,(Alayrac et al., 2022;Laurençon et al., 2023)使用交错的基于Transformer的cross-attention模块将图像信息融合到language model中,而(Li et al., 2023;Liu et al., 2023)则将图像hidden states的序列与文本embedding的序列拼接,并将拼接后的序列输入language model。据我们所知,这种选择尚未经过充分的消融实验,其在计算效率、数据效率以及性能方面的权衡也尚不明确。本文旨在对这些核心设计选择进行实证澄清,并提出一个关键问题:构建视觉-语言模型时,哪些因素很重要?

我们识别出两个方面,不同工作通常会做出不同设计选择:(a)模型架构,尤其是融合vision和text模态的connector模块,以及它们对推理效率的影响;(b)多模态训练过程及其对训练稳定性的影响。针对这两个方面,我们在受控环境中严格比较了不同的设计选择,并提取了实证结论。我们特别发现:(a)VLMs的进展在很大程度上受益于单模态预训练backbone的进步;(b)较新的全自回归架构相较于cross-attention架构性能更优,但需要对优化过程进行调整以确保训练稳定;(c)对预训练vision backbone及连接text和vision模态的模块进行调整,能在保证下游性能的前提下,一方面提高推理时的效率,另一方面支持图像以原始比例和尺寸输入;(d)图像处理方式的修改可用于在推理成本与下游性能之间进行权衡。

我们的研究结果与(Karamcheti et al., 2024;McKinzie et al., 2024;Lin et al., 2024)中的发现互为补充,这些工作探讨了多阶段训练、预训练backbone的选择性解冻、数据重复使用、训练混合比对zero-shot和few-shot性能的影响。我们特别深入探讨了此前尚未充分研究的方面,如模型架构、训练方法、稳定性及推理效率的提升。

基于上述洞见,我们训练了Idefics2——一个具有80亿参数的基础VLM。Idefics2在多个基准测试中,在其参数规模范围内达到了state-of-the-art的性能,同时在推理效率方面表现更优,无论是base版本还是经过微调的版本。在某些视觉-语言基准上,其性能可与参数量大四倍的state-of-the-art模型媲美,并在部分挑战性基准上达到了与Gemini 1.5 Pro相当的表现。我们公开了Idefics2的base、instructed和chat版本,以及用于训练该模型的数据集,供VLM社区使用。

2 术语

我们首先确立用于讨论不同设计选择的统一术语。训练VLMs通常需要将一个预训练vision backbone与一个预训练language backbone连接起来,方法是初始化新的参数以连接这两个模态。这些新参数的训练发生在预训练阶段。该阶段通常使用大型多模态数据集(如图文对)进行训练。我们注意到,尽管从两个单独的单模态预训练backbone出发是最常见的做法,但这两个backbone的参数也可以共享并从头开始初始化,如(Bavishi et al., 2023)所做的那样。与large language models的文献类似,预训练阶段之后通常还会进行instruction fine-tuning阶段,在此阶段中模型通过面向任务的样本进行学习。

近期工作主要探索两种将视觉输入与文本输入结合的方式。在cross-attention架构中(Alayrac et al., 2022;Laurençon et al., 2023;Awadalla et al., 2023),通过vision backbone编码的图像信息被注入language model的不同层中,方式是交错插入cross-attention模块,其中文本对图像的hidden states进行cross-attend。相比之下,在全自回归架构中(Koh et al., 2023;Driess et al., 2023;Liu et al., 2023),vision encoder的输出会被直接拼接到文本embedding的序列上,并将整个序列作为language model的输入。因此,language model的输入序列是视觉token和文本token的拼接。视觉token的序列可以选择性地进行pooling,生成一个更短的序列以提升计算效率。我们将把vision hidden space映射到text hidden space的层称为modality projection layers。图2展示了我们最终在Idefics2中使用的全自回归架构。

在这里插入图片描述

3 探索视觉语言模型的设计空间

在本节中,我们比较了视觉-语言模型文献中常见的设计选择,并指出相应的发现。除非另有说明,我们对每项消融实验运行 6,000 步,并报告在 4 个下游基准任务上的 4-shot 平均性能,这些基准任务用于衡量不同的能力:VQAv2(Goyal et al., 2017)用于通用视觉问答,TextVQA(Singh et al., 2019)用于 OCR 能力,OKVQA(Marino et al., 2019)用于外部知识,COCO(Lin et al., 2014)用于图像描述。

3.1 所有预训练骨干网络对于视觉语言模型(VLM)是否是等效的?

大多数近期的视觉-语言模型都基于预训练的单模态 backbone。那么,backbone(视觉和文本)的选择如何影响最终 VLM 的性能?
在这里插入图片描述

我们固定了预训练 backbone 的大小、用于多模态预训练的数据和训练更新的次数。在交叉注意力架构下,我们观察到在视觉-语言基准测试中的最大性能提升来自于更换语言模型。具体来说,替换 LLaMA-1-7B(Touvron et al., 2023)(在 MMLU(Hendrycks et al., 2021)上的得分为 35.1%)为 Mistral-7B(Jiang et al., 2023)(在 MMLU 上的得分为 60.1%)带来了 5.1 的提升(见表 1)。此外,将视觉编码器从 CLIP-ViT-H(Radford et al., 2021)(在 ImageNet(Deng et al., 2009)上的得分为 78.0%)更换为 SigLIP-SO400M(Zhai et al., 2023)(在 ImageNet 上的得分为 83.2%)带来了基准测试性能的 3.3 提升(见表 2)。关于更好的视觉 backbone 的结果与(Karamcheti et al., 2024)中的观察一致。我们注意到,Chen 和 Wang(2022)报告了通过扩展视觉编码器的规模比扩展语言模型规模所带来的性能提升更强,尽管扩展视觉编码器会导致参数量的增加较小。尽管 EVA-CLIP-5B(Sun et al., 2023)在参数量上是 SigLIP-SO400M(Zhai et al., 2023)的十倍,但我们在四个基准上的表现相似,这表明 EVA-CLIP-5B 可能没有得到充分训练,我们也承认开放的 VLM 社区缺少一个经过良好训练的大型视觉编码器。
在这里插入图片描述

发现 1. 在固定参数数量的情况下,语言模型 backbone 的质量对最终 VLM 性能的影响大于视觉模型 backbone 的质量。

3.2 完全自回归架构与交叉注意力架构如何比较?

据我们所知,目前没有对完全自回归架构和交叉注意力架构进行充分的比较。我们旨在填补这一空白,通过考虑它们的权衡,具体包括性能、参数量和推理成本。

根据 (Alayrac et al., 2022) 的研究,我们首先通过冻结单模态 backbone 并仅训练新初始化的参数(交叉注意力架构一侧,模态投影及学习的池化架构另一侧)来比较这两种架构,同时固定训练数据的数量。Alayrac et al.(2022)表明,交叉注意力模块与语言模型层交错的频率越高,视觉-语言性能就越好。因此,我们注意到,在这种设置下,交叉注意力架构的可训练参数比完全自回归架构多 13 亿(总共 20 亿可训练参数)。此外,在推理时,前者比后者多使用 10% 的浮点运算量。在这些条件下,我们观察到,交叉注意力架构在表 3 中的性能比完全自回归架构高 7 个点。
在这里插入图片描述

在总参数数量中,完全自回归架构大约有 15% 的参数被训练,而交叉注意力架构有 25% 的参数被训练。我们假设这个低比例限制了训练的表达能力,从而影响了性能。为了验证这一假设,我们通过解冻所有参数(包括新初始化的参数和预训练的单模态 backbone 参数)来比较这两种架构。在这些条件下,训练完全自回归架构会导致损失发散,即使通过大幅降低学习率或逐步解冻不同组件,我们也未能成功稳定训练。为了克服这一稳定性挑战,我们利用了低秩适配(Low-Rank Adaptation,Hu et al., 2022)来适配预训练的参数,同时对新初始化的参数使用标准的完全微调。

这种设置大大提高了训练的稳定性,更重要的是,我们观察到在完全自回归架构下性能提高了 12.9 个点,而在交叉注意力架构下提高了 0.6 个点。虽然交叉注意力架构在冻结的 backbone 上表现优于完全自回归架构,但当我们为预训练的 backbone 提供更多自由度时,交叉注意力架构的表现变差。此外,使用 LoRA 使得训练单模态 backbone 的 GPU 内存成本仅为完全微调的极小一部分,并且 LoRA 层可以合并回原始的线性层,在推理时不增加额外的成本。因此,我们在本研究的其余部分选择了完全自回归架构。

有趣的是,这一发现与 (Karamcheti et al., 2024) 中的结果相矛盾,该研究中作者观察到解冻预训练的视觉 backbone 会显著降低性能。我们假设,使用参数高效的微调方法是关键区别。

发现 2:当单模态预训练 backbone 保持冻结时,交叉注意力架构的表现优于完全自回归架构。然而,当训练单模态 backbone 时,完全自回归架构超越了交叉注意力架构,尽管后者具有更多参数。

发现 3:在完全自回归架构下解冻预训练的 backbone 可能导致训练发散。利用 LoRA 方法仍然能为训练增加表达能力并稳定训练过程。

3.3 效率提升在哪里?

视觉标记的数量
最近的视觉语言模型(VLMs)通常将视觉编码器的整个隐藏状态序列直接传递到模态投影层,然后输入到语言模型中,而不进行池化。这一做法的动机来自于先前的研究,其中发现添加池化策略(例如平均池化)会导致性能下降(Vallaeys et al., 2024)。这种做法的结果是每个图像的视觉标记数量较高,从 DeepSeek-VL(Lu et al., 2024)的 576 到 SPHINX-2k(Lin et al., 2023)的 2890 不等。由于生成的序列长度较大,训练计算开销较大,并且交替的图像和文本的上下文学习也变得具有挑战性,因为它需要对语言模型进行修改以处理非常大的上下文窗口。

我们通过使用感知器重采样器(Jaegle et al., 2021;Alayrac et al., 2022;Bai et al., 2023)作为一种可训练的 Transformer 形式池化,减少了每个图像隐藏状态的序列长度。查询数量(也称为潜在变量)对应于池化后每个图像的视觉标记数量。我们观察到学习池化在两方面都很有效:它平均提高了 8.5 个点的性能,并且将每个图像所需的视觉标记数量从 729 降至 64(见表 3)。

与(Vallaeys et al., 2024;McKinzie et al., 2024)发现的更多视觉标记提高性能的结果不同,我们观察到当使用超过 64 个视觉标记时,性能没有提高。我们假设在无限训练和无限数据的假设情境下,性能可能最终会提高,但这会导致训练时间延长。对 Perceiver 架构的其他变体(Mañas et al., 2023;Darcet et al., 2024;Vallaeys et al., 2024)则导致了性能下降。
在这里插入图片描述

Finding 4. 使用学习池化减少视觉标记数量显著提高了训练和推理的计算效率,同时提升了下游任务的性能。

保持原始纵横比和图像分辨率
视觉编码器,如 SigLIP,通常在固定大小的正方形图像上进行训练。调整图像大小会改变其原始纵横比,这在需要读取长文本的任务中尤为问题明显。此外,训练仅基于单一分辨率大小会固有地带来局限性:低分辨率会遗漏重要的视觉细节,而高分辨率则会导致训练和推理效率的低下。允许模型在不同分辨率下对图像进行编码,使用户能够根据需要决定每张图像所花费的计算量。
在这里插入图片描述

根据 Lee et al. (2023) 和 Dehghani et al. (2023) 的方法,我们将图像补丁传递给视觉编码器,而不调整图像大小或修改其纵横比。鉴于 SigLIP 是在固定大小的低分辨率正方形图像上进行训练的,我们对预训练的位置信息进行插值,以允许使用更高的分辨率,并使用 LoRA 参数训练视觉编码器以适应这些修改。我们的研究结果表明,保持纵横比的策略在下游任务上保持了性能水平,同时在训练和推理过程中解锁了计算灵活性(见表 5)。特别是,无需将图像调整为相同的高分辨率,可以节省 GPU 内存,并处理图像所需的分辨率。

Finding 5. 将预训练于固定大小正方形图像的视觉编码器调整为保持图像原始纵横比和分辨率,不仅不会降低性能,还能加速训练和推理,并减少内存使用。

3.4 如何在性能和计算之间进行权衡?

(Lin et al., 2023; Li et al., 2024; Liu et al., 2024; McKinzie et al., 2024) 提出,通过将图像分割为子图像,可以在不改变模型结构的情况下提升下游性能。图像被分解为子图像(例如,4个相等的子图像),然后与原始图像拼接,形成一个由5个图像组成的序列。此外,子图像会被调整为与原始图像相同的大小。然而,这一策略的代价是显著增加了需要编码的视觉标记数量。

我们在指令微调阶段采用了这一策略。每个图像变成5个图像的列表:4个裁剪图像和原始图像。这样,在推理时,模型既能处理独立的图像(每个图像64个视觉标记),也能处理经过人工增强的图像(每个图像总共320个视觉标记)。我们注意到,这一策略对像TextVQA和DocVQA这样的基准任务特别有用,这些任务需要足够高的分辨率来提取图像中的文本(见表9)。

此外,当我们仅对50%的训练样本应用图像分割(而不是对100%的样本进行分割)时,我们发现这并不会影响图像分割所带来的性能提升。令人惊讶的是,我们在评估时发现,增加子图像(以及独立图像)的分辨率相比于单独的图像分割,带来的性能提升仅为微小:将子图像的分辨率提高到最大值时,TextVQA验证集上的准确率为73.6%,而仅通过图像分割时为73.0%;而在DocVQA验证集上,分别为72.7和72.9的ANLS(见表9)。

Finding 6. 在训练过程中将图像分割为子图像可以在推理时通过计算效率换取更多的性能。性能的提升在涉及图像中文本读取的任务中尤为明显。

温馨提示:
阅读全文请访问"AI深语解构" Idefics2:构建视觉-语言模型时,什么是重要的

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

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

相关文章

再谈fpga开发(fpga调试方法)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】我们之前在学校学习c、c的时候,其实学校漏掉了很重要的一个教学环节,那就是调试、测试。很多时候我们代码写出来了&#xff…

C语言中的数据结构--栈和队列(1)

前言本届开始我们将对数据结构中栈的内容进行讲解,那么废话不多说,我们正式进入今天的学习栈栈是一种很特殊的线性表,它只能在固定的一端进行插入和删除操作,进行数据的插入和删除的一端叫做栈顶,另外一端叫做栈底,栈中的元素遵守…

字符串是数据结构还是数据类型?

比较纠结的一个问题,以下是在网上查到后总结的,不知道对不对,欢迎讨论。这是个触及计算机科学核心概念的精妙问题!字符串既可以被视为一种数据类型,也可以被视为一种数据结构,这取决于你观察的视角和讨论的…

Cline与Cursor深度实战指南:AI编程助手的革命性应用

引言 在AI编程工具快速发展的今天,Cline和Cursor作为两款备受瞩目的AI编程助手,正在重新定义开发者的工作方式。作为一名深度使用这两款工具的开发者,我在过去一年的实践中积累了丰富的经验和独到的见解。本文将从技术角度深入分析Cline和Cur…

根本是什么

根本是什么 根本没有了,枝叶还在么? 没有了内涵,外延还有么? 丢弃了根本,再嗨也是无意义,无根据空虚之乐罢了。 人之所行所言所思所想所念皆欲念、历程感怀,情思。所谓得失过往,时空…

springboot基于Java的人力资源管理系统设计与实现

管理员:登录,个人中心,部门管理,员工管理,培训信息管理,员工奖励管理,员工惩罚管理员工考核管理,调薪信息管理,员工调动管理,员工工资管理员工:注…

金字塔降低采样

文章目录image_scale.hppimage_scale.cppmainimage_scale.hpp #ifndef IMAGE_SCALE_HPP #define IMAGE_SCALE_HPP#include <vector> #include <cstdint> #include <utility> // for std::pair #include <algorithm> #include <string> enum cl…

Filament引擎(四)——光照渲染Froxelizer实现分析

Froxelizer主要是用于filament光照效果的实现&#xff0c;生成光照渲染时所需的必要信息&#xff0c;帮助渲染过程中明确哪些区域受哪些光源所影响&#xff0c;是Filament中保证光照效果渲染效率的核心所在。这部分的源码&#xff0c;可以结合filament官方文档中Light Path部分…

2025 环法对决,VELO Angel Glide 坐垫轻装上阵

2025环法第16赛段的风秃山之巅&#xff0c;当最后一缕夕阳沉入云层&#xff0c;山风裹挟着砾石的气息掠过赛道&#xff0c;一场足以载入史册的激战正酣。帕雷-潘特的肌肉在汗水里贲张&#xff0c;链条与齿轮的咬合声混着粗重喘息&#xff0c;在171.5公里赛程的最后3公里陡坡上&…

Linux程序->进度条

进度条最终效果&#xff1a; 目录 进度条最终效果&#xff1a; 一&#xff1a;两个须知 1&#xff1a;缓冲区 ①&#xff1a;C语言自带缓冲区 ②&#xff1a;缓冲区的刷新策略 2&#xff1a;回车和换行的区别 二&#xff1a;倒计时程序 三&#xff1a;入门板进度条的实…

Python爬虫实战:研究tldextract库相关技术构建新闻网站域名分析爬虫系统

1. 引言 网络爬虫作为一种自动获取互联网信息的技术,在数据挖掘、信息检索、舆情分析等领域有着广泛的应用。Python 因其丰富的库和简洁的语法,成为了开发爬虫的首选语言。tldextract 是 Python 中一个强大的域名解析库,能够准确地从 URL 中提取顶级域名、二级域名等关键信…

【算法-华为机试-火星基地改造】

基地改造题目描述目标输入输出代码实现题目描述 在2XXX年&#xff0c;人们发现了一块火星地区&#xff0c;这里看起来很适合建设新家园。但问题是&#xff0c;我们不能一次性将这片地区的空气变得适合人类居住&#xff0c;得分步骤来。 把这片火星地区想象成一个巨大的棋盘。棋…

C++入门自学Day1-- C语言的宏函数和C++内联函数

一、函数调用开销函数调用会涉及&#xff1a;参数压栈&#xff08;或寄存器传参&#xff09;跳转到函数体返回值处理栈帧销毁这个过程对小函数来说可能非常浪费&#xff0c;因此&#xff0c;宏函数和内联函数的目的就是避免“函数调用的开销”&#xff0c;通过代码展开&#xf…

Pytorch混合精度训练最佳实践

混合精度训练&#xff08;Mixed Precision Training&#xff09;是一种通过结合单精度&#xff08;FP32&#xff09;和半精度&#xff08;FP16/FP8&#xff09;计算来加速训练、减少显存占用的技术。它在保持模型精度的同时&#xff0c;通常能带来 2-3 倍的训练速度提升&#x…

Qt C++动态库SDK在Visual Studio 2022使用(C++/C#版本)

01 将C SDK 集成到 IDE 中以下是在 Microsoft Visual Studio 平台下 SDK 的集成。2.1 Visual Studio 平台下 C/C环境配置及集成到 IDE 中xxx.lib 和 xxx.dll 适合在 Windows 操作系统平台使用&#xff0c;这里以 VS2022 环境为例。2.1.1 C/C 工程环境配置与集成1、C# SDK 接口…

大语言模型 LLM 通过 Excel 知识库 增强日志分析,根因分析能力的技术方案(2):LangChain + LlamaIndex 实现

文章大纲 1 技术原理总览 2 详细实现步骤(含代码) 2.1 环境准备 2.2 Excel → LlamaIndex 节点 2.3 构建向量索引(FAISS 本地) 2.4 Google Cloud 向量检索(可选替换 FAISS) 2.5 LangChain 问答链 A. RAG 模式(向量检索 + LLM 生成) B. SQL 模式(无 RAG,直接查表) 2.…

提升ARM Cortex-M系统性能的关键技术:TCM技术解析与实战指南

文章目录引言一、TCM基础架构与工作原理1.1 TCM的物理特性1.2 与缓存机制的对比1.3 ARM Cortex-M系列对TCM的支持二、TCM的典型应用场景2.1 实时中断处理2.2 低功耗模式下的待机代码2.3 高性能算法执行2.4 系统初始化阶段的关键代码三、实战指南&#xff1a;在STM32H7上配置和优…

大数据之路:阿里巴巴大数据实践——大数据领域建模综述

为什么需要数据建模 核心痛点 数据冗余&#xff1a;不同业务重复存储相同数据&#xff08;如用户基础信息&#xff09;&#xff0c;导致存储成本激增。计算资源浪费&#xff1a;未经聚合的明细数据直接参与计算&#xff08;如全表扫描&#xff09;&#xff0c;消耗大量CPU/内存…

实战演练1:实战演练之命名实体识别

实战演练1:实战演练之命名实体识别 命名实体识别简介 代码 命名实体识别简介 什么是命名实体识别任务 命名实体识别(Named Entity Recognition,简称NER)是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。通常包括两部分: (1)实体边界识别。(2)确定…

数据结构基础内容(第七篇:堆、哈夫曼树)

# 堆 Heap 优先队列(Priority Queue) 结构性:用 *数组* 表示的完全二叉树; 有序性:任一结点的关键字是其子树所有结点的最大值(或最小值) * “最大堆(MaxHeap)”,也称“大顶堆”:最大值 * “最小堆(MinHeap)”,也称“小顶堆” :最小值 主要操作有: • MaxHeap Create( i…