FLAVA论文阅读笔记:FLAVA: A Foundational Language And Vision Alignment Model

论文标题: FLAVA: A Foundational Language And Vision Alignment Model
作者: Amanpreet Singh, Ronghang Hu, Vedanuj Goswami, et al.
论文链接: arXiv:2112.04482

1. 为什么提出FLAVA?

当前多模态预训练模型存在两种主流:

  1. 对比式双编码器(CLIP/ALIGN)
    • 模态分开训练 → 适合检索(图文对齐)
    • 缺点:无法处理复杂融合任务(如VQA)
  2. 融合式单编码器(UNITER/ViLT)
    • 模态融合 → 擅长推理
    • 缺点:难以泛化到单模态任务

FLAVA 的目标是构建一个真正意义上的“通用基础多模态模型”,能够同时支持: - 单模态视觉任务(如图像分类) - 单模态语言任务(如情感分类) - 跨模态任务(如VQA、图文检索)

它使用统一的 Transformer 结构训练三个子编码器,使模型既能解耦又能融合,成为“语言-视觉齐头并进”的基础模型。


2. 模型结构总览

FLAVA 架构包含三大模块,均基于 ViT 构建:

编码器模块 输入内容 输出 [CLS] Token 用于任务
Image Encoder 图像 patch [CLS_I] 图像分类、对比学习
Text Encoder 文本 tokens [CLS_T] 文本分类、对比学习
Multimodal Encoder [hI] + [hT] [CLS_M] 多模态推理类任务

各模块使用标准 Transformer(MHA + FFN + 残差 + LN),仅嵌入方式不同。


3. 预训练目标与策略

3.1 单模态目标

用于提升图像/文本各自的表示学习能力:

  • Masked Image Modeling (MIM):图像版的BERT
    • 输入:mask部分patch
    • 输出:预测dVAE token(类似BEiT)
    • 损失函数:交叉熵
  • Masked Language Modeling (MLM):文本mask预测
    • 15% BERT-style masking
    • 输出:预测token ID
    • 损失函数:交叉熵

3.2 多模态目标

用于学习图文间的对齐、融合与生成:

(1)图文对比损失:Global Contrastive Loss

  • 输入:图像+文本对
  • 输出:两个 [CLS] 向量
  • 损失函数:

与 CLIP 相同,鼓励图文对应对齐。

(2)图文匹配任务:Image-Text Matching (ITM)

  • 使用 Multimodal Encoder 的 [CLS_M] → 过MLP → 输出是否配对

(3)掩码多模态建模:Masked Multimodal Modeling (MMM)

  • 同时 mask 图像 patch 和文本 token
  • Multimodal Encoder 进行联合预测

4. 模块激活策略:Round-Robin

在训练过程中,FLAVA 采用 Round-Robin Sampling

  • 每个step只选择一种数据类型:
    • image-only → 训练 MIM,激活 image encoder
    • text-only → 训练 MLM,激活 text encoder
    • image-text pair → 训练 MMM / ITM / GC,激活所有模块

优点: - 显存节省 - 稳定优化 - 三类任务均衡训练


5. 下游任务适配方式

FLAVA 可以灵活用于三类任务:

下游任务类型 编码器模块 [CLS] 用法 任务头
图像任务 Image Encoder [CLS_I] Linear Head
文本任务 Text Encoder [CLS_T] Linear Head
多模态任务 All + Multimodal [CLS_M] 分类 / 推理头

6. 实验结果亮点

  • 35 个 benchmark 任务 上进行评估,涵盖图像、文本、多模态任务
  • 超越CLIP 在图文融合类任务上的表现(VQA、Hateful Memes等)
  • 即使只用 ImageNet-1k 作为图像数据,也能达到较好视觉结果
  • 文本任务上可媲美 RoBERTa-base


7. 我的理解与总结

FLAVA 是我学习多模态视觉语言模型的重要起点,它统一了对比学习和融合学习两种范式,采用模块化结构,既能灵活适配不同任务,又具备基础模型的可扩展性。

我特别喜欢它的几点设计:

  • 三编码器结构清晰,解耦明确;
  • Round-Robin 模态调度策略值得借鉴;
  • 模块化训练 + 模块化使用,便于工程部署