想象一间古画修复工作室:学徒面前是一幅被岁月腐蚀的画,画中有大片缺色。师傅不直接告诉他每一笔该怎么画,而是用朱砂在缺损处写下批注。这些批注不是印死的字典,而是师傅边看学徒进步边修改的“动态笔记”。学徒要做的有两件事:第一,根据画中露出的部分,把被遮住的图案补出来;第二,从不同角度、不同光线下快速认出“这还是同一幅画”。 iBOT 就是这间工作室。它让视觉模型在没有人工标签的情况下,同时练习“补画”和“辨画”。补画对应掩码图像建模(Masked Image Modeling,MIM),辨画对应对比学习;而不断更新的师傅批注,就是论文中最重要的“在线分词器”(Online Tokenizer)。这套方法让 AI 从海量无标注图片中自己造任务、自己当老师,学到的特征可以迁移到分类、检测、分割等下游任务。
对 AI 从业者来说,iBOT 是理解“视觉自监督预训练为什么能省标注”的关键样板。掌握它,你就能用无标签数据做出可迁移的视觉表征,在医疗、工业等标注稀缺场景中直接落地。
可视化演示
展示iBOT三大核心:掩码图像建模MIM与patch级对比学习、在线分词器替代离线VQ-VAE、与BEiT和MAE的方法对比。切换模式查看不同预训练机制。
本节配有交互动效(进入视口后自动加载,约 3KB)。
MIM掩码图像建模 随机掩码图像patch,学生网络预测被掩码内容 patch级对比学习:预测Token与教师Token对齐 L=L_MIM+L_CLS+L_patch MIM+对比学习联合训练
视觉预训练困境
教 AI 认图,过去很像教小孩认生字:大人拿着卡片,指着猫说“猫”,指着狗说“狗”,小孩记住一张是一张。可现实是,图片数据浩如烟海,请专家逐张贴标签又贵又慢,这条路在规模化面前很快走不通。
自然语言处理给了我们一个启发:文字本来就是离散的“字词”,模型可以像做英语完形填空一样,挖掉一个词让模型猜。但图像没有这样的天然“单词”。一张照片是一整块连续像素,每个像素只有亮度颜色,单看任何一个像素都无法表达“这是一只猫的耳朵”。视觉领域缺少的是“字帖”,也就是把图像变成离散符号的分词器。
也有人试图只用数据增强来制造自监督信号,比如把图片翻转、裁剪后让模型判断是不是同一张。但这种“外功”练得再勤,也无法让模型理解局部的结构与遮挡。于是,解决视觉预训练困境的关键变成了两件事:第一,给图像造一本可学习的“批注字典”;第二,设计一个不需要标签也能自己出题的训练任务。iBOT 的答案,就是在线分词器加上补画与辨画两条主线。
核心思想双主线
修复工作室里,学徒每天要做两种练习。第一种是“补画”:师傅用白布遮住画的一部分,让学徒根据露出的部分补全;第二种是“辨画”:学徒被带到不同灯光下,远远看一眼,立刻判断“这是不是刚才那幅画”。两种练习同步进行,缺一不可。
对应到 iBOT,补画就是掩码图像建模,辨画就是 CLS token 上的对比学习。两者相加,构成总预训练目标。iBOT 不只把图像当作需要恢复的像素,也不只把图像当作需要区分的样本,而是让同一个学生网络同时吸收局部细节和全局语义。
这个公式看似简单,却点出了 iBOT 的设计哲学:局部与全局不是对手,而是队友。只补画,模型容易变成“只会拼局部的工匠”;只辨画,模型又容易忽略细节。两者相加,才能让学徒既看得清一草一木,又认得出整幅画的意境。
- 总损失$\mathcal{L}_{\mathrm{iBOT}}$ 是模型预训练时最终要优化的总损失,等于补画损失加上辨画损失。
- 补画损失$\mathcal{L}_{\mathrm{MIM}}$ 负责被遮住图像块的语义预测,让模型学会局部结构。
- 辨画损失$\mathcal{L}_{\mathrm{CLS}}$ 负责全局表征的对比,让模型学会区分不同图像。
在线分词器
师傅的批注本在这个工作室里是活页的。普通字典印好就不变了,但师傅每次看到学徒的进步,都会在本子上修订几个用词。这个会成长的批注本,就是 iBOT 的在线分词器。
在 BEiT 等早期方法中,研究者先训练一个离线 dVAE,把图像 Patch 映射成固定编号的离散 Token。问题是:这个“字典”在预训练开始前就印死了,不会随模型进步而更新。iBOT 换了一种做法:用一个教师网络在训练过程中动态产生视觉 Token,学生网络则去预测教师给出的 Token。教师网络虽然不是完美答案,但它会随着学生一起进步,所以叫“在线”。
教师网络的参数不是用梯度下降训练的,而是学生参数的指数移动平均(EMA)。这样教师既不会瞬间退化成学生,也不会停滞不前。
在线分词器的输出不是唯一的硬编码,而是 K 类视觉 Token 上的概率分布,也就是“师傅的软批注”。学生越接近师傅的批注,损失越小。这个设计让 iBOT 不需要提前训练离散码本,也让特征空间随训练不断演进,是整篇论文最核心的贡献之一。
- 教师参数$\theta_{\mathrm{teacher}}$ 表示师傅网络的参数,它负责给每个图像 Patch 写批注。
- 衰减系数$\lambda$ 是 EMA 系数,通常取 0.996 到 0.999 之间,表示师傅保留旧经验的比重。
- 移动平均更新$(1-\lambda) \cdot \theta_{\mathrm{student}}$ 表示师傅每次只吸收一小部分学生的最新笔法,再和原有经验加权融合。
掩码图像建模
现在回到补画练习。师傅会随机把画布切成 16×16 的小格子,再遮住其中一部分格子。遮住后,学徒只能看到剩下的格子,却要说出被遮住的格子里应该是什么图案。
具体实现中,图像被切成一连串 Patch,每个 Patch 经过嵌入后变成一个视觉 Token 向量。模型随机遮住一部分 Patch,再把被遮 Patch 的原始信息抹掉,只让学生网络看到可见 Patch。学生需要根据可见上下文,预测被遮 Patch 上师傅 Tokenizer 给出的分布。这就是 MIM 的核心公式。
这里要特别注意,iBOT 的预测目标是“师傅的语义 Token”,不是原始像素。和 MAE 直接补像素相比,补完了“猫耳朵的轮廓”比补出一团颜色更接近高层语义。这也是 iBOT 的图像特征能迁移到检测和分割等任务上的原因。
- 被遮集合$\mathcal{M}$ 是所有被掩码的 Patch 位置集合,损失只在这些位置上计算。
- 师傅软标签$p_t(k \mid \mathbf{x})$ 是教师 Tokenizer 在位置 $\mathbf{x}$ 上给出的第 $k$ 类视觉 Token 概率。
- 学生预测$p_s(k \mid g_{\theta}(\hat{\mathbf{z}}))$ 是学生网络看到可见 Patch 后,对被遮位置预测出的概率。
- 交叉熵惩罚$-\sum \log$ 的形式让“学生猜得越不像师傅”时损失越大,训练目标就是让两者分布越来越接近。
对比学习支线
补画练的是局部,但一幅画的主题是全局。为了让学徒在远处一瞥也能认出同一幅画,工作室还安排了辨画练习:同一件作品,被放在清晨和黄昏两种光线下拍照,学徒要判断这是同一幅;不同作品之间,学徒则要拉开距离。
iBOT 在图像序列最前面放了一个特殊的 CLS token,相当于整幅画的“摘要”。对同一幅图做不同视角的增强后,两个视角的 CLS 特征应该尽量相似;不同图片的 CLS 特征则应该尽量不同。这个目标可以用 InfoNCE 损失表达。
如果说 MIM 是让学徒知道“这朵云应该补在画的右上角”,那么 CLS 对比损失就是让学徒知道“这幅画整体讲的是江南水乡”。两条线互为补充,是 iBOT 比单纯 MIM 方法更稳的重要原因。
- 查询特征$z_q$ 是当前样本一个视角的全局特征,代表“学徒手里的这幅画”。
- 正样本特征$z_k$ 是同一幅画另一个视角的特征,两者应当靠近。
- 温度系数$\tau$ 控制分布锐利程度,让相似度对比更集中或更松散。
- 负样本分母$\sum_{j=1}^{N} \exp(...)$ 遍历批次中其他样本,代表“别的画”,模型要把正样本从所有画中认出来。
三方法对比
自监督视觉预训练发展出三条路线,很像三种教画画的方法。BEiT 像拿着一本印好的教材,让学生按固定词典补成语;MAE 像让学生直接用水彩把白色区域涂成与周围相近的颜色;iBOT 则让师傅随堂批注,学生既要补画又要辨画。
| 方法 | Tokenizer | 预测目标 | 对比学习 | 掩码比例特点 |
| --- | --- | --- | --- | --- |
| BEiT | 离线 dVAE 固定词表 | 离散 Token | 无 | 掩码约 40% |
| MAE | 无 Tokenizer | 原始像素 | 无 | 掩码约 75% |
| iBOT | 在线教师网络 | 教师 Token 分布 | 有 | 掩码约 15% |
BEiT 的优点是目标语义化,但离线词表不随特征变化;MAE 的优点是掩码比例高、训练高效,但重建像素容易偏向低层纹理;iBOT 取两者之长:用在线 Teacher 提供语义目标,又用对比学习补上全局判别。在相近的 ViT 规模下,iBOT 在 ImageNet 分类以及检测、分割迁移任务上通常能取得更好的表现。
实验效果与应用展望
预训练结束时,修复工作室的学徒迎来“出师考试”。考试内容不是背画,而是拿着学到的笔法去各种陌生任务里临摹。实验显示,iBOT 预训练出的特征在 ImageNet 线性分类中表现突出,在目标检测、语义分割上也能超越 BEiT 和 MAE 等代表性的自监督方法。更关键的是,它只用少量标签就能达到不错的效果,这正是修补工作室在“缺师傅、缺标准答案”环境下的优势。
不过,iBOT 也并非万能。双教师-学生结构让训练显存和算力开销变大;在线分词器虽然精彩,但蒸馏过程对超参数更敏感;模型学到的仍是视觉表面结构,和语言中的抽象概念还有差距。未来,这类“动态自监督目标”思路正在与多模态、统一分词器结合,让 AI 在更大范围的无标注数据上自我进化。
AI 应用场景
医疗影像的少标注预训练
阶段:预训练与模型初始化
解决的问题:医疗影像标注依赖高水平放射科医生,成本极高,且自然图像预训练权重与 X 光、CT 的视觉分布差异很大。传统做法是直接拿 ImageNet 权重微调,容易出现领域偏移。
具体案例:某医疗 AI 团队收集了数十万张未标注的胸部 X 光片,用 iBOT 做自监督预训练。模型先通过补画学会肺野、肋骨、心脏等结构的位置关系,再通过对比学习让不同拍摄角度下的同一胸部影像特征保持一致。之后只需要少量标注数据微调,就能完成肺炎筛查和胸腔积液检测。
工业质检中的异常模式学习
阶段:表征学习与下游微调
解决的问题:工业产线上的缺陷样本稀少且种类未知,传统有监督检测很难提前枚举所有瑕疵。iBOT 能只使用正常产品图片完成预训练,让模型建立“正常外观”的强先验。
具体案例:某面板厂商用无标注的屏幕成品照片训练 iBOT,把每个屏幕 Patch 都当作古画的一小块。训练后模型对正常屏幕的补画误差很小;当出现划痕、亮点、脏污等异常时,补画误差会明显增大,系统借此触发质检告警。这样就把缺陷检测变成了“补画失败检测”。
Python 演示
import mathimport torchimport torch.nn as nnimport torch.nn.functional as F def build_pos_embed(seq_len, hidden): pos = torch.arange(seq_len).unsqueeze(1).float() dim_t = torch.exp(torch.arange(0, hidden, 2).float() * (-math.log(10000.0) / hidden)) pe = torch.zeros(seq_len, hidden) pe[:, 0::2] = torch.sin(pos * dim_t) pe[:, 1::2] = torch.cos(pos * dim_t) return pe.unsqueeze(0) class MiniPatchTransformer(nn.Module): def __init__(self, patch_dim=48, hidden=64, num_patches=16, vocab=32, depth=2): super().__init__() self.patch_embed = nn.Linear(patch_dim, hidden) self.mask_embed = nn.Parameter(torch.zeros(1, 1, hidden)) self.cls_token = nn.Parameter(torch.zeros(1, 1, hidden)) self.pos_embed = nn.Parameter(build_pos_embed(num_patches + 1, hidden)) layer = nn.TransformerEncoderLayer(d_model=hidden, nhead=4, dim_feedforward=128, batch_first=True) self.encoder = nn.TransformerEncoder(layer, num_layers=depth) self.vocab_head = nn.Linear(hidden, vocab) def forward(self, patches, mask_mat=None): x = self.patch_embed(patches) + self.pos_embed[:, 1:, :] if mask_mat is not None: x = x + self.mask_embed * mask_mat.unsqueeze(-1) cls = self.cls_token.expand(patches.size(0), -1, -1) + self.pos_embed[:, :1, :] x = torch.cat([cls, x], dim=1) x = self.encoder(x) return x[:, 0], self.vocab_head(x[:, 1:]) MOM = 0.996temp = 0.1 def ema_update(student, teacher): with torch.no_grad(): for ps, pt in zip(student.parameters(), teacher.parameters()): pt.data = MOM * pt.data + (1.0 - MOM) * ps.data def train_step(student, teacher, optimizer, patches, mask_mat): aug1 = patches + 0.05 * torch.randn_like(patches) aug2 = patches + 0.05 * torch.randn_like(patches) with torch.no_grad(): _, t_logits = teacher(aug2, None) t_probs = F.softmax(t_logits, dim=-1).detach() masked_patches = patches * (1.0 - mask_mat).unsqueeze(-1) s_cls, s_logits = student(masked_patches, mask_mat) mask_bool = mask_mat.bool() s_logp = F.log_softmax(s_logits[mask_bool], dim=-1) mim_loss = -(t_probs[mask_bool] * s_logp).sum(-1).mean() _, t_cls = teacher(aug1, None) s_cls = F.normalize(s_cls, dim=-1) t_cls = F.normalize(t_cls, dim=-1) logits = s_cls @ t_cls.t() / temp labels = torch.arange(patches.size(0)) cls_loss = F.cross_entropy(logits, labels) return mim_loss, cls_loss def main(): torch.manual_seed(0) student = MiniPatchTransformer() teacher = MiniPatchTransformer() teacher.load_state_dict(student.state_dict()) optimizer = torch.optim.AdamW(student.parameters(), lr=2e-4) for step in range(30): patches = torch.randn(4, 16, 48) mask_mat = (torch.rand(4, 16) < 0.4).float() mim_loss, cls_loss = train_step(student, teacher, optimizer, patches, mask_mat) loss = mim_loss + cls_loss optimizer.zero_grad() loss.backward() optimizer.step() ema_update(student, teacher) if step % 5 == 0: print("step", step, "mim", round(mim_loss.item(), 3), "cls", round(cls_loss.item(), 3)) if __name__ == "__main__": main()
masked_patches = patches * (1.0 - mask_mat).unsqueeze(-1)把被掩码 Patch 的原始信息抹掉,只保留可见内容。t_probs = F.softmax(t_logits, dim=-1).detach()教师网络输出软 Token 分布,并且停止梯度,模拟在线分词器。mim_loss = -(t_probs[mask_bool] * s_logp).sum(-1).mean()只对被遮 Patch 计算交叉熵,让学生预测贴近教师批注。s_cls @ t_cls.t() / temp学生和教师的全局 CLS 特征做相似度矩阵,完成对比学习。pt.data = MOM * pt.data + (1.0 - MOM) * ps.data教师参数每步向学生做 EMA 更新,这就是“在线”的含义。
常见误区
误区我一直以为 iBOT 和 BEiT 一样,得先用大量图片训练一个离散词表,再做掩码任务。没有 dVAE 怎么定义 Token?
正解iBOT 的在线分词器本身就是“教师网络”。它不需要提前离线训练码本,而是在预训练过程中用 EMA 平滑更新,实时生成软 Token 目标。师傅的批注是边教边改的,不需要先印一本固定字典再去补画。
为何常见:BEiT 方法太有名,很多人把“MIM 必须配离线离散词表”当成标准配置,忽略了 iBOT 的创新点恰好在“在线”。
误区MAE 是补像素,iBOT 应该也是补像素,只是换了个网络结构。只要重建误差小,特征就一定好。
正解iBOT 的 MIM 预测目标是教师网络输出的视觉 Token 概率分布,而不是 RGB 像素值。补像素容易让模型沉迷于纹理和颜色,补 Token 才能逼模型学到“这是什么物体的一部分”这类语义信息。
为何常见:MAE 的像素重建非常直观,宣传图也很容易让人联想到“填色游戏”,于是把一切 MIM 都简化成像素回归。
误区学生网络和教师网络结合,这不是知识蒸馏吗?知识蒸馏通常需要标签,所以 iBOT 肯定也用了监督信号。
正解iBOT 的教师网络是学生网络自身历史参数的 EMA 版本,不是提前训练好的大模型,也不依赖任何人工标签。它只是扮演“会移动的靶子”,让学生有稳定的学习目标。形式像知识蒸馏,但本质是自监督。
为何常见:传统知识蒸馏中教师是强监督模型,看到“教师-学生”结构就条件反射地联想到标签,忽略了教师来源的差别。
误区既然模型都能把被遮住的图补出来,说明它已经理解图像结构了,为什么还要搞一个对比损失?
正解MIM 更关注局部 Patch 的语义,对比学习更关注整幅图像的全局判别。只做 MIM,模型可能对局部变化敏感而忽略整体;只做对比,模型又可能对细节不敏感。iBOT 的实验表明,两条损失联合优于二者任一单独使用。
为何常见:初学者习惯把模型任务看成单选题,认为一个目标就足够,忽略了视觉表征本身就需要多尺度信息。
面试题
Q1. iBOT 的训练同时使用了哪两种任务?
- A.掩码图像建模与对比学习← 正确答案
- B.目标检测与语义分割
- C.生成对抗与强化学习
- D.机器翻译与语音识别
答案:A。iBOT 的核心是把 MIM 和 CLS 对比学习联合优化。检测分割是下游任务,生成对抗和强化学习与 iBOT 无关。
Q2. 在线分词器里的“在线”主要指什么?
- A.使用在线数据库
- B.训练过程中动态生成目标← 正确答案
- C.只在推理时起作用
- D.必须连接云端服务器
答案:B。“在线”指教师网络在预训练中随学生参数 EMA 更新,Token 目标不是印死的离线码本,而是随时演变的软批注。
Q3. iBOT 中教师网络参数如何更新?
- A.通过梯度下降直接训练
- B.每一步随机初始化
- C.学生参数的指数移动平均← 正确答案
- D.在测试集上微调得到
答案:C。教师网络不参与梯度训练,而是用学生参数的 EMA 更新。这让教师在保持稳定性的同时缓慢吸收学生学到的知识。
Q4. 关于 iBOT 的教师网络,下列说法正确的是?
- A.需要反向传播梯度
- B.不需要计算梯度← 正确答案
- C.可以提供软 Token 目标← 正确答案
- D.必须依赖人工标注
答案:BC。教师网络在 no_grad 下生成软 Token 分布,作为学生 MIM 的预测目标;它不反向传播也不依赖标签,这与监督知识蒸馏有本质区别。
Q5. iBOT 的 MIM 损失主要计算在哪些位置上?
- A.所有可见的像素点上
- B.原始输入图像上
- C.被掩码的 Patch 上← 正确答案
- D.分类头的输出层上
答案:C。MIM 只在被遮住的 Patch 位置计算损失。可见 Patch 是学生用来推理的上下文,不需要提供预测目标。
Q6. 与 MAE 的像素重建相比,iBOT 的预测目标是什么?
- A.教师网络输出的 Token 分布← 正确答案
- B.原始 RGB 像素值
- C.图像的颜色直方图
- D.三通道的全局均值
答案:A。iBOT 预测的是教师 Tokenizer 给出的视觉 Token 分布,而不是像素。这使模型学到更高层的语义结构,而不是单纯的颜色纹理。
Q7. 与 BEiT 相比,iBOT 的主要改进包括?
- A.Tokenizer 改为在线更新← 正确答案
- B.引入全局对比学习← 正确答案
- C.不再使用 Transformer
- D.需要离线 dVAE 分词
答案:AB。BEiT 使用离线 dVAE 固定词表和纯 MIM;iBOT 用在线教师网络替代固定词表,同时加入 CLS 对比学习。两者都基于 Transformer。
Q8. iBOT 的 MIM 损失与 CLS 对比损失如何配合?
- A.相加后联合优化← 正确答案
- B.轮流交替且互不叠加
- C.相乘并取平方根
- D.只保留损失较大的那一个
答案:A。iBOT 的最终损失是 $\mathcal{L}_{\mathrm{MIM}} + \mathcal{L}_{\mathrm{CLS}}$,两条损失在同一个训练阶段中相加并共同反向传播。
Q9. 实验表明 iBOT 在下游任务中的优势包括哪些?
- A.ImageNet 分类提升← 正确答案
- B.检测分割迁移更好← 正确答案
- C.完全不需要微调
- D.对标签依赖更低← 正确答案
答案:ABD。iBOT 在分类、检测、分割上都有较好表现,并能在少量标签下获得可用特征;但它仍需要下游微调,不是完全不需要微调。
Q10. 在线分词器相比固定离线词表最重要的价值是什么?
- A.固定标签能加速收敛
- B.与训练过程完全无关
- C.Token 目标随特征演化← 正确答案
- D.不需要任何神经网络
答案:C。iBOT 的教师网络随训练不断更新,Token 目标也随之演化,避免模型被早期不成熟的码本束缚。固定词表虽然有稳定性,但无法随特征共同成长。