Flamingo
一、背景传统方法的问题依赖大规模预训练特定任务微调需大量标注数据、调参复杂、计算成本高。CLIP 等 Zero-shot 方法的问题虽然不用微调但只能比较图文相似度不能生成自然语言无法胜任图像描述、视觉问答等开放式任务。已有生成式视觉语言模型的问题具备生成能力但在少样本few-shot场景下效果不好。因此Flamingo 的目标就是结合两者的优点既像 CLIP 一样能快速适应新任务又像 GPT 一样能够生成自然语言回答并且只需要少量示例few-shot即可完成各种视觉语言任务。二、方法1、Flamingo 是什么一种视觉语言模型VLM。接收图片/视频与文本交错interleaved的输入输出自由形式free-form的文本。只需要给模型几个输入/输出示例few-shot Prompt就能完成各种开放式视觉语言任务。如Example 1: 图片 → 一只猫 Example 2: 图片 → 一只狗 现在图片 → ? Flamingo能直接回答不用重新训练模型。一、模型结构不是从零训练。而是利用已经训练好的视觉模型和语言模型并把它们连接起来。视觉模型Vision Model负责看图片。Image → Vision Encoder → 视觉特征语言模型Large LM负责理解文字、推理、生成回答。文字 → LLM → 回答在中间加入新的模块把它们连接起来不用重新训练整个模型。Vision Encoder已经训练好 → 中间加几个新模块 → Flamingo Language Model已经训练好保留了Vision的视觉知识和LLM 的语言知识。训练结束后对于一个新任务不用 Fine-tuning。只需要Prompt → 几个Example → 开始回答二、 跨模态桥接的两大核心组件为了实现“输入图文交错数据输出自由格式文本”的目标Flamingo 设计了两个关键的架构模块来连接视觉和语言两个预训练模型1.Perceiver Resampler (感知器重采样模块)输入任意数量的视觉feature输出64个Visual Tokens流程Vision Encoder Perceiver Resampler 图片 ---------------→ 很多视觉特征 -------------------→ 固定数量 Visual Tokens高分辨率图像1024 × 1024或长视频经过 Vision Transformer 后可能得到1000 Visual Features全部送进 LLMCross Attention 的计算量非常大。用Perceiver Resampler压缩无论图片多大、视频多长都能“outputs a fixed number of visual tokens”作用视觉编码器Vision Encoder提取出的特征无论是来自单张图像的空间特征还是视频的时空特征通常是高维且长度可变的。这个模块接收这些特征并将其“压缩”或“重采样”成固定数量Fixed number的视觉 Token64 个 Visual Tokens。意义将复杂的视觉特征标准化极大降低了后续语言模型处理视觉信息的计算复杂度。大幅降低 Vision-Text Cross Attention 的计算量能够处理不同大小的图片和不同长度的视频Perceiver 如何压缩论文借鉴Perceiver、DETR采用Learnable Latent Queries不是让所有 Feature 两两 Attention而是先定义64 个LearnableQuery然后 64 Queries → Cross Attention → 所有 Visual Features每个 Query从所有 Feature 中提取需要的信息。最终得到 64 Updated Queries 64 Visual Tokens定义收集器预先定义64 个LearnableQuery这些 Query 就像主动的“信息收集器”全局扫描64 个 Query 通过Cross-Attention全局查看并检索前面提取的所有视觉特征。动态聚焦计算过程中Query 自动学习并聚焦于画面中最关键的区域和物体。特征更新完成检索后每个 Query 吸收所需信息并更新自身的表示。这 64 个更新后的 Queries形成了送给后续 LLM 的 64 个 Visual Tokens。。2.Frozen LM with Cross-Attention (冻结的语言大模型与交叉注意力)得到的Visual Token 不是直接输入 LLM而是利用Cross Attention将其作为条件特征。结构变成Visual Tokens → Cross Attention → LLMFrozen核心机制如何看图交叉注意力层是视觉信息进入 LLM 的入口。为了让 LM 能“看”到图片在原有的LLM 层之间插入全新初始化的Cross Attention层。文本生成过程中这些新层会利用前置模块提取的视觉 Token 作为条件引导语言模型将视觉语义与文本语义对齐意义新加入的层负责利用前面提取的视觉 Token 作为Condition指导语言模型生成下一个词。冻结LLM避免在微调中破坏大模型原本积累的知识即灾难性遗忘只学如何看图如果现在生成A dogLLM 不只看前面的文字 A还会关注图片内容所以生成dog而不是其他三、 核心公式视觉条件下的自回归生成Flamingo 的核心生成概率公式本质以视觉为条件的自回归文本生成过程Visually-conditioned autoregressive text generation。Flamingo 在预测任何一个词时都会综合考虑它的所有上文信息以及出现在它之前的所有视觉画面。GPT 学的是表示预测下一个词只看前面的文字。Flamingo变成P(y∣x)表示预测第 ℓ 个词不仅要看前面的文字还要参考图片x≤ℓ 表示在当前Token之前出现过的图片和视频。如Prompt图片1 Question 图片2 Answer:生成Answer 时只能看到图片1、图片2看不到未来图片。与 GPT 的自回归autoregressive生成一致模型在生成当前位置时只利用当前位置之前已经出现的信息。四、 为何适配小样本学习 (In-context Few-shot Learning)Flamingo能够处理任意交错排布的文本和视觉序列的能力所以Prompt 可以直接写成Example1 图片 Question Answer ---------------- Example2 图片 Question Answer ---------------- Now 图片 Question Answer:模型自然就能继续生成答案。这就是In-context Few-shot Learning。这与自然语言处理中的 GPT-3 极其相似analogously to GPT-3你只需要在输入端提供几个[图像 A] [描述 A] [图像 B] [描述 B] [图像 C]的范例作为 Prompt模型就能通过计算上述联合概率分布自然而然地输出[描述 C]而不需要进行任何梯度的反向传播。3、灵感来源Flamingo 的思想来自 GPT 等大型语言模型LLM。如 GPTExample:Translate Dog → 狗 Cat → 猫 Bird → ?GPT 能根据例子继续生成Bird → 鸟。这就是In-context Learning上下文学习。Flamingo 希望把这种能力扩展到图片分类、图像描述Captioning、视觉问答VQA、视频理解第四部分Flamingo 和普通 LLM 的区别普通 LLM只能输入文字。文本 → LLM → 文本Flamingo输入可以是文字 图片 文字 视频 文字图片和文字可以任意交错interleaved。最后输出仍然是一句自然语言因此论文说是visually-conditioned autoregressive text generation model在图片条件下进行自回归文本生成。论文贡献Contributions作者最后总结了三点贡献。1.提出 Flamingo。特点一个模型完成很多任务输入可以是图片、视频和文字混合输出自然语言只需要 Few-shot Prompt2.全面评测 Few-shot 能力没有只挑几个任务而是在很多 Benchmark 上测试。并且故意保留一批测试集避免模型针对测试集调参数保证实验公平。3.实验结果在16 个任务上测试全部达到当时 Few-shot 最优6 个任务超过 Fine-tuning 方法每个任务只用32 个示例相比传统方法约少1000 倍任务数据。如果允许 Fine-tuningFlamingo 还能继续刷新 SOTA。整页总结这一页介绍了Flamingo 的整体工作流程可以概括为下面这张流程图图片 / 视频 ▼ Vision Encoder预训练 │ 提取大量视觉特征 ▼ Perceiver Resampler 压缩成固定数量 Visual Tokens、 ▼ Cross Attention 把视觉信息注入冻结的语言模型 ▼ Frozen Large Language Model 像 GPT 一样逐词生成文本 ▼ 输出自然语言回答整个模型仍然遵循GPT 的自回归生成方式一次预测一个词只不过在预测每个词时不仅利用前面的文本还利用此前出现的图片或视频信息。因此Flamingo 可以直接接受图文交错的 Prompt从而像 GPT-3 一样通过少量示例few-shot完成图像描述、视觉问答、分类等多种视觉语言任务而无需针对每个任务重新微调模型。这一节实际上可以分成两个部分Vision Encoder从像素Pixels提取视觉特征FeaturesPerceiver Resampler将大量视觉特征压缩成固定数量的 Visual Tokens2.1 Visual Processing整个视觉处理流程如下Image / Video ▼ Vision EncoderNFNet ▼ 大量 Visual Features ▼ Perceiver Resampler ▼ 64 Visual Tokens ▼ Cross Attention ▼ Frozen LLM整个过程可以理解为图片 → 特征 → 压缩 → LLM 可以理解的 Visual TokensVision Encoder采用Frozen PretrainedNFNetNormalizer-Free ResNetF6不需要重新学习如何看图片直接利用 NFNet 提取视觉特征。如何训练没有直接使用 ImageNet 训练好的 NFNet重新用 Contrastive Learning对比学习预训练。让正确的图文对距离更近错误配对距离更远让Vision Encoder学习图片和文字间的对应关系。图片如何表示Vision Encoder 输出二维 Feature Map后Flatten为一维 Feature SequenceFeature Map □ □ □ □ Image -----→ □ □ □ □ -----→ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □方便送入 Transformer。视频如何处理视频比图片多一个时间维度Temporal Dimension1、抽帧每秒采样一帧。2、每帧单独编码 Frame → Vision Encoder独立计算 Feature。得到Frame1 Features Frame2 Features Frame3 Features3、加入时间信息因为Vision Encoder 不知道帧的先后顺序所以加入Temporal Embedding时间位置编码不是concat而是相加。设 Vision Encoder 输出每个位置的 Feature 是一个 4 维向量Frame 3 □1 [1.2, 0.8, -0.5, 2.1] □2 [0.3, 1.7, 0.6, 0.9] □3 ... □4 ...Frame 3 对应的 Temporal Embedding也是 4 维E3 [0.2, -0.1, 0.5, 0.7]其所有位置都会加上同一个时间编码即这里的 Position在 Flamingo 中就是 Temporal Embedding不是一种需要单独解析的数据而是让同一个内容在不同位置拥有不同的表示。例如dog出现在第 1 帧和dog出现在第 10 帧。虽然内容相同但它们对应的输入向量不同模型可以学习到它们在不同时间下的不同含义。所以Transformer 学习的不是先提取内容再提取时间而是直接学习融合后的向量代表什么语义。4、Flatten得到3D 时空 Feature Grid后继续展开Time → Space → Sequence送入下一步。本节总结Vision Encoder使用预训练、冻结的 NFNet-F6提取视觉特征。采用Contrastive Learning类似 CLIP预训练使视觉特征与文本语义对齐。图片输出二维 Feature Map视频按1 FPS抽帧加入Temporal Embedding后统一展开为一维 Feature Sequence。Text GenerationFlamingo 的文本生成仍然采用Transformer DecoderLLM即与 GPT 相同的自回归生成方式。不同的是语言模型在生成文本时不仅依赖前文文本还以 Perceiver Resampler 输出的 Visual Tokens 作为条件condition因此能够根据图片或视频内容生成回答。为了融合视觉信息Flamingo 冻结语言模型层在之间插入新训练的模块。这些新增模块通过Cross Attention读取 Visual Tokens实现视觉信息与语言表示的融合。论文进一步将这些新增模块具体设计为GATED XATTN-DENSE Blocks通过 Gate 保证训练初期模型行为与原始 LLM 保持一致从而提高训练稳定性。2.2 Interleaving new GATED XATTN-DENSE layers within a frozen pretrained LM1. 基本思想Flamingo冻结所有预训练 LLM 的参数在 LLM 的部分 Transformer 层之间插入新的GATED XATTN-DENSE模块只训练新增模块。整体结构可以表示为Pretrained LM Layer 1 ▼ GATED XATTN-DENSE ▼ Pretrained LM Layer 2 ▼ GATED XATTN-DENSE ▼ ...使Flamingo 保留原有 LLM 的语言能力仅学习如何利用视觉信息。2. GATED XATTN-DENSE 是什么GATED XATTN-DENSE Block由两部分组成Cross AttentionXATTN让语言模型读取 Visual Tokens将视觉信息融合到文本表示中。DenseFeed Forward对融合后的特征进一步进行非线性变换。因此一个模块可以理解为Visual Tokens → Cross Attention → Feed Forward (Dense) → 输出新的文本表示3. 为什么加入 Gate使用tanh Gate保证训练更加稳定。新增模块的输出不会直接加入模型而是其中α 是一个初始值为0的 Learnable标量每一层都有自己的 αα0tanh(0)0所以新增模块输出 × 0 0整个模型变成Original LLM → Original Output模型刚开始训练时与原来的语言模型完全一致不会因为加入新的视觉模块破坏 LLM 原有能力。4. 为什么这样设计论文给出了两个原因1提高训练稳定性Training Stability如果新增模块一开始影响很大模型容易训练不稳定。而使用 Gate 后初始Gate0新增模块不起作用保持原始LLM输出随后训练过程中 Gate0 → 0.2 → 0.5 → 0.8模型会逐渐学习使用视觉信息。这种渐进式引入视觉信息的方式能够保留 LLM 已有知识更容易学习视觉与语言之间的对应关系最终获得更好的性能。7. 不同规模模型有什么变化不同规模的模型Flamingo-3B、Flamingo-9B、Flamingo-80B增大的只有语言模型部分。随着模型规模增加Frozen LLM 和 新增的 GATED XATTN-DENSE 模块也相应增大。但Vision Encoder冻结、Perceiver Resampler可训练保持不变。即Flamingo-3B Flamingo-9B Flamingo-80B │ │ │ Vision Encoder 相同冻结 相同冻结 相同冻结 Perceiver 相同大小 相同大小 相同大小 Cross Attention 小 中 大 LLM 1.4B冻结 7B冻结 70B冻结论文中的三种 Flamingo 并不是一个模型在训练时逐渐变大而是分别以不同规模的 Chinchilla 语言模型为底座构建了三个独立的 Flamingo 模型并且每个模型内部的 LLM 都是冻结的。因为模型性能的提升主要来自更强的语言模型能力而不是不断扩大视觉编码器视觉部分保持固定即可。本节总结GATED XATTN-DENSE 的核心思想冻结预训练 LLM避免破坏已有语言知识。在 LLM 层之间插入GATED XATTN-DENSE模块使语言模型能够读取视觉信息。使用tanh Gate控制新增模块的影响初始时 Gate 0模型行为与原始 LLM 完全一致随着训练进行Gate 自动学习增加视觉信息的作用。这种设计提高了训练稳定性和最终性能。2.3 Multi-visual input support: Per-image/Video Attention Masking1. 要解决的问题Flamingo 支持这种输入Image1 Question1 Answer1 Image2 Question2 Answer2 Image3 Question3 Answer3或者 Few-shot PromptImage1 Caption1 Image2 Caption2 Image3 Caption3 New Image Caption:那么当模型生成新的Caption3时应该看哪些image2. 论文的方法Per-image Attention Mask论文提出每一段文本只允许直接关注它前面的那一张图片。如上一个例子中生成 Caption 时Cross AttentionCaption → New Image而不是Caption → Image1 Image2 Image3 New Image每一段 Caption只连接最近的图片。3. 什么叫 Attention Mask论文说masking the full text-to-image cross-attention matrix这里的 Mask就是限制哪些 Cross Attention 可以计算。如Cross Attention MatrixImage1 Image2 Image3 Caption1 ✓ ✗ ✗ Caption2 ✗ ✓ ✗ Caption3 ✗ ✗ ✓只有对应图片可以 Attention其它全部 Mask 掉所以Caption3不能直接读取Image1、Image2。4. 为什么叫 Image-Causal论文说The image-causal modelling introduced in Equation (1)为什么叫Image-Causal因为和 GPT 一样都不能看未来。例如Image1 Caption1 Image2 Caption2生成 Caption1 只能看 Image1不能提前看 Image2满足Causal。5. 那以前图片的信息不会丢吗论文说Though the model only directly attends to a single image at a time, the dependency on all previous images remains via self-attention in the LM.很多人第一次看到都会疑惑。为什么不能看Image1。却还能利用Image1其实依赖的是LM 自己。如输入Image1 Caption1 Image2 Caption2 Image3 Caption3生成Caption3时Cross Attention只能看 Image3但是Caption3还能看到Caption1、Caption2因为 LLM 有Self-Attention而Caption1已经包含Image1的信息Image1的信息已经变成文本 Hidden State。所以整个 LM仍然知道Image1、Image2发生了什么。图片信息会沿着LM Hidden State一直传播。如果允许所有图片一起 Cross Attention如训练5 Images ↓ 320 Tokens测试32 Images ↓ 2048 Tokens模型没有见过2048 个 Token。泛化能力变差。而Flamingo永远64 Tokens因此训练 5 Images测试32 Images都没有问题。7. 为什么比看所有图片更好1计算效率高Cross Attention复杂度随Visual Token数量增加。Flamingo固定64 Tokens速度快。2更容易泛化如果训练 5 Images模型学到最多320 Tokens测试突然32 Images → 2048 TokensAttention分布完全不同性能下降。Flamingo没有这个问题。本节总结Per-image/Video Attention MaskingFlamingo 为每一段文本设置Per-image Attention Mask规定文本只能通过 Cross Attention 读取紧邻前面的图片或视频的 Visual Tokens而不能直接读取更早出现的图片。例如Image1 → Caption1 Image2 → Caption2 Image3 → Caption3生成Caption3时仅与Image3建立 Cross Attention而Image1和Image2的信息并不会丢失因为它们已经在生成Caption1和Caption2时融合进语言模型的隐藏状态随后通过LLM 的 Self-Attention继续传递。这种设计有三个优点满足因果性Image-Causal文本只能利用当前及之前的信息不能访问未来图片。计算成本固定每次 Cross Attention 只处理一张图片对应的64 个 Visual Tokens不会随着图片数量增加而增长。具有良好的泛化能力训练时即使最多只见过5 张图片的输入序列测试时仍然能够处理32 个 Image–Text 示例32-shot因为每次处理的视觉输入规模始终保持不变。2.4 Training on a mixture of vision and language datasets总体思路Flamingo不依赖人工标注的数据用从网页收集的大规模多模态数据训练。训练数据主要包括M3WMultiModal MassiveWeb图文交错Interleaved的网页数据Image-Text Pairs图片-文本对Video-Text Pairs视频-文本对1. M3WMultiModal MassiveWeb图文交错数据来源从约4300 万个网页HTML中提取文本、图片、图片在网页中的位置利用 HTML 的DOMDocument Object Model保留图片与文本的相对顺序。如网页转换为训练样本特殊 Token为了让模型知道图片的位置加入两个特殊标记image表示图片位置EOCEnd Of Chunk表示一个图文块结束。例如文本1 image EOC 文本2 EOC数据采样每个训练样本最多256 个文本 Token最多保留5 张图片超出的图片直接丢弃减少计算量。2. Image / Video - Text Pairs除了网页数据作者还使用传统的图文对和视频文本对数据。包括ALIGN18 亿图文对Image-Text PairLTIP3.12 亿高质量长文本图文对VTP2700 万视频-文本对。也将这些数据转换成统一格式便于统一训练。image 图片描述 EOC3. Multi-objective Training由于训练使用多个数据集因此采用联合训练Multi-objective Training。训练目标最小化所有数据集损失的加权和。没有采用轮流训练Round-robin的方式而是同时累积Accumulate所有数据集的梯度再统一更新参数。本节总结训练数据Flamingo 使用三类网页数据进行训练M3W网页中的图文交错数据是 Few-shot 能力的关键来源Image-Text Pairs大量图片与文本配对数据ALIGN、LTIPVideo-Text Pairs视频与文本配对数据VTP。所有数据都统一转换为包含image和EOC标记的格式使模型学习处理交错的图文输入。训练策略采用多数据集联合训练Multi-objective Training分别计算各数据集的语言建模损失并按权重加权求和作为最终优化目标。相比轮流训练不同数据集累积所有数据集梯度再统一更新能够获得更好的训练效果。2.5 Task adaptation with few-shot in-context learning1. 基本思想模型训练完成后不需要再进行 Fine-tuning而是通过In-context Learning上下文学习来完成新任务。做法与GPT-3类似在输入中给几个任务示例Prompt模型根据这些示例完成新的测试样本。2. 如何构造 PromptFlamingo 的 Prompt 是**多模态交错Multimodal Interleaved Prompt**的。或者对于视频模型根据前面的示例推断当前任务生成答案。3. Open-ended Evaluation开放式任务对于开放式任务如Image Captioning 和 Visual Question Answering模型需要自由生成文本。论文采用Beam Search选生成的句子中概率最大的 解码以获得质量更高的生成结果。如Image Question:What is the animal doing? ↓ The dog is running in the grass.4. Close-ended Evaluation封闭式任务对于选择题等封闭任务不需要生成文本而是计算每个候选答案的 Log-Likelihood。如Question:What color is the car? A. Red B. Blue C. Green模型分别计算P(Red)、P(Blue)、P(Green)选概率最大的答案作为最终预测。5. Zero-shot Generalization零样本泛化论文还测试了模型的 Zero-shot 能力。不是完全不给 Prompt而是只提供两个文本示例不提供对应图片。如Question:What is in the image? Answer:A dog. Question:What is in the image? Answer:A cat. Query Image Question:What is in the image? Answer:模型仍然需要根据图片完成回答。目的是测试没有视觉示例时模型是否仍能理解任务并完成推理。本节总结训练完成后Flamingo无需针对新任务进行 Fine-tuning而是采用Few-shot In-context Learning。模型输入由多个(Image/Video, Text)示例和一个待预测样本组成通过示例理解任务再对查询样本生成答案。针对不同任务论文采用两种评估方式开放式任务Open-ended使用Beam Search自由生成文本如图像描述和视觉问答。封闭式任务Close-ended计算每个候选答案的Log-Likelihood选择概率最高的答案。此外论文还评估了Zero-shot Generalization仅提供少量文本示例而不提供对应图片测试模型在没有视觉示例辅助时的泛化能力。