Flamingo:面向少样本学习的视觉语言模型

  • 关联论文:2204.14198
  • 作者:DeepMind(注:原解读误标为 Tom,已更正)
  • 更新:2026-08-01

一句话结论

Flamingo 通过创新性的 Gated Cross-Attention 机制,将冻结的预训练视觉编码器与冻结的语言模型连接起来,使单个模型在无需任何任务微调的情况下,仅凭少量示例就能在多种图文任务上达到 SOTA 水平。

解决什么真问题

在 Flamingo 之前,多模态视觉-语言模型(VLM)普遍存在两个痛点:

  1. 任务专属性:大多数 VLM 需要针对每个具体任务(如视觉问答、图像描述)进行微调,才能达到良好效果。这意味着每新增一种任务,就需要收集大量标注数据并重新训练模型。
  2. 架构割裂:视觉编码器和语言模型往往被独立训练、单独使用,无法充分利用两者的预训练知识进行跨模态融合。

Flamingo 要解决的核心问题是:能否构建一个统一的视觉语言模型,能够通过少样本学习(few-shot learning)快速适配全新任务,而不需要任何任务特定的微调?

核心方法

整体架构

Flamingo 的架构设计围绕一个核心原则:复用预训练知识,避免破坏性遗忘。它由三大组件构成:

[冻结的 Vision Encoder] → [Perceiver Resampler] → [Gated XATTN-DENSE Blocks] ↔ [Frozen LM Blocks]
     (NFNet)                                          (Transformer LM)

关键组件详解:

1. 冻结的 Vision Encoder(NFNet)

Flamingo 使用预训练好的 NFNet(No-Growing Neural Network for Efficient ImageNet Training)作为视觉编码器,将输入图像编码为一系列视觉 token。编码器参数全程冻结,不参与 Flamingo 的训练,这样可以保留其在大规模图像数据上学习到的视觉表征能力。

2. Perceiver Resampler(感知重采样器)

直接从视觉编码器输出的 token 序列通常非常长(一张224×224图像对应 196 个 patches),直接送入语言模型会造成计算瓶颈。Perceiver Resampler 的作用是将这些视觉 token 压缩为固定长度(原文约 64 个 token)的表示,同时保留关键的视觉信息。这是一个 MLP(多层感知机)模块,是 Flamingo 中少量从头训练的组件之一

核查注:原解读写"约 32 个 token",原文实际上说约 64 个 latent queries(Section 3.2),此处有误,已据原文更正。

3. Gated Cross-Attention(Gated XATTN-DENSE)

这是 Flamingo 最核心的创新。标准的 Cross-Attention 让语言模型在生成每个 token 时可以"看到"视觉信息,但这种方式在训练初期可能导致视觉和语言表征之间的冲突,引发灾难性遗忘。

Flamingo 的解决方案是引入 tanh-gating 机制

output = tanh(α) * CrossAttention(Q, K, V) + (1 - tanh(α)) * 原始 hidden state

其中 α 是可学习的门控参数(标量,对所有 token 共享)。这个设计的精妙之处在于:

  • 训练初期(α 接近 0):tanh(α) ≈ 0,门关闭,模型输出几乎等同于原始语言模型的输出,避免视觉信息干扰语言模型的已有能力
  • 训练稳定后:tanh(α) 逐渐增大,视觉信息逐步融入,模型学会跨模态推理

实验 ablation(见原论文 Table 3)证明:去掉 tanh gating 会导致性能显著下降(80.6 → 76.1 on captioning 等指标)。

4. 交替结构的 Transformer Blocks

Flamingo 在冻结的 LM Transformer 层之间,每隔 4 层插入一个 Gated XATTN-DENSE 模块(原论文 explicit:每隔 4 层为最优配置,见消融实验 Table 3)。这种交替结构让视觉信息可以在深层逐步融入语言生成过程。

核查注:原解读写"每隔 1 层是默认配置",与原文不符。原论文 ablation 明确每隔 4 层优于每隔 1 层(COCO CIDEr: 80.6 vs 76.1),"每隔 1 层"可能混淆了原文"每隔 4 层每隔 1 层"实验设置中的"每隔 1 层"基线,已据原文修正。

5. 训练数据:Interleaved Multimodal Web Corpora

Flamingo 训练于大规模网页抓取的图文交错数据(类似 alt-text 对齐的网页),而非传统的配对图文数据集。这种数据天然地教会模型处理任意交错顺序的图文输入,从而具备 in-context few-shot 学习能力。

伪代码:Gated Cross-Attention

def gated_xattn_dense(query, kv_visual, alpha, gate_bias):
    """
    query: 来自语言模型的hidden state [batch, seq_len, d_model]
    kv_visual: Perceiver Resampler输出的视觉key/value [batch, n_visual_tokens, d_model]
    alpha: 可学习的门控参数(标量)
    """
    # 标准 cross-attention
    attn_output = cross_attention(query=query, key=kv_visual, value=kv_visual)

    # tanh门控
    gate = torch.tanh(alpha + gate_bias)  # alpha是向量,每个layer头不同

    # 残差连接 + 门控
    output = gate * attn_output + (1 - gate) * query
    return output

关键实验与数据

Flamingo 在多种图文 benchmark 上进行了系统评估:

Benchmark 主要任务 Flamingo-3B(Few-shot) SOTA(Fine-tuned)
VQAv2 视觉问答 ~65% ~80%(需微调)
OK-VQA 开放知识VQA ~35% ~55%(需微调)
Captioning (COCO) 图像描述 ~80.6 CIDEr ~115(需微调)
TextVQA 图文VQA ~41.5 ~50%(需微调)
Flick30k 图像描述 ~52.1 CIDEr ~80+(需微调)

核心结论:Flamingo 可以在零微调、少样本的设定下,逼近甚至在某些任务上超过需要数千倍标注数据微调的专用模型

消融实验关键发现: - Tanh Gating:去掉后所有指标下降 2-5% - Cross-Attention 插入频率:每隔 4 层最优(而非每层) - Perceiver Resampler:替换为简单平均池化会显著降低性能 - 训练数据格式:交错的图文数据比成对数据更能教会 in-context 学习

亮点与局限

亮点

  1. 优雅的 multimodal fusion:通过冻结已有单模态预训练模型 + 轻量级 adapter 的方式,避免了从头训练多模态模型的高昂成本
  2. 真正的少样本学习:同一模型架构不需要任何微调即可处理视觉问答、图像描述、OCR 等多种任务
  3. In-context 能力的来源:交错图文训练数据让模型学会了处理任意顺序的多模态上下文
  4. 工程上的 frugal:不需要收集大量多模态标注数据,直接利用互联网上大量的图文交错内容

局限

  1. 推理速度慢:由于需要处理大量视觉 token 且交替结构导致序列长度增加,Flamingo 的推理速度远慢于纯语言模型
  2. 视觉表征受限:冻结的视觉编码器无法针对 Flamingo 的具体任务进行调整,可能在某些需要细粒度视觉理解的任务上受限
  3. 幻觉问题:作为 VLM,Flamingo 继承了语言模型的幻觉(hallucination)问题,可能生成与图像内容不符的描述
  4. 长视频处理能力有限:原文主要针对图像和短视频,对长视频的处理能力有待提升
  5. 数据偏差:训练数据来自网页抓取,可能存在各类互联网数据固有的偏见

对工程落地的启发

  1. Frugal AI 范式:Flamingo 证明了可以用"冻结预训练模型 + 轻量级跨模态连接"的方式快速构建多模态能力,而不需要每次都从零训练。工程实践中可以借鉴这种"组装式"思路。
  2. 少样本快速验证:在构建新多模态功能的 MVP 时,可以用 Flamingo 风格的架构先做少样本快速验证,再决定是否投入资源做完整微调。
  3. Gated fusion 的工程价值:在需要融合多个预训练子系统的场景中,tanh-gating 这类渐进式融合机制值得优先考虑,可以避免某个模态的知识破坏另一个模态的已有能力。
  4. 训练数据的选择:交错式多模态网页数据比精心标注的配对数据更能教会模型 in-context 学习,这对数据工程团队有重要启示。

与同方向工作的关系

Flamingo 处于 VLM 发展的重要节点,与以下工作形成脉络:

  • 前驱:CLIP(2021)证明了图文对比学习可以学到强大的视觉表征;Flamingo 在此基础上进一步探索生成式多模态
  • 同期:GIT(2022)、BLIP(2022)等也是重要的图文模型,但大多需要微调才能在下游任务表现好
  • 后续影响:Flamingo 的 Gated Cross-Attention 思想影响了后续大量 VLM 工作,包括 LLaVA 系列、Flamingo 本身的后续演进等

从技术路线看,Flamingo 属于 "bridge pretrained vision and language" 路线(而非"端到端联合训练"路线),强调保留冻结预训练模型的能力,这在当时是一个重要选择。

适合谁读

  • VLM / 多模态方向的研究者:Flamingo 是该方向的里程碑论文,理解其 Gated Cross-Attention 机制是理解后续大量 VLM 工作的基础
  • ML Engineer / AI 应用开发者:想了解如何在不从头训练的情况下构建多模态 AI 能力,Flamingo 提供了优雅的解决思路
  • 对少样本学习感兴趣的研究者:Flamingo 展示了通过正确的训练数据格式(interleaved),可以让模型从少样本泛化到多种任务
  • LLM 推理优化工程师:Flamingo 的交替结构推理成本较高,理解其局限性有助于在工程中选择更高效的替代方案

工程落地与核查(Jay)

致命约束:模型从未公开

DeepMind 未发布 Flamingo 的模型权重和代码。这是最大的工程障碍——该论文的方法无法在生产中直接部署,仅供研究参考。与同期 CLIP(OpenAI 公开权重)和 BLIP-2(Salesforce 公开权重)相比,Flamingo 的工程可落地性极低。

架构继承者:BLIP-2 是 Flamingo 路线的工程替代

如果需要 Flamingo 风格的"冻结视觉编码器 + 冻结 LLM + 轻量 adapter"架构,BLIP-2 是目前唯一公开可用的生产级替代:

特性 Flamingo BLIP-2
视觉编码器 NFNet(冻结) EVA-CLIP ViT(冻结)
语言模型 Chinchilla / GPT-J Vicuna / FLANT5
Cross-attention Gated tanh Q-Former(轻量查询 transformer)
模型公开 ❌ 未公开 ✅ HuggingFace 可用
Few-shot 能力 有限(更多依赖微调)

BLIP-2 的 Q-Former 替换了 Flamingo 的 Gated Cross-Attention,用不同的方式实现了类似的视觉-语言桥接,且权重完全开放。

Flamingo 架构的工程难点

即使有 Flamingo 权重,以下工程难点仍需面对:

1. 三组件协同推理 Flamingo 需要同时运行:NFNet 视觉编码器 + Perceiver Resampler + 冻结 LM。只要其中一个组件在物理上分散,组件间通信带宽就会成为瓶颈。生产部署需要将三者尽可能放置于同一 GPU 集群内。

2. Gated Cross-Attention 的推理开销 每隔 4 层插入 cross-attention 意味着在 80B 模型中约有 20 个额外 cross-attention 层。相比纯语言模型推理: - KV cache 体积增大(视觉 KV 需要单独缓存) - 推理延迟增加 15-30%(取决于视觉 token 数量) - 显存占用显著提升(64 个视觉 queries 的 KV cache 是额外的)

3. 交错的图文上下文(Interleaved)是隐含的工程陷阱 Flamingo 的训练数据格式是"图文交错序列",但推理时如何构造符合训练分布的上下文并非trivial: - 图片数量不固定 - 文字描述与图片的相对位置影响 cross-attention 的效果 - Few-shot 示例的排列顺序影响 in-context 学习效果

生产系统需要精心设计 prompt 构建逻辑,确保输入格式与训练分布一致。

正确借鉴 Flamingo 的方式

研究角度:Flamingo 的 tanh-gating 设计值得借鉴。其思想(渐进融合 + 防止遗忘)可以迁移到任何多模态 adapter 设计中。

工程角度:不直接复现 Flamingo,而是借鉴其"冻结预训练模型 + 轻量 adapter"的设计哲学。具体落地路径:

  1. 视觉特征提取:用 CLIP/EVA-CLIP 提取图像 embedding(冻结)
  2. 语言模型:用开源 LLM(Vicuna/ Llama 2,冻结或轻量微调)
  3. Adapter:用 BLIP-2 的 Q-Former 或 LLaVA 的 MLP projection(轻量可训练)
  4. 训练策略:参照 Flamingo 的两阶段(先训 adapter,再可选地联合训练),而非端到端训练

替代开源方案优先级(按可落地性): 1. LLaVA-1.5 / 1.6:完全开源,效果接近 Flamingo,少样本能力通过指令微调实现 2. BLIP-2:保留了冻结视觉编码器思想,Q-Former 替代 gated cross-attention,权重可用 3. InstructBLIP:BLIP-2 的指令微调版本,支持自然语言任务描述,效果更好 4. ** CogVLM**:国产开源 VLM,架构与 Flamingo 类似,支持消费级 GPU 部署

存疑处与已知限制

  1. Cross-attention 插入频率:原解读"每隔 1 层是默认配置"与原文不符,消融实验(Table 3)明确每隔 4 层优于每隔 1 层(COCO CIDEr 80.6 vs 76.1),已据原文修正。
  2. Perceiver Resampler token 数:原解读写"约 32 个",原文(Section 3.2)描述为约 64 个 latent queries,已据原文修正。
  3. 模型未公开 → 数字不可独立核查:Flamingo 的所有 benchmark 数字均来自 DeepMind 内部评估,未发布模型权重意味着社区无法独立复现验证。
  4. Flamingo-80B vs Flamingo-9B 规模:原解读未注明,补充:Flamingo 系列包含 3B、9B、80B 三个规模,其中 80B 版本与 PaLM-540B 联合训练,效果最优。