继续创造,加速生长!这是我参与「日新方案 10 月更文挑战」的第15天,点击查看活动概况


本文合计1945字,阅览大概需要花费4分钟


你们那种对比学习是辣鸡,我SwAV今天就要打开新局面!

论文地址:Unsupervised Learning of Visual Features by Contrasting Cluster Assignments

代码地址:github.com/facebookres…

假如你不懂什么是比照学习,直接看这篇文章会很费劲。建议阅览本文之前先看看两篇前馈文章:

  1. 诸神黄昏时代的比照学习 – ()

  2. “军备竞赛”时期的比照学习

假如你不想看这两篇文章也没有关系。我会极力极力,说得通俗易懂。毕竟我也是初学者,所以我感觉我了解的必定容易让小白也了解。假如有什么漏误欢迎各位大佬批评指正。咱们称这篇论文为SwAV

比照学习简单来说就需要找出正样本和负样本相互比照。在前面的这个学习的工作中,我们提出了林林总总的政府样本的选取方式,比方:

  • 将整个imagenet做成字典,从中抽取一个mini batch作为正样本。再从中随机抽取4096条作为负样本。
  • 从数据集中抽取一个mini batch对其增广,运用一个孪生网络,将原图放进一个网络,将增强之后的图放进另一个网络,二者一起进行练习,对二者运用一个NCE loss或许infoNCE loss。一张图片和它的增广作为正样本,剩余的图片及其增广作为负样本。
  • 从数据集中抽取一个mini batch对其进行两次增广,运用一个孪生网络,将一组图片增强放进一个网络,将另一组图片增强放进另一个网络,二者一起进行练习,对二者运用一个NCE loss或许infoNCE loss。

乍一看上面的做法如同都没有什么问题,做出来的最终作用也挺好的,可是这个时分一个做聚类的大佬跳了出来。他说不管你们比照学习的负样本怎么选择,你们的整个mini match都是从imagenet中随机抽取的,所以你们的负样本具有随机性。

  • 它或许会重复的抽取到同一数据。尽管你数据集有许多图片,可是你从中抽或许会抽到相同的图片。极端的情况下,假如你抽到一组图片作为正样本,然后你又抽到同样重复的一组图片作为负样本。那这样就会对练习形成影响。
  • 也或许不具有整个数据集的代表性。比方这个数据其实有许多许多种动物,可是你抽到的都是狗,这样数据便是没有代表性的。
  • 当然这样的选取的越全面作用越好,可是假如你选取的过多的负样本又会形成核算资源的糟蹋。

所以我提出用聚类。

你们那种对比学习是辣鸡,我SwAV今天就要打开新局面!

看一下上边图画。

左边是惯例的比照学习。将数据进行不同内强的增强,然后将增强后的两份数据别离放入不同的模型傍边获得对应的表明,最终进行比照。

右侧是作者提出的网络。也是将输入进行不同的增强,增强之后的数据也会进入到一个网络之中,获得相应的表明之后不会直接拿去做比照。中间加了一个C模块,这个模块是一个聚类模块。你得到的数据需要去跟聚类的中心比。

聚类中心便是右图里的c,也便是个prototype,它其实便是个矩阵,它的维度是d 乘以 k,d是特征的维度,这儿的d和特征的d 是相同的,比方说便是之前说的128维,这个k便是有多少个聚类中心。在这篇文章中它选的是3,000,ImageNet数据集上常用的一个参数聚类参数。

经过clustering让特征z和prototype c生成一个方针,也便是上图的q1、q2。

x1、x2是正样本的话,那z1 和 z2的特征就应该很类似,也就跟之前比照学习相同,z1和z2要尽或许的类似。那假如两个特征十分类似,按道理来说应该是能够相互去做猜测的,也便是说,假如拿z1这个特征去跟c去做点乘,按道理来说也是能够去猜测q2;反之亦然,z2和这个c去做点乘也能够猜测q1,所以说点乘之后的成果便是猜测。经过这种换位猜测(Swapped prediction)的办法,SwAV能够对模型进行练习。

最终的方针函数是这一个:

−1N∑n=1N∑s,t∼T[1znt⊤Cqns+1zns⊤Cqnt−log⁡∑k=1Kexp⁡(znt⊤ck)−log⁡∑k=1Kexp⁡(zns⊤ck)]-\frac{1}{N} \sum_{n=1}^{N} \sum_{s, t \sim \mathcal{T}}\left[\frac{1}{\tau} \mathbf{z}_{n t}^{\top} \mathbf{C} \mathbf{q}_{n s}+\frac{1}{\tau} \mathbf{z}_{n s}^{\top} \mathbf{C} \mathbf{q}_{n t}-\log \sum_{k=1}^{K} \exp \left(\frac{\mathbf{z}_{n t}^{\top} \mathbf{c}_{k}}{\tau}\right)-\log \sum_{k=1}^{K} \exp \left(\frac{\mathbf{z}_{n s}^{\top} \mathbf{c}_{k}}{\tau}\right)\right]

ImageNet才1000类,因此这儿聚类聚成3000个是十分满足的。那咱们来看一下运用聚类能处理什么问题。

  • 先说重复问题:由于你运用的是聚类中心进行比较。尽管是不同的聚类中心,那么他必定不或许呈现重复的情况。
  • 再说一下没有代表性的问题:聚类便是将众多的图片聚成不同的类别。与每一个类别的中心进行比照,是肯定具有代表性的。
  • 再说一下过去有过多负样本形成资源糟蹋的问题。假如要跟许多的负样本去做类比,或许就需要成千上万的负样本,而且即使如此也只是一个近似,而假如只是跟聚类中心做比照,则能够用几百或许最多3,000个聚类中心,就足以表明了。大大减少了核算资源消耗。

除了聚类,SwAV还提出了一个muti crop的办法,感兴趣的能够自己去看一下。

最终咱们来看一下它的作用。

你们那种对比学习是辣鸡,我SwAV今天就要打开新局面!

由于这篇文章是在BYOL之前出来的,所以它只和前面的模型做了一下比照,咱们能够明显的看到。他比咱们之前提到的无监督比照学习办法作用都要好,作用直逼有监督的办法。其实它甚至比身后的BYOL 和 SimSiam作用也要好。

而且当运用更大的模型的时分,也便是像图里说的相同,把一个Res50变宽,而且便是这儿的2倍、4倍、5倍这么宽的时分,SwAV的成果还能不停地涨。当用最大的模型(5倍的模型)的时分,SwAV已经跟有监督的模型,差距十分的小,而且SwAV也是要比SimCLR*2、SimCLR *4要高的。这篇文章还是十分值得一读的,而且作者也从另一个视点给咱们提出了一个改进办法,便是要让样本更具有代表性。这篇文章十分推荐我们看一看。