1. 背景
1.1 问题与挑战
- 少样本/零样本学习能力的缺失:现有的主流方法是“预训练+微调”范式,但成功微调通常需要成千上万、高成本的标注数据。如何构建能仅用几个(few-shot)甚至零个(zero-shot)标注示例就适应新任务的模型,是一个巨大的开放性挑战。
- 现有零样本模型的能力与灵活性有限:虽然对比学习模型(如CLIP)实现了零样本迁移,但它们只能输出一个图像-文本之间的相似度分数。这种能力受限于有限的用例,比如只能进行分类(在给定的一组选项中选择)。它们关键性地缺乏语言生成能力,无法处理开放式的、需要创造性和推理的任务,如描述一个场景或回答一个无法穷举所有答案的视觉问题。
- 多模态输入的处理瓶颈:大多数视觉语言模型要么需要为每个任务专门设计架构,要么对输入模态有严格要求。论文希望突破这一限制,实现一个能够处理任意交错(arbitrarily interleaved)的文、图、视频序列的通用模型,这为模拟真实世界信息(如网页)和实现复杂多轮对话奠定了基础。
总结挑战的本质:构建一个能够像人类一样,仅通过观察几个例子,并结合强大的先验知识(语言理解和世界知识),就能快速、灵活地解决全新的、开放式的视觉-语言任务的智能体。
1.2 Flamingo 模型
为应对上述挑战,Flamingo 提出了一个系统性的解决方案:
- 核心策略:借鉴大语言模型的少样本范式。
- 受到GPT-3在纯文本领域惊人少样本能力的启发,Flamingo 将其核心范式引入到多模态领域。它将所有的视觉任务(分类、描述、问答等)统一重构为“文本预测”问题。
- 模型不再进行微调,而是通过提供一个多模态提示(Multimodal Prompt)来工作:将任务相关的“图像-文本”示例(input/output pairs)放在前面,后跟待查询的图像,然后让模型生成续写文本作为答案。
- 独特的架构设计以桥接模态并保证稳定:
- 冻结主干:采用一个冻结(frozen)且预先训练好的大规模语言模型(LM)和一个冻结的视觉编码器作为核心,以最大限度地保留它们强大的先验知识。
- 门控注入(GATED XATTN-DENSE):在冻结的LM层之间插入新的可学习模块。最关键的创新是使用 tanh门控机制,并在初始化时将门控参数设为0。
- 门控的作用:这确保了在训练开始时,新注入的模块完全无效,模型的输出与原始的、未受视觉影响的纯语言模型完全一致。这解决了模型“灾难性遗忘”的问题,在引入新能力的同时稳定地保留了旧能力。
- 处理任意交错多模态数据的机制:
- Perceiver Resampler:为解决视觉特征维度巨大且可变的问题,使用一个称为Perceiver Resampler的模块,将任意尺寸的图像/视频特征“压缩”为固定数量的视觉Token,大大降低了计算成本。
- 每图像注意力掩码:设计了一种注意力机制,使得在生成某个文本Token时,模型只关注在该文本之前最新出现的那个图像。这确保了模型可以处理超长的、包含多个图像的序列,即使训练时并未见过如此多的图像。
- 决定性的训练数据策略:
- 在包含文本和图像任意交错的原始网页数据(M3W数据集)上进行训练,是赋予模型少样本学习能力的关键。这使得模型在训练过程中就“见过”如何根据前面的图文示例来预测后续文本,从而掌握了少样本学习的“元能力”。
总结解决方案的本质:Flamingo 通过“冻结强大主干 + 门控插入轻量适配层 + 在海量图文交错原始数据上训练”的路线,创造了一个通用的、灵活的视觉语言接口,从而实现了无需微调的、强大的少样本推理能力。
- 模型架构
=======
2.1 Vision Encoder
2.1.1. 功能
从像素到特征,它的任务是接收原始的视觉输入(图像的像素或视频的帧),并从中提取出高级、有意义的特征(比如物体的轮廓、纹理、颜色等)。
2.1.2. 模型的选择与策略
- 使用预训练并冻结的 NFNet
- 模型选择:作者选用了一个名为NFNet-F6的强大视觉模型作为编码器。
- 预训练 (Pretrained):这个视觉编码器不是从零开始训练的,而是已经在一个非常大的图文数据集上预先训练好了。
- 训练方法:预训练时使用了对比学习(contrastive objective)的方法,这与著名的 CLIP 模型所用的方法类似。它通过学习将匹配的“图像-文本”对在特征空间中拉近,将不匹配的推远,从而让模型学会丰富的视觉概念。
- 冻结 (Frozen):在训练 Flamingo 主体模型时,这个视觉编码器的所有参数都被“冻结”,不会进行更新。这是一个关键策略,目的是为了完整保留它强大的、通用的视觉识别能力,避免在训练新任务时被破坏。
2.1.3. 处理图像的方式
- 对于单张图像,编码器会输出一个 2D 的特征网格(可以理解为一张浓缩了图像信息的特征图)。
- 然后,这个 2D 网格会被“展平”(flatten)成一个 1D 的特征序列,以便后续模块处理。
2.1.4. 处理视频的方式
- 对于视频,模型会以 每秒1帧(1 FPS)的速率进行采样。
- 每一帧都被独立地送入视觉编码器,得到一个包含空间和时间信息的三维特征网格。
- 为了让模型理解帧的顺序,会给每一帧的特征加入一个学习到的时间嵌入(temporal embeddings),相当于给每一帧打上时间戳。
- 最后,这个带有时间戳的特征序列同样会被展平成 1D 序列,然后被送入下一个模块——感知器重采样器 (Perceiver Resampler)。
2.2 Perceiver Resampler
它的核心思想可以概括为:一个高效的信息压缩器和转换器。
Perceiver Resampler伪代码:
核心功能:从海量特征到少量令牌
- 它的主要任务是接收来自视觉编码器的大量的、尺寸不定的视觉特征(比如一张高分辨率图片可能会产生几千个特征),然后将其巧妙地压缩并转换成一个数量固定的、少量的“视觉令牌”(在论文中是 64 个)。
- 这就好比是将一篇万字长文,精准地提炼成几个关键的要点。
在架构中的角色:连接视觉与语言的桥梁
- 这个模块扮演着至关重要的桥梁角色,它位于视觉编码器(眼睛)和冻结的语言模型(大脑)之间,负责数据的传递和转换。
解决的核心问题:降低计算复杂度
- 如果直接将视觉编码器产生的成千上万个特征全部输入给语言模型进行“跨注意力”计算,那计算量将是灾难性的,模型会变得非常缓慢且难以训练。
- 通过将特征数量从“可变的、大量的”减少到“固定的、少量的(64个)”,极大地降低了后续视觉-文本融合步骤的计算成本,这是整个 Flamingo 模型能够高效运行的关键。
工作原理:借鉴 Perceiver 和 DETR 的思想
- 它不是简单地丢弃信息,而是通过一种更智能的方式进行压缩。
- 它会学习一些预设的“潜在查询”(latent queries)。你可以把这些查询想象成是模型自己学会的、针对视觉特征的“问题”,比如“这张图里最重要的物体是什么?”、“关键的背景信息是什么?”等等。
- 然后,它用这些固定的“问题”(queries)去“询问”海量的视觉特征,通过跨注意力(cross-attend)机制得到“答案”,这些“答案”就构成了最终那 64 个高度浓缩的视觉令牌。
2.3 基于视觉表征对冻结的语言模型进行条件化训练
- 基本原理:文本生成是由一个 Transformer 解码器(即语言模型)完成的,但它的生成过程受到了视觉信息的引导和制约。
- 核心架构创新:作者没有从零训练,而是采用一种“手术式”的方法——将一个强大的、冻结的(frozen) 语言模型与一些新加入的、可训练的层交错融合在一起。
- 关键技术细节:为了保证训练稳定,引入了一个精巧的“门控(Gated)”机制,让视觉信息在训练初期被“关闭”,然后逐渐“开启”。
- 模型的可扩展性:这个架构是一个通用的“配方”,可以应用于不同规模的模型,作者基于此构建了 Flamingo 系列的三个不同大小的模型。
2.3.1. 文本生成的基本机制:视觉条件下的语言生成
Flamingo 的文本输出功能,本质上是由一个强大的语言模型(在这里是 Transformer 解码器)来执行的。
但它不是凭空想象,而是“以视觉表征为条件”(conditioned on the visual representations)。这意味着,由 Perceiver Resampler 模块处理好的那 64 个视觉令牌,会全程引导和影响语言模型,确保它生成的文本与眼前的图像或视频是相关的。
2.3.2. 核心架构创新:“冻结-插入”策略
这是 Flamingo 最核心的架构设计。作者没有重新训练整个模型,而是:
- 冻结(Freeze):他们拿来一个非常强大的预训练语言模型(如 Chinchilla),并将其所有原始层的参数都冻结起来,这意味着这些参数在 Flamingo 的训练中不会被更新。这完整地保留了语言模型已有的强大推理和语言能力。
- 插入(Interleave):他们设计了一些全新的、从零开始训练的层,称为GATED XATTN-DENSE(门控跨注意力密集层)。然后,像做三明治一样,将这些新层插入到被冻结的语言模型的原始层之间。
- 功能:这些新插入的层专门负责一个任务——跨注意力(cross-attend),即让文本信息去“关注”和“读取”视觉令牌中的信息。
2.3.3. 关键技术细节:门控(Gating)机制保证稳定性
这是一个非常精妙的设计,解决了训练稳定性的难题。如果直接将随机初始化的新层插入一个强大的模型中,很可能会在训练初期就破坏其原有的结构,导致性能崩溃。
- 工作原理:每个新插入层的输出,都会被乘以一个由 tanh(α) 控制的“门”。这里的 α 是一个可学习的参数,但它的初始值被设定为 0。
- 效果:因为 tanh(0) = 0,所以在训练刚开始时,所有新插入层的输出都为零。这意味着,在训练的第0步,整个 Flamingo 模型等同于那个原始的、未被改动的、强大的冻结语言模型。
- 好处:这极大地提升了训练的稳定性和最终性能。随着训练的进行,模型会慢慢学会将 α 的值调整变大,从而逐渐“打开阀门”,让视觉信息平滑地流入并影响文本生成。
2.3.4. 模型家族与可扩展性
作者证明了这种“冻结-插入”的架构是一种可扩展的成功范式。
- 他们基于不同参数规模的 Chinchilla 语言模型(1.4B, 7B, 70B),构建了三个版本的 Flamingo,分别命名为 Flamingo-3B, Flamingo-9B 和 Flamingo-80B。
- 尽管语言模型(大脑)的规模在不断变大,但视觉编码器(眼睛)和 Perceiver Resampler(桥梁)的尺寸保持不变。这是一种高效且务实的扩展方式。
2.4 详解GATED XATTN-DENSE
GATE XATTN-DENSE伪代码
现在我们来拆解这个名字的三个部分:GATED、XATTN 和 DENSE。
2.4.1. XATTN (Cross-Attention - 跨注意力)
这是该层的核心功能:融合两种不同的信息源。
- 信息源:
- 源1 (语言):来自上一个冻结的语言模型层的文本表示(Text Representation)。
- 源2 (视觉):来自 Perceiver Resampler 的、固定的 64 个视觉令牌(Visual Tokens)。
- 工作原理 (Query-Key-Value 机制):
- 查询 (Query, Q):由语言信息生成。你可以把它理解为语言模型在“提问”。 例如,当语言模型处理到文本“一只猫正坐在…”时,它会生成一个查询,这个查询的含义近似于:“根据我当前的文本上下文,我需要什么样的视觉信息来帮助我预测下一个词?是关于‘坐姿’的还是关于‘坐垫’的?”
- 键 (Key, K) 和 值 (Value, V):都由视觉令牌生成。你可以把它们理解为视觉信息提供的“信息索引”和“信息内容”。模型会用语言的“查询(Q)”去和所有视觉令牌的“键(K)”进行匹配,看哪个视觉令牌与当前的问题最相关。一旦找到最相关的令牌,就取出其对应的“值(V)”,也就是具体的视觉内容。 通过这个过程,语言模型在每一步都能动态地、有选择性地从视觉信息中提取最相关的内容来辅助自己。
2.4.2. DENSE (密集层)
这指的是一个标准的前馈神经网络 (Feed-Forward Network, FFN),也叫密集连接层或 MLP。它是任何 Transformer 模块的标准配置。
- 作用:在跨注意力步骤完成之后,融合了视觉信息的新文本表示会被送入这个 DENSE 层进行进一步的非线性计算和信息提炼。这可以增强模型的表达能力,让它对融合后的信息进行更深层次的理解。
2.4.3. GATED (门控)
这是 Flamingo 的点睛之笔,是其训练能够稳定且高效的关键。它的设计初衷是为了解决一个棘手的问题:如何在一个训练得非常好的、冻结的模型中插入新的、随机初始化的层,而不破坏原有模型的性能?
- 问题:直接插入随机层,就像给一台精密运转的瑞士手表里塞进一个随机制造的零件,很可能会在训练初期就导致整个系统崩溃,这种现象也称为“灾难性遗忘”或训练不稳定。
- 解决方案:门控机制
- 作者为新加入的跨注意力层和密集层的输出都设置了一个“门”。
- 这个“门”由公式 tanh(α) 控制,其中 α 是一个可学习的参数,但它的初始值被设定为 0。
- 效果:
- 在训练开始时:由于 α = 0,所以 tanh(0) = 0。这意味着新层的输出在乘以 0 之后,完全为零。因此,在训练的第一步,所有新插入的 GATED XATTN-DENSE 层的输出都为 0,对原始语言模型没有任何影响。此时,Flamingo 模型等价于那个强大的、冻结的 Chinchilla 语言模型。
- 在训练过程中:模型通过反向传播,会逐渐学习调整 α 的值。如果视觉信息对某个任务有用,α 的值就会慢慢变大,tanh(α) 的输出也会从 0 逐渐趋向于 1 或 -1,从而像调音台的推子一样,平滑地、逐渐地将视觉信息“混音”到文本流中。
通过这种巧妙的“冻结-插入-门控”设计,Flamingo 成功地在不破坏已有强大模型能力的前提下,稳定、高效地实现了视觉与语言的深度融合。
3. 训练
三种数据集的混合训练
Flamingo 的训练数据全部来自网络,主要分为三大类:
- 图文交错数据集 (Interleaved image and text dataset):来源于网页。
- 图文对 (Image-text pairs)。
- 视频文本对 (Video-text pairs)。
其中图文交杂数据是Flamingo数据的重点,其多模态in-context learning(few-shot learning)的能力可以说主要就是来自图文交杂数据。作者收集了一个大规模图文交杂数据集M3W,通过解析HTML获取并标记图片在文本中的位置。
Flamingo的训练还有一个关键点,是如何处理图文交杂数据。首先每张图片的特征用vision encoder + resampler处理得到固定长度的token序列,在文本序列中用这个tag来标记出图像的位置。值得一提的是,每个文本token只会attend到之前最近的一张图片,而不是所有之前的图片,之前的其他图片会被mask掉。## 如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。