(阅读笔记)VLM架构与预训练策略

(阅读笔记)VLM架构与预训练策略

以下内容综合整理自公开参考文献,向原作者的研究工作致敬。如有侵权,请联系删除,联系邮箱:untymen@163.com 。

参考文献

架构

图像——>视觉编码器——>桥接层——>LLM——>文本输出

  • 视觉编码器:

    ResNet—>ViT开始,逐渐分化。

    核心权衡是:分辨率 Vs 计算开销

    部分工作尝试去掉独立的视觉编码器,直接让LLM处理视觉信息。

  • 桥接层

    ——> 将视觉特征转化为LLM的embedding

    • Linear Projection 最简单
    • Q-Former / Perceiver Resample 压缩
    • Cross-Attention 深度融合
  • LLM

    基本都在用Decoder-only架构

    1. Deocker-only生态最成熟,预训练权重最多最强
    2. 自回归范式天然适合开放式生成任务
    3. 多轮对话、指令跟随这些能力可以直接从LLM继承
  • 训练

    1. 预训练对齐:只训练桥阶层,学会视觉-语言的映射关系
    2. 指令微调SFT:解冻LLM,用视觉问答、描述、推理数据做指令微调,使得模型学会听话
    3. 强化学习对齐:用RLHF、DPO进一步对齐人类偏好,减少幻觉

预训练

CLIP/ALIGN/SigLIP ──→ 提供”视觉编码器” + 预训练权重
└── 论文重点是”如何预训练这个编码器”

Flamingo/LLaVA ─────→ 提供”桥接层架构+训练策略”
└── 论文重点是”如何在不重新预训练的情况下组装VLM”

BLIP ───────────────→ 提供”统一理解与生成的框架” + 预训练策略
└── 论文重点是”如何在一个模型里同时做理解和生成,
并解决网络数据的噪声问题”

BLIP-2 ─────────────→ 提供”轻量级查询变换器(Q-Former)” + 两阶段预训练
└── 论文重点是”如何用少量参数桥接冻结的视觉编码器和
冻结的LLM,实现高效多模态对齐”

视觉编码器

1. CLIP-Contrastive Language-Image Pretraining

通过对比学习构建一个统一的图文表征空间。CLIP 采用典型的双塔结构图像和文本分别通过各自独立的编码器(如 ViTTransformer)进行编码然后被映射到同一个共享的语义空间中。在该空间中,CLIP 通过最小化对比学习损失对图文表征进行对齐。

采用了在自监督学习中广泛使用的对比学习损失。但由于 CLIP 使用了 4 亿对图像-文本对进行训练因此展现了强大的多模态表征能力。更重要的是,CLIP 团队开源了模型权重

2. ALGIN - A Large-scale ImaGe and Noisy-text embedding

架构和损失函数与 CLIP 一致

直接使用了 16 亿对质量参差不齐、充满噪声的图像和文本对进行训练ALIGN 的实验结果表明,只要数据足够多,哪怕噪声数据较多,也能训练出性能优异的 VLM,即“数据量” 能弥补 “数据质量” 的不足

3. SigLip - Sigmoid Loss for Language-Image Pretraining

整体架构与CLIP一致,采用 ViT+Transformer的双塔架构。

igLIP 将 CLIP 中基于 Softmax 的对比学习损失替换为更灵活的 pairwise sigmoid 损失函数,从而显著降低了对 batch size 的依赖,提高了训练的可扩展性和效率。具体而言,SigLIP 将每一个图文对视为一个独立的二分类任务(如果图像和文本配对,标签为1 ,反之为 0)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
┌─────────────────────────────────────────────────────────┐
│ CLIP (Softmax) │ SigLIP (Sigmoid) │
├─────────────────────────────────────────────────────────┤
│ │ │
│ Batch = [I₁,I₂,I₃] │ Batch = [I₁,I₂,I₃] │
│ [T₁,T₂,T₃] │ [T₁,T₂,T₃] │
│ │ │
│ 对于 I₁: │ 对于 (I₁,T₁): │
│ • 计算 [s₁₁, s₁₂, s₁₃] │ • 只看这一对 │
│ • Softmax 归一化 │ • Sigmoid → 概率 │
│ • 希望 s₁₁ 最大 │ • 希望接近 1 │
│ │ │
│ 必须同时看所有样本 │ 每个样本对独立计算 │
│ ↓ │ ↓ │
│ 强依赖 batch size │ 与 batch size 解耦 │
│ │ │
└─────────────────────────────────────────────────────────┘

BLIP框架

1. BLIP-Bootstrapping Language-Image Pretraining

不仅具备图文对齐(理解)能力,BLIP同时支持多模态理解与生成任务既可以根据图像生成描述,也能完成图像问答等任务

  1. 单模态编码器

    作用:分别理解图像和文本的”单模态”特征

    1. 图像编码器:基于ViT架构
    2. 文本编码器:基于BERT架构
  2. 图像引导的文本编码器

    作用:深入理解”这张图+这句话”的关系(多模态理解)

    每个 Transformer 层中,自注意力(Self-Attention)与前馈网络(Feed-Forward Network)之间插入交叉注意力(Cross-Attention, CA)层以融合视觉信息

    同时,在输入序列前添加一个特殊的 [Encode] token,该 token 经过跨模态编码器处理后,其对应的输出向量被用作融合后的多模态特征表征,提炼图像与文本的联合信息。

  3. 图像引导的文本解码器

    作用:根据图像生成文本描述(多模态生成)

    将原本的双向自注意力(bidirectional self-attention)替换为因果自注意力(causal self-attention),以实现自回归生成

    引入特殊的 [Decode][EOS] 标记,分别用于指示生成序列的起始和结束该解码器能够根据输入图像生成描述性文本,具备 CLIP 等仅对比学习模型所不具备的文本生成能力。

三个损失:

  • 图文对比损失 ITC <——单模态编码器
  • 图文匹配损失 ITM <——图像引导的文本编码器
  • 语言建模损失 LM <——图像引导的文本解码器

2. BLIP2

BLIP-2 引入了一种名为 Q-Former 的适配器架构用于在冻结的图像编码器与 LLM 之间建立桥接,从而实现高效的跨模态知识迁移与融合。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
┌─────────────────────────────────────────────────────────────────┐
│ 第一阶段(左边) │
│ Vision-and-Language Representation Learning │
│ 视觉-语言表征学习 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 图像编码器 ──→ Q-Former ←──── 查询向量 + 文本 │
│ (冻结❄️) (可训练) (可学习) (输入) │
│ ↓ ↑ │
│ 输出图像特征 输出融合特征 │
│ │
│ 目标:让 Q-Former 学会"查询"图像的相关信息 │
│ 并与文本对齐(ITC + ITM + ITG 损失) │
│ │
│ "Bootstrapping Pre-trained Image Models" │
│ = 不重新训练图像模型,只训练 Q-Former 来"引导"它的输出 │
│ │
└─────────────────────────────────────────────────────────────────┘

↓ Q-Former 训练好后

┌─────────────────────────────────────────────────────────────────┐
│ 第二阶段(右边) │
│ Vision-to-Language Generative Learning │
│ 视觉到语言的生成学习 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 图像编码器 ──→ Q-Former ──→ 大语言模型(LLM) ──→ 生成文本 │
│ (冻结❄️) (已训练好) (冻结❄️) (如图片描述) │
│ ↑ │
│ 查询向量(还是那些可学习的嵌入) │
│ │
│ 目标:让 Q-Former 的输出能被 LLM 理解 │
│ 从而生成连贯的文本(LM 损失) │
│ │
│ "Bootstrapping Pre-trained Large Language Models" │
│ = 不重新训练 LLM,只训练 Q-Former 来"引导"它的输入 │
│ │
└─────────────────────────────────────────────────────────────────┘

Q-Former 是一个轻量级的 Transformer 模型,它的核心设计是在输入中引入一组固定数量的可学习查询向量(例如 32 个)。这些查询向量不会随图像内容改变,而是通过训练学会如何主动“提问”,从图像编码器输出的视觉特征中提取关键信息。这种机制的妙处在于:无论输入图像被编码成多少个 patch(图像 embedding 数量可能很多),Q-Former 总是通过这固定数量(如 32)的查询向量,将图像信息压缩成固定数量的语义表征

1
2
3
4
5
6
7
8
9
10
11
12
13
传统做法(如BLIP):
图像 ──→ 生成很多特征(比如196个patch的特征)

文本 ──→ 要和所有特征交互(计算量大,信息分散)

BLIP-2的Query做法:
用32个可学习的"问题"(Query)去图像里"查资料"

Query问:"图里有啥物体?"
Query问:"物体在什么位置?"
Query问:"颜色是什么?"

图像编码器回答 → Q-Former整理 → 送给LLM

训练策略:

  1. 第一阶段在冻结的预训练图像编码器上,仅训练 Q-Former,且不引入任何预训练的文本编码器或语言模型,通过图文对比损失(ITC)、图像引导文本生成损失(ITG)和语言建模损失(LM)来学习视觉与语言的对应关系
  2. 第二阶段,BLIP-2 将训练好的 Q-Former(连接冻结的图像编码器)与一个冻结的 LLM 对接,以充分利用其文本生成能力。为保持架构的灵活性,Q-Former 的输出维度无需与语言模型的词向量维度完全一致,从而可以适配任意类型的 LLM。为实现这一对接,Q-Former 的输出首先通过一个全连接层线性映射至与语言模型词向量相同的维度,并作为软视觉提示(soft visual prompts)拼接在文本输入前,一同送入语言模型。

桥接层架构

1. Flamingo

设计理念与BLIP-2相似,通过将预训练的视觉特征编码器(如 ViT、ResNet 等)与预训练的大型语言模型(如 LLaMA)结合,使语言模型具备处理图文混合输入(包括图像、视频等)的能力,并生成纯文本输出。

  1. 知重采样模块(Perceiver Resampler)用于将数量不定的视觉表征转换为固定数量的语义向量(和 BLIP-2 中的 Q-Former 的功能类似,但是实现方式不同)
  2. 门控交叉注意力模块(Gated Cross-Attention)用于融合视觉和文本信息

2.LLaVA-Large Language and Vision Assistant

将预训练的视觉编码器(如 CLIP 的视觉分支)与预训练的大型语言模型(如 GPT)结合,并引入轻量级的连接模块,使语言模型具备处理图文联合输入的能力,从而支持图像问答、描述生成等任务。

LLaVA 仅引入了一个简单的视觉投影模块(多层非线性层),将 CLIP 图像编码器提取的视觉特征映射到 LLaMA 的词向量空间。映射后的视觉特征位于与词嵌入相同的空间,作为“前缀嵌入向量”直接拼接到文本 token 的词向量序列之前,随后由语言模型进行统一建模和自回归生成。

  1. 第一阶段为视觉-语言对齐——>使用图文对数据
  2. 第二阶段为多模态指令微调。——>使用GPT-4自动生成的图文指令问答数据
  3. 与 Flamingo 类似LLaVA 在两个阶段中均采用统一的自回归语言建模损失函数,即在输入图像和文本的条件下,生成目标文本,并以此计算损失

千问系列预训练

Qwen-VL

核心模块:

  • 大语言模型
  • 视觉编码器:ViTal
  • 视觉语言匹配器:该模块引入了固定长度(如 256)的可学习查询向量(learnable queries),并通过交叉注意力机制(cross-attention)将变长的视觉特征序列压缩为定长的语义表示。其思想与 Q-Former 类似,但是具体实现架构不同

训练方法:

  1. 单任务训练
    • 输入为图像,输出为对应的文本描述
    • 训练采用自回归语言建模损失函数,过程中冻结语言模型全部参数,仅更新视觉编码器视觉语言适配器的参数。
  2. 多任务训练
    • 输入主要为交织的图像–文本序列(用于 captioning、VQA、grounding 及合成 OCR 数据等多模态任务),同时混入纯文本语料以维持 LLM 的文本生成能力,输出为文本
    • 训练仍然采用自回归语言建模损失,训练过程中解冻语言模型,视觉编码器与语言模型联合训练,即训练所有参数
  3. 监督指令微调
    • 微调数据主要包含由 LLM(推测为 Qwen-7B Base)自我生成的单图像描述和对话,因其局限于单图内容理解,故额外构建了包含人工标注、模型生成和策略拼接的多样化对话数据,以增强本地化和多图像理解能力。训练时混合多模态与纯文本对话数据
    • 输入可为图像或图文组合输出始终为文本,采用自回归语言建模损失,训练时冻结视觉编码器,仅优化语言模型及适配模块g

Qwen2-VL

核心模块:

  1. 大语言模型
  2. 视觉编码器
    • 基于ViT,初始权重来源于DFN的ViTal模型
    • 将固定位置编码替换为二维旋转位置编码,提高了空间泛化能力
    • 支持任意分辨率图像,并将图像统一处理为2帧视频格式以兼容视频输入
    • 通过三维时空块结果与多模态旋转位置编码,实现文本、图像与视频的同一时空建模
    • 输出的视觉特征通过轻量级非线性映射层,维度转化为文本token词向量相同

训练方法(基本不变):

  1. 单任务训练
  2. 多任务训练
  3. 监督指令微调,但在细节上进行了关键升级

Qwen2.5-VL

核心模块:

  1. 大语言模型:将传统的1D旋转位置编码 RoPE 升级为 多模态旋转位置编码,并作了绝对时间对齐
  2. 视觉编码器:新设计ViTal架构,引入2D-RoPE与窗口注意力机制,支持图片的原生分辨率处理
  3. 视觉语言融合模块:在 Qwen2.5-VL 中,图像会被切成许多小块,每块生成一个特征向量。如果直接将所有图像块的特征向量都输入大语言模型,计算成本会很高。为了解决这个问题,Qwen2.5-VL 会先将相邻的 4 个图像块的特征向量拼接在一起,再通过一个两层的 MLP 压缩成一个新的向量,与语言模型的词向量维度一致

训练方法,3个预训练阶段和2个微调阶段:

  1. 视觉编码器预训练:采用从零开始训练的重新设计 ViT 作为视觉编码器。该阶段主要使用图像描述、视觉知识和 OCR 数据,采用 CLIP 式对比损失最大化匹配图文对的相似度,最小化不匹配对的相似度,指导视觉特征与文本嵌入
  2. 联合多模态预训练:
    • 在多模态任务上对模型进行联合训练。训练数据涵盖交错图文对、视觉问答、多模态数学题、代理任务以及视频理解,覆盖更为复杂和广泛的视觉-语言语义场景
    • 多任务混合损失,所有模型参数均参与训练
  3. 长序列与视频推理训练:
    • 引入了视频帧序列、智能体交互等更具时间依赖性的多模态数据,并将输入序列长度从 8192 显著扩展至 32768,以提升模型对长距离信息的建模能力
    • 任务涵盖视频理解、多轮交互、多模态长文档处理等复杂场景,重点强化模型对跨时间和跨模态线索的综合推理能力
  4. 监督微调:
    • 主要采用自回归语言建模损失(Cross-Entropy Loss),即根据当前上下文预测下一个文本 token,从而优化模型生成文本的准确性和连贯性。此阶段模型视觉编码器参数保持冻结,仅微调语言模型
  5. 直接偏好优化:
    • 本阶段专注于图文对和纯文本的偏好数据训练,利用人类标注的偏好样本优化模型。
    • 训练过程中,主要采用基于概率对数差的排序损失最大化“更好”回答相对于“较差”回答的生成概率差异,引导模型优先输出符合人类偏好的内容。