在前面介绍 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 中图像词表大小为 8192token 网格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 tokensPeCo 视觉词表的特点是特点说明词表来源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-VAEBEiT v2主要目标重建图像像素离散化语义特征token 偏向低层视觉细节高层语义信息训练方式reconstruction-basedknowledge distillation vector quantization适合任务图像生成、重建表示学习、分类、分割代表作用图像离散化语义级 MIM 目标所以 BEiT v2 的核心思想可以概括为视觉词表不应该只描述图像长什么样还应该描述图像区域表达了什么语义。这对 ViT 自监督预训练很重要。因为下游分类、检测、分割任务更关心语义而不是每个像素的精确恢复。第六类iBOT 在线视觉词表前面几种方法通常需要先训练或借用一个 tokenizer然后再训练 ViT。这样会形成两阶段流程第一阶段训练 visual tokenizer第二阶段用 tokenizer 产生目标训练 ViTiBOT 试图简化这个过程。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-VAEencoder 输出连续特征再映射到可学习 codebook局部结构、低层视觉经典、清晰、易理解token 语义可能较弱dVAE 词表DALL-E、BEiT离散 VAE 将图像压缩成 token 网格图像局部模式适合 Transformer 建模偏重重建不一定语义强VQGAN 词表VQGAN、MaskGITcodebook 感知损失 对抗损失可感知图像组成单元重建质量好适合生成训练复杂感知词表PeCodVAE 中加入 perceptual similarity感知一致的视觉模式比普通 dVAE 更语义化需要额外感知特征语义词表BEiT v2vector-quantized knowledge distillation高层语义特征适合表示学习依赖 teacher 质量在线词表iBOTteacher network 在线产生 patch-level 目标自蒸馏语义目标不需要单独 tokenizer不如固定 codebook 直观标量量化词表FSQ多个有限标量组合成隐式 codebook结构化离散表示简单稳定避免 codebook collapse设计依赖量化维度图像/视频统一词表MAGVIT-v2tokenizer 对图像和视频生成统一离散 token空间-时间视觉模式支持图像视频统一生成设计难度高紧凑词表TiTok1D tokenizer 生成少量 token高压缩视觉表示token 少效率高高压缩可能损失细节结论这一章最后可以这样总结视觉词表的本质是把连续图像转换成离散 visual token。它让图像可以像文本一样被 Transformer 或语言模型式结构处理。不同视觉词表的区别主要体现在三个方面第一词表是怎么生成的。有些来自 VQ-VAE 或 dVAE 的重建训练有些来自 VQGAN 的感知/对抗训练有些来自 BEiT v2 的语义蒸馏有些来自 iBOT 的在线 teacher 网络。第二token 表达什么信息。有些 token 更偏颜色、纹理、边缘等低层信息有些 token 更偏人类感知一致性有些 token 更偏高层语义。第三服务什么任务。图像生成更重视重建质量和压缩率ViT 自监督预训练更重视语义质量多模态大模型更重视 token 是否适合统一序列建模。因此理解视觉词表时不能只问这个 tokenizer 能不能把图像变成 token更应该问它生成的 token 到底代表什么它更适合重建、生成还是表示学习它的词表是低层视觉词表还是语义视觉词表