Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

3.8 多模态视觉:对齐、生成与编辑

本节定位:教材外拓展

本节内容超出母本单讲的课堂范围,属于「课程点到、教程必须展开」的一类(见《教材写作规范》第三节)。它与 第 4 讲(生成建模)和 第 6 讲(多模态大模型)有重叠:这里只讲「视觉这一侧」的接口,生成模型的数学推导留给第 4 讲,语言模型侧的训练细节留给第 6 讲。

读法建议:如果只关心「怎么把图像接进语言模型」,读 3.8.1 与 3.8.2;如果关心生成与定制,读 3.8.3;只想知道「怎么评估一个看图说话的系统」,读 3.8.4。

到 3.7 节为止,视觉模型都在自己的空间里工作:图像进、标签或掩码出。多模态要做的是把视觉表示接到语言上——让模型能用自然语言描述图像、根据文字生成图像、按指令编辑图像。这一节讲这条接口上的三种典型做法:对齐(CLIP)、连接(BLIP-2 / LLaVA)、生成与编辑(扩散模型 + ControlNet / LoRA)。

3.8.1 CLIP:用对比学习把图像与文本对齐

定义 3.8.1 · CLIP 的双塔结构与对称对比损失

CLIP(Contrastive Language-Image Pre-training)用两个独立的编码器(图像编码器 fIf_I、文本编码器 fTf_T,故称双塔 dual-encoder)把图像与文本映射到同一个 dd 维表示空间,用 L2 归一化后的点积作为相似度:

sij=fI(xi)TfT(tj)∥fI(xi)∥ ∥fT(tj)∥ / τ.s_{ij}=\frac{f_I(\boldsymbol x_i)^{\mathrm T}f_T(\boldsymbol t_j)}{\lVert f_I(\boldsymbol x_i)\rVert\,\lVert f_T(\boldsymbol t_j)\rVert}\ \Big/\ \tau .

在一个 batch 的 NN 对图文里,正确配对构成对角线。训练目标是在行、列两个方向上分别做 InfoNCE(3.6.3),即对称对比损失:

L=12[−1N∑i=1Nlog⁡esii∑jesij⏟图像→文本+−1N∑j=1Nlog⁡esjj∑iesij⏟文本→图像].(3.12)\mathcal L=\frac{1}{2}\Bigl[\underbrace{-\frac1N\sum_{i=1}^{N}\log\frac{e^{s_{ii}}}{\sum_{j}e^{s_{ij}}}}_{\text{图像}\to\text{文本}}+\underbrace{-\frac1N\sum_{j=1}^{N}\log\frac{e^{s_{jj}}}{\sum_{i}e^{s_{ij}}}}_{\text{文本}\to\text{图像}}\Bigr]. \tag{3.12}

同一 batch 里的其他 N−1N-1 个文本就是图像的"负样本",反之亦然——图文配对天然提供了负样本,不需要额外的增强策略。

CLIP 把「监督信号」从标签换成了自然语言

3.6.3 的对比学习靠「同一张图的两个视图」构造正样本,正样本只包含「同一性」这一个信息(都是同一张图)。CLIP 用图像与它的描述文本构造正样本——于是监督信号里带上了语义:「这是一只猫」这句话本身在告诉模型哪些视觉特征重要。

这个改动带来的最大收益是零样本分类:

给定 C 个候选类别名,把每个类别名填进一个提示模板(如 "a photo of a {class}."),
用文本编码器得到 C 个文本向量;用图像编码器得到图像向量;
取相似度最高的那个类别作为预测。

整个过程中没有任何一个参数被更新——这就是「零样本」(zero-shot)的含义:模型没见过这个具体的数据集,但它见过足够多的图文对,因此能够把「视觉模式」与「语言描述」对上号。

提示模板(prompt template)为什么重要:直接用类别名("cat")效果明显差于模板("a photo of a cat.")。原因是训练时文本是完整句子,推理时若只给一个词,分布不匹配。原文的做法是为每个数据集尝试多个模板(如 "a photo of a big {class}"、"a cropped photo of a {class}")并集成。这套「模板工程」在当时是必要的补丁,也提示了一个更根本的方向——如果要让模型真正听懂指令,光对齐不够,还需要指令微调(3.8.2)。

例 3.8.1 · 零样本分类的相似度矩阵与一个实际判断

(a)设 batch 有 N=4N=4 对图文对,相似度矩阵(已归一化、已除以温度)如下,写出对称对比损失的两项并判断训练是否正常。

S=(2.40.1−0.30.20.02.10.4−0.2−0.10.31.90.10.2−0.10.42.2)S=\begin{pmatrix}2.4&0.1&-0.3&0.2\\0.0&2.1&0.4&-0.2\\-0.1&0.3&1.9&0.1\\0.2&-0.1&0.4&2.2\end{pmatrix}

(b)某零样本图像分类任务有 10001000 个类别。若把每个图像的相似度向量记为 10001000 维,解释为什么「只用图像编码器、不用文本」的零样本是不可能的,而 CLIP 为什么可以。

解

(a) 对角线是正样本对,其余是负样本。

图像→文本(对每一行做 softmax 交叉熵,目标是对角线):

LI→T=−14[log⁡e2.4e2.4+e0.1+e−0.3+e0.2⏟0.7823+log⁡e2.1e0.0+e2.1+e0.4+e−0.2⏟0.7115+log⁡0.6655+log⁡0.7138]\mathcal L_{I\to T}=-\frac14\Bigl[\log\underbrace{\tfrac{e^{2.4}}{e^{2.4}+e^{0.1}+e^{-0.3}+e^{0.2}}}_{0.7823}+\log\underbrace{\tfrac{e^{2.1}}{e^{0.0}+e^{2.1}+e^{0.4}+e^{-0.2}}}_{0.7115}+\log 0.6655+\log 0.7138\Bigr] =−14[(−0.2455)+(−0.3403)+(−0.4072)+(−0.3371)]=1.33014≈0.3325.=-\frac14\bigl[(-0.2455)+(-0.3403)+(-0.4072)+(-0.3371)\bigr]=\frac{1.3301}{4}\approx\mathbf{0.3325}.

文本→图像(对每一列做同样的计算):对角概率依次为 0.7791,0.7085,0.6422,0.74160.7791,0.7085,0.6422,0.7416,得 LT→I≈0.3340\mathcal L_{T\to I}\approx0.3340。故总损失

L=0.3325+0.33402≈0.333.\mathcal L=\frac{0.3325+0.3340}{2}\approx\mathbf{0.333}.

判断:L≈0.33\mathcal L\approx0.33 对应对角线概率约 0.650.65–0.780.78——训练正常但远未收敛。四对样本的对角线相似度都在 22 左右,而负样本里已经出现了 0.40.4 这样的"接近值"(伪负样本风险),说明模型尚未把正样本充分推开。若损失长期停在 0.30.3 附近不降,通常要检查:温度 τ\tau 是否合适、batch 内是否出现了重复或近似重复的样本(会造成"伪负样本",把本该拉近的一对当成负样本)、文本是否被截断。

(b) 零样本分类要求把「图像表示」与「未曾见过的类别名的语义」比较。只用图像编码器,你能得到图像向量,但没有任何途径获得新类别的向量——除非为每个新类别提供样本(那就不是零样本了)。

CLIP 的文本编码器解决的正是这件事:类别名的语义可以通过语言侧被"即时编码",而语言侧的表示空间是与图像侧对齐过的。所以零样本分类的本质是:用语言作为类别的"接口"——只要你能用一句话描述一个新类,模型就能尝试识别它。这也解释了 CLIP 的几个已知弱点:对细粒度分类(区分狗的品种)弱(类别名之间的语义差异在语言侧本就很近)、对需要组合推理的任务弱("红色立方体在蓝色球左边"这类关系在双塔结构里无法被表达,因为图像向量与文本向量各自独立、不交互)。

∎
CLIP 的三个直接后继(沿同一范式改良)
工作 改动 动机
SigLIP(2023,arXiv:2303.15343) 把 softmax 对比损失换成 sigmoid 损失(每个图文对各做一个独立的二分类) 去掉对全局归一化的依赖,因此不再需要跨设备收集全部负样本,小 batch 下也稳定
EVA / EVA-02(2022/2023,arXiv:2211.07636、arXiv:2303.11331) 用 MIM 重建 CLIP 的图像特征 把 CLIP 的语义对齐知识蒸馏进视觉骨干,同时保留掩码建模的可扩展性
LLaVA / BLIP-2 一类 把 CLIP 系图像编码器当作冻结的视觉前端 CLIP 的表示已经与语言对齐,接语言模型时所需的"翻译层"更薄(3.8.2)

一条重要的边界:CLIP 不是生成模型。它只能给「图像与文本的匹配程度」,不能生成描述(那是 captioning / VLM 的事),也不输出坐标或掩码。把它当成"看图说话模型"是最常见的误用。

例 3.8.2 · 跨模态检索与「双塔」的算力优势

(a)给定 N=1,000,000N=1{,}000{,}000 张图和 M=1,000M=1{,}000 条查询文本,若要对每条查询找出最相似的图,双塔结构需要多少次编码?(b)如果改用「图文拼接后过一次模型打分」的交叉编码器(cross-encoder),需要多少次前向?(c)由此说明 CLIP 这类双塔模型的工程价值与它的表达力代价。

解

(a)双塔:图像与文本各自独立编码,因此可以离线预计算图像向量并用向量索引检索:

N 次图像编码(离线一次)+M 次文本编码(每次查询)=1,000,000+1,000N\ \text{次图像编码(离线一次)}+M\ \text{次文本编码(每次查询)}=1{,}000{,}000+1{,}000

次编码,其中 10610^6 次只做一次,之后每次查询只需 1000 次文本编码 + 一次矩阵乘(相似度矩阵为 M×dM\times d 与 d×Nd\times N 的乘法)。

(b)交叉编码器:必须为每一对做一次前向,总前向次数为

N×M=1,000,000×1000=109N\times M=1{,}000{,}000\times1000=10^{9}

即 10 亿次(且无法离线缓存,因为每一对都要算)。

(c)结论

  • 工程价值:双塔的编码次数从 NMNM 降到 N+MN+M,在检索场景下这是决定性的(成本从不可行变成可行)。代价是图像与文本之间没有任何交互层——两个向量各自算完才比较。
  • 表达力代价:没有交互意味着模型只能表达「图像整体与句子整体的相似度」,无法表达组合关系("红色立方体在蓝色球左边"这类需要 token 级对齐的结构)。要做细粒度对齐,就得引入交叉注意力(Flamingo 一类)或重排序阶段(先用双塔召回 top-k,再用交叉编码器精排)——这正是工业检索系统的标准两段式架构。

这个例子也解释了为什么"检索"与"问答"要用不同的模型:检索要的是快而可索引(双塔 + 向量库),问答要的是能理解关系(交叉交互 + 生成)。把两者混为一谈是常见的选型错误。

∎

3.8.2 从对齐到对话:BLIP-2 与 LLaVA 的三段式

CLIP 让图像与文本“在同一空间“,但它不会说句子。要让它会对话,需要在视觉编码器与语言模型之间插一层连接器(connector),并做指令微调。

定义 3.8.2 · 视觉—语言模型的三段式训练

一个典型的视觉—语言模型(VLM)由三部分组成:视觉编码器(vision encoder,常为 CLIP 系,通常冻结)、连接器(把视觉 token 映射成语言模型能吃的 token)、语言模型(LLM,提供语言能力与指令跟随能力)。训练按三个阶段推进:

  1. 特征对齐(alignment):只训练连接器,让视觉 token 落到语言模型的表示空间里;视觉编码器与 LLM 冻结。
  2. 指令微调(instruction tuning):在视觉指令数据(图像 + 指令 + 回答)上训练连接器与 LLM(可能是 LoRA 或全参数)。这是「会回答问题」而不是「只会对齐」的关键一步。
  3. 对齐 / 偏好优化(可选):用人类或模型偏好数据做进一步优化(RLHF / DPO 一类方法,见 第 6 讲)。
「连接器」为什么可以用很轻的结构

一个反直觉的事实:把视觉特征送进语言模型,不需要一个和两侧同样大的网络。原因在于两侧的表示都已经「训练好了」——CLIP 的图像编码器知道"视觉上这是什么",LLM 知道"这个概念对应的词与用法"。连接器只需要完成一件小事:把视觉特征的坐标系统换到语言模型能解释的坐标系里。

于是出现了两种典型做法:

  • BLIP-2:用一个轻量的 Q-Former(约几千万参数量级的可学习查询 + 交叉注意力)从冻结的图像编码器里抽取固定数量的视觉 token(如 32 个)。它的价值不仅是压缩——而是把可变的图像信息压成固定长度的接口,使语言侧的输入长度可控。
  • LLaVA:结构更简单——一个 linear / MLP 投影层直接把手数可数的视觉 patch 特征映射成 LLM 的词嵌入维度,全部视觉 token 直接拼进序列。它的关键贡献其实是数据:用 GPT-4 生成图文指令数据(图像来自 COCO 等公开来源),做出「多模态指令微调」这条路线。

为什么"冻结视觉编码器"是常见选择:① 省算力(视觉编码器参数量大且训练昂贵);② 避免视觉侧被语言任务的梯度带偏;③ CLIP 系的表示已经对齐,重训反而可能破坏对齐。这与 3.6.2「先冻结、再逐步解冻」的思路完全一致。

四种接口方式的对照
模型 视觉→语言接口 关键设计 备注
CLIP(2021,arXiv:2103.00020) 无(双塔平行编码,只在相似度层面交互) 对称 InfoNCE、4 亿图文对 不会生成文本;适合检索与零样本分类
Flamingo(2022,arXiv:2204.14198) 交叉注意力层(插入到冻结 LLM 的层间) 处理交错图文序列(few-shot 示例图 + 问题) 需修改 LLM 结构,插入新参数层
BLIP-2(2023,arXiv:2301.12597) Q-Former 抽取固定数量查询 token,再线性投影 两阶段:先学视觉—语言表示,再与 LLM 对齐 介于"轻连接"与"重交叉注意力"之间
LLaVA(2023,arXiv:2304.08485) 一个线性 / MLP 投影层 视觉指令微调(用 GPT-4 生成指令数据) 结构最简、训练成本最低,但视觉 token 数多、上下文占用高
例 3.8.3 · 视觉 token 数量与上下文预算

(a)LLaVA 风格:图像编码器输入 336×336336\times336、patch 14,视觉 token 数是多少?若 LLM 的上下文窗口是 2048 个 token,视觉部分占多少比例?(b)BLIP-2 风格:若把视觉压成 32 个查询 token,比例变成多少?(c)说明这个比例差带来的实际后果。

解

(a) N=(336/14)2=242=576N=(336/14)^2=24^2=576 个视觉 token。占上下文的比例为

5762048≈28.1%.\frac{576}{2048}\approx28.1\% .

(b) 322048≈1.6%\frac{32}{2048}\approx1.6\%。

(c)实际后果:

  1. 可用的对话长度:LLaVA 风格下只有约 14721472 个 token 留给问题、回答与历史;BLIP-2 风格下有约 20162016 个。对于需要长回答或多轮对话的场景,这个差别是决定性的。
  2. 训练与推理成本:注意力计算量与 token 数二次相关(命题 3.5.1 的二次项),576 对 32 是 1818 倍的 token 数、324324 倍的注意力矩阵元素数——虽然总体受 LLM 宽度限制,但这仍是可观的差距。
  3. 信息保留的取舍:压到 32 个 token 必然损失空间细节,因此小目标定位、文字识别(OCR)、细粒度计数这类任务上,保留全部 patch 的做法通常更强。近年很多模型的做法是在两者之间折中:动态分辨率(按图像内容切分成多个子图分别编码)、token 合并/裁剪(保留重要 token 丢弃冗余)——本质都是"在固定的上下文预算里做信息密度的权衡"。

这个例子给出的工程判据:选择接口方式时,先算清楚视觉 token 占多少上下文、每张图要花多少延迟,再考虑精度——而不是先看论文上的榜单分数。

∎

3.8.3 生成与编辑:扩散模型与两类定制手段

与第 4 讲的边界

扩散模型本身的原理(前向加噪、反向去噪、ELBO 与噪声预测目标、潜空间扩散)是 第 4 讲 4.5 节的主题,本节不重复推导。这里只回答一个接口问题:当把一个预训练的强生成模型交给用户时,怎么让它按用户的空间条件(草图、姿态、深度图)生成,并让它记住一个特定的主体?

定义 3.8.3 · 潜空间扩散与两类定制手段
  • 潜空间扩散(latent diffusion):先在自编码器(VAE)的潜空间上做扩散,而不是在像素空间。潜空间比分辩率小得多,因此同样的生成质量需要少得多的算力——这是 Stable Diffusion 一类模型能在消费级显卡上运行的关键设计(Latent Diffusion,2021,arXiv:2112.10752)。
  • ControlNet(2023,arXiv:2302.05543):在冻结的扩散主干旁并联一个可训练副本,用零初始化的卷积层把它的输出接回主干。零初始化使新增分支在训练开始时输出恒为零——等价于「先完全保留原模型的行为,再逐步学会附加条件」,因此不会破坏已经训好的主干。
  • LoRA(Low-Rank Adaptation,2021,arXiv:2106.09685):冻结原始权重 WW,只学习一个低秩增量 ΔW=BA\Delta W=BA(B∈Rd×rB\in\mathbb R^{d\times r}、A∈Rr×kA\in\mathbb R^{r\times k}、r≪min⁡(d,k)r\ll\min(d,k)),于是

W′=W+αBA.W'=W+\alpha BA .

可训练参数量从 dkdk 降到 r(d+k)r(d+k)。r 越小越省显存,表达力也越受限。

ControlNet 与 LoRA 解决的是两类不同的需求

ControlNet 解决「空间控制」:用户提供一张条件图(边缘检测图、人体姿态骨架、深度图、涂鸦),希望生成结果在空间布局上遵从它。为什么需要零初始化?因为扩散主干已经是一个训练得很好的模型,随机初始化的旁支会在训练初期向主干注入大量噪声,破坏它。零初始化让旁支从"什么都不做"开始,训练过程变成从零逐步长出一条条件通路——这与残差连接"从恒等映射开始"的哲学完全同构(3.4.4)。

LoRA 解决「主体 / 风格记忆」:用户希望模型记住"我的猫"或某种画风。这时不需要空间控制,需要的是参数上的一小段偏移。LoRA 的价值在于:① 参数量极小(常为原模型的 0.1%0.1\%–1%1\% 量级,具体比例取决于秩 rr 与目标层);② 多个 LoRA 可以分文件保存、按需加载与组合,不用为每个用户存一份完整模型;③ 训练显存需求大幅下降。

一句话区分:ControlNet 管"怎么摆",LoRA 管"长什么样"。两者正交,可以叠加使用。

文生图 / 图生图 / 主体绑定:三种典型工作流
① 文生图(text-to-image)
   噪声 → 迭代去噪(每步由文本提示做条件)→ 解码器 → 图像
   关键旋钮:采样步数、引导强度(classifier-free guidance 的 scale)、随机种子,负向提示
② 图生图(image-to-image)
   原图 → VAE 编码到潜空间 → 加噪到某个强度 t(由 "去噪强度" 决定)
        → 从第 t 步开始去噪(条件 = 新提示)→ 解码
   要点:去噪强度小 → 结果更接近原图(变化幅度小);强度大 → 更自由(可能偏离原图结构)
   这与扩散模型的前向加噪过程是同一件事的两个视角(推导见 [第 4 讲 4.5 节](../lec04/overview.md))
③ 主体绑定(subject-driven,DreamBooth,2022,arXiv:2208.12242)
   用同一主体的 3-5 张图 + 一个"罕见标识符"(如 "[V] dog")做少量步数微调
   要点:标识符必须罕见(否则模型会把它与已有概念混淆);
        通常配合 class-specific prior preservation(用同类别的生成样本防止语言漂移)
   轻量替代:直接训练一个小 LoRA(参数量更小、更易分发)
例 3.8.4 · LoRA 的参数量估算与一个选择判断

某扩散主干的注意力层里有一个 d×dd\times d 的权重矩阵,d=1280d=1280。(a)训练它需要多少个可训练参数?(b)改用秩 r=8r=8 的 LoRA 需要多少?(c)若这个模型共有 100 个这样的矩阵、全部加 LoRA(r=8r=8),可训练参数量总计多少?它与全参数微调的比值是多少?(d)什么情况下你不应该用 LoRA?

解

(a) d×d=12802=1,638,400d\times d=1280^2=1{,}638{,}400。

(b) r(d+d)=8×2560=20,480r(d+d)=8\times2560=20{,}480。(注意:BABA 是 d×rd\times r 与 r×dr\times d 两个矩阵,共 r⋅d+r⋅dr\cdot d+r\cdot d 个参数。)

(c) 100×20,480=2,048,000100\times20{,}480=2{,}048{,}000(约 2.05×1062.05\times10^{6});全参数版本为 100×1,638,400=1.6384×108100\times1{,}638{,}400=1.6384\times10^{8}。

比值=2,048,000163,840,000=0.0125=1.25%.\text{比值}=\frac{2{,}048{,}000}{163{,}840{,}000}=0.0125=1.25\% .

即约 1/801/80 的可训练参数。若把优化器状态(Adam 的一阶、二阶动量,各 4 字节)也算进来,显存下降的幅度还会更大——这通常是 LoRA 让人能在单卡上微调大模型的实际原因。

(d)不该用 LoRA 的情形:

  1. 需要大幅改变模型行为(例如把生成模型从"自然图像"改造成"严格的技术图纸生成器"):低秩增量表达力有限,此时全参数微调或从头微调更合适。
  2. 任务需要全新的知识/词表(如引入大量领域专有术语):LoRA 不改动词嵌入与主干表示,纯低秩更新可能力不从心(可考虑加入可训练的嵌入层,但那已不是标准 LoRA)。
  3. 需要极强的推理速度优化:LoRA 是在推理时把 BABA 与 WW 合并的(W′=W+αBAW'=W+\alpha BA),合并后不增加推理开销;但如果在服务端需要动态切换多个 LoRA,每次切换都要重算合并或承担额外算子开销——高并发场景要额外设计。
  4. 数据充足、算力充足:LoRA 的主要收益是省显存与省参数,数据算力都不缺时,它的表达力限制反而成为瓶颈。
∎

3.8.4 评估:看图说话系统怎么才算好

多模态模型的评估比分类困难得多:答案不是唯一的一个类别,而是一段自然语言。这一小节给出常用的两类口径与一个必须知道的现象。

定义 3.8.4 · VQA 评估与视觉幻觉
  • 视觉问答评估(VQA):常见做法有两种——(i) 封闭式,把问题设计成有限选项(是/否、多选、计数区间),用准确率评估;(ii) 开放式,用与人工参考答案的匹配度(早期常用 exact match,因同义表述被判错而受批评;后续出现用 LLM 当评委打分的方式——这类评测方法的可比性与稳定性本身存在争议,引用时需核实具体做法与版本)。
  • 视觉幻觉(visual hallucination):模型描述了图像中不存在的物体或属性(如凭空说"桌上有一个红色杯子")。它不是因为语言能力差,而是因为语言先验压过了视觉证据——模型"顺着最可能的文本往下写"。
「幻觉」为什么在视觉模型里也会出现

一个自然的问题是:图像是给定的,模型为什么还会"看错"?

机制上的解释是:这类模型的输出由语言模型逐 token 生成,每一步都在「最大化下一个词的概率」。当视觉证据弱(小物体、遮挡、模糊)而某个物体在语言上非常常见("桌子旁边通常有椅子")时,语言先验会压过视觉证据,模型就写出那个不存在的东西。这说明模型并不总是以图像为条件做判断——也在部分情况下以"这段话该怎么写下去"为条件。

一个必须注意的评测后果:直接用"看图说话"打分(如人工评分、LLM 评委)难以区分「描述准确」与「语言流畅」。所以把问题设计成可用答案核对的封闭形式是主流做法(例如「图中是否有 X?」)。

视觉幻觉的评测口径与常用基准
POPE(Polling-based Object Probing Evaluation,arXiv:2305.10355)
  把评测变成"是/否"二分类:反复问"图中是否有 X?"
  - 正例:图中确实存在的物体
  - 负例:不存在的物体,分三种构造方式
      random   —— 随机采样一个不存在但常见的物体
      popular  —— 采样数据集中出现频率最高的物体(更难)
      adversarial —— 采样与图中物体共现频率最高的物体(最难)
  报告指标:accuracy / precision / recall / F1
  价值:把"开放式生成"转成可核对的二分类,评测结果稳定、可复现
其他常用基准(用途与口径各不相同,不可混用)
  MME(arXiv:2306.13394)   —— 感知与认知能力的综合题组
  MMBench(arXiv:2307.06281)—— 多项选择式的能力维度评测

阅读任何 VLM 榜单时的三个检查点:① 是零样本还是微调过该数据集(数据污染问题);② 指标是准确率 / F1 / 还是 LLM 评委打分(不同口径不可直接比较);③ 评测集是封闭式问题还是开放式生成(开放式更难复现,方差更大)。

评估一条系统的正确做法:先问「错了会怎样」

VQA 榜单上的零点几个百分点差异,在真实系统里通常不重要;重要的是失败模式:

  • 医疗 / 工业质检:一次幻觉可能直接导致错误决策 → 必须用封闭式、可核对的评测,并设置拒答机制(不确定时不输出)。
  • 无障碍描述 / 内容检索:漏描述(recall 低)比多说一句(precision 低)的代价低得多 → 应该分别报告漏与多的指标,而不是只看一个综合分。
  • 内容审核 / 自动驾驶:需要分群评估(不同光照、天气、人群),因为总体指标会掩盖特定子集的系统性失败(3.9 节会展开这一点)。

这条判断与 3.7.2 的教训是同一条:指标的选择必须由「错误的代价结构」决定,而不是由「大家都在报什么」决定。

本节常见误解
  1. 「CLIP 是生成模型」:不是。它是双塔检索 / 对齐模型,不能生成描述、不能输出坐标或掩码。用 CLIP 做 captioning 是常见误用。
  2. 「CLIP 能理解关系与组合」:弱。双塔结构中图像与文本各自独立编码,没有交互层,因此「红色立方体在蓝色球的左边」这类关系型描述难以被区分。组合性(compositionality)是 CLIP 一类模型的已知短板。
  3. 「有 4 亿图文对,所以 CLIP 什么都能分类」:零样本性能对类别名的表述高度敏感(模板工程存在的原因),且细粒度类别之间在语言侧差异很小。零样本不等于全能。
  4. 「VLM 就是在 LLM 前面加个视觉编码器」:结构上大致是这样,但能否会回答问题取决于指令微调数据,而不是取决于接口结构。只做特征对齐(阶段 1)的模型只能"对上号",不能"答问题"。
  5. 「LoRA 与 ControlNet 是同一类东西」:LoRA 改参数(记忆主体 / 风格),ControlNet 加输入条件(空间布局)。两者正交、可叠加。
  6. 「去噪强度越高,图生图效果越好」:强度决定「保留多少原图结构」的交换。强度过高会脱离原图(等同于文生图),需要按任务调;这不是单调的"越好越好"。
  7. 「VQA 准确率可以直接跨论文比较」:不行。评测口径(封闭式 / 开放式 / LLM 评委)、是否微调过该数据集、参考答来源都不同,跨论文数字比较往往会得出错误结论。
  8. 「视觉幻觉是模型没看清」:更准确的说法是语言先验压过视觉证据——模型在"把这段文本写下去"与"忠实描述图像"之间,前者经常占优。这决定了缓解手段(更强的视觉条件、拒答、Verifier 复核)的方向。
即时自测 · 3.8

Q1 写出 CLIP 的对称对比损失形式,并说明「负样本」从哪里来。

Q2 为什么零样本分类必须要有文本编码器?只用图像编码器能否做零样本分类?

Q3 VLM 三段式训练的三个阶段各训练什么?为什么「只做特征对齐」的模型不会回答问题?

Q4 ControlNet 为什么要用零初始化卷积?它与残差连接的相似之处是什么?

Q5 一个 d=768d=768 的权重矩阵,用 r=4r=4 的 LoRA,可训练参数是多少?占全参数的百分之几?

Q6 POPE 为什么要把评测设计成「是 / 否」问答?它怎么构造难例?

参考要点

Q1 L=12[−1N∑ilog⁡esii∑jesij−1N∑jlog⁡esjj∑iesij]\mathcal L=\frac12\bigl[-\frac1N\sum_i\log\frac{e^{s_{ii}}}{\sum_j e^{s_{ij}}}-\frac1N\sum_j\log\frac{e^{s_{jj}}}{\sum_i e^{s_{ij}}}\bigr],sijs_{ij} 是归一化点积除以温度。负样本来自同一 batch 内的其他图文对(行方向上的其他文本、列方向上的其他图像),不需要数据增强构造。

Q2 因为零样本要分类的是训练时未见的类别,唯一可获得的类别表示只有"类别名的语义"。文本编码器把新类名即时编码成向量,并借助对齐过的空间与图像向量比较。只用图像编码器就没有新类别的向量表示,除非给每个类别提供样本(那就不是零样本了)。

Q3 阶段 1 只训练连接器(视觉编码器与 LLM 冻结),让视觉 token 落到语言模型能解释的空间;阶段 2 用视觉指令数据训练连接器 + LLM(或 LoRA),学会跟随指令作答;阶段 3(可选)用偏好数据做进一步对齐。只做阶段 1 的模型只建立了"视觉模式 ↔ 词"的映射,没有学到"按指令组织答案"的能力,因此不会回答问题。

Q4 零初始化让新增的条件分支在训练开始时输出恒为零,因此模型初始行为与原始预训练模型完全一致——不会用随机噪声破坏已训好的主干,之后再逐步学出条件通路。这与残差连接「从恒等映射出发、只学增量」的哲学同构(3.4.4):都是让新增部分从"什么都不做"开始。

Q5 r(d+d)=4×1536=6,144r(d+d)=4\times1536=6{,}144;全参数 7682=589,824768^2=589{,}824。比值 6,144/589,824≈0.01046{,}144/589{,}824\approx0.0104,即约 1.04%1.04\%。

Q6 因为把"描述图像"这种开放式生成转成可核对的二分类后,评测结果稳定、可复现、不依赖人工或 LLM 评委的主观性。难例构造:random(随机的不存在物体)、popular(数据集中最高频的物体)、adversarial(与图中物体共现频率最高的物体——最容易诱发语言先验的幻觉)。报告 accuracy / precision / recall / F1。

延伸阅读
  • CLIP:Radford et al., Learning Transferable Visual Models From Natural Language Supervision(2021,arXiv:2103.00020)——注意其 ImageNet 零样本数字属论文正文结果(摘要只写到"与原始 ResNet-50 相当"),引用时标注来源。
  • SigLIP:Zhai et al., Sigmoid Loss for Language Image Pre-Training(2023,arXiv:2303.15343)。
  • Flamingo:Alayrac et al., Flamingo: a Visual Language Model for Few-Shot Learning(2022,arXiv:2204.14198);BLIP-2:Li et al.(2023,arXiv:2301.12597);LLaVA:Liu et al., Visual Instruction Tuning(2023,arXiv:2304.08485);Qwen-VL:Bai et al.(2023,arXiv:2308.12966)。
  • 扩散与定制:Rombach et al., High-Resolution Image Synthesis with Latent Diffusion Models(2021,arXiv:2112.10752);Zhang et al., Adding Conditional Control to Text-to-Image Diffusion Models(ControlNet,2023,arXiv:2302.05543);Hu et al., LoRA: Low-Rank Adaptation of Large Language Models(2021,arXiv:2106.09685);Ruiz et al., DreamBooth(2022,arXiv:2208.12242)。
  • 评测:Li et al., Evaluating Object Hallucination in Large Vision-Language Models(POPE,2023,arXiv:2305.10355);Fu et al., MME: A Comprehensive Evaluation Benchmark for Multimodal Large Language Models(2023,arXiv:2306.13394);Liu et al., MMBench(2023,arXiv:2307.06281)。

本节小结:多模态的视觉侧有三种典型接口——对齐(CLIP 用 4 亿图文对的对称 InfoNCE 把图像与文本放进同一空间,从而支持零样本分类,但不会生成、组合推理弱)、连接(BLIP-2 的 Q-Former 或 LLaVA 的投影层把视觉 token 接进 LLM,配合三阶段的特征对齐 + 指令微调;视觉 token 数量直接决定上下文预算)、生成与编辑(潜空间扩散作主干,ControlNet 用零初始化旁支加空间条件、LoRA 用低秩增量做主体 / 风格定制)。评估上必须区分封闭式与开放式口径,并警惕视觉幻觉——它不是“看不清“,而是语言先验压过视觉证据。下一节换到另一面:这些能力一旦部署,会带来哪些偏见、安全与隐私问题。