前言
前两天Facebook AI发布了一篇Yann LeCun和研究科学家Ishan Misra合写的文章:《自监督学习:智能的暗物质》,具体介绍参见这里。文章中介绍了自监督学习的根本目的以及基于能量的自监督学习模型。
在最后,他们提到了Facebook在自监督学习方面的最新研究成果SEER以及实验效果。
在使用10亿张图像对一个含13亿参数的卷积网络进行自监督训练后,最终移植到其他任务上的效果甚至超过了有监督算法,达到了目前自监督学习的最高水平!
本博文对SEER算法的思想和算法进行介绍。原文链接
一、论文创新点
论文指出现存的自监督学习算法都是在精心收集的数据集ImageNet上进行训练,这不符合自监督学习的初衷。一个好的自监督学习算法应该可以用任意数据就学习到有效的知识。
因此论文在Instagram上面随意收集了10亿张图像作为自己算法的训练数据集,这些图像没有任何标签,也不知道它们来自多少种类别。这也是本文最核心的创新点 ==
二、算法流程
论文介绍的是一种自监督学习算法,它使用2020年发表在NeurIPS上的自监督学习算法SwAV作为基础,将其特征提取网络替换成RegNetY系列,再用10亿张图像进行训练。
这么看起来,仿佛没有太大的新意 o_o …
1.SwAV
出自论文:Unsupervised learning of visual features by contrasting cluster assignments
这是一种使用了聚类方法的自监督学习算法,这里的聚类方法指的是特征间的距离度量,而非机器学习中的聚类算法,SwAV看起来更像是一种不使用负样本的对比学习。
该算法的核心应该是对一张图像的两个变体的类别预测结果交叉求分类损失(即两个变体的分类结果互为对方的标签),从而避免了像DeepClustering中那样对每张图像生成伪标签,并实现了了对比学习。
具体步骤如下(不写符号表示了,详细的解析可以参看这里):
- SwAV中对一张图像做两种不同的变换,获得两张不同的图像。并分别利用特征提取网络获得两张图像各自的特征;
- 将这两个特征分别与prototypes池中的每个prototype做相似度度量,并将结果soft归一化,得到的即为两个变体的分类结果(softmax类型);
- 得到的两个分类结果互为标签,计算交叉熵损失,将两个损失加起来得到总损失。(为了提高性能,作者还设计了其他小损失一起加进来,这里不做介绍)
具体损失如下,其中
z
z
z代表了特征,
q
q
q代表软分类标签,
c
c
c代表了类中心prototypes。
这里需要注意的是,Prototypes就相当于聚类的中心,特征离哪个prototype越近,就将其归于哪一类。不过prototypes不是由属于该类的特征计算得到的,而是将其看作参与训练的网络参数。
2.RegNet系列
这是何凯明大神2020年提出的搜索网络结构,发表在论文Designing Network Design Spaces中。SEER算法中采用了该系列网络作为特征提取网络,可以获得比ResNet等一般网络更好的效果。
RegNet实质上是在限制了搜索空间后,用自动网络搜索算法搜索出来的网络结构, 它训练效果好且速度快,网络结构中包括了用于输入图像的主干(stem)、用于主要特征提取的主体(body)和用于进行分类的头部(head),其中主体部分包含了四个stage,在stage中包含多个block,block中又包含ResNet中的BottleNeck和几层卷积。整体结构可利用下图理解:
SEER算法则使用RegNetY系列网络,就是在RegNet基础上加入了注意力模块SENet。关于RegNet的更多信息参见这里。
三、实验结果
其实我认为这篇论文最重要的就是如何实现、如何训练以及如何调参,作者用了比算法描述更多的篇幅来介绍实现过程。使用了512块英伟达V100 GPU,设置batchsize为8704,在随意收集的10亿张图像上训练了8天,才获得了最佳的模型。这真不是一般人能做的实验的(⊙o⊙)
所以,我们直接来看实验结果吧…
作者在ImageNet上对预训练好的网络进行微调,并在ImageNet上测试分类准确率,得到以下对比结果:
同时,也在少样本任务上进行了测试,即微调网络时只使用ImageNet训练集的1%或10%,测试效果如下:
同时作者还对不同的网络结构进行了对比实验,发现还是RegNet的效果最好。
总结
真的是很厉害的实验过程和实验结果,收集到的数据集也很大,算法本身没有突破,但是实现是真的🐂