本文是《多模态:从视觉编码器到扩散模型》系列的第 1 篇(共七篇)。下一篇:VLM 的结构:connector、注入方式与动态分辨率

一个视觉语言模型(VLM)的第一步是把一张图变成几百个向量。做这件事的几乎总是一个预训练好的 ViT——LLaVA 用 CLIP ViT-L/14,Qwen2-VL 用自己训的 ViT(从 DFN 的 CLIP 初始化),InternVL 用 InternViT-6B,Gemma 3 与 PaliGemma 用 SigLIP-SO400M。这个 ViT 是怎么训出来的,决定了它”看到”什么、看不到什么,进而决定了 VLM 的上限:一个对文字不敏感的编码器,后面接多大的 LLM 也读不好文档;一个对计数不敏感的编码器,模型就数不清图里有几只猫。

编码器的训练方式有三类:监督分类(ImageNet 上的 ViT,L3 第五篇)、图文对比学习(CLIP、SigLIP——当前 VLM 的主流)、自监督(DINOv2、MAE——不需要文本)。VLM 几乎全用第二类,原因不是它的图像特征最好(在密集预测任务上 DINOv2 更好),而是它的特征空间已经与语言对齐——connector 只需要做一个小的映射。理解对比学习在优化什么、为什么能学出语义、以及它的目标函数决定了哪些信息被保留哪些被丢掉,是理解整个理解线的起点。

本篇要回答的核心问题是:

为什么几乎所有 VLM 都用 CLIP / SigLIP 而不用 ImageNet 分类预训练的 ViT?编码器看不到什么?

一、总览:三类编码器与它们学到的东西

1. 一张对照表

训练方式 代表 监督信号 学到什么 弱在什么 在 VLM 里
监督分类 ViT-L/16 (ImageNet-21k) 1000 / 21K 类标签 类别判别性特征 类别之外的一切;与语言无对齐 早期(2021)用过,很快被替代
图文对比 CLIP、OpenCLIP、SigLIP、DFN、EVA-CLIP 图文对是否匹配 与文本对齐的全局语义 计数、空间关系、文字、细粒度 主流:LLaVA、Qwen-VL、InternVL、PaliGemma、Gemma 3
自监督 DINOv2、MAE、iBOT 图像自身(视图一致、重建) 局部、几何、密集特征;对细节敏感 无语言对齐;全局语义弱于 CLIP 混用(Cambrian-1、Eagle:多编码器拼接)或作为 CLIP 的补充
端到端联合训练 Fuyu、EVE、Chameleon 与 LLM 一起从头训 与 LLM 完全一致的表示 需要海量图文数据;效率低 少数模型;趋势是”预训练编码器 + 联合微调”

2. 先说答案

VLM 用 CLIP / SigLIP 有三个原因。对齐:对比学习把图像特征投到与文本共享的空间,”一张猫的图”与”a photo of a cat”的向量接近——LLM 的 embedding 空间虽然不是同一个空间,但从一个已经”语义化”的空间映射过去,比从一个只区分 1000 个类的空间映射容易得多,LLaVA 用一个两层 MLP 就够了。覆盖:ImageNet 的 1000 类(或 21K 类)之外的概念——文字、图表、界面截图、艺术风格、抽象概念——分类模型从没见过,而 4 亿到 100 亿图文对里什么都有。规模:对比学习的数据是网上抓的图文对,几乎无限;分类标签要人标。ImageNet 预训练的 ViT 在 2021 年的 VLM(如早期的 Frozen、VisualGPT)里用过,效果远不如 CLIP,之后就没人用了。

编码器看不到什么:计数(”三只猫”与”四只猫”的图文对在对比学习里几乎不需要区分——描述里很少精确计数)、空间关系(”猫在桌子左边”与”右边”的图文对同样少)、文字(CLIP 对图中文字有一定敏感性,但分辨率 224 / 336 下小字不可读——这是 OCR 任务需要高分辨率的原因)、细粒度差别(两个几乎一样的图在对比学习里是”同一类”,没有信号区分它们)、否定与属性绑定(”红色的杯子与蓝色的盘子” vs “蓝色的杯子与红色的盘子”——词袋式的对齐分不开)。这些盲点来自目标函数:对比学习只要求把配对的图文与不配对的区分开,网络学到的是完成这个任务所需的最少信息,而计数、空间、绑定在网上的图文对里很少成为区分的关键。第五章展开。

3. 本文的章节安排

主题 内容
ViT 回顾 patch、位置编码、[CLS] 与全局池化;分辨率与 token 数;在 VLM 里取哪一层的特征
对比学习 InfoNCE 的推导;它与互信息的关系;为什么需要大 batch;温度;CLIP 的训练配方与算力账
SigLIP 与后继 sigmoid 损失的推导;为什么解耦 batch;SigLIP 2 的多目标;DFN 的数据过滤;EVA-CLIP 的 MIM 初始化
编码器看不到什么 五类盲点的实证与机制;ARO / Winoground / VSR 的测试
自监督编码器 DINOv2 的目标;它学到的与 CLIP 的不同;多编码器混合
对比之外的目标与编码器的规模 caption / 自回归目标保留什么(CapPa、AIMv2、SigLIP 2);分辨率 > 参数量 > 数据的消融证据;300M–700M 为什么够
分辨率与 token patch 大小、分辨率、位置编码的插值;高分辨率的两种路径
选型对照 CLIP-L、SigLIP-SO400M、InternViT-6B、DINOv2-L、AIMv2 的参数、分辨率、训练数据与在 VLM 里的表现
动手(建议) 盲点小测试
十一 本文小结  

二、ViT 回顾:编码器输出的是什么

1. 从图到序列

L3 第五篇04-08 已经讲过:一张 \(H \times W\) 的图按 \(P \times P\) 的 patch 切分,\(N = HW / P^2\) 个 patch 各经一个线性层(等价于步长 \(P\) 的卷积)变成 \(d\) 维向量,加位置编码,送进标准 Transformer encoder(双向 attention,无因果掩码)。\(336 \times 336\)、\(P = 14\):\(N = 576\)。输出是 \(N\) 个 \(d\) 维向量(加一个可选的 [CLS])。

2. VLM 取哪一层

CLIP 的训练目标作用在最后一层的 [CLS] 经过投影的单个向量上(全局特征)。但 VLM 需要的是每个 patch 的特征(空间信息),且经验上倒数第二层比最后一层好——LLaVA-1.5 用 CLIP ViT-L/14 的倒数第二层;最后一层为了对比目标过度”全局化”,局部信息被压掉了一部分。InternVL、Qwen2-VL 自己训的 ViT 没有这个问题(它们的 ViT 是与 LLM 联合训练过的,最后一层就是为 LLM 准备的)。

3. 编码器的成本

回指 04-08:CLIP ViT-L/14 是 304M 参数、24 层、\(d = 1024\);\(336^2\) 输入 576 个 patch,一次前向约 \(2 \times 304M \times 576 \approx 350\) GFLOPs 加 attention 的 \(O(N^2 d)\) 项——对 LLM 的 prefill 来说是小头(一个 7B LLM 处理 576 个 token 约 8 TFLOPs),但对高分辨率(tile 到几千个 patch)与视频(几十帧)来说编码器的成本开始显著。

三、对比学习:CLIP 在优化什么

1. InfoNCE

一个 batch 有 \(B\) 对图文 \((I_i, T_i)\)。图像编码器 \(f\)、文本编码器 \(g\) 各输出归一化的 \(d\) 维向量 \(u_i = f(I_i) / \lVert f(I_i) \rVert\)、\(v_i = g(T_i) / \lVert g(T_i) \rVert\)。相似度 \(s_{ij} = u_i^\top v_j / \tau\)(\(\tau\) 是温度)。图到文的对比损失:

\[\mathcal{L}_{I \to T} = -\frac{1}{B} \sum_{i=1}^{B} \log \frac{\exp(s_{ii})}{\sum_{j=1}^{B} \exp(s_{ij})}\]

即对第 \(i\) 张图,在 \(B\) 条文本里做一个 \(B\) 类分类,正确类是它自己的文本。对称地有 \(\mathcal{L}_{T \to I}\)(每条文本在 \(B\) 张图里分类),总损失是两者之和的一半。这就是 InfoNCE(van den Oord 等 2018)用在图文上的形式,CLIP(Radford 等 2021)的全部目标函数。

2. 它与互信息的关系

InfoNCE 的名字来自它是互信息的一个下界。对正样本 \((x, y) \sim p(x, y)\) 与 \(B - 1\) 个负样本 \(y_j \sim p(y)\),最优的打分函数 \(s^*(x, y) \propto \log \frac{p(y \mid x)}{p(y)}\),此时

\[I(X; Y) \ge \log B - \mathcal{L}_{\text{InfoNCE}}\]

推导的核心:把 \(\frac{\exp(s_{ii})}{\sum_j \exp(s_{ij})}\) 看成”在 \(B\) 个候选里正确识别正样本”的概率,最优分类器的这个概率是 \(\frac{p(y_i \mid x_i) / p(y_i)}{\sum_j p(y_j \mid x_i) / p(y_j)}\),取对数、对分布求期望、用 Jensen 不等式处理分母,得到上式。两个推论:(1)最小化 InfoNCE 就是最大化互信息的下界——让图像特征与文本特征共享尽可能多的信息;(2)下界被 \(\log B\) 封顶——batch 越大,界越紧,能学到的互信息越多。这是 CLIP 需要 32K batch 的理论原因:\(\log 32768 \approx 10.4\) bit,而一张图与它的描述共享的信息量在这个量级。

3. 为什么需要大 batch:从优化的角度

理论之外,实践的原因更直接:负样本的难度。batch 里的其他 \(B - 1\) 条文本是负样本,\(B\) 小时它们几乎全是”容易的负样本”(一张猫的图对一条讲汽车的文本),模型很快学会区分,梯度消失;\(B\) 大时更可能出现”难负样本”(另一张猫的图的描述),迫使模型学到更细的区分。CLIP 用 32768,SigLIP 试到 100 万(发现 32K 之后收益饱和)。大 batch 在工程上是分布式的——每张卡算自己的图文特征,all-gather 全部特征,算 \(B \times B\) 的相似度矩阵(32K × 32K = 10 亿个元素,4 GB FP32)。

4. 温度

\(\tau\) 控制 softmax 的尖锐度。\(\tau\) 小时相似度差别被放大,模型对难负样本更敏感,但训练不稳定;\(\tau\) 大时相反。CLIP 让 \(\tau\) 可学习(初始 0.07,学到约 0.01),并裁剪在 \([0.01, 1]\)。学到的 \(\tau = 0.01\) 意味着 \(1/\tau = 100\)——余弦相似度 0.3 与 0.25 的差别被放大成 logit 差 5。这个尖锐度是 CLIP 零样本分类”有效”的前提:类别间的余弦相似度差别很小(0.2–0.3),乘 100 之后才成为可用的分类 logit。

5. CLIP 的训练配方与账

CLIP(OpenAI 2021):4 亿图文对(WIT,从网上抓、按 50 万个查询词均衡),ViT-L/14 图像塔 + 12 层 Transformer 文本塔,batch 32768,32 epoch,\(224^2\)(最后再 \(336^2\) 微调一个 epoch)。算力:ViT-L/14 一次前向约 \(2 \times 304M \times 257 \approx 156\) GFLOPs(\(224^2\),257 个 token),训练(×3)约 470 GFLOPs;文本塔 63M 参数、77 token,约 30 GFLOPs;合计每对约 0.5 TFLOPs;4 亿对 × 32 epoch = 128 亿次,\(6.4 \times 10^{21}\) FLOPs——与一个 7B LLM 在 150B token 上的预训练同量级。OpenAI 报告在 256 张 V100 上训了 12 天。

OpenCLIP 用 LAION-2B / 5B 复现并超过了它;DFN(Fang 等 2023)证明数据过滤比数据量重要——用一个小 CLIP 从 12.8B 对里过滤出 2B 高质量对,训出的模型比在全部 12.8B 上训的好;MetaCLIP 复现了 CLIP 的查询词均衡策略。数据质量(图文对是否真的匹配、文本是否有信息量)是 CLIP 类模型之间差异的主要来源。

四、SigLIP 与后继

1. sigmoid 损失

SigLIP(Zhai 等 2023)把 \(B\) 类 softmax 换成 \(B^2\) 个独立的二分类:对每一对 \((i, j)\),标签 \(z_{ij} = 1\) 若 \(i = j\)(匹配)否则 \(-1\),损失

\[\mathcal{L} = -\frac{1}{B} \sum_{i=1}^{B} \sum_{j=1}^{B} \log \sigma\big(z_{ij} (s_{ij} + b)\big)\]

\(b\) 是一个可学习的偏置(初始 \(-10\)),补偿正负样本的极端不平衡(\(B\) 个正对 \(B^2 - B\) 个负)。每一对的判定独立于 batch 里的其他对——没有 softmax 的归一化。

2. 为什么解耦 batch

softmax 损失里,\((i, j)\) 的梯度依赖分母 \(\sum_k \exp(s_{ik})\),即依赖 batch 里所有其他样本;sigmoid 损失里每对独立。三个后果:

  • 不需要 all-gather 整个相似度矩阵。每张卡可以只算自己的图与所有文本(或分块传递文本特征),内存从 \(O(B^2)\) 降到 \(O(B^2 / \text{devices})\),SigLIP 论文用这个把 batch 推到 100 万。
  • 对 batch 大小不敏感。softmax 在小 batch(几千)下明显变差(负样本太少、\(\log B\) 封顶),sigmoid 在 batch 8K–32K 之间的性能接近;论文的结论是 32K 是甜点,再大无益。
  • 正负样本的权重可调。\(b\) 与可能的正样本加权让训练早期不被海量负样本主导。

实证:同算力下 SigLIP 比 softmax CLIP 高 1–2 个点的零样本 ImageNet 准确率;SigLIP-SO400M(shape-optimized 400M 参数的 ViT,Alabdulmohsin 等 2023 的形状缩放律)成为 2024–2025 年 VLM 最常用的编码器(PaliGemma、Gemma 3、Idefics3、Molmo 的一个版本、许多 LLaVA 变体)。

3. SigLIP 2 与多目标

SigLIP 2(Tschannen 等 2025)在 sigmoid 对比之上加了:caption 生成(一个小的文本 decoder 从图像特征生成描述——迫使特征保留更多细节)、自监督(局部到全局的一致性,SILC / TIPS 的思路——改善密集特征)、在线数据筛选(用模型自身筛选难样本)、以及原生分辨率变体(NaFlex:接受任意宽高比与分辨率,不 resize 到正方形——对文档与 OCR 重要)。结果是在 VLM 下游(尤其定位、OCR)上明显好于 SigLIP。它代表了编码器训练的方向:对比目标不够,要加回被对比目标丢掉的局部信息

4. 其他变体

  • EVA-CLIP:用 MIM(masked image modeling,重建 CLIP 特征)预训练的 EVA ViT 初始化图像塔再做对比学习,训练更快、效果更好;EVA-CLIP-18B 是最大的开源 CLIP。
  • InternViT-6B(InternVL):把图像塔放大到 6B、用 LLM(而不是小文本塔)作为文本侧、加生成式目标——让编码器的规模与 LLM 匹配。InternVL 的论点是编码器太小(300M)是 VLM 的瓶颈;但后来 InternVL 2.5 的小模型也用 300M 的编码器,说明规模不是唯一答案。
  • AIMv2(Apple 2024):纯自回归目标——按顺序预测图像 patch 与文本 token——训编码器,在 VLM 下游上与 SigLIP 相当,说明对比不是唯一可行的对齐方式。
  • Qwen2-VL 的 ViT:从 DFN CLIP-L 初始化,去掉固定位置编码改 2D RoPE,与 LLM 联合训练——编码器最终是被 LLM 的目标”改造”过的。

五、编码器看不到什么

1. 五类盲点

盲点 测试 典型表现 机制
计数 CountBench、”几只猫” CLIP 零样本对 1–3 尚可,4 以上接近随机 描述里精确计数少;对比目标不需要区分 3 与 4
空间关系 VSR(Visual Spatial Reasoning)、”左 / 右 / 上 / 下” 接近随机(50–60%) 描述里方位词少、且常不精确;全局池化丢掉位置
属性绑定 ARO、Winoground(”红杯蓝盘” vs “蓝杯红盘”) CLIP 在 Winoground 上接近随机 文本塔近似词袋——打乱词序的描述与原描述相似度几乎不变(Yuksekgonul 等 2023)
文字 TextVQA、OCR \(224^2\) 下几乎读不出;\(336^2\) 能读大字 分辨率;对比目标对文字只需”有文字”这个粗信号
细粒度 / 否定 同物种鸟类、”没有狗的图” 对比目标对”同类”图文不区分;否定在图文对里极少

2. 机制:目标函数决定了信息的保留

对比学习让 \(u_i\) 与 \(v_i\) 接近、与 \(v_j\) 远。完成这个任务需要什么信息?在一个 32K 的 batch 里区分”一张有猫的图”与其他 32767 张,”有猫”加几个场景词就够了——不需要知道有几只、在哪、什么姿势。信息论的说法:InfoNCE 最大化 \(I(u; v)\) 的下界,而 \(v\) 是文本的特征,文本描述里没有的信息(精确计数、精确位置)对 \(I(u; v)\) 没有贡献,编码器没有动力保留它们。这不是编码器的缺陷,是目标的性质——它学到的是文本能描述的那部分视觉信息

VLM 用这样的编码器作为输入,LLM 只能在编码器保留的信息上工作。所以 VLM 的计数、空间、OCR 能力一部分靠高分辨率(更多 patch、每个 patch 更少内容,局部信息保留更多)、一部分靠联合训练(让编码器为 LLM 的任务调整——Qwen2-VL 的 ViT 是解冻训练的)、一部分靠多编码器混合(第六章)。

3. 文本塔的词袋性

Yuksekgonul 等 2023 的实验:把 caption 的词序打乱,CLIP 文本塔的输出与原句的余弦相似度仍很高,且用打乱的 caption 做检索几乎不掉点——文本塔学到的近似一个词袋。原因同上:区分 32K 对图文不需要词序。这直接导致属性绑定的失败。改进的方向是加负样本(NegCLIP:构造词序打乱、属性交换的难负样本)或用 LLM 做文本塔(Llip、LLM2CLIP)。

六、自监督编码器

1. DINOv2 学什么

DINOv2(Oquab 等 2023)不用文本。目标是自蒸馏:同一张图的两个不同裁剪(一个全局、一个局部)送进学生与教师(教师是学生的 EMA),让学生在局部视图上的输出匹配教师在全局视图上的输出(iBOT 式的 patch 级目标 + DINO 式的全局目标),加上 KoLeo 正则让特征均匀分布。数据是 1.42 亿张经过筛选与去重的图(LVD-142M)。

它学到的是图像自身的结构:哪些 patch 属于同一个物体、几何对应、深度线索。在密集任务(分割、深度估计、对应点匹配)上远超 CLIP;在零样本分类上不如(没有语言)。可视化 DINOv2 的 patch 特征做 PCA,同一个物体的部件会被一致地着色——这是 CLIP 特征做不到的。

2. 在 VLM 里的位置

DINOv2 特征与语言没有对齐,单独用作 VLM 编码器效果差(connector 要学的映射太大)。但与 CLIP 拼接有效:Cambrian-1(Tong 等 2024)系统地比较了 20 多种编码器组合,发现 CLIP 类 + DINOv2 的拼接在空间与细粒度任务上明显好于单一 CLIP;Eagle(NVIDIA 2024)用 CLIP + ConvNeXt + 多个专家编码器的拼接。代价是 token 数或特征维度翻倍。

另一个方向是让对比编码器学回局部信息——SigLIP 2 加自监督目标、AIMv2 的生成目标——在一个编码器里得到两者。2025 年的趋势是后者。

3. MAE

MAE(He 等 2022)遮住 75% 的 patch 让模型重建像素。它学到的特征在微调后很强,但线性可分性差、与语言无对齐,直接用作 VLM 编码器效果不好。它的价值在初始化(EVA 用 MIM 重建 CLIP 特征——结合两者)。

七、对比之外的目标,以及编码器该多大

1. 生成式目标:caption 与自回归

第五章的论证是”目标函数决定保留什么”。对比目标只保留区分图文对所需的信息。一个自然的推论:换一个要求更多信息的目标,编码器就会保留更多。生成式目标正是这样——让编码器的特征足以生成整段描述(而不只是判断匹配),描述里的每个词都要有对应的视觉证据。

CapPa(Tschannen 等 2023,”Image Captioners Are Scalable Vision Learners Too”):一个 ViT 编码器 + 一个文本 decoder,目标是从图像特征自回归地生成 caption(Cap),或并行地预测全部被 mask 的 caption token(Pa,让 decoder 更依赖图像而不是语言先验)。同算力下,它在分类与检索上略逊于 CLIP,但在需要细节的下游——OCR、计数、密集预测、作为 VLM 编码器——上更好。原因正是目标:生成 “three red cups on a wooden table” 要求特征里有”三”、”红”、”木”,而对比目标只需要”杯子 + 桌子”就能在 batch 里区分。

AIMv2(Apple 2024):编码器输出的图像 patch 特征与文本 token 拼成一个序列,用一个 decoder 自回归地预测图像 patch(像素回归)与文本 token——同一个 next-token 目标覆盖两种模态。它不需要负样本、不需要大 batch,训练像一个小 LLM 一样简单,且随参数与数据平滑地 scale;在 VLM 下游上与 SigLIP 相当或更好,尤其在 grounding 与 OCR 上。

SigLIP 2 的做法是叠加:sigmoid 对比保留全局对齐,加 caption decoder(CapPa 式)保留细节,加自监督(局部—全局一致性)保留几何。三个目标各补一类盲点。

三类目标各保留什么,放在一张表里:

目标 要求特征回答的问题 保留 代价
对比(CLIP / SigLIP) 这张图配哪条文本 全局语义、与语言的对齐 计数、位置、绑定、细节 大 batch(softmax);负样本
caption(CapPa、SigLIP 2 的 decoder) 描述里每个词的证据 属性、数量、文字、关系 与语言无关的几何细节 一个 decoder;序列生成的算力
自回归多模态(AIMv2) 下一个 patch 与下一个词是什么 局部结构 + 语言对齐 像素回归的目标噪声大;需要好的 patch 顺序
自监督(DINOv2) 两个裁剪是不是同一张图的同一部分 局部、几何、部件 语言对齐、全局语义 无文本;VLM 里需与对比编码器拼接

方向很清楚:对比目标是 2021–2023 年的答案,2024 年后编码器训练在往”对比 + 生成”的组合走,因为 VLM 需要的恰好是对比目标丢掉的那部分。

2. 编码器该多大:分辨率、参数量与数据的优先级

选型表里编码器从 300M 到 6B,读者要问:更大的编码器值不值?几组公开的消融给了一致的答案。

MM1(McKinzie 等 2024)系统地扫了编码器的三个变量,按对 VLM 下游的影响排序:分辨率 > 编码器参数量 > 编码器的训练数据。\(336^2\) 相比 \(224^2\) 带来约 3 个点;ViT-H 相比 ViT-L 不到 1 个点;换训练数据(DFN vs 原 CLIP)的影响更小。PaliGemma 的三个分辨率版本(224 / 448 / 896,同一个 SigLIP-SO400M)在文档与 OCR 任务上的差距是几十个点,而编码器不变。Cambrian-1 比较了 20 多个编码器:在同一分辨率下,编码器之间的差别主要出现在 OCR 与图表任务上(此时 SigLIP-SO400M 与 CLIP-L 领先),在一般 VQA 上差别在噪声范围内。

InternVL 1.5 用 6B 的 InternViT 论证”编码器是瓶颈、应该与 LLM 同量级”,但 InternVL 2.5 的多数尺寸退回 300M(InternViT-300M,从 6B 蒸馏),说明在有联合训练与高分辨率的前提下,300M 量级的编码器不是瓶颈;6B 编码器的收益主要在 76B 级别的 LLM 上才显现。Qwen2-VL 的 675M、Llama 3.2 Vision 的 630M(ViT-H)、Gemma 3 的 400M 都落在这个区间。

所以选型的优先级:先把分辨率策略定对(下一章与第二篇),再在 300M–700M 里选一个训练目标合适的编码器(SigLIP 2 一类),最后才考虑放大编码器。放大编码器的代价也要算——每张图的编码 FLOPs 与参数成正比,高分辨率 tile 或视频帧下,一个 6B 编码器的成本可以超过 LLM 的 prefill(04-08 的账)。

3. 一个仍在变的结论

上面的优先级是在”编码器预训练 + 事后对齐”的范式下得到的。2025 年的两个趋势可能改变它:一是联合训练让编码器为 LLM 的目标调整(Qwen2-VL 全程解冻、Gemma 3 把图像放进 LLM 预训练),此时编码器的初始目标函数没那么重要;二是无编码器(Fuyu、EVE、Chameleon 式的直接 patch 或 VQ token 进 LLM)让”选编码器”这个问题消失,代价是需要海量图文数据从头学视觉。第七篇会回到后者。

八、分辨率与 token

1. 分辨率决定信息量

一个 \(14 \times 14\) 的 patch 在 \(224^2\) 的图上覆盖原图的 \(1/256\);对一张 A4 文档的照片,一个 patch 里有几个字——读不出来。\(336^2\):576 个 patch,每个覆盖更少内容,大字可读。\(1024^2\):5329 个 patch,小字可读,但 token 数是 336 的 9 倍——04-08 算过这对 LLM 的 prefill 与 KV 意味着什么。

分辨率是 VLM 在 OCR、文档、图表任务上的第一决定因素:DocVQA 从 \(336^2\) 的 ~60 到动态高分辨率的 ~95,主要是分辨率的功劳。

2. 位置编码的插值

CLIP ViT 的位置编码是可学习的绝对位置,训练时固定 \(16 \times 16\)(\(224 / 14\))个位置。用在更高分辨率上要把位置编码插值到新的网格(双三次插值),然后微调。这是 LLaVA-NeXT 一类 AnyRes 方案的做法——每个 tile 仍是 \(336^2\)(不需要插值),拼多个 tile。Qwen2-VL 的原生分辨率走另一条路:把位置编码换成 2D RoPE04-08第六章),任意分辨率无需插值。SigLIP 2 的 NaFlex 变体也支持原生宽高比。

3. 两种高分辨率路径

tile(切块):把大图切成若干 \(336^2\) 的 tile 各自编码(加一个全图缩略图保留全局),token 数 = tile 数 × 576。编码器不变,简单;但 tile 之间没有 attention(边界处的物体被切断),且 token 数随 tile 数线性增长(InternVL 最多 40 个 tile ≈ 10K token)。

原生动态(Qwen2-VL):ViT 直接处理任意大小的图,patch 数随图大小变(设上下限),全图在一个 attention 里;然后 2×2 merge 压缩 4 倍。信息完整,但 ViT 的 attention 是 \(O(N^2)\),大图时编码器成本高(Qwen2-VL 的 ViT 用了窗口 attention 缓解——Qwen2.5-VL)。

两者都在下一篇的 connector 与分辨率章节里与 token 预算一起讨论。

九、选型对照

编码器 参数 训练 原生分辨率 / patch 输出 token(默认) 在 VLM 里 特点
CLIP ViT-L/14-336 304M 对比,WIT 400M 336 / 14 576 LLaVA-1.5 / NeXT、早期多数 基线;倒数第二层;OCR 弱
SigLIP-SO400M/14-384 400M sigmoid 对比,WebLI 10B 384 / 14 729 PaliGemma、Gemma 3、Idefics3、Molmo 形状优化;当前最常用
SigLIP 2 SO400M(NaFlex) 400M sigmoid + caption + 自监督 任意 可变 2025 新模型 密集特征与 OCR 更好
InternViT-6B 6B 对比 + 生成,与 LLM 联训 448 / 14 1024 → 256(pixel shuffle) InternVL 1.5 / 2 大模型 规模化编码器;InternVL 2.5 小模型用 300M 版
Qwen2-VL ViT 675M 从 DFN CLIP 初始化,2D RoPE,与 LLM 联训 原生动态 随图大小 Qwen2-VL / 2.5-VL 原生分辨率;窗口 attention(2.5)
DINOv2-L/14 304M 自蒸馏,LVD-142M 518 / 14 1369 Cambrian-1(拼接) 密集、几何;无语言对齐
AIMv2-L 300M 自回归(patch + 文本) 224–448 研究 生成目标的对齐

选择的经验规则:通用 VLM 用 SigLIP-SO400M(或 SigLIP 2);文档 / OCR 重的场景要动态分辨率(Qwen2-VL 式或 NaFlex);空间 / 定位任务考虑 + DINOv2 拼接或 SigLIP 2;有联合训练资源时解冻编码器(第三篇讨论何时解冻)。

十、动手(建议)

open_clip 加载 CLIP ViT-L/14-336 与 SigLIP-SO400M,构造一个小测试集(各 50–100 张图,可用 COCO 子集手工标注):

  • 计数:图配 “a photo of {1..6} cats” 六个 prompt,看零样本分类准确率随数字的变化。
  • 空间:VSR 的子集,”the cat is to the left of the dog” vs “right of”,二分类。
  • 绑定:Winoground 的 400 例(公开),标准的图文双向匹配得分。
  • 文字:TextVQA 图片配 “a photo with the text ‘{word}’“,对 \(224^2\) 与 \(336^2\) 各测。
  • 词序:把 COCO caption 的词打乱,算与原 caption 的文本特征余弦相似度分布。

再取 DINOv2-L 对同一批图输出 patch 特征,做 PCA 到 3 维着色可视化,与 CLIP 的 patch 特征对比。

该看的:计数在 4 以上是否接近随机;空间关系是否接近 50%;Winoground 图文得分是否接近 25%(随机);词序打乱后相似度是否仍 > 0.9;DINOv2 的 PCA 是否按物体部件着色而 CLIP 的不是。不引用任何未跑过的数字——上述是文献报告的形态,实验的意义是亲眼看到。

十一、本文小结

规则 / 公式 备注
InfoNCE \(-\log \frac{\exp(s_{ii})}{\sum_j \exp(s_{ij})}\),双向 最优打分 \(\propto \log p(y \mid x)/p(y)\);\(I \ge \log B - \mathcal{L}\)
大 batch \(\log B\) 封顶 + 难负样本 CLIP 32K;SigLIP 32K 后饱和
温度 可学习,学到 ~0.01(×100) 余弦差 0.05 → logit 差 5
CLIP 账 4 亿对 × 32 epoch ≈ \(6.4 \times 10^{21}\) FLOPs ≈ 7B LLM 150B token
SigLIP \(-\sum_{ij} \log \sigma(z_{ij}(s_{ij} + b))\),每对独立 无 all-gather;对 batch 不敏感;SO400M 是主流
SigLIP 2 + caption + 自监督 + NaFlex 补回局部信息与原生分辨率
盲点 计数、空间、绑定、文字、细粒度 / 否定 目标只保留”文本能描述且需要区分”的信息;文本塔近似词袋
DINOv2 自蒸馏,局部 / 几何强,无语言 与 CLIP 拼接改善空间任务
生成式目标 caption(CapPa)与自回归(AIMv2)要求特征支撑每个词 / 每个 patch 补回对比目标丢的细节;趋势是对比 + 生成
规模 分辨率 > 编码器参数量 > 训练数据(MM1、PaliGemma、Cambrian-1) 300M–700M 在联合训练 + 高分辨率下不是瓶颈
分辨率 patch 覆盖面积决定可读性;\(336^2\) 大字、\(1024^2\) 小字 位置编码插值 vs 2D RoPE;tile vs 原生
取层 CLIP 用倒数第二层 最后一层过度全局化

核心问题的答案:VLM 用 CLIP / SigLIP 而不用 ImageNet ViT,因为对比学习把图像特征投到一个已经与文本对齐的语义空间——connector 只需一个小映射——并且覆盖了网上图文对里出现的一切概念,而分类模型只知道它的 1000 类。编码器看不到的是对比目标不需要它看到的东西:InfoNCE 只要求把配对的图文与 batch 里的其他对区分开,精确计数、空间关系、属性绑定、小字、细粒度差别在这个任务里几乎从不成为区分的关键,编码器没有动力保留它们,文本塔甚至退化成近似词袋。这些盲点通过三条路缓解:更高的分辨率(保留更多局部信息)、与 LLM 联合训练(让编码器为下游任务调整)、混入自监督编码器或在对比目标上叠加 caption / 自监督目标(SigLIP 2)。下一篇讲编码器输出的几百个向量怎么进入 LLM——connector、注入方式与分辨率策略的取舍。

下一篇

VLM 的结构:connector、注入方式与动态分辨率

本文由 arganzheng 创作,采用 CC BY 4.0 许可协议。在保留原文作者、署名以及完整原文链接(https://arganzheng.life/vision-encoders-clip-siglip-and-self-supervised-vit.html)的前提下,欢迎各种形式的转载、翻译或商业引用。


COMMENTS

评论存放在 GitHub Discussions, 用 GitHub 账号登录即可发表,支持 Markdown。 想针对正文某句话说?选中那段文字,点浮出的「评论」即可划线评论;觉得哪里写错了,发表时勾上「同时提交 Issue」。 有人回复你时 GitHub 会按你的通知设置发邮件,不用守在这里。

×