Bootstrap Your Own Latent
本次分享的是Nips2020的一篇关于自监督学习(SSL)的文章,最近SSL掀起了一波新潮,来跟大家分享一下。
1、前言
最近几年CV领域的大部分自监督表示学习的方法都是依赖于精心设计的pretext task,例如: relative patch prediction, colorizing gray-scale images ,image jigsaw puzzle 等。但在对比学习兴起之后使人们省去了设计pretext task的时间,通过利用Contrastive Predictive Coding这个通用的预训练任务,产生了不少优秀的文章,也提出了一些效果比较好的模型,最经典的当属SimCLR、MoCo。但是他们都不可避免的使用正、负样本对来做对比,这就需要非常大的batch size,对存储要求比较高。这篇文章提出了一种不需要负样本即可超过SOTA的方法。文章中的主要对比模型就是SimCLR,下面进行简要介绍。
SimCLR
f(·)是resnet网络,g(·)表示双层的MLP。
Loss function
2i和2i-1来自同一张图片,2i和其他来自不同图片。
2、论文提出方法
论文中提出了一种不需要用负样本的模型BYOL,不仅达到了SSL的最好的效果,而且和其他的对比学习方法相比,对batch size、image augmentation更有弹性。那我们一起来看一下,这个如此厉害的模型到底长什么样子。
(1)模型
。。。。。果然就如此简单
(2)工作流程:
(3)loss function:
(4)参数更新:
作者为什么会想到不用负样本也可以成功?我们仔细思考一下,在对比学习出现之前的自监督学习的方法,是不是也没有负样本,是不是也成功了,而且设计的那些pretext task是不是大部分都是数据增强,是不是。。。。原来如此。
3、模型起作用的原因
(1)为什么要用MLP做一次projection?
可能是MLP将encoder生成的embeding变换到了更容易区分的空间。(因为大家都这么用,而且有效果。)
(2)为什么要再加一个predictor?target network为什么要用滑动更新?
因为predictor和target network可以一起来防止产生collapsing solution(e.g.[1,0,0,…,0])。
(3)他们是如何起作用的呢?
作者假定predictor是最优的,所以就有了下面的结果
模型更新参数就是由下面决定,
根据Var[X|Y,Z]≤Var[X|Y],在上面方程中丢弃Y的信息是不能使优化目标最小化的。但是使用X的信息也不会让优化目标减小,所以应该让X去接近于Y,由Y决定。
论文中有采用滑动更新可以完成上述更详细的解释(虽然结论是对的,但是感觉推导有些问题)有兴趣的可以去看一下。
(4)本文的对比损失和之前有负样本的对比损失有什么关系?
作者对InfoNCE做了如下改写:
SimCLR的对比损失就可以写成如下形式,
本文中的损失函数可写成,
4、性能
在下游任务上性能都很好,此处只展示一个图。
5、Ablations
(1)对batch size大小的弹性
(2)对数据增强作用的弹性
(3)target network的作用和影响
小结
论文主要的贡献是提出了一种不需要负样本的对比学习模型,而且将mean teacher模型应用到了无监督学习的思路上来。但是说文章完全不用负样本也待商榷,因为SimCLR那篇论文就曾提出,BN操作会泄露同batch的信息,这是否对结果有影响呢?
原文链接:https://arxiv.org/abs/2006.07733