前置知识: 多模态AI

Chameleon与早期融合Token统一模型

00:00
13 min Advanced

理解VQ-VAE图像分词器和共享词表的早期融合多模态架构

Chameleon与早期融合Token统一多模态模型

目前为止我们看到的每个VLM都将图像和文本分开。视觉token来自视觉编码器,流入投影器,然后在LLM内部与文本相遇。视觉和文本词表从不重叠。Chameleon (Meta, 2024年5月)问:如果它们重叠呢?训练一个VQ-VAE将图像转换为来自共享词表的离散token序列。每个多模态文档现在是一个序列——文本token和图像token交错,单一自回归损失。副作用:模型可以生成混合模态输出——在单次推理调用中交替文本和图像token。本课程阅读早期融合论点并端到端构建一个toy版本。

类型: 构建 语言: Python (stdlib, VQ-VAE分词器 + 交错解码器) 前置知识: Phase 12 · 05, Phase 8 (生成式AI) 时间: ~180分钟

学习目标

  • 解释为什么共享词表 + 单一损失改变了模型能做什么。
  • 描述VQ-VAE如何将图像分词为与Transformer下一token目标兼容的离散序列。
  • 说出Chameleon的训练稳定性技巧:QK-Norm、dropout放置、LayerNorm排序。
  • 比较Chameleon vs BLIP-2的Q-Former方法,描述何时各是正确选择。

问题

适配器VLM(LLaVA、BLIP-2、Qwen-VL)将文本和图像视为两种不同的东西。文本token经过embed(text_token);图像经过visual_encoder(image) → projector → ... pseudo_tokens。模型有两条在中间合并的输入路径。

三个后果:

  1. LLM只能消费图像,不能发出图像。输出仅限文本。
  2. 混合模态文档(段落和图像交替,如文章中)很别扭——你要么在模型外解析多模态输入,要么链接生成。
  3. 分布不匹配。视觉token和文本token居住在隐藏空间的不同区域,产生微妙的对齐问题。

Chameleon拒绝前提:图像只是共享词表中的离散token序列。在交错文档上训练模型,一个损失,一个自回归解码器,你免费解锁混合模态生成。

概念

VQ-VAE作为图像分词器

分词器是向量量化变分自编码器。架构:

  • 编码器:CNN + ViT将图像映射到空间特征图,比如32x32的dim 256特征。
  • 码本:学习的K个向量词汇表(Chameleon使用8192),也是dim 256。
  • 量化:对每个空间特征,通过L2距离查找最近码本条目。用整数索引替换连续特征。
  • 解码器:CNN将量化特征还原为像素。

训练:VAE重建损失 + 承诺损失 + 码本损失。码本索引形成图像的离散字母表。

对于Chameleon:一张图像变为32*32 = 1024个token,从8192的词表中抽取。与文本token(来自LLM的BPE词表,比如32000)拼接。最终词表:40192。Transformer看到一个序列,一个损失。

共享词表

Chameleon的词表结合了文本token、图像token和模态分隔符。每个token有单一ID。输入嵌入层将每个ID映射到D维隐藏向量。输出投影将隐藏映射回词表logits。Softmax选择下一个token,无论什么模态。

分隔符很重要:<image></image>标签包围图像token序列。生成时,如果模型发出<image>,下游软件知道接下来的1024个token是VQ索引,发送到解码器进行像素渲染。

混合模态生成

推理是共享词表中的下一token预测。示例prompt:“画一只猫并描述它。“Chameleon发出:

<image> 4821 1029 2891 ... (1024个图像token) </image>
The cat is orange, sitting on a windowsill...

模型自主选择顺序——它可能先产生图像再文本,先文本再图像,或交错。相同解码器,相同损失。

与生成仅限文本的适配器VLM比较。Chameleon重新打开了模型输出模态的问题。

训练稳定性 — QK-Norm、dropout、LayerNorm排序

早期融合训练在大规模时不稳定。Chameleon论文记录了三个技巧:

  • QK-Norm。在注意力内部点积之前对查询和键投影应用LayerNorm。防止深度处的logit幅度爆炸。多个2024年后大型模型使用。
  • Dropout放置。在每个残差加法后dropout,不仅在注意力和MLP后。当图像token的梯度可能主导时需要更多正则化。
  • LayerNorm排序。残差分支上的Pre-LN(标准),加上最后一个块跳跃连接上的额外LN。稳定最终层梯度流。

没有这些技巧,34B参数Chameleon训练在多个检查点处发散。有了它们,它收敛。训练方案与架构一样是贡献的一部分。

分词器的重建上限

VQ-VAE是有损的。在8192码本条目和512x512图像1024 token下,重建PSNR上限约26-28 dB。这足以生成可识别的图像,但明显差于连续空间扩散(Stable Diffusion 3达到32+ dB)。

分词器是瓶颈。更好的分词器(MAGVIT-v2、IBQ、SBER-MoVQGAN)提升上限。Emu3(课程12.12)仅通过更好的分词器就实现了SDXL质量生成。

Chameleon vs BLIP-2 / LLaVA

Chameleon(早期融合,共享词表):

  • 一个损失,一个解码器。
  • 生成混合模态输出。
  • 分词器是质量上限。
  • 昂贵:推理路径上每个生成图像需要VQ-VAE解码器。

BLIP-2 / LLaVA(晚期融合,独立塔):

  • 视觉输入,仅文本输出。
  • 重用预训练LLM。
  • 理解无分词器瓶颈。
  • 便宜:单次前向传播。

按任务选择。如果需要图像生成,Chameleon家族。如果只需要理解,适配器VLM更简单且重用更多预训练计算。

Fuyu和AnyGPT

Fuyu (Adept, 2023)是相关方法:完全跳过独立视觉编码器,将原始图像patch通过LLM的输入投影喂入,就像它们是token一样,无分词器。比Chameleon更简单,失去了共享词表输出生成。

AnyGPT (Zhan等人, 2024)将Chameleon扩展到四种模态:文本、图像、语音、音乐。每种使用相同VQ-VAE技巧,共享Transformer。任意到任意生成。课程12.16更详细地涵盖。

实践

code/main.py构建了一个toy端到端早期融合模型:

  • 一个微型VQ-VAE风格量化器,将8x8 patch映射到码本索引(K=16)。
  • 共享词表:(文本id 0..31) + (图像id 32..47) + (分隔符 48, 49)。
  • 一个toy自回归解码器(二元表),在合成标题 + 图像token序列上训练。
  • 给定prompt发出交替文本 + 图像token的采样循环。

代码故意保持Transformer微型(二元组),这样你可以端到端追踪信号流。

输出

本课程产生outputs/skill-tokenizer-vs-adapter-picker.md。给定产品规格(仅理解 vs 理解+生成、所需图像质量、成本预算),它选择Chameleon家族(早期融合)或LLaVA家族(晚期融合)并用量化经验法则论证。

练习

  1. Chameleon使用K=8192码本条目和512x512图像1024 token。估算与24位RGB图像的压缩比。是有损的吗?多损?

  2. 4K图像(3840x2160)在相同VQ-VAE密度下产生多少图像token?Chameleon风格模型能在一次推理调用中生成4K图像吗?什么先崩溃——上下文、分词器质量还是KV缓存?

  3. 用纯Python实现QK-Norm。给定64维查询和键,展示LayerNorm前后的点积。为什么在深度处幅度控制很重要?

  4. 阅读Chameleon第2.3节关于训练稳定性描述论文在没有QK-Norm的34B处观察到的确切失败模式。“范数爆炸”签名是什么?

  5. 扩展toy解码器以在给定纯文本prompt时发出混合模态响应。测量在训练数据分布60%文本优先 / 40%图像优先下模型选择图像优先vs文本优先的频率

关键术语

术语常见说法实际含义
早期融合”统一token图像从第一步就转换为共享Transformer词的离散token
VQ-VAE图像分词器”CNN + ViT + 码本,将图像映射为Transformer可以预测整数索引
共享”一个字典覆盖文本 + 图像 + 模态分隔符的token ID空间
QK-Norm注意稳定器”查询和键积前应用LayerNorm,防止范数爆炸
混合模态生成文本+图像输出”推理时在次传递中自主产生交错文本token
码本大小”K条目”VQ-VAE可以量化到的离散向量数量;权衡压缩与保真
分词器上限”重建限制解码VQ token可达到的最佳PSNR;限制模型的图像质量

延伸阅读

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式