在前面介绍 BEiT 时,我们提到了一个非常关键的概念:visual token,视觉 token。

BEiT 的思想很像 BERT。BERT 会遮住文本中的一部分词,然后让模型预测被遮住的词;BEiT 则遮住图像中的一部分 patch,然后让模型预测这些位置对应的 visual token。BEiT 原论文明确指出,一张图像在预训练中有两种视图:一种是输入 Transformer 的 image patches,另一种是作为预测目标的 discrete visual tokens。模型的预训练目标就是根据被破坏的图像 patch 恢复原始 visual tokens。

但是,这里会引出一个关键问题:

文本天然由词组成,所以可以有词表;图像只是连续像素矩阵,它的“词表”从哪里来?

这就是本章要重点解释的问题。

一、先区分几个容易混淆的概念

在 ViT 和自监督预训练中,经常会出现 token、patch token、visual token、tokenizer、codebook 这些词。它们看起来很像,但含义并不一样。

概念 是否离散 来源 作用
patch token 图像 patch 经过线性投影得到 输入 ViT 的连续向量
visual token 图像 tokenizer 输出的离散编号 BEiT 等方法中的预测目标
visual vocabulary / codebook tokenizer 学到的离散编码集合 相当于图像领域的“词表”
mask token 模型中可学习的向量 替代被遮挡的输入位置
class token 模型中可学习的向量 聚合全局图像信息

所以要先明确一句话:patch token 是 ViT 输入端的连续表示,visual token 是视觉 tokenizer 输出的离散编号。二者不是同一个东西。这也是很多读者第一次读 BEiT 时最容易混淆的地方。

二、视觉词表到底是什么?

在文本模型中,词表可以理解为一个离散符号集合。例如:dog, cat, tree, road, car。

每个词会被映射成一个 token ID。

而在视觉模型中,词表不是由人工定义的“狗、猫、树、路”这些语义词组成,而通常是模型通过训练自动学出来的一组视觉原型。例如某些 code 可能更偏向边缘、纹理、颜色块、局部结构,也可能在更强的语义 tokenizer 中对应某些局部语义模式。

因此,视觉词表可以简单理解为:

把连续图像压缩成离散编号时所使用的一组可选视觉编码。

一个典型过程如下:

原始图像
  ↓
Encoder 提取连续视觉特征
  ↓
Quantization / Tokenization
  ↓
离散 visual token ID
  ↓
Decoder 尝试重建图像

如果一张图像被转换成:[102, 351, 88, 765, ...]

那么这些数字就是 visual token ID,而这些 ID 所对应的全集就是 visual vocabulary,也叫 codebook。

第一类:VQ-VAE 视觉词表

最经典的视觉词表来自 VQ-VAE

VQ-VAE 的全称是 Vector Quantised-Variational AutoEncoder。它的核心思想是:普通 VAE 使用连续潜变量,而 VQ-VAE 使用离散 latent code。也就是说,encoder 不再输出一个连续向量作为最终表示,而是把连续特征映射到一个离散 codebook 中。VQ-VAE 原论文强调,它通过 vector quantization 学习离散表示,并且可以用于图像、视频、语音等生成任务。

VQ-VAE 的生成流程可以理解为:

图像 x
  ↓
Encoder 得到连续特征 z_e(x)
  ↓
在 codebook 中寻找最近的 code
  ↓
得到离散 token ID
  ↓
Decoder 根据 token ID 重建图像

它的视觉词表是怎么来的?简单来说,就是训练过程中学出来的。模型会维护一个 codebook,例如:

codebook = {e1, e2, e3, ..., eK}

其中每个 ei 是一个可学习的向量。对于 encoder 输出的某个连续特征,模型会在 codebook 中找最近的向量,然后用这个向量的编号作为 visual token ID。

例如:

连续特征 z  最接近  codebook 中的 e351
那么该位置的 visual token ID = 351

特点 说明
词表来源 通过重建图像训练得到
token 含义 多偏向局部视觉模式
优点 能把图像变成离散 token,适合后续 Transformer 建模
缺点 token 不一定有强语义,可能更偏纹理和低层结构
常见用途 图像生成、图像压缩、离散视觉表示学习

可以这样总结:

VQ-VAE 视觉词表的核心目标是“能重建图像”,因此它学到的 token 首先要保留图像细节,而不一定天然具备高级语义。

第二类:dVAE / DALL-E 视觉词表

BEiT 中使用的 visual tokenizer 与 DALL-E 的 dVAE 思路密切相关。

OpenAI 在 DALL-E 中使用了离散 VAE 将图像转换成离散 token。官方说明中提到,DALL-E 将 256×256 图像压缩成 32×32 的离散 latent code 网格,也就是 1024 个 image tokens,视觉词表大小为 8192。

这个设定很像文本中的词表:

文本:一句话 → 若干 token ID → 文本词表
图像:一张图 → 32×32 token ID → 视觉词表

对于 DALL-E 这类图文生成模型来说,这样做有一个直接好处:文本和图像都可以变成离散 token 序列,后续可以交给 Transformer 统一建模。DALL-E / dVAE 视觉词表的特点是:

特点 说明
词表大小 DALL-E 中图像词表大小为 8192
token 网格 256×256 图像可压缩为 32×32 token 网格
训练目标 根据离散 token 重建原图
优点 便于将图像转成类似文本的离散序列
缺点 token 仍然可能更偏局部重建,不一定足够语义化
代表方法 DALL-E、BEiT 中的 tokenizer 思路

BEiT 借鉴这类视觉 tokenizer 的目的不是生成图像,而是构造自监督预训练目标。它输入的是被 mask 的 image patches,预测的是 tokenizer 产生的 visual tokens。

所以 BEiT 的关键不是“把 visual token 输入 ViT”,而是:

输入:masked image patches
目标:原图经过 tokenizer 得到的 visual token ID
任务:根据可见 patch 预测被 mask 位置的 token ID

第三类:VQGAN 视觉词表

VQ-VAE 能产生离散视觉 token,但它的重建结果可能偏模糊。后来 VQGAN 在这个方向上进一步改进。

VQGAN 的代表论文是 Taming Transformers for High-Resolution Image Synthesis。论文提出用 CNN 学习一种 context-rich vocabulary of image constituents,也就是更有上下文信息的图像组成词表,然后再用 Transformer 建模这些 token 的组合关系。

VQGAN 的整体流程仍然是:

图像
  ↓
Encoder
  ↓
Codebook quantization
  ↓
离散 token
  ↓
Decoder 重建图像

但它相比 VQ-VAE 加入了更强的视觉质量约束,例如感知损失和对抗训练。这样得到的 token 更适合高质量图像生成。

VQGAN 视觉词表的特点是:

特点 说明
词表来源 encoder-decoder + codebook + 感知/对抗损失共同训练
token 含义 更偏向可感知的局部图像组成单元
优点 重建质量更好,适合高分辨率图像生成
缺点 训练更复杂,可能受到 GAN 训练稳定性的影响
常见用途 图像生成、图像编辑、图像补全、masked generative modeling
代表方法 VQGAN、MaskGIT 等

例如 MaskGIT 就属于基于离散图像 token 的生成模型。它训练时随机 mask 一部分 token,让模型预测被 mask 的图像 token;推理时从全 mask 状态开始并行预测,再逐步迭代细化。

这里可以看出,VQGAN 类视觉词表和 BEiT 类视觉词表的目标不同:

方法方向 visual token 的作用
BEiT 作为自监督预训练的预测目标
VQGAN / MaskGIT 作为图像生成模型的建模单位

第四类:PeCo 感知视觉词表

前面几类 tokenizer 大多依赖图像重建目标。问题是:重建得好,不代表 token 一定有语义。

例如两个局部 patch 在像素上差异很小,但语义可能不同;或者两个 patch 在颜色纹理上差异较大,但在人类感知上可能属于同一个物体区域。

PeCo 就是针对这个问题提出的。PeCo 的全称是 Perceptual Codebook for BERT Pre-training of Vision Transformers。它认为当前的一些预测目标与人类感知并不完全一致,因此提出学习一个 perceptual prediction target。PeCo 在 dVAE 训练中加入感知相似性约束,并使用自监督 Transformer 提取深层特征来计算感知相似性,从而让 visual tokens 具有更好的语义含义。

PeCo 的词表生成方式可以概括为:

图像
  ↓
dVAE tokenizer
  ↓
加入 perceptual similarity 约束
  ↓
学习更符合感知相似性的 codebook
  ↓
生成 perceptual visual tokens

PeCo 视觉词表的特点是:

特点 说明
词表来源 dVAE + 感知相似性约束
token 含义 比普通 dVAE token 更偏语义和感知一致性
优点 更适合作为 ViT 自监督预训练目标
缺点 训练流程更复杂,需要额外感知特征
常见用途 BERT-style ViT 预训练
代表方法 PeCo

第五类:BEiT v2 语义视觉词表

BEiT v2 进一步把视觉词表从低层图像重建推向高层语义表示。

BEiT v2 论文指出,很多 masked image modeling 方法仍然在低层像素上操作,这会限制模型利用高层语义。为此,BEiT v2 使用 semantic-rich visual tokenizer 作为 masked prediction 的重建目标,并通过 vector-quantized knowledge distillation 训练 tokenizer,将连续语义空间离散化为紧凑 code。

BEiT v2 的词表生成方式可以概括为:

图像
  ↓
强语义 teacher 提取连续语义特征
  ↓
Vector-quantized knowledge distillation
  ↓
将连续语义空间离散化
  ↓
得到 semantic visual tokens

它和普通 dVAE 的区别在于:

对比维度 dVAE / VQ-VAE BEiT v2
主要目标 重建图像像素 离散化语义特征
token 偏向 低层视觉细节 高层语义信息
训练方式 reconstruction-based knowledge distillation + vector quantization
适合任务 图像生成、重建 表示学习、分类、分割
代表作用 图像离散化 语义级 MIM 目标

所以 BEiT v2 的核心思想可以概括为:视觉词表不应该只描述图像长什么样,还应该描述图像区域表达了什么语义。这对 ViT 自监督预训练很重要。因为下游分类、检测、分割任务更关心语义,而不是每个像素的精确恢复。

第六类:iBOT 在线视觉词表

前面几种方法通常需要先训练或借用一个 tokenizer,然后再训练 ViT。这样会形成两阶段流程:

第一阶段:训练 visual tokenizer
第二阶段:用 tokenizer 产生目标,训练 ViT

iBOT 试图简化这个过程。

iBOT 的全称是 Image BERT Pre-Training with Online Tokenizer。它使用 teacher network 作为 online tokenizer,通过对 masked patch tokens 做 self-distillation 来学习表示。论文强调,这种 online tokenizer 可以和 MIM 目标联合学习,不需要提前单独预训练 tokenizer。

iBOT 的流程可以理解为:

原图不同增强视图
  ↓
Teacher network 产生 patch-level 目标分布
  ↓
Student network 输入 masked image
  ↓
Student 预测 teacher 给出的 patch-level 目标
  ↓
Teacher 由 student 的 EMA 更新

这里的“词表”不一定是传统意义上的固定 codebook,而更像是 teacher 网络在线产生的视觉伪标签或原型分布。iBOT 视觉词表的特点是:

特点 说明
词表来源 teacher network 在线产生
是否需要预训练 tokenizer 不需要
token 含义 来自自蒸馏的 patch-level 语义目标
优点 端到端、语义更强、避免两阶段 tokenizer 训练
缺点 机制更复杂,不如固定 codebook 直观
代表方法 iBOT

可以这样理解:

BEiT 是“先有词表,再训练模型”;iBOT 是“模型训练过程中自己产生词表式目标”。

第七类:FSQ / Lookup-free Quantization 这类简化词表

传统 VQ 方法需要维护一个显式 codebook,也容易出现 codebook collapse,也就是很多 code 长期不用。

FSQ,即 Finite Scalar Quantization,提出用更简单的有限标量量化替代传统向量量化。它将 latent 投影到较低维度,每个维度只允许取有限个固定值,多个维度取值的组合形成一个隐式 codebook。论文强调,FSQ 不需要复杂的 commitment loss、codebook reseeding、code splitting 或 entropy penalty,也不容易出现传统 VQ 中的 codebook collapse 问题。

FSQ 的生成方式可以理解为:

连续 latent feature
  ↓
投影到少数几个维度
  ↓
每个维度量化到有限取值
  ↓
多个维度组合成离散 token

它不是像 VQ-VAE 那样维护:

codebook = {e1, e2, ..., eK}

而是通过多个离散标量组合形成隐式词表:

token = (level_1, level_2, ..., level_d)

FSQ 类视觉词表的特点是:

特点 说明
词表形式 隐式 codebook
生成方式 有限标量组合
优点 简单、稳定、避免部分 code 不使用
缺点 表达能力取决于量化维度和每维取值设计
常见用途 图像生成、masked generation、dense prediction
代表方法 FSQ

这类方法说明,视觉词表不一定非要是一个显式学习出来的 codebook,也可以通过结构化量化规则得到。

第八类:MAGVIT-v2 图像/视频统一词表

当视觉词表进入生成模型阶段,一个重要趋势是:不仅要处理图像,还要处理视频。

MAGVIT-v2 论文标题就非常直接:Tokenizer is Key to Visual Generation。它指出,如果希望语言模型式架构有效处理视觉生成任务,一个关键组件就是 visual tokenizer,因为 tokenizer 负责把像素空间输入映射成适合语言模型学习的离散 token。MAGVIT-v2 提出一种视频 tokenizer,可以为图像和视频生成简洁且有表达力的 token,并使用共同的 token vocabulary。

MAGVIT-v2 的词表生成逻辑可以概括为:

图像 / 视频
  ↓
视觉 tokenizer
  ↓
空间或时空 latent representation
  ↓
离散化
  ↓
统一图像-视频 visual vocabulary

特点 说明
词表对象 图像和视频
token 结构 可包含空间和时间信息
优点 支持图像/视频统一建模
缺点 tokenizer 设计难度更高
常见用途 图像生成、视频生成、视觉压缩
代表方法 MAGVIT、MAGVIT-v2

这类方法说明,视觉词表已经不只是 ViT 自监督预训练中的辅助目标,而是逐渐成为视觉生成模型的基础组件。

第九类:TiTok 这类紧凑视觉词表

传统 VQGAN 或 DALL-E 类 tokenizer 通常把图像压缩成二维 token 网格。例如 256×256 图像可能被压缩成 16×16 或 32×32 个 token。

但图像中存在大量冗余,相邻区域可能非常相似。TiTok 提出一种 1D image tokenizer,希望用更少 token 表示图像。论文指出,TiTok 可以将 256×256×3 图像压缩为仅 32 个离散 token,相比常规 2D tokenization 中的 256 或 1024 个 token 更紧凑。

TiTok 的词表生成逻辑可以理解为:

图像
  ↓
Transformer-based tokenizer
  ↓
1D latent sequence
  ↓
离散 token
  ↓
用于重建或生成

TiTok 这类方法的核心问题不是“如何构造语义更强的词表”,而是:

能不能用更少的 visual token 表示一张图像?

特点 说明
token 结构 1D token 序列
主要目标 高压缩率、减少生成计算成本
优点 token 数量少,生成效率高
缺点 高压缩率下可能损失细节,需要强 tokenizer
常见用途 高效图像生成、紧凑图像表示
代表方法 TiTok

这类方法对后续视觉大模型很重要,因为视觉 token 数量直接决定 Transformer 的计算成本。

常用视觉词表方法总表

类型 代表方法 词表怎么生成 token 更偏向 优点 局限
VQ-VAE 词表 VQ-VAE encoder 输出连续特征,再映射到可学习 codebook 局部结构、低层视觉 经典、清晰、易理解 token 语义可能较弱
dVAE 词表 DALL-E、BEiT 离散 VAE 将图像压缩成 token 网格 图像局部模式 适合 Transformer 建模 偏重重建,不一定语义强
VQGAN 词表 VQGAN、MaskGIT codebook + 感知损失 + 对抗损失 可感知图像组成单元 重建质量好,适合生成 训练复杂
感知词表 PeCo dVAE 中加入 perceptual similarity 感知一致的视觉模式 比普通 dVAE 更语义化 需要额外感知特征
语义词表 BEiT v2 vector-quantized knowledge distillation 高层语义特征 适合表示学习 依赖 teacher 质量
在线词表 iBOT teacher network 在线产生 patch-level 目标 自蒸馏语义目标 不需要单独 tokenizer 不如固定 codebook 直观
标量量化词表 FSQ 多个有限标量组合成隐式 codebook 结构化离散表示 简单稳定,避免 codebook collapse 设计依赖量化维度
图像/视频统一词表 MAGVIT-v2 tokenizer 对图像和视频生成统一离散 token 空间-时间视觉模式 支持图像视频统一生成 设计难度高
紧凑词表 TiTok 1D tokenizer 生成少量 token 高压缩视觉表示 token 少,效率高 高压缩可能损失细节

结论

这一章最后可以这样总结:

视觉词表的本质,是把连续图像转换成离散 visual token。它让图像可以像文本一样被 Transformer 或语言模型式结构处理。

不同视觉词表的区别,主要体现在三个方面:

第一,词表是怎么生成的。
有些来自 VQ-VAE 或 dVAE 的重建训练,有些来自 VQGAN 的感知/对抗训练,有些来自 BEiT v2 的语义蒸馏,有些来自 iBOT 的在线 teacher 网络。

第二,token 表达什么信息
有些 token 更偏颜色、纹理、边缘等低层信息;有些 token 更偏人类感知一致性;有些 token 更偏高层语义。

第三,服务什么任务
图像生成更重视重建质量和压缩率;ViT 自监督预训练更重视语义质量;多模态大模型更重视 token 是否适合统一序列建模。

因此,理解视觉词表时,不能只问:这个 tokenizer 能不能把图像变成 token?

更应该问:它生成的 token 到底代表什么?它更适合重建、生成,还是表示学习?它的词表是低层视觉词表,还是语义视觉词表?

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐