原文地址
https://arxiv.org/abs/1807.05520
论文阅读方法
初识
背景:
① 深度学习的发展使得很多领域都取得了惊人的进步,特别是在图像分类领域,准确率已经达到超过人类的水平,然而现在通过改变网络的结构对分类准确率的影响已经越来越小,因此人们把关注点放在扩充数据集上,现有的常见数据集规模相对现在深度学习发展水平来说也是有些不够的,然而扩充数据集不是一件简单的事,许多时候需要进行人工的标注,既然有人为的参与就一定会有错误的出现,这些错误的标注也会成为影响训练效果的因素。因此使用无监督的方法生成更大的数据集也成为了现在研究的需求。
② 一些人工设置的特征一般只能在特定的任务取得好效果。
③ 几乎没有聚类方法使用端到端的训练来学习特征,之前聚类方法主要是针对固定特征之上的线性模型而设计的,如果要进行特征的同时学习,模型的效果就会微乎其微。
参考链接1
本文提出了“Deep Cluster”方法,来捕获通用视觉特征(相当于代替预训练模型作用)。Deep Cluster结合 卷积神经网络 + 标准的聚类方法(K-Means),迭代训练从而使卷积网络获取视觉特征。其整个流程如上图所示,利用卷积网络提取特征进行聚类,再利用聚类结果对数据集赋予“伪标签”继续训练卷积网。
相知
2. Related Work
① 介绍了与本工作相关的几个特征无监督学习;② 介绍了自监督学习:主要关于pretext task
的自监督方法,作者认为其缺点在于好的设计需要专业领域知识;③ 生成模型:用于图像生成的无监督学习,并且提到GAN也可以用来提取视觉特征,但效果很差。
3. Method
如上图,主要的迭代过程分为两个部分,聚类 + 分类。
① 聚类:
利用传统聚类方法,例如K-Means聚类,将从卷积神经网络中抽取的特征(N个特征,代表N张图像)聚成K类,然后根据上述loss function
对每个样本x赋予伪标签y,其实就是K-Means聚类。
② 分类:
避免平凡解:
利用聚类的时候会遇到平凡解的情况,平凡解就是网络在训练过程中如果不进行限定就可能会导致网络为了拟合损失函数走了捷径,反而什么都没有学到。本文提到了两个避免的方案:
① Empty cluster:使用模型来预测伪标签,可能使得网络产生的特征经过聚类都位于某个簇心周围,而使得其他簇心没有样本,这个是由于没有限制某个簇心不能没有样本。一个解决方法是限制每个簇心最少的样本数,这需要计算整个数据集,代价太高;另一种方式是当某个簇心为空时,随机选择一个非空的簇心,在其上加一些小的扰动作为新的簇心,同时让属于非空簇心的样本也属于新的簇心。
② Trivial parametrization:另外一个问题是大量的数据被聚类到少量的几类上,一种极端场景是被聚类到一类上,这种情况下网络可能对于任意的输入都产生相同的输出。解决这个问题的方法是根据类别(或伪标签)对样本进行均匀采样。这种方法也等效于根据每个Cluster的数量对loss function
进行加权。
参考链接2
实验细节:
具体实验细节见原文,这里只列几个关键的地方。
① 预处理使用了基于Sobel滤波的线性变换去除颜色并增加局部对比度; ② 使用数据增广(随机翻转以及剪切缩放),因为促使增广数据的一致性对特征学习有好处 ③ 提取出来的特征经过PCA降维到256维并进行l2归一化,再使用白化(whitened)减少特征间的相关性,使其具有相同的方差; ④ 每经过n个epoch进行一次聚类(ImageNet数据上n=1); ⑤ Tesla P100上训练ALexNet需要12天。
4. Experiments & 5. Discussion
实验和讨论这里不过多叙述,有兴趣请参照原文,也可以参照连接2。
回顾
本文为ECCV2018来自Facebook团队的作品,一次完整的训练需要在P100上训练12天,可以看出自监督/无监督学习代替预训练这个领域不是一般人能follow的。但是本文的思想还是很值得借鉴的,结合神经网络
+聚类
迭代学习,这可以推广到其他任务上。
参考
[1] https://zhuanlan.zhihu.com/p/40586911
[2] https://www.cnblogs.com/SuperLab/p/9846463.html
代码地址
https://github.com/facebookresearch/deepcluster