云镜收藏

稍后阅读

清单保存在当前浏览器,方便下次回来继续阅读。

清单还是空的

在笔记卡片或正文页点击“加入稍后阅读”即可收藏。

卷3 · 多模态理解 VLM

3.4 视觉 Tokenizer:VQ-VAE 与 VQGAN——离散化是生成路线的地基

约 6 分钟阅读
全书目录

展开本章目录与同卷章节1. 为什么要把图像离散化2. VQ-VAE:编码 → 查表 → 解码3. Codebook 坍塌与两个工程解法4. VQGAN:把”糊”治好——感知损失 + 对抗训练5. Tokenizer 是生成质量的天花板(本卷最重要的洞察)6. 自测题7. 动手作业8. 延伸资源同卷章节3.1 多模态总览:把视觉接进语言模型的三条路线3.2 LLaVA 范式精读与复现:两阶段训练全流程3.3 Connector 设计空间:Flamingo、BLIP-2 与开源双雄的答案3.4 视觉 Tokenizer:VQ-VAE 与 VQGAN——离散化是生成路线的地基3.5 开源双雄精读:Qwen-VL 与 InternVL 系列技术报告3.6 文档理解与 OCR-free:让 VLM 读懂 PDF3.7 多模态评测体系与陷阱3.8 数据为中心的 VLM:具体案例研读

本章目标:理解”把图像变成离散 token”的全套技术——它是自回归生成图像(卷4.8 统一模型)和离散扩散的前提。学完标准:能手推 VQ-VAE 的 loss 和直通估计器,能解释 codebook 坍塌及现代解法,明白”tokenizer 质量封顶生成质量”这句话。

1. 为什么要把图像离散化

LLM 的成功配方是”离散 token 上的 next-token 预测”。想让同一个 Transformer 直接生成图像(统一模型的核心梦想,卷4.8),最顺的路是:先学一个”图像的 tokenizer”,把 256×256 图变成 256 个离散 token,图像就成了一种”外语”——和文本用同一词表、同一训练目标。这就是 Chameleon/Emu3 路线的前置条件。连续生成路线(扩散)不需要它,但离散路线离不开它。

2. VQ-VAE:编码 → 查表 → 解码

三段式(van den Oord et al., 2017):

  1. 编码器 EE:图像 → 连续特征图(如 256×256×3 → 32×32×d 的网格);
  2. 量化:网格上每个位置在码本(codebook,K 个可学习向量,如 8192 个)里找最近邻,用码本向量替换——图像从此变成 32×32=1024 个码本索引(离散 token!);
  3. 解码器 DD:量化后的特征 → 重建图像。

zq=ek,k=arg⁡min⁡j∥ze−ej∥2z_q = e_k,\quad k = \arg\min_j \| z_e - e_j \|_2

Loss 三件套:

L=∥x−x^∥2⏟重建+∥sg[ze]−ek∥2⏟码本学习(拉码本向编码器)+β∥ze−sg[ek]∥2⏟commitment(拉编码器向码本)L = \underbrace{\| x - \hat{x} \|^2}_{\text{重建}} + \underbrace{\| \text{sg}[z_e] - e_k \|^2}_{\text{码本学习(拉码本向编码器)}} + \beta \underbrace{\| z_e - \text{sg}[e_k] \|^2}_{\text{commitment(拉编码器向码本)}}

  • sg 是 stop-gradient:码本项只训码本,commitment 项只训编码器——两边互相靠近但各管各的(β\beta 常取 0.25);
  • 直通估计器(straight-through estimator):最近邻查表不可导,前向用 zqz_q、反向时把梯度原样抄给 zez_e(x^=D(ze+sg[zq−ze])\hat{x} = D(z_e + \text{sg}[z_q - z_e]))。这是量化层可训练的唯一魔法——和 0.3 章手写的 backward 分摊是同一个思想的应用:梯度走不通就修一条近似的路。

3. Codebook 坍塌与两个工程解法

问题:K 个码本向量只有少数被用到(编码器只偏爱几个近邻),其余”饿死”——词表利用率低,等效词表缩水。解法:

  1. EMA 更新码本(VQ-VAE-2 标准):码本不参与梯度,直接向被分配到的编码器输出做指数滑动平均(0.4 章 EMA 的又一处出现);
  2. 死码重启:长期没被使用的码本向量重新随机初始化到当前 batch 的编码输出附近。

另外先验学习的分工要清楚:VQ-VAE 本身只学”重建”,token 的先验分布(哪种 token 序列像真图)交给下游模型学——原版用 PixelCNN,现代统一模型直接用大 Transformer(这正是”tokenizer + LM”解耦的架构意义:tokenizer 换得,LM 不用动)。

4. VQGAN:把”糊”治好——感知损失 + 对抗训练

VQ-VAE 重建偏糊(MSE 倾向平均脸)。VQGAN(2021)加两味药:

  • 感知损失(perceptual/LPIPS):在 VGG 特征空间算距离——惩罚”像素对但看起来不对”;
  • Patch 判别器:GAN 的判别器只看局部 patch,逼重建具备真实纹理。

结果:重建从”模糊蒙版”变”照片级”,离散 token 才有资格承载生成任务。此后谱系:ViT-VQGAN(Transformer 化 + 因子化码)、FSQ/LFQ(2023 后的现代简化:FSQ 干脆取消码本最近邻,用少量维度的低精度量化组合出码——没有坍塌问题、无需 EMA、训练稳,Magvit-v2 的 LFQ 让视频 token 化质量大涨——“删掉复杂机制反而更好”的又一案例)。

5. Tokenizer 是生成质量的天花板(本卷最重要的洞察)

下游 LM 生成的 token 序列,最终都要过 tokenizer 的解码器还原成图——它没见过的细节、重建不了的纹理,任何强大的 LM 都补不回来。“tokenizer 的重建上限 = 离散生成路线的上限”。这解释了 2023–2026 的持续投入:视频 token 化(MAGVIT-v2、Cosmos tokenizer)、高压缩比大码本、以及”为什么 Janus(卷4.8)干脆给理解和生成各配一套视觉编码”——理解要语义、生成要细节,一套 tokenizer 难两全。

6. 自测题

  1. VQ-VAE 三段式分别输出什么?(连续特征图 / 码本索引序列 / 重建图)
  2. 三项 loss 各自训练谁?sg 挡住了什么?(重建:全体;码本项:只码本;commitment:只编码器;防止 argmin 的梯度乱流)
  3. 直通估计器解决什么?(查表不可导——前向量化、反向抄送梯度)
  4. 码本坍塌是什么?两种解法?(少数码被垄断;EMA + 死码重启;FSQ 干脆取消码本)
  5. 为什么 MSE 重建偏糊、感知损失怎么治?(MSE 收敛到条件均值;VGG 特征空间惩罚”像素对但感知错”)
  6. “tokenizer 天花板”对统一模型研究意味着什么?(换更强 tokenizer 常比换更大 LM 收益更高;重建质量决定上限)
  7. VQ-VAE 和卷3.1 说的”原生融合”如何接上?(VQ token 与文本同表同目标——Transformer 一套 autoregressive 吃两模态)

7. 动手作业

  1. 在 MNIST 上实现迷你 VQ-VAE(编码器 2 层 CNN、码本 64、commitment 0.25),记录码本利用率(被用到的码占比)——亲眼看坍塌;
  2. 给它加 EMA 更新与死码重启,对比利用率曲线;
  3. 加载一个工业级图像/视频 tokenizer 的开源实现(如 MAGVIT-v2 或 Cosmos tokenizer),对比你的迷你版:码本规模、利用率、重建质量差距各有多大;
  4. 算账:8192 码本 × 32×32 网格的”图像序列”的信息上限 vs 一张 PNG 同尺寸的体积——体会”离散 token 是有损压缩”。

8. 延伸资源

  • VQ-VAE 论文(Neural Discrete Representation Learning)——sg 与 commitment 的出处
  • VQGAN 论文(Taming Transformers)——taming 之名即”驯服 Transformer 生成图像”
  • “Language Model Beats Diffusion — Tokenizer is Key”(2024)——tokenizer 决定论的证据文