DeepSeek-VL2论文解读:用于高级多模态理解的专家混合视觉语言模型

news2025/2/8 3:42:24

github:https://github.com/deepseek-ai/DeepSeek-VL2

paper: https://github.com/deepseek-ai/DeepSeek-VL2/blob/main/DeepSeek_VL2_paper.pdf

大型视觉语言模型(VLMs)已经成为人工智能领域的变革性力量,将大型语言模型(LLMs)的卓越能力扩展到能够无缝处理视觉和文本信息。这一进步极大地拓展了人工智能系统在需要多模态理解的复杂现实应用中的潜力。

在这份技术报告中,我们介绍了DeepSeek-VL2,这是一系列新的开源视觉语言模型,利用专家混合(MoE)架构,在性能和效率上相较其前身DeepSeek-VL取得了显著提升。我们的进步主要集中在三个关键方面:(1)动态的高分辨率视觉编码策略,增强了视觉理解能力;(2)优化的语言模型架构,显著提高了训练和推理效率;(3)精细化的视觉语言数据构建流程,不仅提升了整体性能,还扩展了模型在精确视觉定位等新领域的能力。

在视觉组件方面,我们引入了一种动态平铺视觉编码策略,能够高效处理不同纵横比的高分辨率图像。这种方法改进了DeepSeek-VL的混合视觉编码器,该编码器从固定分辨率(384 × 384和1024 × 1024)的图像中提取特征。我们的方法避免了旧的固定尺寸编码器的限制,尤其在需要超高分辨率的任务中表现出色,如视觉定位、文档/表格/图表分析和详细特征提取,同时保持可管理的视觉标记数量。我们的系统借鉴了成熟的切片平铺方法,动态地将高分辨率输入分割为局部平铺,通过共享的视觉变换器处理每个平铺,并在语言模型中无缝整合提取的特征。该设计保留了具有局部注意力的视觉变换器的优势,实现了丰富的特征提取,而没有随着图像分辨率增加而带来的平方计算扩展。

在语言组件方面,我们利用了DeepSeek语言模型,采用多头潜在注意力(MLA)机制。MLA通过将键值(KV)缓存压缩为潜在向量,显著降低了计算成本,从而实现更快的推理和更高的吞吐能力。我们通过DeepSeekMoE框架进一步提高了效率,该框架采用稀疏计算技术。我们的模型系列采用了三种MoE变体,分别为3B、16B和27B。这些LLMs分别有0.57B、2.4B和4.1B的激活参数。

我们还在质量、数量和多样性方面极大地提升了我们的视觉语言训练数据。这一综合数据集使得在广泛任务中的泛化能力和性能得到改善,包括视觉问答(VQA)、光学字符识别(OCR)、文档/表格/图表理解、视觉推理和通用聊天机器人应用。改进的训练数据还赋予了新能力,如视觉定位和图形用户界面(GUI)感知。

总之,DeepSeek-VL2在大规模专家混合视觉语言建模方面实现了重大飞跃。通过新的视觉处理策略和优化的语言模型,我们开发了一系列在性能与效率之间取得平衡的模型。通过开源预训练模型,我们旨在加速该领域的进展,并促进协作研究的发展。

模型架构

DeepSeek-VL2由三个核心模块组成:(1)视觉编码器,(2)视觉-语言适配器,以及(3)专家混合语言模型。基于其前身的仅解码LLaVA风格架构[54],DeepSeek-VL2引入了两个主要进步:动态平铺策略和具有多头潜在注意力[53]的DeepSeekMOE[20, 86]语言模型。这些创新使得处理高分辨率视觉输入和文本数据更加高效。

动态平铺策略

原始的DeepSeek-VL采用了混合视觉编码器,将SigLIP[106]用于384 × 384分辨率的粗粒度特征提取,SAM-B[35]用于1024 × 1024分辨率的细粒度特征提取。虽然这种融合方法生成了适用于各种视觉-语言任务的丰富视觉表示,但受限于固定的1024 × 1024分辨率约束。这一限制在处理具有更大分辨率和极端纵横比的图像时尤其具有挑战性,例如在InfographicVQA[67]、密集OCR和详细视觉定位任务中。

受最近VLMs进展[16, 21, 55]的启发,我们通过将高分辨率图像分割为平铺来实现动态平铺策略。这种方法使得使用单一的SigLIP-SO400M-384视觉编码器[106]高效处理不同纵横比的高分辨率图像成为可能。预训练的SigLIP在384 × 384的基础分辨率下运行。为了适应不同的纵横比,我们定义了一组候选分辨率:𝐶𝑅 = {(𝑚 · 384, 𝑛 · 384) | 𝑚 ∈ N, 𝑛 ∈ N, 1 ≤ 𝑚, 𝑛, 𝑚𝑛 ≤ 9},其中𝑚 : 𝑛表示纵横比。对于尺寸为(𝐻, 𝑊)的输入图像,我们计算将其调整为每个候选分辨率所需的填充区域(我们首先调整原始图像的大小,使其长边与目标分辨率匹配,然后在保持原始纵横比的同时填充另一维度)。我们选择最小化填充区域的分辨率(𝑚𝑖 · 384, 𝑛𝑖 · 384)。调整大小后的图像被分割为𝑚𝑖 × 𝑛𝑖个384 × 384像素的局部平铺,加上一个全局缩略图平铺。SigLIP-SO400M-384视觉编码器处理所有(1 + 𝑚𝑖 × 𝑛𝑖)个平铺,每个平铺生成27 × 27 = 729个1152维的视觉嵌入。为了计算效率和上下文长度管理,在处理多个(> 2)图像时,我们禁用动态平铺策略。

解释

  • 视觉编码器:负责处理和提取图像中的视觉特征。
  • 视觉-语言适配器:将视觉特征与语言模型结合起来,促进多模态理解。
  • 专家混合语言模型:通过多头潜在注意力机制和稀疏计算技术,提高语言模型的性能和效率。
  • 动态平铺策略:通过将高分辨率图像动态分割为局部平铺,解决了固定分辨率编码器的限制,尤其在处理具有极端纵横比的图像时表现出色。

这些改进使得DeepSeek-VL2在处理高分辨率视觉输入和文本数据方面更加高效,为复杂的多模态任务提供了强大的支持。

视觉-语言适配器

在视觉平铺处理之后,我们实施了一个2 × 2像素洗牌操作,将每个平铺的视觉标记从27 × 27压缩到14 × 14 = 196个标记。然后,在处理(1 + 𝑚𝑖 × 𝑛𝑖)个平铺时,我们引入了三个特殊标记。对于全局缩略图平铺(14 × 14),我们在每行的末尾添加14个 <tile_newline> 标记,总共形成14 × 15 = 210个标记。对于𝑚𝑖 × 𝑛𝑖个局部平铺,它们排列成一个形状为(𝑚𝑖 · 14, 𝑛𝑖 · 14)的二维网格,我们在最后一列的末尾附加𝑚𝑖 · 14个 <tile_newline> 标记,以指示所有局部平铺行的结束。此外,在全局缩略图平铺和局部平铺之间插入一个 <view_separator> 标记。完整的视觉序列包含210 + 1 + 𝑚𝑖 · 14 × (𝑛𝑖 · 14 + 1)个视觉标记,这些标记随后通过两层多层感知机(MLP)投射到语言模型的嵌入空间。我们的动态平铺策略的视觉示意图如图3所示。

DeepSeekMoE LLM

我们的语言模型基于DeepSeekMoE[20, 86],其中包含多头潜在注意力机制[53]。MLA通过将键值缓存压缩为潜在向量来提高推理效率,从而增加吞吐能力。该模型还结合了MoE架构[20],通过稀疏计算实现高效推理。在MoE训练期间,我们为每个专家引入了一个全局偏置项[86],以经济有效地改善专家之间的负载平衡。DeepSeek-VL2提供了以下三种模型变体:1.0B、2.8B和4.5B。完整的架构规格可在表1中找到。

解释

  • 视觉-语言适配器:通过像素洗牌和特殊标记的引入,优化了视觉标记的排列和与语言模型的集成。
  • 多头潜在注意力(MLA):通过压缩键值缓存,提高了推理效率和吞吐能力。
  • 专家混合(MoE)架构:通过稀疏计算提高推理效率,并通过全局偏置项改善负载平衡。
  • 模型变体:提供不同规模的模型,以适应不同的应用需求。

这些设计和技术的结合,使得DeepSeek-VL2在处理视觉和语言数据时更加高效和灵活。

训练方法论

4.1 训练流程

DeepSeek-VL2通过三阶段的流程进行训练:

  1. 初始阶段:在这个阶段,我们使用第3.1节中详细描述的图文配对数据,训练视觉编码器和视觉-语言适配器MLP,同时保持语言模型固定。

  2. 预训练阶段:在这一阶段,我们使用第3.2节描述的数据进行视觉-语言预训练。在此阶段,所有模型参数,包括视觉编码器、视觉-语言适配器和语言模型,都会解锁并同时训练。

  3. 微调阶段:在这个阶段,我们使用第3.3节概述的数据进行有监督的微调,进一步优化模型性能。

在预训练和微调阶段,我们强调视觉理解能力,并仅在文本标记上计算下一个标记预测损失。

视觉-语言对齐

基于预训练的语言模型(DeepSeekMoE 3B/16B/27B),我们的主要目标是建立视觉特征和语言特征之间的稳固连接。这种对齐使得预训练的语言模型能够有效地处理视觉输入。与之前的方法[54, 59]不同,这些方法保持预训练的视觉编码器和语言模型固定,我们调整固定分辨率的视觉编码器以适应动态高分辨率图像。在这个阶段,我们优化视觉编码器和视觉-语言适配器,同时保持语言模型冻结。

视觉-语言预训练

在嵌入空间中建立视觉-语言对齐之后,我们将大部分计算资源用于视觉-语言预训练。这个阶段的重点是开发跨多种任务的综合性联合视觉-语言知识。我们解锁所有参数,包括视觉编码器、视觉-语言适配器和语言模型,并同时进行训练。

通过这些阶段的系统训练,DeepSeek-VL2不仅能够处理高分辨率的视觉输入,还能够在多模态任务中表现出色。这种训练方法使得模型在多样化的任务中提高了视觉和语言理解能力。

有监督微调

在最后阶段,我们通过有监督的微调来增强预训练模型的指令跟随能力和对话能力。利用我们内部的视觉语言SFT数据,我们优化所有参数,但仅对答案和特殊标记进行监督,同时屏蔽系统和用户提示。为了加强对话理解,我们将多模态数据与来自DeepSeek-V2 [53]的纯文本对话数据结合使用。这种方法确保了在各种视觉语言任务中具有强大的性能,包括密集图像描述、通用视觉问答(VQA)、光学字符识别(OCR)、表格/图表/文档/图形理解、视觉到代码、视觉推理、视觉定位和语言理解等。

4.2 超参数和基础设施

DeepSeek-VL2训练的详细超参数列在表2中。我们的训练和评估是在HAI-LLM [30]平台上进行的,这个平台是为大型模型设计的高效轻量级平台。在我们的流水线并行策略中,视觉编码器相对于LLM块的独特计算特性带来了显著的挑战。作为模型流水线中的第一个组件,视觉编码器需要在GPU之间进行仔细的负载平衡,以防止流水线空泡并优化GPU利用率。为了解决这个问题,我们在流水线并行策略中对视觉编码器进行了细粒度的层划分。此外,我们在前向和后向过程中,在不同的数据并行等级间执行图像平铺负载平衡,以缓解动态分辨率策略导致的图像平铺数量不平衡问题。我们的训练过程还结合了张量并行和专家并行的方法,以实现最高效率。由于某些数据批次只有文本数据,而其他批次包含图像数据,我们为不同类型的数据引入了两种不同的流水线策略,并根据需要在这两种策略之间切换。DeepSeek-VL2的训练在7/10/14天内完成,使用了16/33/42个节点的集群,每个节点配备8个NVIDIA A100 GPU。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第二个Qt开发实例:在Qt中利用GPIO子系统和sysfs伪文件系统实现按钮(Push Button)点击控制GPIO口(效果为LED2灯的灭和亮)

引言 本文承接博文 https://blog.csdn.net/wenhao_ir/article/details/145420998 里的代码&#xff0c;在那里面代码的基础上添加上利用sysfs伪文件系统实现按钮(Push Button)点击控制GPIO口的代码&#xff0c;进而实现LED2灯的灭和亮。 最终的效果是点击下面的LED按钮实现LED…

Day37-【13003】短文,串的基本概念,匹配算法,算法时间复杂度,真题训练

文章目录 第二节 串串的基本概念串的模式匹配朴素的模式匹配算法(BF算法)算法最坏时间复杂度O(n x m) 改进的模式匹配算法(KMP算法)特征向量next&#xff0c;来确定k值特征向量next的算法实现 算法最坏时间复杂度O(n)进一步改进next值的计算&#xff0c;简化步骤 第四章真题真题…

陷入闭包:理解 React 状态管理中的怪癖

TLDR 闭包就像函数随身携带的背包&#xff0c;包含它们创建时的数据React 组件使用闭包来记住它们的状态和属性过时的闭包可能导致状态更新不如预期时的错误函数式更新提供了一个可靠的方式来处理最新状态 简介 你是否曾经疑惑过&#xff0c;为什么有时你的 React 状态更新不…

【SRC排名】安全应急响应中心SRC上榜记录

2023年 新氧第三 https://security.soyoung.com/top 合合第四 https://security.intsig.com/index.php?m&chall&aindex 2024年 好未来第一 https://src.100tal.com/index.php?m&chall&aindex&#xff08;官网是总榜&#xff0c;年榜只有海报&#xff09;…

Linux——基础命令1

$&#xff1a;普通用户 #&#xff1a;超级用户 cd 切换目录 cd 目录 &#xff08;进入目录&#xff09; cd ../ &#xff08;返回上一级目录&#xff09; cd ~ &#xff08;切换到当前用户的家目录&#xff09; cd - &#xff08;返回上次目录&#xff09; pwd 输出当前目录…

OSPF基础(1):工作过程、状态机、更新

OSPF基础 1、技术背景&#xff08;与RIP密不可分&#xff0c;因为RIP中存在的问题&#xff09; RIP中存在最大跳数为15的限制&#xff0c;不能适应大规模组网周期性发送全部路由信息&#xff0c;占用大量的带宽资源以路由收敛速度慢以跳数作为度量值存在路由环路可能性每隔30秒…

【目标检测】模型验证:K-Fold 交叉验证

K-Fold 交叉验证 1、引言1.1 K 折交叉验证概述 2、配置2.1 数据集2.2 安装包 3、 实战3.1 生成物体检测数据集的特征向量3.2 K 折数据集拆分3.3 保存记录3.4 使用 K 折数据分割训练YOLO 4、总结 1、引言 我们将利用YOLO 检测格式和关键的Python 库&#xff08;如 sklearn、pan…

Unity 2D实战小游戏开发跳跳鸟 - 计分逻辑开发

上文对障碍物的碰撞逻辑进行了开发,接下来就是进行跳跳鸟成功穿越过障碍物进行计分的逻辑开发,同时将对应的分数以UI的形式显示告诉玩家。 计分逻辑 在跳跳鸟通过障碍物的一瞬间就进行一次计分,计分后会同步更新分数的UI显示来告知玩家当前获得的分数。 首先我们创建一个用…

京准:NTP卫星时钟服务器对于DeepSeek安全的重要性

京准&#xff1a;NTP卫星时钟服务器对于DeepSeek安全的重要性 京准&#xff1a;NTP卫星时钟服务器对于DeepSeek安全的重要性 在网络安全领域&#xff0c;分布式拒绝服务&#xff08;DDoS&#xff09;攻击一直是企业和网络服务商面临的重大威胁之一。随着攻击技术的不断演化…

Android学习20 -- 手搓App2(Gradle)

1 前言 昨天写了一个完全手搓的&#xff1a;Android学习19 -- 手搓App-CSDN博客 后面谷歌说不要用aapt&#xff0c;d8这些来搞。其实不想弄Gradle的&#xff0c;不过想着既然开始了&#xff0c;就多看一些。之前写过一篇Gradle&#xff0c;不过是最简单的编译&#xff0c;不涉…

车型检测7种YOLOV8

车型检测7种YOLOV8&#xff0c;采用YOLOV8NANO训练&#xff0c;得到PT模型&#xff0c;转换成ONNX&#xff0c;然后OPENCV的DNN调用&#xff0c;支持C&#xff0c;python,android开发 车型检测7种YOLOV8

IDEA 中集成 Maven,配置环境、创建以及导入项目

目录 在 IntelliJ IDEA 中集成 Maven 并配置环境 1. 打开 IDEA 设置 2. 定位 Maven 配置选项 3. 配置 Maven 路径 4. 应用配置 创建 Maven 项目 1. 新建项目 2. 选择项目类型 3. 配置项目信息 4. 确认 Maven 设置 5. 完成项目创建 导入 Maven 项目 1. 打开导入窗口…

react关于手搓antd pro面包屑的经验(写的不好请见谅)

我们先上代码&#xff0c;代码里面都有注释&#xff0c;我是单独写了一个组件&#xff0c;方便使用&#xff0c;在其他页面引入就行了 还使用了官方的Breadcrumb组件 import React, { useEffect, useState } from react; import { Breadcrumb, Button } from antd; import { …

[含文档+PPT+源码等]精品大数据项目-Django基于大数据实现的心血管疾病分析系统

大数据项目-Django基于大数据实现的心血管疾病分析系统背景可以从以下几个方面进行阐述&#xff1a; 一、项目背景与意义 1. 心血管疾病现状 心血管疾病是当前全球面临的主要健康挑战之一&#xff0c;其高发病率、高致残率和高死亡率严重威胁着人类的生命健康。根据权威机构…

【Rust自学】19.5. 高级类型

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 19.5.1.使用newtype模式实现类型安全和抽象 在 19.2. 高级trait 中&#xff08;具体来说是…

113,【5】 功防世界 web unseping

进入靶场 代码审计 <?php // 高亮显示当前 PHP 文件的源代码&#xff0c;方便开发者查看代码结构和内容 highlight_file(__FILE__);// 定义一个名为 ease 的类 class ease {// 私有属性 $method&#xff0c;用于存储要调用的方法名private $method;// 私有属性 $args&…

leetCode刷题-图、回溯相关

岛屿数量 class Solution { private:int mi;int mj; public:int numIslands(vector<vector<char>>& grid) {mi grid.size() - 1; // i的范围 0~mimj grid[0].size() - 1; // j的范围 0~mjint landnum 0;bool sea false;do {pair<int, int> res …

Windows编程:下载与安装 Visual Studio 2010

本节前言 在写作本节的时候&#xff0c;本来呢&#xff0c;我正在写的专栏&#xff0c;是 MFC 专栏。而 VS2010 和 VS2019&#xff0c;正是 MFC 学习与开发中&#xff0c;可以使用的两款软件。然而呢&#xff0c;如果你去学习 Windows API 知识的话&#xff0c;那么&#xff0…

OpenEuler学习笔记(十八):搭建企业云盘服务

要在 OpenEuler 上搭建企业云盘&#xff0c;可借助一些开源软件来实现&#xff0c;以下以 Nextcloud 为例详细介绍搭建步骤。Nextcloud 是一款功能丰富的开源云存储解决方案&#xff0c;支持文件共享、同步、协作等多种功能。 1. 系统环境准备 确保 OpenEuler 系统已更新到最…

什么是三层交换技术?与二层有什么区别?

什么是三层交换技术&#xff1f;让你的网络飞起来&#xff01; 一. 什么是三层交换技术&#xff1f;二. 工作原理三. 优点四. 应用场景五. 总结 前言 点个免费的赞和关注&#xff0c;有错误的地方请指出&#xff0c;看个人主页有惊喜。 作者&#xff1a;神的孩子都在歌唱 大家好…