Flamingo:面向少样本学习的视觉语言模型
- 关联论文:2204.14198
- 作者:DeepMind(注:原解读误标为 Tom,已更正)
- 更新:2026-08-01
一句话结论
Flamingo 通过创新性的 Gated Cross-Attention 机制,将冻结的预训练视觉编码器与冻结的语言模型连接起来,使单个模型在无需任何任务微调的情况下,仅凭少量示例就能在多种图文任务上达到 SOTA 水平。
解决什么真问题
在 Flamingo 之前,多模态视觉-语言模型(VLM)普遍存在两个痛点:
- 任务专属性:大多数 VLM 需要针对每个具体任务(如视觉问答、图像描述)进行微调,才能达到良好效果。这意味着每新增一种任务,就需要收集大量标注数据并重新训练模型。
- 架构割裂:视觉编码器和语言模型往往被独立训练、单独使用,无法充分利用两者的预训练知识进行跨模态融合。
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 学习
亮点与局限
亮点
- 优雅的 multimodal fusion:通过冻结已有单模态预训练模型 + 轻量级 adapter 的方式,避免了从头训练多模态模型的高昂成本
- 真正的少样本学习:同一模型架构不需要任何微调即可处理视觉问答、图像描述、OCR 等多种任务
- In-context 能力的来源:交错图文训练数据让模型学会了处理任意顺序的多模态上下文
- 工程上的 frugal:不需要收集大量多模态标注数据,直接利用互联网上大量的图文交错内容
局限
- 推理速度慢:由于需要处理大量视觉 token 且交替结构导致序列长度增加,Flamingo 的推理速度远慢于纯语言模型
- 视觉表征受限:冻结的视觉编码器无法针对 Flamingo 的具体任务进行调整,可能在某些需要细粒度视觉理解的任务上受限
- 幻觉问题:作为 VLM,Flamingo 继承了语言模型的幻觉(hallucination)问题,可能生成与图像内容不符的描述
- 长视频处理能力有限:原文主要针对图像和短视频,对长视频的处理能力有待提升
- 数据偏差:训练数据来自网页抓取,可能存在各类互联网数据固有的偏见
对工程落地的启发
- Frugal AI 范式:Flamingo 证明了可以用"冻结预训练模型 + 轻量级跨模态连接"的方式快速构建多模态能力,而不需要每次都从零训练。工程实践中可以借鉴这种"组装式"思路。
- 少样本快速验证:在构建新多模态功能的 MVP 时,可以用 Flamingo 风格的架构先做少样本快速验证,再决定是否投入资源做完整微调。
- Gated fusion 的工程价值:在需要融合多个预训练子系统的场景中,tanh-gating 这类渐进式融合机制值得优先考虑,可以避免某个模态的知识破坏另一个模态的已有能力。
- 训练数据的选择:交错式多模态网页数据比精心标注的配对数据更能教会模型 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"的设计哲学。具体落地路径:
- 视觉特征提取:用 CLIP/EVA-CLIP 提取图像 embedding(冻结)
- 语言模型:用开源 LLM(Vicuna/ Llama 2,冻结或轻量微调)
- Adapter:用 BLIP-2 的 Q-Former 或 LLaVA 的 MLP projection(轻量可训练)
- 训练策略:参照 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 部署
存疑处与已知限制
- Cross-attention 插入频率:原解读"每隔 1 层是默认配置"与原文不符,消融实验(Table 3)明确每隔 4 层优于每隔 1 层(COCO CIDEr 80.6 vs 76.1),已据原文修正。
- Perceiver Resampler token 数:原解读写"约 32 个",原文(Section 3.2)描述为约 64 个 latent queries,已据原文修正。
- 模型未公开 → 数字不可独立核查:Flamingo 的所有 benchmark 数字均来自 DeepMind 内部评估,未发布模型权重意味着社区无法独立复现验证。
- Flamingo-80B vs Flamingo-9B 规模:原解读未注明,补充:Flamingo 系列包含 3B、9B、80B 三个规模,其中 80B 版本与 PaLM-540B 联合训练,效果最优。