# 统一多模态架构 *统一多模态架构用单一系统取代了各自为政的专家模型,这个系统能够跨越文本、图像、音频和视频进行读取、推理和生成。本文涵盖了任意到任意模型(CoDi、NExT-GPT)、原生多模态大语言模型(Gemini、GPT-4o)、多模态分词策略,以及统一化所带来的架构权衡。* ## 统一化的理由 - 想象一位会说五种语言、能在句子中间无停顿地切换语种的翻译。早期的多模态系统更像是五个坐在不同房间的翻译,每人处理一种语言,通过墙上的小缝隙传递纸条。而**统一多模态架构**就是那一位多语言者:一个共享权重的模型,在单次前向传播中即可跨文本、图像、音频、视频甚至动作进行读取、书写和推理。 - 其动机既有实用层面的也有理论层面的。在实用层面,维护每对模态的专用专家模型(文本到图像、图像到文本、音频到文本等)会导致组合爆炸:$k$ 种模态需要最多 $k(k-1)$ 个有向流水线。一个统一模型将所有这类流水线坍缩为单一系统。在理论层面,人类认知并非在隔离的模块中处理视觉和语言;跨模态绑定发生得早且深,统一化尝试模仿这一点。 - 共享权重鼓励**跨模态迁移**。一个已在文本中学到时间模式(主语在动词前、原因在结果前)的 Transformer,可以将同样的注意力电路重新用于视频中的时间模式(对象出现在移动之前)或音频中的时间模式(起音在持续之前)。这是迁移学习的多模态类比——你曾在第 7 章的语言模型微调中和第 8 章的 ImageNet 预训练中见到过。 - 形式上,令 $\mathcal{M} = \{m_1, m_2, \ldots, m_k\}$ 为一组模态。统一模型定义了一个单一参数化函数 $f_\theta$,它将任意输入模态子集映射到任意输出模态子集: $$f_\theta : \mathcal{P}(\mathcal{M}) \rightarrow \mathcal{P}(\mathcal{M})$$ - 其中 $\mathcal{P}(\mathcal{M})$ 是模态的幂集(所有子集)。关键约束是 $\theta$ 大部分是共享的;只有薄薄的模态特定适配器层有所不同。 ![高层示意图,显示多种模态(文本、图像、音频、视频)输入到单一共享 Transformer 主干中,并产生任意模态的输出](../images/unified_multimodal_overview.svg) - 统一化的前景伴随着一个基本张力:模态在结构上是不同的。文本是离散 token 的一维序列。图像是连续像素值的二维网格。音频是一维连续波形,时间尺度与文本截然不同。视频为图像添加了时间轴。将这些迥异的结构调和成单一的、Transformer 能够消化的序列,是该领域核心的工程挑战。 ## 任意到任意模型 - 想象一个通用遥控器,可以通过同一个界面操作你的电视、空调和音响系统。**任意到任意模型**就是 AI 中的等价物:它们接收任意模态组合作为输入,并产生任意组合作为输出。 - **CoDi**(Composable Diffusion,可组合扩散)通过训练模态特定的扩散模型,然后通过共享条件机制对齐它们的潜在空间来实现任意到任意生成。每种模态都有其自身的扩散过程(回顾本章文件 04 中的扩散模型),但噪声预测网络被条件化在一个联合交叉注意力层上,该层同时看到所有输入模态的嵌入。这让 CoDi 能够在单次前向传播中,例如从一个文本提示生成图像和匹配的音频。 - **NExT-GPT** 采用了不同的架构方法。它将 LLM 主干("大脑")通过轻量级的**投影层**连接到输入侧的模态特定编码器和输出侧的模态特定解码器。输入编码器(例如来自 CLIP 的图像编码器、来自 CLAP 的音频编码器)将每种模态翻译成 LLM 的嵌入空间。LLM 对组合后的 token 序列进行推理,并发出特殊的"模态信号 token"来将信息路由到适当的解码器(例如用于图像的 Stable Diffusion、用于音频的 AudioLDM)。只有投影层被训练;LLM 和专家编解码器保持冻结。 - **Gemini**(Google DeepMind)从预训练阶段起就是原生多模态的。与 NExT-GPT 的即插即用方法不同,Gemini 的 Transformer 从头开始就在文本、图像、音频和视频 token 的交错序列上进行训练。这意味着跨模态注意力模式在预训练期间有机地发展,而不是事后才拼接上去。该模型对文本使用 SentencePiece tokenizer,并学习了一种类似于本章文件 03 中讨论的 VQ 方法的视觉 tokenizer。 - **GPT-4o**("o"代表"omni",全模态)代表了另一种模式:一个端到端模型,其中所有模态共享同一个 Transformer 和同一个下一 token 预测目标。音频输入作为频谱 token 处理,图像作为块 token,文本作为子词 token,全部送入单一序列。模型生成的输出 token 由模态特定的头部解码。关键创新在于低延迟——通过消除早期系统(如 GPT-4V)所依赖的独立 ASR、LLM 和 TTS 级联而实现。 ![CoDi(对齐扩散)、NExT-GPT(以 LLM 为枢纽,带有冻结专家)和 Gemini 风格(原生交错预训练)的架构模式对比](../images/any_to_any_architectures.svg) - 这些模型处于集成深度谱系的不同位置: - **浅层集成**(NExT-GPT):冻结专家,通过训练适配器连接。构建快速,跨模态推理能力有限。 - **中层集成**(CoDi):跨模态特定生成器的共享条件化。对齐更好,仍然模块化。 - **深层集成**(Gemini、GPT-4o):在所有模态上端到端训练的单一模型。跨模态推理最丰富,训练成本最高。 ## 共享主干上的模态特定编码器和解码器 - 想象一家工厂有一条总装线(共享主干),但有不同的原料装卸码头(编码器)和不同的成品发运部门(解码器)。每个码头专精于其货物,但一旦进入工厂内部,所有东西都在同一条传送带上移动。 - 统一模型的主导架构模式采用这种三部分结构: - **模态编码器** $E_m$:将来自模态 $m$ 的原始输入转换为嵌入向量序列 $\mathbf{h}_1^m, \mathbf{h}_2^m, \ldots, \mathbf{h}_{n_m}^m$,每个向量的维度为 $d$。 - **共享 Transformer 主干** $T_\theta$:使用自注意力处理来自所有输入模态的拼接或交错嵌入。 - **模态解码器** $D_m$:将主干的输出嵌入转换回模态 $m$ 的原生格式(文本 token、图像像素、音频波形)。 - 对于文本,编码器通常是一个嵌入查找表 $E_\text{text}(w) = \mathbf{W}_e[w]$,其中 $w$ 是 token 索引,与你在第 7 章 Transformer 中看到的相同。对于图像,编码器通常是**视觉 Transformer**(ViT),它将图像分割成块并将每个块线性投影,如第 8 章所述。对于音频,编码器计算梅尔频谱图,然后用卷积前端或音频频谱图 Transformer(AST)处理,如第 9 章所述。 - 共享主干是一个标准 Transformer,对所有模态 token 进行自注意力。给定一个拼接输入序列 $\mathbf{H} = [\mathbf{h}_1^{m_1}, \ldots, \mathbf{h}_{n_1}^{m_1}, \mathbf{h}_1^{m_2}, \ldots, \mathbf{h}_{n_2}^{m_2}]$,自注意力允许每个 token 关注所有其他 token,无论其模态如何: $$\text{Attention}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{softmax}\left(\frac{\mathbf{Q}\mathbf{K}^\top}{\sqrt{d_k}}\right)\mathbf{V}$$ - 这与第 7 章中的注意力公式相同,但现在 $\mathbf{Q}$、$\mathbf{K}$ 和 $\mathbf{V}$ 包含来自多种模态的 token。图像块 token 可以关注文本 token,从而无需单独的交叉注意力模块即可实现跨模态推理。 - **模态嵌入**被添加到每个 token 上,以便主干知道 token 来自哪种模态。这类似于位置嵌入,但编码的是模态身份而非序列位置。一个可学习的向量 $\mathbf{e}_m \in \mathbb{R}^d$ 被添加到每个来自模态 $m$ 的 token 上: $$\tilde{\mathbf{h}}_i^m = \mathbf{h}_i^m + \mathbf{e}_m + \mathbf{p}_i$$ - 其中 $\mathbf{p}_i$ 是位置 $i$ 的位置嵌入。 ![编码器-主干-解码器架构,显示图像块、文本 token 和音频帧全部进入一个共享 Transformer,输出侧有模态特定的解码器](../images/shared_backbone_multimodal.svg) ## 多模态分词 - 想象你在写一封信,信中既有英文文本又有手绘草图。你可能写一个句子,画一个图表,再写一个引用该图表的句子,然后贴上一段乐谱。这封信就是一个线性流,交错着不同的"模态"。多模态分词做的正是这件事:它将文本、图像、音频和视频转换成单一的扁平 token 序列,由 Transformer 从左到右处理。 - 对于文本,分词技术已经很成熟:**字节对编码**(BPE)或 SentencePiece 产生子词 token 的词汇表,如第 7 章所述。挑战在于将这一思想扩展到连续模态。 - 对于图像,有两种主要方法。**离散**方法使用 VQ-VAE 或 VQ-GAN(详见本章文件 03)将每幅图像映射为码本索引序列。如果码本有 $|\mathcal{C}|$ 个条目且一幅图像编码为 $n$ 个码字,则该图像变为 $n$ 个离散 token,取自大小为 $|\mathcal{C}|$ 的词汇表,直接与文本词汇表兼容。**连续**方法使用 ViT 或 CNN 编码器产生 $n$ 个连续嵌入向量,然后线性投影到 Transformer 的嵌入维度中。Gemini 和 GPT-4o 使用连续方法的变体;自回归图像生成器如 Parti 和 LlamaGen 则偏好离散路线。 - 对于音频,信号通常被转换为梅尔频谱图,然后要么通过神经音频编解码器(例如 EnCodec、SoundStream,它们产生层次化的离散 token)进行离散化,要么通过学习的编码器进行连续投影。例如,AudioLM 将音频表示为来自多个码本层次的离散 token 序列,然后以自回归方式对其进行建模。 - 对于视频,分词建立在图像分词的基础上,但还必须压缩时间维度。一种常见策略使用**3D VQ-VAE**(如文件 03 中的 VideoGPT 或 Cosmos Tokenizer)将时空块量化为离散 token。时间压缩因子至关重要:未经激进的时间下采样,24 fps 的原始视频每秒产生的 token 数量太多。 - 一旦所有模态都被分词化,它们就被**交错**成单一序列,并带有标记模态边界的特殊分隔 token。一个典型格式如下: ``` [TEXT] 猫坐在垫子上 [/TEXT] [IMAGE] ... [/IMAGE] [AUDIO] ... [/AUDIO] ``` - Transformer 然后使用其标准因果(或双向)注意力机制处理整个混合序列。模态分隔 token 起到双重作用:它们向模型告知模态边界,并充当"汇聚点",其表示概括了每个模态段。 ![交错 token 序列的示意图,显示文本 token、离散图像 token 和音频编解码器 token 流经一个带有模态边界标记的单一 Transformer](../images/multimodal_tokenisation_sequence.svg) - 一个关键的设计选择是**token 预算**。一张被分词为 256 个 token 的图像加上 50 个 token 的文本描述,意味着图像消耗的上下文窗口是文本的 5 倍。模型必须在分辨率(更多 token = 更多细节)和上下文长度(更多 token = 更高的内存和计算成本)之间取得平衡。**token 合并**(逐渐合并相似 token)和**自适应分词**(对简单区域使用较少的 token,对复杂区域使用更多 token)等技术有助于管理这种权衡。 ## 训练配方:分阶段预训练与联合微调 - 你不会在教孩子算术之前就教他微积分。同样,你不能从随机初始化开始,在所有模态上同时训练一个统一多模态模型,并期望它能很好地收敛。主导方法是**分阶段训练**,其中模型在精心排序的阶段中逐步学习越来越复杂的跨模态能力。 - **阶段 1:单模态预训练。** 每个模态编码器在大型单模态数据集上独立训练。文本主干使用标准语言建模目标(下一 token 预测)在数万亿文本 token 上进行预训练,正如第 7 章一样。视觉编码器在图像分类或自监督目标(MAE、DINO)上预训练,如第 8 章所述。音频编码器在语音识别或音频分类数据上预训练,如第 9 章所述。这一阶段产生了强大的单模态特征提取器。 - **阶段 2:跨模态对齐。** 预训练的编码器连接到共享主干,模型在成对的多模态数据(图像-描述对、音频-文本对)上使用对比或生成目标进行训练。在此阶段,编码器权重可能被冻结(以保留单模态知识),仅更新投影层和主干。这是来自本章文件 01 的 CLIP 风格对齐被纳入统一模型的阶段。 - **阶段 3:联合多模态预训练。** 所有参数(或大部分)被解冻,模型在单模态和多模态数据的混合上训练,使用对所有模态 token 的单一下一 token 预测目标。损失函数为: $$\mathcal{L} = -\sum_{t=1}^{T} \log p_\theta(x_t \mid x_{