前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >仅缩小视觉Token位置编码间隔,轻松让多模态大模型理解百万Token!清华大学,香港大学,上海AI Lab新突破

仅缩小视觉Token位置编码间隔,轻松让多模态大模型理解百万Token!清华大学,香港大学,上海AI Lab新突破

作者头像
机器之心
发布于 2025-02-03 06:50:36
发布于 2025-02-03 06:50:36
950
举报
文章被收录于专栏:机器之心机器之心

本文共同一作为葛俊岐 (清华大学本科生),陈子熠 (清华大学本科生),林锦涛 (香港大学博士生),祝金国 (上海 AI Lab 青年研究员)。本文的通讯作者是朱锡洲,他的研究方向是视觉基础模型和多模态基础模型,代表作有 Deformable DETR、DCN v2 等。

随着语言大模型的成功,视觉 - 语言多模态大模型 (Vision-Language Multimodal Models, 简写为 VLMs) 发展迅速,但在长上下文场景下表现却不尽如人意,这一问题严重制约了多模态模型在实际应用中的潜力。

为解决这一问题,清华大学,香港大学和上海 AI Lab 联合提出了一种新的用于多模态大模型的位置编码方法 ——Variable Vision Position Embedding (V2PE) ,取得多模态大模型在长上下文场景下的新突破。

  • 论文地址:https://arxiv.org/abs/2412.09616
  • 项目主页:https://zzdhybthu.github.io/V2PE.github.io/
  • 开源代码:https://github.com/OpenGVLab/V2PE

位置编码是多模态大模型中的关键技术,用于让模型理解输入序列的相对位置关系。它使得 VLMs 能够理解词语在句子中的位置,并识别图像块在原图中的二维位置。然而,现有的多模态模型通常在图像 token 上沿用文本模型的位置编码方式,这并非最优方案。

V2PE 提出了一种为视觉 token 分配可变位置增量的新方法,有效解决了传统位置编码在处理超长上下文任务时的性能瓶颈问题。通过避免位置编码超出模型训练上下文窗口的限制,V2PE 显著提升了模型在 32K 至 1M 长度超长上下文任务中的表现。相比传统位置编码的模型,采用 V2PE 的模型在这些任务中实现了突破性改进,甚至超越了最先进的闭源大模型。

V2PE 工作有以下贡献:

  • 构建了一个用于 VLMs 长上下文训练和评估的混合数据集。研究团队通过这一数据集发现,直接将 LLM 的位置编码机制应用于视觉 token 是次优选择。
  • 提出了可变视觉位置信息编码 (V2PE),一种创新的位置编码策略,通过为视觉 token 分配可变且较小的增量,大幅提升了 VLMs 对长多模态上下文的理解和推理能力。
  • 将 V2PE 方法和扩展训练数据应用于开源视觉模型 InternVL2-2B, 微调后的模型在统一多模态基准测试和长上下文多模态任务中表现优异,成功处理长达 1M token 的序列,展现了卓越的长上下文处理能力。

可变视觉位置编码

突破视觉 - 语言模型在长上下文场景中的新边界

在人工智能领域,视觉 - 语言模型 因其在多模态任务中的出色表现而备受关注。然而,在处理视频、高分辨率图像或长篇图文文档等长上下文场景时,其泛化能力却显著下降,这限制了它们在实际应用中的潜力,并影响了用户体验的进一步提升。

V2PE 旨在解决的核心问题在于:为什么 VLMs 在长上下文场景下表现不佳,以及如何提升它们在长序列多模态理解与推理上的能力?

为了研究 VLMs 为什么在长上下文场景表现不佳,研究团队通过构建大规模的长上下文多模态数据集,系统地评估和分析 VLMs 的能力,在这一过程中,他们意识到位置编码策略在 VLMs 的性能中起着至关重要的作用。

传统的 VLMs 位置编码通常不区分文本 token 和图像 token,并在训练中使用固定的编码规则。然而,文本 token 属于一维数据,位置编码仅需传达先后顺序;图像 token 则为二维数据,位置编码需传递图像块的空间位置信息,还要考虑多分辨率下缩略图与子图像块的对应关系。此外,当模型处理超出训练上下文窗口的长序列时,固定位置编码会超出模型已知范围,导致推理能力受限。

因此,作者提出了 Variable Visual Position Encoding (V2PE),这是一种新颖的位置编码方法,专门针对视觉 - 语言模型(VLMs)中的长上下文场景。V2PE 通过为视觉 token 分配更小的、可变的位置增量,有效地管理长多模态序列。

增强的长上下文多模态数据集

作者引入了两个增强的长上下文多模态数据集:Long Visual Question Answering (Long-VQA) 和 Long Multimodal Retrieval (Long-MR)。旨在提升 VLMs 的长上下文能力并建立评估框架。

  • Long-VQA 数据集扩展了 17 个被广泛采用的数据集,将内容从短序列扩展到包含高达 32K token 的序列。任务涵盖常识推理、事实知识和解释文本和视觉信息。
  • Long-MR 数据集受多模态大海捞针 benchamrk -- MM-NIAH 的启发,通过在交错的文本图像中检测目标图像或段落,评估 VLMs 处理超长上下文的能力。

可变视觉位置编码

位置编码在视觉 - 语言模型中的作用

位置编码是 Transformer 架构中的基本组成部分,它通过为 token 提供位置信息来捕获序列关系。位置编码通常涉及两个步骤:位置索引推导

和位置嵌入计算

  • 位置索引推导:为每个 token

分配位置索引

  • 位置嵌入计算:将这些索引转换为影响注意力机制的位置嵌入。

可变位置索引推导

作者提出了一种针对模态特定的递归函数,为文本和视觉 token 分配不同的位置索引:

其中

是一个小于 1 的增量,用于减少视觉 token 的位置索引增加速率。在训练过程中,

可以从一组分数值中动态选择,以适应不同的输入长度和复杂性。

这种方法与传统的长上下文方法相比具有几个优势:

1. V2PE 保留了 VLMs 中的所有视觉 token,保留了视觉内容的丰富性和细节。

2. V2PE 允许 VLMs 通过在训练期间动态选择

来适应任意间隔的位置索引,避免了位置编码外推引起的不准确。

长上下文能力显著提升

经过一系列的实验和分析,研究团队取得了显著的成果。通过引入 Variable Visual Position Encoding (V2PE) 和增强的长上下文多模态数据集,研究团队得到了以下几个重要的发现:

对模型上下文能力的影响

在上下文长度 32k 以内的数据上训练模型,在 64k 以内,多种长度的基准测试上进行测试。实验的结果表明,在测试长度超出训练的上下文长度时,模型效果会显著下降,但选用更小的增量

可以有效缓解这一现象。

  • 在 1M 上下文长度下的表现提升

作者分别在 32k 和 256k 的训练数据上微调模型,并在长达 1M 的多种上下文长度上进行测试。实验结果表明,V2PE 在长上下文场景下的表现明显优于不加 V2PE 的模型,也优于使用插值方法的模型,甚至能超越先进的闭源大模型。

此外,作者将训练好的 V2PE 模型与其他视觉 - 语言模型在多种基准测试进行了对比,结果表明,V2PE 在长上下文多模态任务上的表现优于其他模型,证明了 V2PE 的有效性。

消融实验中,作者将 V2PE 方法与 token 压缩的方法以及在训练时固定视觉 token 的位置编码增量的方法进行了对比,证明了 V2PE 的优势。

在对注意力图的分析中,作者关注注意力图的尾部,即对应序列末端的问题部分的注意力图。作者发现,随着

的减小,模型能更好地把注意力集中在问题对应的答案附近,证明了 V2PE 能够有效地提升模型将注意力对齐到输入序列中的关键部分的能力。

V2PE 的提出,为视觉 - 语言模型在长上下文场景下的表现提供了新的思路。通过为视觉 token 分配可变的位置增量,V2PE 有效地解决了位置编码超出模型训练上下文窗口的问题,提升了模型在长上下文场景下的表现。

作者相信,V2PE 的提出将为视觉 - 语言模型的发展带来新的机遇,为模型在长上下文多模态任务中的应用提供更多可能性。

© THE END

转载请联系本公众号获得授权

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器之心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
经常被面试官问到的HashMap,详细解读看这一篇就够了
https://juejin.im/post/5d09f2d56fb9a07ec7551fb0
南风
2019/07/08
1.2K0
经常被面试官问到的HashMap,详细解读看这一篇就够了
Hashmap实现原理及扩容机制详解
HashMap继承了AbstractMap类,实现了Map,Cloneable,Serializable接口
全栈程序员站长
2022/07/21
8620
Hashmap实现原理及扩容机制详解
Debug HashMap
最近跟两个正在找工作的同学聊天,说起集合,都是面试的重灾区,必问的选项,而且在实际的面试中并不会单独提问某一个问题,而是围绕核心知识连环炮提问。所以背面试题治标不治本,还是得读一读源码。谁让这是个面试造火箭,工作拧螺丝的市场氛围,就连CSDN的首页第二张轮播图都在蹭这个热点:
Noneplus
2020/08/02
1.2K0
hashmap线程不安全问题_为什么HashMap线程不安全
HashMap的线程不安全主要体现在下面两个方面: 1.在JDK1.7中,当并发执行扩容操作时会造成环形链和数据丢失的情况。 2.在JDK1.8中,在并发执行put操作时会发生数据覆盖的情况。
全栈程序员站长
2022/11/10
3870
hashmap线程不安全问题_为什么HashMap线程不安全
集合框架1-- HashMap
HashMap的知识点可以说在面试中经常被问到,是Java中比较常见的一种数据结构。所以这一篇就通过源码来深入理解下HashMap。
归思君
2023/10/16
1830
集合框架1-- HashMap
基于JDK8的HashMap详解
HashMap是程序员使用频率较高的一种用于映射(键值对)处理的数据类型,随着JDK(Java Development Kit)版本的更新,HashMap也在不断被优化。其中JDK1.8在HashMap底层引入了红黑树的数据结构并对其扩容进行了优化等。本文将结合JDK1.7与JDK1.8对HashMap进行分析,浅析HashMap在JDK1.8中的改进。
Java阿呆
2020/11/04
4260
基于JDK8的HashMap详解
HashMap的扩容机制—resize()「建议收藏」
什么时候扩容:当向容器添加元素的时候,会判断当前容器的元素个数,如果大于等于阈值(知道这个阈字怎么念吗?不念fa值,念yu值四声)—即当前数组的长度乘以加载因子的值的时候,就要自动扩容啦。
全栈程序员站长
2022/07/02
3390
HashMap的扩容机制—resize()「建议收藏」
了解HashMap
HashMap 主要用来存放键值对,它基于哈希表的 Map 接口实现,是常用的 Java 集合之一,是非线程安全的。
橘子君丶
2023/03/08
4380
了解HashMap
耗时3天写完的HashMap万字解析,争取一篇文章讲透它,面试官看了都直点头!
在过去的几篇博客中,我们已经将Collection下的三大接口(List,Set,Queue)学了一遍,那么今天我们即将开启Java中另一大集合类型-Map。
JavaBuild
2024/05/27
1530
耗时3天写完的HashMap万字解析,争取一篇文章讲透它,面试官看了都直点头!
Java 8系列之重新认识HashMap
作者:美团点评技术团队 链接:https://zhuanlan.zhihu.com/p/21673805 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
bear_fish
2018/09/19
1.2K0
Java 8系列之重新认识HashMap
帮你面试——HashMap
这几天学习了HashMap的底层实现,但是发现好几个版本的,代码不一,而且看了Android包的HashMap和JDK中的HashMap的也不是一样,原来他们没有指定JDK版本,很多文章都是旧版本JDK1.6.JDK1.7的。现在我来分析一哈最新的JDK1.8的HashMap及性能优化。
小忽悠
2018/12/19
3970
八、JDK1.8中HashMap扩容机制
前面文章一、深入理解-Java集合初篇 中我们对Java的集合体系进行一个简单的分析介绍,上两篇文章二、Jdk1.7和1.8中HashMap数据结构及源码分析 、三、JDK1.7和1.8HashMap数据结构及源码分析-续 中我们分别对JDK1.7和JDK1.8中HashMap的数据结构、主要声明变量、构造函数、HashMap的put操作方法做了深入的讲解和源码分析。 四、深入理解Java中的HashMap「网易面试快答」文章中主要针对面试中常见的面试问题进行简单解答。 五、深入理解JDK1.7中HashMap哈希冲突解决方案 和 六、深入理解JDK1.8中HashMap哈希冲突解决方案 中对HashMap中哈希冲突及减少哈希冲突的解决方案做详细的介绍,并通过源码加深大家的理解。 七、JDK1.7中HashMap扩容机制 中介绍了JDK1.7中HashMap的扩容机制及扩容过程中可能出现的死锁及数据丢失问题。 本篇文章我们将要介绍JDK1.8中HashMap的扩容机制,并通过一个实例来展示链表的哈希扩容。
全栈程序员站长
2022/07/04
4850
八、JDK1.8中HashMap扩容机制
HashMap底层实现原理解析-JDK8
HashMap在平时的工作中是使用最频繁的一种数据存储结构,例如在工作中我们可以用HashMap做本地缓存,存放临时对象等等场景中,而且HashMap也是平时面试当中被经常问到的知识点。因此对HashMap的知识点掌握还是比较重要的。
Alec
2020/06/09
5100
HashMap(JDK1.8)源码+底层数据结构分析
HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。
黑洞代码
2021/02/09
2630
HashMap源码阅读笔记
HashMap采用 key/value 存储结构,每个key对应唯一的value。
三分恶
2020/11/03
4990
HashMap源码阅读
HashMap是Map家族中使用频度最高的一个,下文主要结合源码来讲解HashMap的工作原理。 1. 数据结构 HashMap的数据结构主要由数组+链表+红黑树(JDK1.8后新增)组成,如下图所示: 左侧数组是哈希表,数组的每个元素都是一个单链表的头节点,当不同的key映射到数组的同一位置,就将其放入单链表中来解决key的hash值的冲突。 当链表的长度>8时,JDK1.8做了数据结构的优化,会将链表转化为红黑树,利用红黑树快速增删改查的特点提升HashMap的性能,查询效率链表O(N),红黑树是O(l
butterfly100
2018/04/17
7170
HashMap源码阅读
jvm源码解析(二)HashMap
每个节点分别有hash,key,value,next这四个成员变量,next指向下一个节点
JathonKatu
2020/10/27
4160
jvm源码解析(二)HashMap
什么是HashMap容器
【1】HashMap是使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。
忧愁的chafry
2022/10/30
5280
集合系列 Map(十二):HashMap
HashMap 是 Map 基于哈希散列算法的实现,其在 JDK1.7 中采用了数组+链表的数据结构。在 JDK1.8 中为了提高查询效率,采用了数组+链表+红黑树的数据结构。本文所有讲解均基于 JDK1.8 进行讲解。
陈树义
2019/08/29
4700
集合系列 Map(十二):HashMap
深入理解 HashMap
​ HashMap 是基于哈希表的 Map 接口是实现的。此实现提供所有可选操作,并允许使用 null 做为值(key)和键(value)。HashMap 不保证映射的顺序,特别是它不保证该顺序恒久不变。此实现假定哈希函数将元素适当的分布在各个桶之间,可作为基本操作(get 和 put)提供稳定的性能。在jdk1.7中的HashMap是基于数组+链表实现的,在jdk1.8中的HashMap是由数组+链表+红黑树实现的(不懂,一开始就讲那么难的谁受得了?没关系,继续往下看)
全栈程序员站长
2022/09/30
3420
深入理解 HashMap
相关推荐
经常被面试官问到的HashMap,详细解读看这一篇就够了
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档