在自监督学习领域,基于contrastive learning(对比学习)的思路已经在下游分类检测和任务中取得了明显的优势。其中如何充分利用负样本提高学习效率和学习效果一直是一个值得探索的方向,本文「第一次」提出了用对抗的思路end-to-end来直接学习负样本,在ImageNet和下游任务均达到SOTA.
众所周知,负样本和正样本是对比学习的关键。进一步而言,负样本的数量和质量对于对比学习又是其中的重中之重。在BYOL[1]提出后,对于是否需要负样本也引发了很多讨论,本文从对抗的角度去探索负样本,也揭示了负样本的本质和BYOL在去除负样本之后仍然能够达到非常好的效果的原因。
论文链接: https://arxiv.org/abs/2011.08435
论文代码已开源: https://github.com/maple-research-lab/AdCo
AdCo仅仅用8196个负样本(八分之一的MoCo v2的负样本量),就能达到与之相同的精度。同时,这些可直接训练的负样本在和BYOL中Prediction MLP参数量相同的情况下依然能够取得相似的效果。这说明了在自监督学习时代,通过将负样本可学习化,对比学习仍然具有学习效率高、训练稳定和精度高等一系列优势。
目录
1、要不要负样本?
2、AdCo vs. BYOL
3、新思路:Adversarial Contrast: 对抗对比学习
4、实验结果
去年DeepMind提出的无监督模型BYOL[1]的一个突出特点是去掉了负样本,在讨论AdCo前,一个很核心的问题就是在自监督时代,我们究竟要不要负样本?
首先,从比较纯粹的实用主义角度来说,MoCo V2[2]这类基于负样本的对比学习方法,自监督训练的时间都是比BYOL较少的。这点不难理解,MoCo V2不需要基于Global Batch Normalization (BN)(GPU之间需要通讯),所以从速度来说仅仅需要BYOL约1/3的时间。
另一方面,类似MoCo V2的方法一个比较麻烦的地方是要不断得维护一个负样本的队列。但是,用一组负样本做对比学习,从训练性能的角度来说,从前诸多的实验来看可能更稳定,毕竟多个负样本的对比可以提供更多的样本的分布信息,比BYOL只在单个图像的两个变换增强样本得到的特征上做MSE从训练的角度来说可以更稳定。同时memory bank维持的负样本并不需要梯度计算,所以相关计算量可以忽略不计。
因此,我们认为负样本在对比学习里仍然是一个值得探索的方向。但需要解决如何提高负样本的质量和使用效率的问题。一个比较好的想法是我们能不能不再依赖一个被动的维护一个负样本队列去训练对比模型,而是直接通过主动学习的方法把负样本当作网络参数的一部分去做end-to-end的训练?
BYOL中除了global BN外,为了用一个分支得到的特征去监督另外一个分支输出的特征,还需要训练一个只存在于query分支的MLP的预测器(predictor)以达到非对称的结构防止训练collapse。
虽然BYOL的predictor里的参数不是负样本,但某种意义上可以看作是某种包含典型样本对应特征的codebook,这个codebook的组合形成了对另一个分支输出特征的预测。为了达到精确预测的目的,势必要求这个codebook要比较diverse,能比较好的覆盖另外一个分支输出的特征,从而阻止collapse的可能。
从模型参数的角度来说,这个额外的 Predictor Layer 相当于一般对比学习里用到的负样本,只不过前者是直接通过反向传播训练得到的,而后者在MoCo V2[2]和SimCLR[3]里是通过收集过去或者当前的batch中的特征得到的。
那么,一个自然的问题就是,负样本能够也能像预测器一样通过训练出来吗?如果可以,就意味着对比学习中的负样本也可以看作是模型的一部分,并且可以通过训练的方法得到,这就给出了一种更加直观优美的方法来构造负样本。
遗憾的是,直接去最小化contrastive loss并不能用来训练负样本,因为这样得到的是远离所有query样本的负样本,因此我们在AdCo中采取了对抗学习的思路。
依据此,我们提出了AdCo对抗对比学习,通过直接训练负样本的方式来进一步提高负样本的质量从而促进对比学习。
1、相比于memory bank去存储过往图片embedding的方式,我们完全可以把负样本作为可学习的权重来训练,这里的好处是我们的所有负样本可以在每次迭代中同步更新。质量。作为对比,MoCo V2每次只能更新当前负样本队列里的很小的一部分,这导致了最早进入memory bank的负样本对于对比学习的贡献相对较小。
2、当然,更新负样本就不能去最小化对应的contrastive loss,而要最大化它,使得得到的负样本更加地困难,而对训练representation network更有价值,这就得到了一个对抗性的对比学习,对抗的双方是负样本和特征网络。
3、通过对update负样本的梯度进行分析,我们发现这种方法具有非常明显的物理意义。负样本每次更新的方向都是指向当前正样本的一个以某个负样本所归属的正样本的后验概率为权重,对正样本做加权平均得到的梯度方向;
具体而言,文章中的公式(6)通过最大化对比损失函数可以给出直接训练负样本的梯度:
其中的条件概率是
实验发现,在同样的训练时间、minibatch大小下,AdCo的精度都会更高。这说明了,AdCo比其他的自监督方法就有更高的训练效率和精度。这种提升来自对负样本更有效的更新迭代。
相比于基于memory bank的方法,我们的模型在ImageNet分类任务上有了显著的提升。
同时,在下游检测和分类任务中,我们相比过往自监督方法和全监督方法都有显著的提升:
我们进一步AdCo是否可以通过训练更少的负样本来得到同样好的无监督预训练模型。答案是肯定的。
如下面的结果所展示的,只用原先1/4和1/8的样本,在ImageNet上的top-1 accuracy几乎没有任何损失。这进一步说明了,通过直接用对抗的方式训练负样本,把负样本看成是模型可训练参数的一部分,完全可以得到非常好的训练效果,而且相对于其他的模型,所用的 GPU训练时间也更少。
进一步而言,我们的学习效率也显著优于基于memory bank的方法,以下是不同自监督训练轮数下在ImageNet上的对比:
领取专属 10元无门槛券
私享最新 技术干货