跳到主要内容

自监督学习 — 没有标注时,监督信号从对称性里来

这一章讲三件事: 自监督学习与无监督学习(完全不给答案,让数据自己出结构)差在哪; 对比/非对比两条通用路线各自的关键设计; 以及本章主线 LodeSTAR——一条把「平移图像 ⟹ 位置必跟着平移」变成训练信号的路。 这是全书数据故事的反转章:前面几章都在想办法搞标注,这一章回答「能不能不要标注」。

1. 顶层全景

前七章的世界 本章的世界
───────────── ─────────────
数据 + 人工标注 ──▶ 训练 只有数据,没有标注
标注:几万~几十万个 监督信号从哪来?

┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
对比学习 非对比学习 几何学习(本章主线)
"同一个样本的两个 "拉近同一样本的 "输入怎么变,输出
变体要靠近,不同 两个变体即可, 就该按已知规则跟着
样本要远离" 双网络防偷懒" 变"(等变性)

LodeSTAR 定位:
一张图训练出可用模型

图说:三条路线共用一个思想——监督信号不靠人打标签,靠数据自身的结构

2. 核心原理

2.1 自监督与无监督差在哪

无监督学习(第 06 章的自编码器)不碰「分类、检测」这类经典监督任务; 自监督学习正面接管这些任务。它有两种用法: 要么完全替代监督训练;要么当预训练——先用海量无标注数据把模型的「底子」练好, 再用少量标注数据微调,标注需求因此大幅缩水。数据多、标注少的场景正中它的靶心1

2.2 对比学习:靠近自己,远离别人

对比学习的核心是对比损失:它衡量的不是「预测对不对」,而是「数据点两两之间的远近对不对」——样本配成对,远近就是损失2

该拉近的叫正例:同一个样本经两次不同数据增广得到的两个版本。

该推远的叫负例:不同样本之间;负例对(不同样本之间)的表示要推远。

(数据增广=对原图做翻转、裁剪、变色这类「不改变内容」的变换。)

训出来的表示有两个性质:对增广不变(同一个样本怎么变都认得), 对不同样本可分3。之后两条路任选:直接在表示上聚类,或者接一个小分类头—— 后者只需要很少的标注数据,因为难的活(学表示)已经干完了4

2.3 非对比学习:不要负例,但要防偷懒

负例对有个隐性成本:你得先假设「这两个样本不同类」。在医学影像里「什么算不同」本身模糊, 语言数据里挑负例还会引入偏见——这些场景里非对比学习更合适5

非对比学习干脆不要负例,只拉近正例。但一眼就能看出风险:全部样本都会被映射(挤)到同一个点, 损失照样是零——这就是第 06 章见过的 mode collapse。解法是双网络6:

  • 在线网络(学生):真正被训练的那一个;
  • 目标网络(老师):和在线网络同构,不参与梯度更新,可以是它的滑动平均;
  • 关键的不对称:在线分支多接一个线性预测头,训练它去预测目标网络的输出7

「学生要去猜老师」这个额外的任务量,让「全体坍缩到一个点」不再是可行解—— 坍缩了就没东西可猜。老师隔一阵子吸收学生的进度,整体缓慢而稳定地前进。

2.4 等变性:比「不变」更进一步的约束

本章主线的几何学习把要求从「不变」升级为「等变」:

术语要求一句话
不变性(invariance)输入变了,输出不变认得出「还是它」
等变性(equivariance)输入按某规则变,输出按已知规则跟着变说得出「它怎么动了」

对比/非对比学习追求不变性;几何学习追求等变性——把增广的作用变成监督信号本身8。 落地工具是逆变换(detransformation):图像被变换过,网络的预测也要被「逆着变换回去」, 然后比较逆回去之后的预测是否一致9。下面走查这套机制。

2.5 主走查:一张图,训练一个定位器

任务:给出显微图里单个粒子的精确坐标 (x, y)。粒子在光学系统里呈现为一个模糊光斑—— 衍射极限(光学系统分辨两个点的物理下限)以下的东西,图像上就是一小团晕10。 传统监督做法需要成千上万张带位置标注的图;LodeSTAR(2022 年发表的计算方法, Midtvedt 等)号称:从十几万张标注图降到一张无标注图11

训练数据:仿真生成 100 张粒子图,不带任何位置标签(测试集另备 5000 张带真值,只用来验收)12。 训练循环每一步都在算具体的数13:

① 取一张图 x
② 复制 8 份,各自随机平移一小段距离(平移量:每份在 ±2.5 像素内随机抽)
③ 网络对每份预测位置
④ 把每个预测减去对应的平移量(逆变换),换算回原图坐标系
例:某份平移了 (+1.3, -2.1) 像素,网络说"粒子在 (25.8, 30.4)"
逆变换后 = (25.8, 30.4) − (1.3, -2.1) = (24.5, 32.5)
(这组数是为演示编的,不是原书实测)
⑤ 损失 = 8 个逆变换后预测值之间的分歧(对平均值算 L1)
(这 8 个数理应完全一致——因为它们说的都是同一张原图里同一个粒子)

第 ⑤ 步就是全部机关:「平移了输入,位置就该平移多少」是物理事实,不是人教的知识。 预测若不守这条规律,损失就会罚它。网络被逼着学会「看图报坐标」—— 尽管从头到尾,没有任何人告诉它正确坐标是什么。

第一个坑:整体偏移。 这样训出来的网络只保证「自己跟自己一致」, 不保证坐标系跟图框对好位——它可能把所有位置整体报偏一段。修法是一个数学小把戏: 把图像绕中心翻转,粒子真实位置变成 −p,而网络不知道翻转、照样加同样的偏移 b: 直接预测是 p+b,翻转后预测是 −p+b,两者相减除以二,b 恰好消掉14。 实测:翻转平均后,预测点回到对角线(完美预测线)上15

第二个坑:架构要配等变性。 上一版网络是「卷积骨干+密集顶层」, 但卷积层平移等变、密集层不是——密集层逼着网络给「粒子的每一个可能位置」各学一遍答案16。 对策:去掉密集顶层,把卷积输出按质心池化收拢——把网络输出的「每像素存在粒子的概率」 当成一张概率分布,算它的加权平均位置(顺带让网络多输出两个通道:粒子中心相对像素中心的偏移, 公式里的修正项)17。质心池化本身严格等变,整个网络从此天生守平移规律。 改进后的 LodeSTAR 显著优于前一版,预测紧贴对角线18

还有一个白送的能力:概率通道在大图上会出现多个峰,每个峰对应一个物体—— 在小图上训练的网络,可以直接拿到大图上检测多个物体,零额外训练19。 项目 6A 就这么干:拿一张单细胞的裁剪图训练,去数细胞视频里所有细胞的位置20

定量验收用 F1(0~1 的检测质量分:综合「报出的检出里有多少是真的」与「真物体里有多少被抓回」两项,1 为满分): 原书在这步跑出 0.973——6,459 次检出为真、339 次误报、16 次漏报21

3. 作者的判断与证据

  • 有证据的:预测-真值对比图上,三个版本(平移、平移+翻转技巧、LodeSTAR)的进步一级级可见; 「偏心粒子」式的失败与修复在 6A 项目复现。
  • 作者的归因:性能跃升来自架构与约束的一致——网络结构本身守平移等变, 学习信号才不用浪费在「学每个位置」上16
  • 适用性判断:非对比学习适合「负例难定义」的领域(医学影像、语言)5; 几何学习适合「有已知对称性」的任务(定位、追踪)——选路线先看数据的对称性家底。

4. 边界与局限

边界说明
对称性要挑对只用平移会留整体偏移(靠翻转修);任务的对称性家底决定这条路的天花板
等变性会被架构破坏一层密集层就破功;这类设计约束在换任务时要重新检查
仿真训练、实测定点本章训练用仿真图;跨到真实显微图仍需域匹配(第 05 章 3B 的老问题)
负例难题只是转移非对比学习绕开了负例,换来双网络+预测头的额外机制
噪声水平影响好坏练习 6-3 让读者测不同噪声水平下 LodeSTAR 的均方根(先平方、平均、再开方)误差——信号越弱,对称性信号也越弱

5. 可带走的

  1. 自监督≠无监督:它接管的是经典监督任务,常以「预训练+少量标注微调」的形态出场;
  2. 对比学习:正例拉近、负例推远;表示先学好,标注后少量;
  3. 非对比学习:去掉负例,靠「学生-老师」双网络+线性预测头防坍缩;
  4. 不变性是「认得出」,等变性是「说得出怎么动」——后者的监督信号更强;
  5. 平移图像 ⟹ 位置必平移:这一条物理事实就能当全部训练信号;
  6. 网络自己选参考系,就必有整体偏移;翻转取差可消(或把翻转塞进增广让它自学);
  7. 架构必须配约束:密集层破等变,质心池化守等变——约束写在结构里比写在损失里硬;
  8. 单图训练、多物检测:概率通道出多峰,大图零训练直接用。

6. 原文地图

主题原书章原文位置
自监督 vs 无监督、预训练Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:12(搜「extensive pretraining step」)
对比损失与正负例Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:16(搜「positive pairs」)
对增广不变Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:24(搜「invariant to the augmentations」)
聚类或小分类头Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:26(搜「much less data」)
非对比不要负例Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:30(搜「doesn't require negative pairs」)
双网络防坍缩Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:36(搜「online network and the target network」)
老师学生与线性预测头Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:38(搜「linear predictor」)
负例难定义的场景Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:40(搜「negative pair can be ambiguous」)
等变性Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:50(搜「imposing equivariance」)
逆变换Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:52(搜「detransforming the output」)
十几万到一张Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:6(搜「from hundreds of thousands of images to just one」)
衍射极限Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:76(搜「diffraction limit」)
LodeSTAR 出处Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:60(搜「LodeSTAR」)
100 张无标注训练图Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:98(搜「doesn't need the positions」)
平移算法五步Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:126(搜「Take a single image」) · text/50-fm-understanding-self-supervised-learning.txt:136(搜「translation equivariant」)
损失=预测方差Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:225(搜「variance of the detransformed predictions」)
整体偏移Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:285(搜「large bias」)
翻转取差消偏Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:291(搜「flip the image about its center」) · text/50-fm-understanding-self-supervised-learning.txt:314(搜「bias has now been corrected」)
翻转并入训练Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:318(搜「correct the bias automatically」)
密集层破坏等变Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:404(搜「isn't equivariant to translation」)
全局平均池化只不变不等变、质心池化Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:408(搜「center of mass」)
三个输出通道Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:426(搜「three channels」)
LodeSTAR 显著更优Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:451(搜「significantly outperforms」)
多物体零额外训练Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:469(搜「without any additional training」)
单细胞裁剪图训练Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:544(搜「single crop of a single cell」)
定量验收 F1=0.973Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:691(搜「measuring the F1 score」) · text/50-fm-understanding-self-supervised-learning.txt:726(搜「F1: 0.973」)
LodeSTAR 论文Understanding Self-Supervised Learningtext/50-fm-understanding-self-supervised-learning.txt:60(搜「LodeSTAR」)

Footnotes

  1. 出处:「Understanding Self-Supervised Learning」第 12 段(text/50-fm-understanding-self-supervised-learning.txt:12,搜「extensive pretraining step」)。

  2. 出处:「Understanding Self-Supervised Learning」第 16 段(text/50-fm-understanding-self-supervised-learning.txt:16,搜「positive pairs」)、第 22 段(text/50-fm-understanding-self-supervised-learning.txt:22,搜「different augmentations」)。

  3. 出处:「Understanding Self-Supervised Learning」第 24 段(text/50-fm-understanding-self-supervised-learning.txt:24,搜「invariant to the augmentations」)。

  4. 出处:「Understanding Self-Supervised Learning」第 26 段(text/50-fm-understanding-self-supervised-learning.txt:26,搜「much less data」)。

  5. 出处:「Understanding Self-Supervised Learning」第 40 段(text/50-fm-understanding-self-supervised-learning.txt:40,搜「negative pair can be ambiguous」)。 2

  6. 出处:「Understanding Self-Supervised Learning」第 36 段(text/50-fm-understanding-self-supervised-learning.txt:36,搜「online network and the target network」)。

  7. 出处:「Understanding Self-Supervised Learning」第 38 段(text/50-fm-understanding-self-supervised-learning.txt:38,搜「linear predictor」)。

  8. 出处:「Understanding Self-Supervised Learning」第 48-50 段(text/50-fm-understanding-self-supervised-learning.txt:48,搜「invariance to the augmentations」)、第 50 段(text/50-fm-understanding-self-supervised-learning.txt:50,搜「imposing equivariance」)。

  9. 出处:「Understanding Self-Supervised Learning」第 52 段(text/50-fm-understanding-self-supervised-learning.txt:52,搜「detransforming the output」)。

  10. 出处:「Understanding Self-Supervised Learning」第 76 段(text/50-fm-understanding-self-supervised-learning.txt:76,搜「diffraction limit」)。

  11. 出处:「Understanding Self-Supervised Learning」第 6 段(text/50-fm-understanding-self-supervised-learning.txt:6,搜「from hundreds of thousands of images to just one」)、第 60 段(text/50-fm-understanding-self-supervised-learning.txt:60,搜「LodeSTAR」)。

  12. 出处:「Understanding Self-Supervised Learning」第 95-98 段(text/50-fm-understanding-self-supervised-learning.txt:94,搜「length=100」)、第 98 段(text/50-fm-understanding-self-supervised-learning.txt:98,搜「doesn't need the positions」)。

  13. 出处:「Understanding Self-Supervised Learning」第 126-136 段(text/50-fm-understanding-self-supervised-learning.txt:126,搜「Take a single image」);8 个变换与 ±2.5 像素范围见第 185-197 段(text/50-fm-understanding-self-supervised-learning.txt:185,搜「n_transforms」)、第 197 段(text/50-fm-understanding-self-supervised-learning.txt:197,搜「rand(self.n_transforms」)。

  14. 出处:「Understanding Self-Supervised Learning」第 291 段(text/50-fm-understanding-self-supervised-learning.txt:291,搜「flip the image about its center」)。原文给出 p=½(y_direct−y_flipped)。

  15. 出处:「Understanding Self-Supervised Learning」第 314 段(text/50-fm-understanding-self-supervised-learning.txt:314,搜「bias has now been corrected」)。

  16. 出处:「Understanding Self-Supervised Learning」第 404 段(text/50-fm-understanding-self-supervised-learning.txt:404,搜「isn't equivariant to translation」)、第 408 段(text/50-fm-understanding-self-supervised-learning.txt:408,搜「remove the dense top layer」)。 2

  17. 出处:「Understanding Self-Supervised Learning」第 408 段(text/50-fm-understanding-self-supervised-learning.txt:408,搜「center of mass」)、第 418-426 段(text/50-fm-understanding-self-supervised-learning.txt:414,搜「weighted average」)。

  18. 出处:「Understanding Self-Supervised Learning」第 451 段(text/50-fm-understanding-self-supervised-learning.txt:451,搜「significantly outperforms」)。

  19. 出处:「Understanding Self-Supervised Learning」第 467-469 段(text/50-fm-understanding-self-supervised-learning.txt:467,搜「several clusters of probability」)、第 469 段(text/50-fm-understanding-self-supervised-learning.txt:469,搜「without any additional training」)。

  20. 出处:「Understanding Self-Supervised Learning」第 544 段(text/50-fm-understanding-self-supervised-learning.txt:544,搜「single crop of a single cell」)。

  21. 出处:「Understanding Self-Supervised Learning」第 691 段(text/50-fm-understanding-self-supervised-learning.txt:691,搜「measuring the F1 score」)、第 726 段(text/50-fm-understanding-self-supervised-learning.txt:726,搜「F1: 0.973」)。