状态:草稿 (2026-10-13). 论文中的数据是在打开原文并结合条件后确认的。亲自实践的是笔记本电脑 CPU 上的玩具示例(
code/03_mae_toy.py,大约 3 分钟)。从未用真实照片或乒乓球视频训练过 MAE(未实测)。 系列「解读视觉模型 2」第 3 篇。上一篇: 自监督学习 1。关于 ViT 将图像分割成碎片(Patch)的方式,请参见 解读视觉模型 1的 ViT 篇。
自监督学习 2:MAE
目录
1. 直觉:完形填空
第 2 篇的方法传授了「两个变体是同一个东西」。MAE(Masked Autoencoder)提出了一个不同的问题: 遮挡图像的一部分,并尝试猜出被遮挡的部分。
在文字领域,这个问题已经取得了巨大的成功。BERT 通过遮挡句子中 15% 的单词并让模型猜测,奠定了语言模型的基础。在图像中也可以有同样的思路。因为要想合情合理地填补被遮挡的地方,就必须了解诸如「这里应该是乒乓球桌的边缘」、「这条手臂应该连在肩膀上」这样的结构。
然而,如果只遮挡图像的 15%,那就太简单了。随便把旁边的像素连起来就能填上。图像的 信息密度远低于文字。因为相邻像素具有几乎相同的值。MAE 的回答非常果断: 遮挡 75%。 达到这个程度就不能靠简单拼接了,必须理解整张图的结构才能填补。
2. 图像:非对称编码器-解码器
MAE 的第二个巧思是关于计算的。
- 像 ViT 一样,将图像分割成正方形小碎片(16×16 像素,ViT-H 为 14×14)。
- 随机选择 75% 的碎片。 被选中的碎片根本不输入编码器。 庞大的 ViT 编码器只处理可见的 25%。
- 将编码器的输出放回原处,并在空白处填入表示「这里被遮挡了」的可学习向量(掩码 Token)。
- 小而浅的解码器恢复被遮挡碎片的像素。
- 训练结束后,丢弃解码器,只使用编码器。
Transformer 的计算量与 Token 数量成正比(MLP)或与其平方成正比(注意力机制)。将 Token 减少到四分之一会大大减少大型编码器的计算量。解码器被设计得足够浅,使得每个 Token 的计算量低于编码器的 10%(论文)。
3. 如何训练
损失
L = 가린 조각들에 대해서만 평균한 (예측 화소 − 정답 화소)²
不计算可见碎片的重建误差。因为复制可见的内容没有什么可学的。
对目标像素进行了一项处理。 以减去每个碎片的均值并除以标准差得到的像素作为目标。这相当于让人专注于猜测碎片内部的纹理(边缘、纹理结构)而不是整个碎片的亮度。在 ViT-L 中,微调准确率从 84.9% 提升到 85.4%,线性评估从 73.5% 提升到 73.9%(论文)。
标签与数据
不使用标签。论文仅使用了 ImageNet-1K 的图像,在预训练之后使用标签进行微调或线性评估。
遮挡方式
即使是相同的 75%,如何遮挡也很重要(论文,ViT-L,微调 / 线性评估)。
| 遮挡方式 | 比例 | 微调 | 线性评估 |
|---|---|---|---|
| 随机碎片 | 75% | 84.9 | 73.5 |
| 大块(block) | 50% | 83.9 | 72.3 |
| 大块 | 75% | 82.8 | 63.9 |
| 网格(隔一个) | 75% | 84.0 | 66.0 |
如果以网格状遮挡,可见的碎片会均匀分布,使得相邻部分很容易拼接;如果用大块遮挡 75%,则会变得太难。随机遮挡则在二者之间取得了平衡。
与 BEiT 的差异
比 MAE 稍早的 BEiT 没有去猜测被遮挡碎片的 像素 ,而是去猜测预先训练好的 Tokenizer(dVAE,8,192 个词)为该碎片附加的 词编号。它以块的形式遮挡了大约 40%(论文)。MAE 表明不需要 Tokenizer 也可以直接猜测像素,其结构也因此更加简单。
4. 亲自尝试
code/03_mae_toy.py 在 16×16 的黑白图像上画两个点。图像的「图案」(标签)是这两个点的排列:横向并排、纵向并排、「\」对角线、「/」对角线。点的位置、大小和亮度因图而异。要想识别图案,必须查看的不是单个碎片,而是 碎片之间的关系。
将图像分成 4×4 共 16 个碎片,并用小型 Transformer(编码器 3 层,解码器 1 层,宽度 64)训练 MAE。仅改变遮挡比例,以相同的 800 步进行训练,并在编码器特征上添加线性分类器来测量图案分类准确率(线性探针)。图案标签仅在此探针中使用。
# 03_mae_toy.py 에서 줄임
order = torch.rand(n, 16).argsort(1) # 그림마다 다른 무작위 가리기
keep, masked = order[:, :n_keep], order[:, n_keep:]
z = encoder(gather(embed(patches) + pos, keep)) # 보이는 조각만 인코더로
full = mask_token.repeat(n, 16, 1); full.scatter_(1, keep, z)
pred = head(decoder(full + dec_pos))
loss = mse_per_patch(pred, normalize_per_patch(patches)).gather(1, masked).mean() # 가린 조각에서만
结果(2 个随机种子平均值, code/03_mae_toy.out.txt):
| 遮挡比例 | 编码器看到的碎片 | 被遮挡碎片重建误差(归一化像素 MSE) | 线性探针准确率 |
|---|---|---|---|
| 基准:原样像素 | — | — | 0.407 |
| 基准:未经训练的编码器 | 16 | — | 0.575 |
| 25% | 12 | 0.699 | 0.803 |
| 50% | 8 | 0.736 | 0.812 |
| 75% | 4 | 0.839 | 0.783 |
| 90% | 2 | 0.880 | 0.763 |
仅通过遮挡和猜测训练出来的编码器,在任何比例下都产出了远比未经训练的编码器(0.575)和像素(0.407)更好的特征。这意味着它在没有标签的情况下学会了「关系」。
然而,在这个玩具示例中, 75% 并不是最优的。 25–50% 的效果略好一些(由于种子之间的差异为 ±3%p,因此无法区分 25% 和 50%)。这反过来展示了 MAE 的核心假设。我们的图像只有 16 个碎片,并且大部分是空白背景,信息集中在这两个点上。如果只显示 4 个碎片,通常连这两个点都完全看不到,也就没有了猜测的依据。 高遮挡比例是当图像充满冗余时才适用的良方。一张真实照片包含数百个碎片,相邻碎片非常相似。第 6 篇中的视频相邻帧更为相似,因此比例上升到了 90%。
训练时间受机器负载影响很大。当两次运行相同的代码时,25% 是 21.5·21.6 秒,75% 是 27.9·16.5 秒,90% 是 23.7·15.7 秒(准确率和误差数字两次都完全相同)。在系统较空闲时运行的第二次测试中,将编码器 Token 减少到 ¼(12 个 → 4 个)的效果仅将时间缩短了大约 25%。对于这种规模的模型来说,这是因为 Python 和库的固定开销以及未缩减的解码器(全部 16 个 Token)占据了很大比例。大型 ViT 所带来的 3 倍以上的收益,请通过下方的论文数据进行确认。
5. 论文数据
所有这些都是 MAE 论文(He et al., CVPR 2022)中的数值,并且仅使用 ImageNet-1K 进行了预训练。
| 项目 | 数值 | 条件 |
|---|---|---|
| 微调 top-1 | ViT-B 83.6 · ViT-L 85.9 · ViT-H 86.9 · ViT-H(448px) 87.8 | 预训练 1,600 个 Epoch |
| 线性评估 top-1 | ViT-B 68.0 · ViT-L 75.8 · ViT-H 76.6 | 低于对比学习系列(MoCo v3 ViT-L 77.6) |
| 训练速度 | 计算量减少 3.3 倍,实际时间 ViT-L 缩短 2.8 倍·其他设置缩短 3.5–4.1 倍 | TPU 128 核,800 个 Epoch |
| 遮挡比例敏感性 | 线性评估对比例敏感(最优值附近与最大相差约 20%p),微调在 40–80% 范围内大体表现良好 | ViT-L |
第二行很有意思。MAE 在线性评估中不如对比学习,但在微调中表现强劲。 这意味着通过遮挡和猜测学习到的特征直接用于线性评估的效果一般,但如果稍微修改并加以使用,它就是一个非常好的起点。这就是第 2 篇的 DINO 系列和本篇的 MAE 系列各自拥有不同优势的原因。第 8 篇的 ViTPose 在经过 MAE 预训练的 ViT 上仅附加了一个小型解码器来预测姿态。
6. 局限性
- 把精力花在了猜测像素上。 诸如树叶纹理或地面图案等与语义无关的细节也必须被猜中,损失才会减小。因此诞生了后续研究,提出「与其猜像素,不如猜特征」(第 6 篇的 V-JEPA 就是一个例子)。
- 线性评估较弱。 如果目的是将特征冻结并直接使用,第 2 篇的系列会更好(见上表)。
- 对小物体的依据不足。 如果随机遮挡 75%,像乒乓球这样只有几个像素的物体通常会被遮挡或完全可见。论文并未探讨 MAE 预训练对这类物体有多大帮助(未确认)。
7. 与我们项目的联系
- 视频方向更为契合。 手机视频的相邻帧几乎相同,具有海量的冗余。MAE 的假设在视频中比在图像中更为契合。这就是第 6 篇的 VideoMAE 遮挡 90% 的原因。
- 姿态模型的基础。 第 8 篇的 ViTPose 直接使用了经过 MAE 预训练的 ViT。这与 TT Score 的姿态教练所使用的 RTMPose 走的是不同的道路,这也为对比这两条道路提供了依据(TT Score 模型剖析第 4 篇)。
- 我们无标签的视频。 出于与第 2 篇相同的原因,可以使用无标签的练习视频这一点非常具有吸引力。目前尚未尝试(未实测)。
TT 小结。 即使遮挡了四分之三也能猜出来,这意味着图像中存在大量的重复。像我的玩具图那样只有两个点的图像,如果遮挡了四分之三,点就会消失,也就无法猜测了。遮挡比例必须根据数据的重复程度来进行选择。
参考文献
- He et al., Masked Autoencoders Are Scalable Vision Learners(MAE), CVPR 2022. https://arxiv.org/abs/2111.06377
- Bao et al., BEiT: BERT Pre-Training of Image Transformers, ICLR 2022. https://arxiv.org/abs/2106.08254
- 示例代码与输出:
code/03_mae_toy.py,code/03_mae_toy.out.txt