状态:草稿 (2026-10-13)。 论文中的数值是查阅原文并结合实验条件确认的数值。亲自运行过的是笔记本电脑 CPU 上的玩具示例(
code/02_ssl_collapse.py,耗时 30 秒左右),从未用乒乓球视频做过自监督学习(未实际测量)。 系列《阅读视觉模型 2》第 2 篇。上一篇: 对比学习与 CLIP。关于 ViT 架构本身,请参考 阅读视觉模型 1。
自监督学习 1:在无标签的情况下学习特征
目录
1. 直觉:标签昂贵,图像泛滥
只要想想乒乓球视频,就能立刻感同身受。用手机拍摄的练习视频可以堆积数小时,但要手工标注“这个帧里球在这里”,一小时最多也就标几百张。那么,能否直接从 无标签的图像堆中学习到一些东西呢?
自监督学习(self-supervised learning)通过在数据内部自主构建并解决问题来进行学习。本篇所涉及的方法族所解决的问题如下:
即使对同一张图像进行两次不同的变换(裁剪、颜色调整、模糊),模型也必须输出“它们是同一个东西”。
能够经受住变换考验的特征,很大可能是捕捉了图像的 内容并丢弃了 外观(亮度、裁剪位置)的特征。如果说第 1 篇的 CLIP 将“图像和文字”配对,那么在这里,则是将“图像与该图像的不同变体”配对。甚至连文字都不需要。
2. 问题:坍塌
然而,这个问题中存在一个陷阱。如果“让两个变体的输出相同”就是目标的全部,那么 对所有输入都产生相同输出的模型就是完美的正解。此时损失函数达到了最小值,但特征却没有任何信息。这被称为 坍塌(collapse) 。
如果把本篇中出现的方法都看作是防止坍塌的不同机制,那么就很容易进行总结了。
| 方法 | 防止坍塌的机制 | 损失函数 |
|---|---|---|
| SimCLR (2020) | 将批次中的其他图像作为负样本推开 | InfoNCE(与第 1 篇相同形式) |
| MoCo (2020) | 将过去批次的输出存入队列作为负样本。填充队列的编码器缓慢更新 | InfoNCE |
| BYOL (2020) | 无负样本。仅在学生侧附加预测器,教师是学生的指数移动平均(EMA) | 规范化输出的均方误差 |
| DINO (2021) | 无负样本。减去教师输出的均值(中心化),并用低温度参数使其锐化 | 教师分布与学生分布的交叉熵 |
3. 如何进行训练
SimCLR:大批量与强数据增强
SimCLR 的损失函数被称为 NT-Xent,但其形式与第 1 篇的 InfoNCE 相同。在包含 N 张图像的批次中生成 2N 个变体,每个变体的正样本是其对应的配对变体,其余 2N−2 个则是负样本。论文发现的要点有三个:
- 变体的组合是决定性的。 结合使用随机裁剪和颜色失真尤为重要。如果只使用裁剪,模型就会仅仅依靠颜色分布来寻找配对。
- 投影头(projection head)。 在编码器输出 h 之上额外堆叠一个小型的 MLP 生成 z,并将损失应用在 z 上。然而,最终使用的特征是投影头 之前 的 h。在线性评估中,h 比 z 的表现好 10% 以上(论文)。这可以解释为投影头替 h 承受了为了迎合损失函数而丢弃的信息。
- 大批量(Batch Size)。 默认 4,096,实验为 256–8,192。温度为 0.1 时效果最好(ImageNet 100 个 epoch,论文)。
MoCo:将负样本存入队列
大批量会消耗大量内存。MoCo 从过去的批次中获取负样本。将输出存储在一个长度为 65,536 的队列中并用作负样本。问题在于队列中的输出是由不同时间点的编码器生成的。因此,填充队列的编码器(键编码器)不进行反向传播,而是让其权重以极慢的速度跟随正在学习的编码器。
key 인코더 ← m · key 인코더 + (1 − m) · query 인코더, m = 0.999
如果将 m 设为 0(每次直接复制),训练就会失败;当 m 为 0.9 时准确率为 55.2%,为 0.999 时为 59.0%(论文,队列大小为 4,096 的消融实验)。 缓慢跟随的教师这一机制延续到了 BYOL 和 DINO 中。
BYOL:没有负样本也能坚持
BYOL 完全不使用负样本。它在学生(online)编码器之上额外附加一个 预测器,去预测看到了不同变体的教师(target)编码器的输出。教师是学生的 EMA,并且梯度不回传(从 0.996 缓慢增加到 1)。虽然论文并未给出完整的证明来解释为什么“把它们收敛到一个点”这条捷径会被阻止,但通过实验可以明确的是,去掉预测器就会导致坍塌(论文)。我们在下面的例子中也将看到同样的结果。
DINO:模仿教师的分布
DINO 将输出转换为包含 K 个维度的概率分布。教师和学生观察同一张图像的不同裁剪部分,并通过减小交叉熵使学生去匹配教师的分布。这类似于蒸馏分类器的过程,因此被称为 自蒸馏(self-distillation) (蒸馏将在第 4 篇中详细介绍)。
# 02_ssl_collapse.py 의 DINO 부분에서 줄임
with torch.no_grad():
q = softmax((teacher(v1) - center) / 0.04) # 가운데 맞추고, 낮은 온도로 날카롭게
loss = -(q * log_softmax(student(v2) / 0.1)).sum(1).mean()
center = 0.9 * center + 0.1 * teacher_outputs.mean(0) # 교사 출력의 이동 평균
teacher = EMA(student)
防止坍塌的两个组件朝相反的方向运作:
- 中心化(centering):从教师输出中减去其均值。防止某个维度总是输出过大。但如果仅有此项,输出就会向均匀分布扩散而崩塌。
- 锐化(sharpening):仅在教师侧使用较低的温度(0.04–0.07)使分布变得尖锐。防止分布过于均匀。但如果仅有此项,输出就会集中到一个维度上。
论文通过图表展示了如果只使用其中一个组件,模型就会分别向各自的方向坍塌。学生观察 2 张大裁剪图和多张小裁剪图,而教师只观察大裁剪图(multi-crop)。这变成了一个“仅通过观察小的碎片就要猜出整张图含义”的问题。
DINOv2:数据比方法更重要
DINOv2 并未对损失函数做出重大修改(DINO 损失 + 基于遮挡块的 iBOT 损失 + 使特征均匀分布的 KoLeo 正则化)。相反,它在 数据筛选上下了功夫。在去重后的 12 亿张原始图像中,检索出与已整理的数据集相似的图像,最终挑选出 1.42 亿张(LVD-142M)。然后,在训练了最大的 ViT-g(11 亿参数)之后, 小型模型并非从头开始训练,而是从大型模型中蒸馏而来(论文)。为什么蒸馏会胜出是第 4 篇的主题。
4. 动手实践:亲眼观察坍塌
code/02_ssl_collapse.py 生成了来自 10 个隐藏类别的 32 维“图像”。图像中除了决定类别的核心内容外,还混入了剧烈波动的“背景”,如果直接比较像素,背景就会主导距离。数据增强包括重新绘制背景、擦除 30% 的像素、亮度缩放和噪声。所有方法都使用相同的编码器(小型 MLP)和相同的 1,500 步进行训练。 标签(类别编号)仅用于评估 。
评估指标有两个:各嵌入维度的标准差(若接近 0 则表示全部坍塌到一个点),以及针对每张测试图像根据最近的 5 个类别编号进行投票的 k-NN 准确率(直接使用输出, code/02_ssl_collapse.out.txt).
| 方法 | 标准差 | k-NN 准确率 | 备注 |
|---|---|---|---|
| 随机猜测 | — | 0.100 | |
| 纯像素 | — | 0.315 | 背景主导距离 |
| 未经训练的编码器 | 0.170 | 0.234 | |
| 1. 仅拉近 | 0.003 | 0.107 | 损失 −0.9998(最小值 −1)—— 彻底坍塌 |
| 2. SimCLR (τ=0.2) | 0.170 | 0.931 | |
| 3. BYOL | 0.087 | 0.816 | |
| 3′. 从 BYOL 中去掉预测器 | 0.002 | 0.150 | 坍塌 |
| 4. DINO | 0.077 | 0.669 | 使用维度 12/32,每张图熵 2.62 |
| 4′. 去掉中心化 | 0.054 | 0.301 | 使用维度 1/32,熵 0 —— 坍塌到单一维度 |
| 4″. 去掉锐化 | 0.056 | 0.286 | 每张图熵 3.47 = 最大值 (log 32) — 坍塌为均匀分布 |
这里有几个可以读懂的结论:
- 如果只进行拉近,损失几乎完美,但特征毫无用处。 这是“损失低并不等于模型好”最具戏剧性的例子。
- BYOL 的预测器和 DINO 的两个组件确实是承受负载的关键部件。 只要去掉其中一个就会崩塌,且崩塌的方向与 DINO 论文中解释的完全一致。去掉中心化后,32 个维度中只有 1 个被使用;去掉锐化后,所有图像都产生了相同的均匀分布。
- 在这个玩具实验中,SimCLR 表现最好,DINO 最差。这并不能说明方法本身的优劣。我们没有针对玩具数据调整超参数(温度、EMA 速度、维度数量),也没有使用 DINO 的强项 multi-crop 和 ViT。
5. 论文数值
评估大多采用 线性评估(linear evaluation)。冻结自监督训练好的编码器,在其之上仅用 ImageNet 标签训练一个线性分类器来测量准确率。以此观察特征被整理得“多大程度上可以被线性划分”。
| 方法 | 模型 | ImageNet 线性评估 top-1 | 条件(论文) |
|---|---|---|---|
| MoCo | ResNet-50 | 60.6% | 200 个 epoch,批次 256 |
| SimCLR | ResNet-50 / 4 倍宽度 | 69.3% / 76.5% | 1,000 个 epoch。76.5% 与有监督的 ResNet-50 处于同一水平 |
| MoCo v2 | ResNet-50 | 71.1% | 800 个 epoch,添加 MLP 头·模糊数据增强 |
| BYOL | ResNet-50 | 74.3% | 1,000 个 epoch,批次 4,096 |
| DINO | ViT-S/16 · ViT-B/8 | 77.0% · 80.1% | k-NN 为 74.5% · 77.4% |
| DINOv2 | ViT-S/14 · ViT-g/14 | 81.1% · 86.5% | LVD-142M,S 从 g 中蒸馏 |
| DINOv3 | ViT-7B/16 | 88.4% | 评估分辨率 512px,LVD-1689M(17 亿张) |
也有关于数据增强重要性的数据。如果只保留裁剪一种数据增强,BYOL 还能维持 59.4%(−13.1%p),但 SimCLR 则暴跌至 40.3%(−27.6%p)(BYOL 论文)。这可以理解为:越是依赖负样本的方法,就越经不起“只看颜色找配对”这类捷径的考验。
DINO 除了数字之外还有一个著名的观察。ViT 的最后一层注意力(attention)图在从未看过标签的情况下,会沿着物体的轮廓走。用这张图制作的掩码重叠度(Jaccard)在 ViT-S/16 中达到了 45.9,高于相同结构的监督学习情况(27.3)(论文)。
计算量如下。DINO ViT-S/16 需要两台 8-GPU 服务器运行 3 天,整个 DINOv2 需要 2.2 万个数据中心级 GPU 小时,DINOv3 则需要 6.1 万个小时(论文)。
6. 局限性
- 变换即假设。 如果教导模型“即使颜色变了也是同一个东西”,模型就会抛弃颜色。如果在乒乓球中需要区分橙色球和白色球,颜色变换就会起到擦除该信息的作用。
- 针对单张图片的含义进行了调整。 这一系列方法对“这张图是什么”非常擅长。而球在什么地方这样的 位置,或者什么时候弹起的这样的 时间则需要额外的装置(第 3 篇的遮挡预测、第 6 篇的视频模型)。DINOv3 的 Gram 锚定(Gram anchoring)是为了解决长训练过程中局部密集特征受损的问题而加入的装置(论文)。
- 规模大,时间久。 优秀的数字通常来自数百到数千个 epoch 以及大量的数据。不能保证在小数据上会有相同的效果。
7. 与我们项目的联系
- 标签最珍贵的地方。 TT Score 的学习材料大部分是非商业条件的公开数据集,而我们手机视频里几乎没有标签(TT Score 模型解剖第 7 篇)。先用无标签的我们自己的视频进行自监督学习,再用少量标签进行微调的方向很适合这个问题。不过我们还没尝试过,而且对于球这样的小物体这种系列方法能有多少帮助尚不得知(未实际测量)。
- 慢教师。 MoCo 的 key 编码器、BYOL·DINO 的 EMA 教师体现了“学生的过去平均值比学生更稳定,从而成为更好的老师”这一相同的理念。这将在第 4 篇的蒸馏和第 6 篇的 V-JEPA 中再次遇到。
- 借用特征。 如果冻结像 DINOv2 这样的公开特征提取器来使用,就可以用很少的标签起步来划分乒乓球台区域或运动员区域(推测,未实际测量)。
TT 一句话。 如果对模型说“只要说这俩是一样的就行”,模型就会说世上万物都一样。亲眼看到阻止这种情况的装置——无论是错误答案、预测器还是中心对齐——哪怕漏掉一个真的就会崩溃,觉得挺有意思的。
参考文献
- Chen et al., A Simple Framework for Contrastive Learning of Visual Representations(SimCLR), ICML 2020. https://arxiv.org/abs/2002.05709
- He et al., Momentum Contrast for Unsupervised Visual Representation Learning(MoCo), CVPR 2020. https://arxiv.org/abs/1911.05722
- Chen et al., Improved Baselines with Momentum Contrastive Learning(MoCo v2), arXiv 2020. https://arxiv.org/abs/2003.04297
- Grill et al., Bootstrap Your Own Latent: A New Approach to Self-Supervised Learning(BYOL), NeurIPS 2020. https://arxiv.org/abs/2006.07733
- Caron et al., Emerging Properties in Self-Supervised Vision Transformers(DINO), ICCV 2021. https://arxiv.org/abs/2104.14294
- Oquab et al., DINOv2: Learning Robust Visual Features without Supervision, TMLR 2024. https://arxiv.org/abs/2304.07193
- Siméoni et al., DINOv3, arXiv 2025. https://arxiv.org/abs/2508.10104
- 示例代码与输出:
code/02_ssl_collapse.py,code/02_ssl_collapse.out.txt