在上一篇文章中,我们精读了 MAE。MAE 的核心思想非常直接:把图像中的大部分 patch 遮住,只让编码器看到少量可见 patch,然后通过解码器重建被遮住区域的像素。从直觉上看,MAE 更像是一个"图像补全任务":模型需要根据可见部分推测缺失区域长什么样。
而 BEiT 的思路则更接近 NLP 中的 BERT。BERT 的预训练任务是 Masked Language Modeling,也就是遮住句子中的一部分词,让模型根据上下文预测这些被遮住的词。BEiT 想做的事情就是:能不能把图像也变成类似"词"的离散 token,然后像 BERT 一样做 masked token prediction?
这也是 BEiT 这篇论文最核心的贡献:它把图像自监督预训练从"像素重建"推进到了"视觉 token 预测"。
BEiT 的全称是 BERT Pre-Training of Image Transformers,论文由 Hangbo Bao、Li Dong、Songhao Piao 和 Furu Wei 提出,发表于 ICLR 2022。论文提出了一种面向 Vision Transformer 的 Masked Image Modeling 方法:输入是被遮挡的图像 patch,预测目标不是原始像素,而是由图像 tokenizer 生成的离散视觉 token。
1、为什么需要 BEiT?
在 ViT 中,一张图像会被切分成固定大小的 patch。例如输入图像大小为 224×224,patch size 为 16×16,那么整张图像会被切成 14×14=196 个 patch。每个 patch 被拉平成向量,再经过线性映射,变成 Transformer 可以处理的 token 序列。
这让图像看起来很像 NLP 中的文本序列。但是这里有一个关键问题:
文本中的 token 本身是离散的,比如 word、subword 或 BPE token;而图像 patch 本质上是连续的像素块。
BERT 之所以能够做 masked language modeling,是因为它有一个明确的词表。比如某个词被 mask 之后,模型只需要在词表中预测它是哪一个 token。可是图像没有天然的"词表"。
如果我们直接让模型预测被遮住 patch 的像素值,那么任务就变成了像素级回归。论文认为,这种像素级恢复容易让模型过度关注局部纹理、高频细节和短距离依赖,而不一定能学到更高层的语义表示。BEiT 因此选择了另一条路线:先把图像转换成离散的 visual token,再让 ViT 去预测这些 token。
简单来说,BEiT 试图回答的问题是:
如果文本可以通过"遮词预测"学到语言表示,那么图像能不能通过"遮 patch 后预测视觉词"学到视觉表示?
2、BEiT 的核心思想
BEiT 的整体流程可以概括为三步:
第一步,将原始图像切分成 patch,作为 ViT 编码器的输入。
第二步,使用一个提前训练好的图像 tokenizer,把原始图像转换成离散的 visual token。
第三步,随机遮挡一部分图像 patch,让 ViT 根据未遮挡区域预测被遮挡位置对应的 visual token。
因此,BEiT 中同一张图像实际上有两种表示:
| 表示形式 | 作用 |
|---|---|
| Image patches | 作为 Transformer 编码器的输入 |
| Visual tokens | 作为 masked image modeling 的预测目标 |
BEiT 并不是直接拿被 mask 的 patch 去预测像素,而是预测该位置对应的离散视觉 token。论文中使用的 tokenizer 来自离散 VAE,也就是 dVAE。该 tokenizer 会把图像映射成一个 14×14 的离散 token 网格,并且视觉词表大小为 8192。也就是说,对于一张 224×224 的图像:
图像被切成 14×14 个 patch;
tokenizer 也生成 14×14 个 visual token;
每个图像 patch 都对应一个离散视觉 token;
预训练时,模型只需要预测被 mask 位置的 token 类别。从这个角度看,BEiT 真的很像图像版 BERT。
3 BEiT 和 BERT 的对应关系
为了更直观理解 BEiT,我们可以把它和 BERT 做一个对应:
| BERT | BEiT |
|---|---|
| 文本句子 | 图像 |
| 单词 / subword token | 图像 patch |
| 词表中的离散 token | dVAE 生成的 visual token |
| Masked Language Modeling | Masked Image Modeling |
| 预测被 mask 的词 | 预测被 mask patch 对应的 visual token |
| Transformer Encoder | Vision Transformer Encoder |
BERT 中,模型输入的是带有 [MASK] 的文本序列,输出是被 mask 位置对应的词表概率。
BEiT 中,模型输入的是带有 mask embedding 的图像 patch 序列,输出是被 mask 位置对应的 visual token 概率。
所以 BEiT 的关键并不只是"遮住 patch",而是引入了一个视觉词表,让图像预训练任务变成了分类问题,而不是像素回归问题。
4、BEiT 的模型结构
BEiT 的主干网络基本沿用标准 ViT。给定一张输入图像,首先将其划分为固定大小的 patch。假设图像大小为 H×W,patch 大小为 P×P,那么 patch 数量为:
N = H × W / P²
对于 224×224 图像和 16×16 patch,N=196。论文实验中,BEiT-Base 使用 12 层 Transformer,隐藏维度为 768,注意力头数为 12,FFN 中间维度为 3072,整体配置与 ViT-Base 保持一致。
在输入端,BEiT 会做以下操作:
将图像 patch 拉平成向量;
通过线性投影得到 patch embedding;
加入位置编码;
对被 mask 的 patch,用一个可学习的 mask embedding 替代;
将整个序列输入 Transformer Encoder。
经过多层 Transformer 编码后,BEiT 只在被 mask 的位置上接一个分类头,用于预测对应的 visual token。
这个设计和 BERT 很接近:模型并不需要重建所有位置,只需要在被遮挡的位置上完成 token 预测。
5、Masked Image Modeling:BEiT 的预训练任务
BEiT 的预训练任务叫做 Masked Image Modeling,MIM。
具体来说,给定一张图像,BEiT 会随机遮挡大约 40% 的 image patch。论文中使用的是 blockwise masking,也就是按照块状区域进行遮挡,而不是完全独立地随机遮挡每个 patch。这样做更符合图像的空间连续性,也能避免任务过于简单。
设原始图像经过 tokenizer 得到 visual token:
z = [z1, z2, ..., zN]
其中每个 zi 都是视觉词表中的一个离散编号。
设被 mask 的位置集合为 M,那么 BEiT 的目标就是根据被遮挡后的图像 xM,预测这些位置上的原始 visual token:
maximize Σ log p(zi | xM), i ∈ M
用更直白的话说:模型看到一张被遮住部分区域的图像,然后要猜出这些被遮住区域原本对应哪个视觉 token。
这与 MAE 有明显不同。
MAE 的目标是重建像素:masked patch → pixel values
BEiT 的目标是预测视觉 token:masked patch → discrete visual token
因此,MAE 更偏向低层视觉重建,而 BEiT 更强调离散语义预测。
6、为什么 BEiT 不直接预测像素?
这是理解 BEiT 的关键。
对于图像来说,像素包含了大量低层信息,比如颜色、边缘、纹理、局部噪声和高频细节。如果模型的目标是恢复像素,它可能会花很多能力去拟合这些低层信息。
但对于下游任务,比如分类、检测、分割,我们真正希望模型学到的是更抽象的语义表示,比如:
哪些区域属于同一个物体;
哪些局部结构组成了目标;
图像中不同区域之间有什么语义关系;
背景和前景应该如何区分。
BEiT 使用 visual token 作为预测目标,本质上是在像素和语义之间加入了一个离散瓶颈。这个 tokenizer 会把连续图像压缩成离散 token,模型不再需要精确恢复每个像素,而是学习预测更抽象的视觉类别。论文的消融实验也验证了这一点:当去掉 visual token,改成直接恢复 masked pixels 时,BEiT 的性能明显下降。论文表 4 中,完整 BEiT 在 300 epoch 预训练后 ImageNet top-1 为 82.86,ADE20K mIoU 为 44.65;而改为恢复像素后,ImageNet top-1 降到 81.04,ADE20K mIoU 降到 41.38。这说明:BEiT 的关键并不是单纯 mask,而是 mask 之后预测什么。
7、BEiT 的两阶段训练逻辑
从训练流程上看,BEiT 可以理解为两个阶段。
1. 第一阶段:训练或使用图像 tokenizer
BEiT 需要一个图像 tokenizer,把原始图像转换成离散 visual token。
论文中使用的是基于 dVAE 的 tokenizer。这个 tokenizer 的作用类似 NLP 中的 BPE tokenizer,只不过它处理的不是文本,而是图像。它会将图像压缩成离散 token 序列,并通过 decoder 尝试从这些 token 重建图像。
在 BEiT 论文中,作者直接使用了已有的公开 tokenizer,而不是从头训练一个新的 tokenizer。该 tokenizer 将每张图像转换为 14×14 的 visual token 网格,词表大小为 8192。
2. 第二阶段:训练 BEiT 预测 visual token
有了 tokenizer 之后,就可以训练 ViT 编码器。
此时 tokenizer 的作用是提供监督信号。训练时:
原始图像被 tokenizer 转换成 visual token;
图像 patch 中一部分被 mask;
被 mask 后的 patch 序列输入 ViT;
ViT 预测被 mask 位置对应的 visual token;
使用分类损失训练模型。
这就是 BEiT 的 BERT-style 视觉预训练。注意,这里虽然使用了 tokenizer 产生的 token 作为目标,但整个过程仍然不需要人工标注。因此 BEiT 仍然属于自监督学习方法。
8、BEiT 的实验结果
BEiT 的实验主要验证两件事:
第一,BEiT 预训练能否提升 ViT 在图像分类上的表现。
第二,BEiT 学到的表示能否迁移到密集预测任务,比如语义分割。
在 ImageNet-1K 分类任务上,BEiT-B 在 224×224 分辨率下达到 83.2% top-1 accuracy;提高到 384×384 后,BEiT-B 达到 84.6%。BEiT-L 在 224×224 下达到 85.2%,在 384×384 下达到 86.3%。论文指出,BEiT-L 在只使用 ImageNet-1K 自监督预训练的情况下,达到了非常有竞争力的结果。
在 ADE20K 语义分割任务上,BEiT 也表现出较好的迁移能力。论文中 BEiT 的 mIoU 为 45.6,加入 intermediate fine-tuning 后提升到 47.7。
OpenReview
这些实验说明,BEiT 学到的表示不只是对分类有用,也能迁移到需要空间理解能力的任务中。
BEiT 论文中还有一个很有意思的分析:自监督预训练之后,模型的 self-attention map 能够在一定程度上自动分离物体区域。
也就是说,即使 BEiT 没有使用人工标注,它的注意力头也可能关注到前景目标、物体边界或语义区域。这说明 masked image modeling 不只是让模型学会"补图",而是在学习图像中更高层的结构关系。
这点也为后续很多 ViT 自监督方法提供了启发:Transformer 的全局注意力机制本身具有建模长距离关系的能力,而合适的自监督任务可以激发这种能力。
9 BEiT 与 MAE 的区别
因为我们上一篇刚讲过 MAE,所以这里有必要把 BEiT 和 MAE 放在一起比较。
| 对比维度 | BEiT | MAE |
|---|---|---|
| 预训练任务 | 预测 visual token | 重建原始像素 |
| 预测目标 | 离散 token 分类 | 连续像素回归 |
| 是否需要 tokenizer | 需要 dVAE tokenizer | 不需要 tokenizer |
| mask 比例 | 约 40% | 通常更高 |
| 解码器设计 | 主要使用预测头 | 使用轻量 decoder 重建像素 |
| 目标特点 | 更偏语义 token | 更偏像素重建 |
| 复杂度 | 需要额外 tokenizer | 框架更简单 |
BEiT 更像 BERT,因为它预测的是"离散词表"中的 token。
MAE 更像 autoencoder,因为它直接重建被遮挡区域的像素。
这也导致二者的思想侧重点不同:
- BEiT 关注:如何为图像构造类似文本词表的离散监督信号?
- MAE 关注:如何通过高比例遮挡和非对称编码器-解码器,让 ViT 高效学习图像表示?
如果说 MAE 的优势是简单、直接、高效,那么 BEiT 的优势就在于它更接近 NLP 中 BERT 的预训练范式。
BEiT 的贡献总结
BEiT 的贡献可以总结为三点。
1. 提出了图像版 BERT 的预训练框架
BEiT 将 BERT 中的 masked language modeling 迁移到视觉领域,提出 masked image modeling。它证明了 ViT 不一定只能依靠监督训练或对比学习,也可以通过遮挡预测进行自监督预训练。
2. 引入离散 visual token 作为预测目标
这是 BEiT 最关键的设计。图像没有天然词表,所以 BEiT 使用 dVAE tokenizer 构造视觉词表。模型预测的不是像素,而是视觉 token,从而将图像重建任务转化为 token 分类任务。
3. 验证了 MIM 对分类和分割任务的有效性
BEiT 在 ImageNet 分类和 ADE20K 语义分割上都取得了较好的结果,说明 masked image modeling 学到的表示具有较好的迁移能力。
BEiT 的局限性
当然,BEiT 也不是完美的。
首先,BEiT 依赖额外的图像 tokenizer。这个 tokenizer 的质量会直接影响预训练目标的质量。如果 tokenizer 生成的 visual token 不够语义化,模型学到的表示也可能受限。
其次,BEiT 的训练流程相对更复杂。相比 MAE 直接重建像素,BEiT 需要先有一个 tokenizer,再进行 masked token prediction。这使得整个方法的实现链条更长。
第三,BEiT 的 visual token 虽然比像素更抽象,但它是否真正对应高级语义仍然取决于 tokenizer 本身。后续 BEiT v2 就进一步改进了视觉 tokenizer,希望让视觉 token 更具语义信息。
因此,BEiT 的核心思想非常重要,但它也留下了一个关键问题:
图像的"词表"应该如何构造,才能真正像语言 token 一样承载语义?
这个问题也影响了后续很多 masked image modeling 方法的发展。
如何理解 BEiT 在 ViT 发展中的位置?
如果我们把 ViT 的发展过程串起来看,BEiT 的位置非常重要。
ViT 证明了:图像可以切成 patch,然后用 Transformer 处理。
DeiT 证明了:在更合理的数据增强、蒸馏和训练策略下,ViT 可以在 ImageNet 上更高效地训练。
BEiT 进一步证明了:ViT 可以像 BERT 一样,通过 masked token prediction 进行自监督预训练。
MAE 则从另一个方向证明了:即使不构造视觉词表,只要设计好遮挡比例和编码器-解码器结构,像素重建也可以成为非常强大的自监督任务。
所以 BEiT 的历史意义在于:它明确提出了"图像版 BERT"的路线,让视觉 Transformer 的自监督预训练进入了 masked image modeling 阶段。