Flamingo:面向少样本学习的视觉语言模型
Flamingo 冻结视觉编码器和语言模型,只训练中间的跨注意力桥接层,靠提示里的几个示例就能上手新的图像和视频任务,无需微调。
快速答案
Flamingo 是一个视觉语言模型,它不靠针对每个任务做微调,而是靠提示里的几个示例去上手新的图像和视频任务。单个 Flamingo 模型在多个基准上用少样本提示就刷新了当时的 SOTA,并且在许多任务上胜过那些用了上千倍标注数据做微调的模型。关键在于:把一个强视觉编码器和一个强语言模型都冻住不动,只训练连接两者的那几层。
桥接冻结的视觉模型与语言模型
Flamingo 最核心的设计,恰恰在于它「不训练」什么。视觉编码器和大语言模型都是各自预训练好、然后整体冻结的——训练全程权重不动。真正被训练的,是夹在两者之间的连接结构。
承担这个角色的有两个新部件。其一是 Perceiver Resampler:它把视觉编码器输出的、尺寸可变的特征网格压缩成数量固定的少量视觉 token,这样无论是一张高分辨率图片还是一段多帧视频,都能变成规整、统一的表示。其二是穿插进冻结语言模型里的门控跨注意力层:在这些层上,文本 token 去读取那些重采样后的视觉 token。一个可学习的门控让这些层在初始化时接近恒等映射,于是训练一开始 Flamingo 的行为就跟原始语言模型一致,视觉通路是被「逐渐引入」的,而不是一上来就扰乱骨干网络。
这一点值得多说一句,因为它正是后来整个领域反复使用的杠杆:冻住两个昂贵的预训练模型、只训练一座桥,远比端到端训练一个多模态模型省钱,而且白白继承了语言模型本身的文字流畅度。
用交错提示做少样本学习
Flamingo 的输入是一条把图像、视频帧和文本任意交错排列的序列。正是这种格式让上下文学习成为可能:你可以在提示里摆上几组「图像 + 描述」的示例,再追加一张新图,模型就会顺着这个模式继续生成——这跟文本大模型做少样本提示一模一样,只不过现在序列里掺进了像素。
它的意义在于:同一个模型既能处理开放式任务(需要自己生成答案的视觉问答、为场景或事件写描述的看图说话),也能处理封闭式任务(多选视觉问答),而无需改动任何架构,变的只是提示里的示例。这种交错格式也决定了训练数据:Flamingo 是在大规模、图文天然交错的网络语料上训练的,正是这种信号教会它去读懂一段混合的图文上下文,而不只是给一张孤立的图配字。
关键结果
单个 Flamingo 模型,仅凭少样本提示、不做任何针对单一任务的权重更新,就在一系列图像和视频基准上刷新了当时的 SOTA。在许多基准上,它胜过那些用了上千倍任务标注数据做微调的模型——这是论文最响亮、也最让该架构产生影响力的结论。
评测刻意覆盖了任务谱系的两端:开放式生成(图像与视频的问答、看图说话)和封闭式选择(多选视觉问答)。这样设计的用意在于说明,同一组冻结权重、只靠上下文示例引导,就能把这些任务全包下来。落到实处,可以这样理解:Flamingo 把「收集并标注大规模任务数据」的成本,换成了「写一段带几个示例的好提示」的成本。
局限与存疑
Flamingo 是 2022 年的成果,有几个局限是结构性的,而非偶然。少样本提示对你挑哪些示例、按什么顺序排很敏感,所以报告里的少样本数字更多反映了一个有利配置,而非稳定保证。由于两个骨干都被冻结,Flamingo 会原样继承视觉和语言预训练里的偏见、盲点和过时知识——这座桥修不了被冻住模型本身的错误。从网络抓取的交错训练数据也带着自己的偏见与有害内容包袱。和其他开放式视觉语言模型一样,它会一本正经地把错误描述讲得很自信,而这种幻觉恰恰是真正卡住落地的失败模式。视觉对齐的可靠性、幻觉控制,以及这个体量模型的推理成本,都是论文没有解决的开放问题。
常见问题
Flamingo 是什么,它能做什么?
Flamingo 是 DeepMind 的一系列视觉语言模型,输入是交错排列的图像、视频和文本,输出是文本。它靠提示里摆放的几个示例来上手新的多模态任务——看图说话、视觉问答、多选视觉问答——而不是靠针对每个任务做微调。
Flamingo 是怎么把视觉编码器和语言模型连起来的?
视觉编码器和语言模型都是预训练好并保持冻结的。Flamingo 只训练夹在中间的两个新部件:把可变视觉特征压成固定数量视觉 token 的 Perceiver Resampler,以及插入语言模型、让文本 token 能读取这些视觉 token 的门控跨注意力层。
Flamingo 对现代多模态 AI 为什么重要?
Flamingo 让后来多数视觉语言模型采用的配方流行起来:保留强大的冻结骨干,只训练一座轻量的跨模态桥,再把提示词当作任务接口。它证明了文本大模型里早已熟悉的少样本上下文学习,在图像和视频交错进序列后同样奏效。
Flamingo 处理新任务需要微调吗?
不需要。它最响亮的结论就是:单个权重冻结的 Flamingo 模型,仅用少样本提示就能在多个基准上达到 SOTA,并在许多任务上胜过用了上千倍标注数据微调的模型。你改的是提示里的示例,而不是权重。
一句话:Flamingo 留下的核心思想是,在两个冻结的大模型之间训练一座小小的桥,就能把多模态任务变成一道提示工程题。原文见 https://arxiv.org/abs/2204.14198。