第16讲:多模态基础模型


一、基础模型概述

1.1 范式转变

  • 传统方法:为每个任务训练专门的模型

    1
    2
    3
    4
    数据域1 → 模型1 → 任务1
    数据域2 → 模型2 → 任务2
    数据域3 → 模型3 → 任务3
    数据域4 → 模型4 → 任务4
  • 基础模型方法:预训练一个模型作为多个任务的基础

    1
    2
    3
    大规模多样化数据集 → 基础模型 → 任务1/2/3/4

    预训练 + 微调/零样本/少样本

1.2 基础模型分类

语言模型 分类模型 语言模型+视觉 其他 链式调用
ELMo CLIP LLaVA Segment Anything LMs + CLIP
BERT CoCa Flamingo Whisper Visual Programming
GPT GPT-4V Dalle
T5 Gemini Stable Diffusion
Molmo Imagen

二、分类基础模型:CLIP

2.1 从SimCLR到CLIP

  • SimCLR:自监督对比学习,学习好的图像特征
    • 目标:拉近相似图像,推远不相似图像
  • CLIP扩展:将对比学习扩展到图像-文本对

2.2 CLIP架构与训练

  • 双编码器架构
    • 图像编码器
    • 文本编码器
  • 训练数据:4亿个从互联网收集的图像-文本对
  • 训练目标:对比学习损失函数

CLIP损失函数

LCLIP=i=1n[log(eui,vij=1neui,vj)log(eui,vij=1neuj,vi)]\mathcal{L}_{\text{CLIP}} = \sum_{i=1}^n \left[ -\log\left( \frac{e^{\langle u_i, v_i \rangle}}{\sum_{j=1}^n e^{\langle u_i, v_j \rangle}} \right) - \log\left( \frac{e^{\langle u_i, v_i \rangle}}{\sum_{j=1}^n e^{\langle u_j, v_i \rangle}} \right) \right]

其中:

  • uiu_i 是第 ii 个图像嵌入向量
  • viv_i 是第 ii 个文本嵌入向量
  • ui,vi\langle u_i, v_i \rangle 表示向量点积相似度
  • nn 是批次大小

2.3 零样本分类技巧

  1. 创建类别向量

    1
    2
    图像 → 图像编码器 → 图像向量
    "plane"/"dog"/"bird" → 文本编码器 → 文本向量
  2. 相似度匹配:计算图像向量与每个类别向量的相似度

分类概率计算

P(classiimage)=exp(fimage,ftexti/τ)j=1Kexp(fimage,ftextj/τ)P(\text{class}_i | \text{image}) = \frac{\exp(\langle f_{\text{image}}, f_{\text{text}_i} \rangle / \tau)}{\sum_{j=1}^K \exp(\langle f_{\text{image}}, f_{\text{text}_j} \rangle / \tau)}

其中:

  • fimagef_{\text{image}} 是图像编码器输出
  • ftextif_{\text{text}_i} 是第 ii 个类别提示词的文本编码
  • τ\tau 是温度参数
  • KK 是类别数量
  1. 提示词优化
    • 基础版:"category"
    • 优化版:"A photo of a category" (+1.3% on ImageNet)
    1
    这边是因为训练的时候,图像和文本是对应的描述关系,运用phase短语会比较多一些
    • 集成版:多提示词平均向量 (+5% on ImageNet)

集成提示词表示

fcategory=1Mm=1Mftext(promptm(category))f_{\text{category}} = \frac{1}{M} \sum_{m=1}^M f_{\text{text}}(\text{prompt}_m(\text{category}))

2.4 CLIP性能与优势

  • 零样本性能:在ImageNet上达到76.2%,匹配有监督ResNet101
  • 泛化能力:在ObjectNet、ImageNet Sketch等数据集上表现优异
  • 成功关键:规模效应
    • 模型规模:3.07亿参数 vs ResNet的4450万
    • 数据规模:4亿图像 vs ImageNet的128万

2.5 CLIP局限性

  1. 组合理解差:无法区分"a mug in some grass" vs “some grass in a mug” 图像之间的组合关系
  2. 依赖大批量:需要大batch size学习细粒度概念
  3. 监督信号粗糙:图像级标题无法学习局部对应关系

2.6 CoCa改进

  • 架构改进:在CLIP基础上增加解码器和字幕损失
    CoCa架构图
  • 多任务学习:对比损失 + 字幕生成损失

CoCa总损失

LCoCa=Lcontrastive+λLcaptioning\mathcal{L}_{\text{CoCa}} = \mathcal{L}_{\text{contrastive}} + \lambda \mathcal{L}_{\text{captioning}}

其中:

  • Lcontrastive\mathcal{L}_{\text{contrastive}} 是对比损失(同CLIP)

  • Lcaptioning\mathcal{L}_{\text{captioning}} 是自回归字幕生成损失

  • λ\lambda 是平衡超参数

  • 性能提升:在多个基准测试中超越CLIP


三、视觉语言模型

3.1 LLaVA架构

1
[图像] → [CLIP编码器] → [线性层] → [LLM解码器] → [文本输出]
LLaVA架构图

特征投影

Hvisual=WCLIP(I)+bH_{\text{visual}} = W \cdot \text{CLIP}(I) + b

其中:

  • II 是输入图像

  • WW 是可学习的投影矩阵

  • bb 是偏置项

  • HvisualH_{\text{visual}} 是投影后的视觉特征

  • 关键设计

    • 使用CLIP的倒数第二层特征(保留更多空间和语义信息)
    • 仅训练线性连接层,冻结视觉和语言编码器
    • 使用10万+指令调优样本

3.2 Flamingo架构

  • 核心组件
    1. 预训练的视觉编码器(冻结)
    2. 预训练的语言模型块(冻结)
    3. Perceiver重采样器(训练)
    4. 门控交叉注意力层(训练)

门控交叉注意力

GatedXAttn(Y,X)=Y+tanh(αxattn)Attention(Q=Y,K=V=X)\text{GatedXAttn}(Y, X) = Y + \tanh(\alpha_{\text{xattn}}) \cdot \text{Attention}(Q=Y, K=V=X)

其中:

  • YY 是语言特征

  • XX 是视觉特征

  • αxattn\alpha_{\text{xattn}} 是可学习的门控参数

  • 数据处理:支持图像和文本交错序列

  • 关键能力:强大的少样本学习能力

3.3 开源模型进展:Molmo

  • 完全开源:权重、数据、代码全部开放
  • 数据质量优先:使用高质量的"有意"标注数据(PixMo数据集)
  • 新能力:指向(Pointing)功能,实现视觉定位

指向表示

Output=LLM(concat(Hvisual,Htext))<point x="63.5" y="44.5">\text{Output} = \text{LLM}(\text{concat}(H_{\text{visual}}, H_{\text{text}})) \rightarrow \text{<point x="63.5" y="44.5">}

  • 性能:在人类偏好评估中超越Gemini 1.5 Pro和Claude-3.5

四、其他基础模型

4.1 Segment Anything Model (SAM)

  • 范式转变:从固定类别分割 → 分割任何物体
  • 提示式分割:支持点、框、文本等多种提示方式
  • 处理歧义:当提示不明确时,输出多个可能的掩码

SAM架构

Masks=MaskDecoder(ImageEncoder(I),PromptEncoder(P))\text{Masks} = \text{MaskDecoder}(\text{ImageEncoder}(I), \text{PromptEncoder}(P))

  • 训练数据:SA-1B数据集(10亿+掩码,1100万图像)

4.2 链式调用方法

CuPL (Customized Prompts)

1
2
未知概念 → LLM生成描述 → CLIP分类
例:"platypus" → "半水生哺乳动物,有喙..." → 分类

CuPL流程

fenhanced=LLM("Describe: category")f_{\text{enhanced}} = \text{LLM}(\text{"Describe: category"})

P(categoryI)=CLIP(I,fenhanced)P(\text{category} | I) = \text{CLIP}(I, f_{\text{enhanced}})

VisProg (Visual Programming)

1
2
3
4
5
复杂问题 → LLM生成Python脚本 → 执行脚本调用基础模型API
例:"两图共有6人和2船吗?" →
count1 = VQA(图1,"多少人")
count2 = VQA(图2,"多少人")
return count1+count2==6

VisProg形式化

Program=LLM(Problem)\text{Program} = \text{LLM}(\text{Problem})

Answer=Execute(Program,{VQA,Detect,Count,})\text{Answer} = \text{Execute}(\text{Program}, \{\text{VQA}, \text{Detect}, \text{Count}, \dots\})


五、关键洞见与总结

5.1 成功要素

  1. 规模效应:大数据 + 大模型 = 强泛化能力
  2. 多模态对齐:统一的表示空间是关键
  3. 提示工程:简单的提示词优化带来显著性能提升
  4. 链式组合:基础模型组合解决复杂任务

5.2 未来方向

  • 开源vs闭源:开源模型正在快速追赶
  • 数据质量:从"偶然"数据转向"有意"标注数据
  • 具身AI:从感知到行动的完整智能系统
  • 机器人学习:将基础模型应用于物理世界

六、核心模型对比

模型 类型 关键创新 优势 局限
CLIP 分类 图像-文本对比学习 零样本能力强,效率高 组合理解差
CoCa 分类 对比+生成多任务 性能全面提升 计算复杂
LLaVA VLM 简单线性连接 训练高效,效果不错 融合方式简单
Flamingo VLM 门控交叉注意力 少样本学习强 架构复杂
Molmo VLM 高质量数据+指向 完全开源,定位能力强 相对较新
SAM 分割 提示式分割 分割任何物体 需要明确提示