2、DeepSeek-VL / DeepSeek-VL2
DeepSeek-VL / DeepSeek-VL2:面向真实世界的开源多模态模型详解(架构 × 数据 × 训练)
目标读者:想系统理解 DeepSeek-VL 与 DeepSeek-VL2 “为什么这样设计、怎么训练、解决了哪些真实世界问题”的研究与工程读者。
1. 为什么需要 DeepSeek-VL:真实世界多模态的三类硬问题
许多开源 MLLM 在“真实世界输入”(网页截图、PDF、扫描件、密集 OCR、信息图、复杂图表)上体验不稳定,常见瓶颈集中在三点:
-
高分辨率输入不经济
传统 ViT/CLIP 风格视觉编码器通常以 224×224224\times224224×224 或 384×384384\times384384×384 为主,强行提升分辨率会导致 token 数爆炸、推理延迟显著上升;但真实文档/网页任务又高度依赖细节(小字号、表格边界、坐标刻度、图例等)。 -
视觉增强常伴随语言能力退化
直接用大量图文数据继续训练 LLM,很容易让语言侧出现“灾难性遗忘”:对话能力、逻辑表达、指令跟随质量下降。 -
训练数据“脱离使用场景”
如果预训练/微调数据主要来自自然图像 caption 或简单 VQA,模型在网页、PDF、图表、OCR 上的泛化会很脆弱,因为这些场景的视觉分布和任务需求完全不同。
DeepSeek-VL 的核心思路就是围绕上述三点,分别用 真实场景数据体系、混合视觉编码器、训练阶段的模态竞争平衡 来系统解决。
2. DeepSeek-VL:整体框架与核心目标
2.1 模型定位与规模
DeepSeek-VL 是 DeepSeek 在 2024 年 3 月开源的视觉-语言模型系列,提供 1.3B 与 7B 两个规模,并面向“真实世界多模态理解”做了系统优化:网页截图、PDF 文档、OCR、图表/表格等。
2.2 “老三样”主干:Vision Encoder + Adaptor + LLM
DeepSeek-VL 的主干非常典型:
- 视觉编码器(Vision Encoder):将图像转为视觉 token / 特征序列
- 视觉-语言适配器(Vision-Language Adaptor):将视觉特征映射到 LLM 可消费的嵌入空间
- 语言模型(LLM):进行多模态对话、推理与生成
关键差异不在“是否三段式”,而在 视觉编码器如何兼顾细节与语义、以及 训练策略如何避免语言能力退化。
3. DeepSeek-VL 的架构设计:混合视觉编码器(SigLIP + SAM-B)
3.1 为什么要“混合编码器”
真实世界任务往往同时需要两类信息:
- 高级语义:判断这页在讲什么、图表主题是什么、对象之间语义关系
- 低层细节:OCR 字符、表格线、坐标刻度、图例符号、局部定位
单一 CLIP/SigLIP 在低分辨率输入上容易“看不清细节”;而单一高分辨率编码器又可能缺少强语义对齐能力或成本过高。因此 DeepSeek-VL 采用“双路融合”:
- SigLIP 编码器:偏语义、对齐能力强
- SAM-B(基于 ViTDet 系列)编码器:偏细节、支持更高分辨率输入(如 1024×10241024\times10241024×1024)
3.2 SigLIP 路径:语义表征与“CLIP-blind pairs”
SigLIP/CLIP 一类对比预训练模型擅长把“图像整体语义”映射到与文本相近的空间,但在密集细节任务上存在两类典型问题:
- 低分辨率导致细节缺失:如小字号 OCR、复杂表格单元格、曲线图的细小刻度
- CLIP-blind pairs:视觉上不同的图像可能得到相近嵌入(尤其当差异集中在局部细节)
示例(理解 “blind pairs”):
两张网页截图整体布局相似,但某一处价格从 “$199” 变为 “$299”。CLIP 可能认为二者语义相近;但真实任务(比价、核对)要求模型稳定捕捉这类局部变化。
3.3 SAM-B 路径:高分辨率细节特征
SAM-B 路径的目标是“把细节保留下来”。典型流程包括:
- 将图像缩放到 1024×10241024\times10241024×1024
- 生成类似 64×64×25664\times64\times25664×64×256 的高密度特征图
- 通过插值、卷积下采样等操作变换到适合 token 化的形态(例如得到与 SigLIP 相近 token 数量尺度的序列)
直观理解:SAM-B 提供“像素级更细”的信息通道,让模型在 OCR、视觉定位、图表读取等任务中更稳。
3.4 双路融合:在有限 token 预算下兼顾语义与细节
DeepSeek-VL 的融合要点是:把高分辨率与低分辨率特征对齐到可拼接的序列表示,再投影到 LLM 输入空间。
一个典型实现形态(概念层面):
- SigLIP 输出:576×1024576\times1024576×1024(例如 24×2424\times2424×24 token 网格展平)
- SAM-B 输出经过处理也对齐到:576×1024576\times1024576×1024
- 拼接后得到:576×2048576\times2048576×2048
- 经过激活与嵌入映射:得到 LLM 可消费的视觉 token 序列
关键点:融合不是“堆更大分辨率”,而是“用两路互补信息在相近 token 规模内增强表达”。
4. DeepSeek-VL 的 Vision-Language Adaptor:两层混合 MLP 的意义
视觉编码器的输出特征空间与 LLM 的词嵌入空间并不天然一致。Adaptor 的职责是:
- 第一层:分别处理来自高分辨率(细节)与低分辨率(语义)两路特征,做初步对齐与尺度校正
- 第二层:把拼接后的特征映射到 LLM 的输入嵌入维度,使视觉 token 能像“特殊词”一样进入 Transformer 进行跨模态注意力融合
直观上,Adaptor 是“跨模态接口层”,决定了视觉信息能否以稳定、可控的方式注入语言模型。
5. DeepSeek-VL 的 LLM:沿用 DeepSeek-LLM 的语言能力底座
DeepSeek-VL 的语言模型基于 DeepSeek-LLM(结构借鉴 LLaMA 范式):
- Pre-Norm / RMSNorm:提升训练稳定性
- SwiGLU:增强 FFN 表达与训练效率
- RoPE:长上下文位置建模
- 一致的 tokenizer:保持语言侧能力与生态一致
规模与文本预训练量(概念):
- 1.3B:约 5×10115\times10^{11}5×1011 文本 token 级别
- 7B:约 2×10122\times10^{12}2×1012 文本 token 级别
这一点非常关键:真实世界多模态能力想要“可用”,语言侧必须足够强,否则会出现“看懂了但说不清 / 指令跟随差 / 推理表达不稳定”。
6. DeepSeek-VL 三阶段训练:从对齐到泛化再到可交互
DeepSeek-VL 的训练通常可理解为“三步走”:
6.1 阶段 1:Adaptor Warm-up(只训接口层)
目标:让 LLM 在嵌入空间“认识视觉 token”,建立概念对应关系。
- 冻结视觉编码器与 LLM,仅训练 Adaptor
- 用图文对与 OCR 渲染数据做对齐
重要观察:Adaptor 参数量远小于 LLM,承载能力有限。单纯扩大数据规模并不一定提升,甚至可能出现对齐不充分或表征瓶颈。
这也解释了为什么后续阶段要 解冻 LLM,让语言模型参与多模态适配。
6.2 阶段 2:Joint Vision-Language Pretraining(全模型联合训练 + 模态平衡)
直接用多模态数据训练容易伤害语言能力,因此 DeepSeek-VL 引入 模态竞争平衡 的策略:训练中同时喂入大量纯文本数据,确保语言能力不退化。
一个典型比例选择是:
- 语言数据占比不低于 70%70\%70%
- 多模态数据约 30%30\%30%
也就是常说的 7:37:37:3 混合策略。
为什么语言数据要占大头?
因为多模态数据往往“表面复杂但语言复杂度低”(例如短 caption、简单 QA),如果纯靠它继续训练 LLM,很容易让 LLM 的长链路语言能力被稀释。
示例:
如果训练数据大量是“图中是什么?A 是猫”,语言侧会趋向短、模板化回答;而纯文本对话与复杂推理数据能维持语言表达、逻辑结构与指令跟随能力。
6.3 阶段 3:SFT(指令微调到可交互聊天模型)
目标:让模型变得“会用”,包括对话、指令遵循、复杂场景问答等。
常见策略要点:
- 优化语言模型 + Adaptor + 视觉编码器(部分模块可冻结以节省显存)
- 只监督答案与必要的特殊 token,掩码 system/user prompt(减少对提示词形式的过拟合)
- 混合多模态指令数据与纯文本对话数据,提升通用对话质量
7. DeepSeek-VL 的数据体系:真实场景覆盖为什么重要
DeepSeek-VL 的数据设计强调“贴近真实用户输入”。一个典型的预训练数据组成可以包括:
- 交错图文(网页、百科、教程类)
- 图表表格(结构化视觉 + 文本解释)
- Web 代码/渲染(网页结构、截图-文本对齐)
- OCR 场景文本与文档渲染(论文 PDF、扫描件渲染)
- 大比例纯文本(维持语言能力)
其直观收益是:模型不仅能“看图说话”,还能稳定处理 文档理解、表格解析、图表读数、网页交互式理解 这些高频真实任务。
8. DeepSeek-VL2:从“固定高分辨率”到“动态分块 + MoE LLM”的升级
DeepSeek-VL 的混合编码器已能处理 1024×10241024\times10241024×1024,但仍会遇到两类现实问题:
- 极端宽高比输入:长条网页截图、横向信息图、超长 PDF 页面
- 更高分辨率需求:信息图、密集 OCR、精细定位任务常要求更细粒度的局部观察
DeepSeek-VL2 的升级聚焦两点:
- 动态分块编码(dynamic tiling):自适应不同宽高比与分辨率
- DeepSeekMoE + MLA 的 LLM:在更高吞吐与更低 KV 成本下提升生成与推理效率
整体仍是三段式:Vision Encoder + Adaptor + LLM,但每一段都更“面向高效高分辨率”。
9. DeepSeek-VL2 的动态分块编码:机制、公式与直观解释
9.1 核心思想:把一张大图拆成“全局 + 局部块”
对复杂页面,单次缩放到固定分辨率会丢失局部细节;而直接用超高分辨率编码又会导致 token 数和计算量爆炸。
VL2 的策略是:
- 用一个 全局缩略图块 捕捉整体语义与布局
- 用多个 局部 tiles 捕捉细节(OCR、表格、局部图形)
每个 tile 采用固定分辨率(例如 384×384384\times384384×384),确保视觉编码器在固定成本下处理局部细节。
9.2 候选分辨率集合:用离散网格覆盖不同宽高比
VL2 通过候选集合 CRCRCR 来选择最适合输入图像宽高比的“分块网格”:
CR={(m⋅384,n⋅384)∣m∈N,n∈N,1≤m,n,mn≤9} CR = \{(m \cdot 384, n \cdot 384) \mid m \in \mathbb{N}, n \in \mathbb{N}, 1 \leq m, n, mn \leq 9\} CR={(m⋅384,n⋅384)∣m∈N,n∈N,1≤m,n,mn≤9}
其中:
- mmm 表示水平方向 tiles 数
- nnn 表示垂直方向 tiles 数
- 约束 mn≤9mn \le 9mn≤9 控制 tiles 总数上限(避免 token/算力爆炸)
直觉:把页面映射到最多 9 个局部块 + 1 个全局块的预算内,同时尽量贴合原始宽高比。
9.3 如何选择最合适的候选分辨率:最小填充面积原则
输入图像尺寸为 (H,W)(H, W)(H,W)。对于某个候选分辨率 (m⋅384,n⋅384)(m\cdot384, n\cdot384)(m⋅384,n⋅384),通常需要把原图缩放后再做 padding 才能对齐到该候选尺寸。
一个常见选择准则是最小化 padding 面积(或等价的无效区域):
(m∗,n∗)=argmin(m,n)∈S PadArea(H,W;m,n) (m^*, n^*) = \arg\min_{(m,n)\in \mathcal{S}} \ \text{PadArea}(H, W; m, n) (m∗,n∗)=arg(m,n)∈Smin PadArea(H,W;m,n)
其中 S\mathcal{S}S 表示满足 mn≤9mn \le 9mn≤9 的候选集合,PadArea(⋅)\text{PadArea}(\cdot)PadArea(⋅) 表示将输入图像适配到候选分辨率所需的填充面积。
示例(直观理解):
一张长条网页截图更适合 mmm 大、nnn 小(例如 3×13\times13×1 或 4×14\times14×1 一类),而不是 1×31\times31×3。最小 padding 的选择会自动偏向更贴合原宽高比的网格。
9.4 分块后 token 数为何可控:token 压缩与“像素混洗”
VL2 对每个 tile 用 SigLIP-SO400M-384 编码,得到 token 网格(例如 27×27=72927\times27=72927×27=729)。
随后通过 2×22\times22×2 的“像素混洗/重排压缩”把 token 网格从 27×2727\times2727×27 压缩到约 14×14=19614\times14=19614×14=196,显著降低后续跨模态注意力的成本。
示例:
如果不压缩,9 个局部 tile 就是 9×729=65619\times729=65619×729=6561 个 token,仅视觉侧就会非常重;压缩到 9×196=17649\times196=17649×196=1764 则更可控。
9.5 特殊 token:让 LLM “读懂”二维布局
VL2 会引入类似以下结构标记:
- 行结束标记:
<tile_newline> - 视图分隔符:
<view_separator>(区分全局块与局部块)
其目的不是“增加信息”,而是为 LLM 提供稳定的二维结构边界,让语言模型在序列上仍能感知“这是按行/列排列的视觉块”。
最终视觉序列长度的一个表达式(概念形式)可以写为:
Nvis=210+1+m×14×(n×14+1) N_{\text{vis}} = 210 + 1 + m \times 14 \times (n \times 14 + 1) Nvis=210+1+m×14×(n×14+1)
其中:
- 210210210 可对应全局缩略图块展开后的 token 规模(含换行标记)
- 111 可对应
<view_separator> - 后一项对应 m×nm\times nm×n 个局部块按二维排布展开,并插入行末换行标记的序列长度
直观理解:
mmm 越大(更宽),序列更长但更贴合宽屏页面;nnn 越大(更高),更贴合长文档页面。约束 mn≤9mn\le9mn≤9 保证上界。
10. DeepSeek-VL2 的 LLM:DeepSeekMoE + MLA 的意义
VL2 的语言模型采用 DeepSeekMoE,并支持 多头潜在注意力(MLA) 与 MoE 稀疏激活:
10.1 MoE:用稀疏计算提高容量/效率比
MoE 的核心是:每个 token 只激活少量专家(而不是整网全算),从而在接近稀疏成本下获得更大的有效容量。
工程收益通常体现在:
- 更高吞吐
- 在相近成本下提升语言/推理能力上限
10.2 MLA:压缩 KV 缓存,提高推理效率
MLA 的直觉是:把注意力中的 Key/Value 表示压缩到潜在向量空间,从而降低 KV cache 的体积与带宽压力。对于多模态长序列(视觉 token 很多)场景,这类优化尤其关键。
11. DeepSeek-VL2 三阶段训练:与 VL 的差异点
VL2 训练同样可概括为三阶段,但“谁冻结谁解冻”的选择更强调高分辨率适配与效率:
-
Vision-Language Alignment
- 冻结语言模型,仅优化视觉编码器与 Adaptor
- 目标:先把视觉侧对齐好,尤其是动态分块策略带来的新输入形态
-
Vision-Language Pre-training
- 解冻全部参数,全模型联合训练
- 大规模视觉-语言 token + 纯文本 token 混合(例如 70%70\%70% 图文 + 30%30\%30% 文本的一类方案),用于提升多模态综合能力同时维持语言能力
-
SFT
- 指令微调到可交互对话模型
- 监督答案与关键特殊 token,掩码提示词,混合多模态与纯文本对话数据
12. DeepSeek-VL vs DeepSeek-VL2:核心差异总结(按“问题—机制”对齐)
| 维度 | DeepSeek-VL | DeepSeek-VL2 |
|---|---|---|
| 高分辨率策略 | 固定 1024×10241024\times10241024×1024 + 混合编码器(语义+细节) | 动态分块(tiles + 全局缩略图),自适应宽高比与分辨率 |
| 视觉编码器 | SigLIP + SAM-B(混合) | SigLIP-SO400M-384(多块编码) + token 压缩 + 布局标记 |
| 结构提示 | 主要靠融合后的序列 | <tile_newline> + <view_separator> 显式建模二维布局边界 |
| 语言模型 | DeepSeek-LLM(1B/7B) | DeepSeekMoE(多规模)+ MLA(KV 压缩) |
| 主要解决痛点 | 在 token 预算内兼顾语义与细节;提升真实世界稳健性 | 更强的宽高比/超高分辨率适配;更高效的多模态长序列推理 |
13. 用真实任务场景理解两代设计取舍
13.1 网页截图问答(长宽比极端)
- 难点:页面很宽或很长,关键信息在角落;缩放到固定方形分辨率会把小字压没
- VL 的优势:混合编码器能增强细节,但固定方形输入在极端宽高比上仍可能牺牲信息
- VL2 的优势:动态分块让页面被切成局部块,角落的小字仍以 384×384384\times384384×384 的局部分辨率进入编码器,信息保真更强
13.2 PDF 表格解析(结构化 + OCR)
- 难点:表格线与单元格内容都要读清,还要理解行列关系
- VL 的路径:SAM-B 提供细节通道,SigLIP 提供语义通道
- VL2 的路径:局部 tiles 保真细节,
<tile_newline>把二维结构边界显式编码进序列,帮助 LLM 在序列注意力中更好建立“行/列”概念
13.3 信息图与图表(图例、刻度、局部标注密集)
- 难点:图例与刻度往往极小,且需要把局部读数与全局语义结合
- VL 的优势:双路语义+细节融合能增强读图能力
- VL2 的优势:全局缩略图提供整体语义与布局,局部 tiles 提供可读细节,二者组合更贴合“先看全局再看局部”的人类读图过程
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)