使用 Momentum Encoder
为了解决 memory bank 的缺点,momentum encoder [14] 被提了出来。这种机制创建了一种特殊的字典,它把字典当作一个队列的keys,当前的batch进入队列,最老的batch退出队列。
Momentum encoder 共享了encoder Q的参数。它不会在每次反向传播后更新,而是依据query encoder的参数来更新:
θ k ← m θ k + ( 1 − m ) θ q \theta_k \leftarrow m\theta_k + (1-m)\theta_
特征表示聚类 Clustering Feature Representation
上面介绍的三种架构都是用某种相似度衡量来对比样本,使得相似样本相近,不相似样本变远,从而学习到好的表示。
本节介绍的机制使用两个共享参数的端到端架构,这种架构使用聚类算法来聚类相似样本表示。
图十四:传统对比样本学习 vs 对比聚类学习
SwAV [13] 使用了聚类方法。其背后的idea在于,在一个嵌入空间中,猫的样本们应该和狗的样本们相近(都是动物),而与房子的样本们相远。
在基于样本的学习中,每个样本被当作一个数据集中的离散类。
离散类在连续的嵌入空间中(相似的样本表示相近)可能会有问题。
例如在一个batch里,正样本是猫,负样本们中也有猫,模型会让正样本的猫和负样本中的猫变远,不利于表示学习。
4.Encoders
在自监督学习中,Encoder非常重要,因为它们把数据样本遍历到隐空间中。
图十五:训练一个Encoder,然后迁移学习到下游任务
没有一个强大的encoder的话,模型可能难以学到有效的表示,从而执行分类任务。对比学习中的大多数模型都采用了ResNet或其变种。
5.训练
为了训练一个encoder,需要一个前置任务来利用对比损失来进行反向传播。
对比学习最核心的观点是将相似样本靠近,不相似样本靠远。
所以需要一个相似度衡量指标来衡量两个表示的相近程度。
在对比学习中,最常用的指标是cosine similarity。
Noise Contrastive Estimation (NCE) [38] 函数定义为:
如果负样本的数量很多,NCE的一个变种 InfoNCE 定义为:
与其他深度学习模型类似,对比学习应用了许多训练优化算法。训练的过程包括最小化损失函数来学习模型的参数。
常见的优化算法包括 SGD 和 Adam 等。
训练大的 batch 的网络有时需要特殊设计的优化算法,例如 LARS。
6.下游任务
图十六:计算机视觉中的各种下游任务
一般来说,计算机视觉的自监督训练包括两个任务:
- 前置任务
- 下游任务
下游任务聚焦于具体的应用,在优化下游任务的时候,模型利用到了前置任务优化时期所学到的知识。这些任务可以是分类、检测、分割、预测等。图十七提供了一个迁移学习的流程。
图十七:计算机视觉中的下游任务
为了测试自监督学习中学习到的特征对下游任务的效果,一些方法,例如
- kernel visualization
- feature map visualization
- nearsest-neighbor based approaches
被用来分析前置任务的有效性。
对 Kernels 和 特征图进行可视化
在这里,第一个卷积层的特征的kernels(分别来自于自监督训练和监督训练)被用来做比较。
类似地,不同层的 attention maps 也可以被用来测试模型的有效性。
图十八:AlexNet所训练的 attention map
最近相邻撷取
一般来说,相同类的样本在隐藏空间中的位置应该相近。对一个输入的样本,使用最近相邻方法,可以在数据集中使用 top-K 抽取来分析自监督学习的模型是否有效。
**7.基准**
最近,许多自监督学习模型挑战了监督模型的效果。在本章中,我们收集和对比了这些模型的效果,在下游任务上。对于图像分类,我们选择了ImageNet和Places数据集。类似的,对于目标检测,我们选择了Pascal VOC数据集。行为识别和视频分类我们选择了UCF-101,HMDB-51和Kinetics。
**8.结论**
这篇论文总结了各种流行的自监督对比模型。
我们解释了对比学习中不同的模块:
- 如何选择正确的前置任务
- 如何选择学习架构
- 如何在下游任务上优化
基于对比学习的模型获得了非常好的实验效果。
本文最后总结了当前对比学习面临的问题。