Momentum Contrast for Unsupervised Visual Representation Learning
1.论文摘要
将contrastive learning 的过程转换为查字典的方式,通过队列和移动平均的encoder 的方式来构建字典,以此构建的字典具有容量大(学习到更高维的视觉特征)、一致性(使得key通过encoder 提取的特征保持一致性)、 即时性的特点。以此作为特征提取在下游任务的表现上超过了很多有监督预训练模型的结果。
2.方法介绍
-
查字典方式的contrastive Learning
输入为 encoded query q 和字典中一系列encoded的 K = k 1 , k 2 , k 3 . . . {k_1,k_2,k_3...} k1,k2,k3..., 其中只有一个正例 k + k_+ k+, 当encoded q 与 k + k_+ k+ 越相似,与K个其他负例越不相似,loss越低,具体计算公式为:
三种contrastive loss mechanisms 的对比:
a) q和k 的encoder 可以不同, 通过端到端的反向传播的方式进行更新,此时dictionary size 和 mini-batch 的强耦合,也就是dictionary size = mini-batch size,使得GPU大小限制了模型的性能。
b)key的表征从memeory bank 中采样,query 的编码器每次都通过SGD进行更新,而 dictionary key 对应的编码器的更新时刻是当同一个样本 image 再次出现的时候,进行更新。因此当 dictionary 中的 key 再次更新的时候,可能中间间隔时间较长,dictionary 中的 key 可能是用不同时刻差异性较大的encoder编码得到的,使得在计算 constrative loss 时,丢失了编码的一致性,导致网络的性能受到限制。
©通过动量更新的编码器实时更新新的key, 并且维护一个key 的队列。 -
Momentum contrast
文章是通过contrast learning来将输入(图片等)的特征构建一个大型的离散字典, 这个字典的动态性体现在,key的选取是随机的以及key的 encoders是随训练而不断更新的。同时作者希望key 的encoder 即使在更新但也要保持一致性(保证key 编码的一致性)。具体方法是通过(1)将字典用队列的方式构建,当前的mini-batch 进队列,最老的mini-batch 出队列,使得字典的size 可以不依赖于mini-batch size 而作为超参数进行设置。(2)momentum update: 只有q encoder 的参数通过反向传播更新,key encoder的 参数更新相比于q 更加平滑, 使得即使是不同mini-batch 的 key 编码的特征也保持一致。实验表明,当 𝑚=0.999 时效果最好,说明对 momentum encoder 进行缓慢更新是使用队列的关键所在,可以保证 dictionary keys 中的一致性。
实验结果
采用ResNet 作为encoder, 同时为了避免BN造成的sample 之间的信息泄露,引入了shuffling BN, 在每个GPU上对sample 独立的做BN.
对比三种contrastive loss mechanism的效果,可以发现:K越大, 效果越好。端到端的mechanism 在K比较小的时候与MoCo 效果相当,但是受限于mini-batch size; memory bank 能支持较大的字典size, 但是表现比Moco 低2.6%。
在同等参数量情况下,性能优于其他方法;随着参数量增加,性能也随之提升。
总结:巧妙地利用了维护队列的思想,让 dictionary 的大小尽可能大的同时保证了 dictionary 中 key 的一致性。
MoCo 的无监督学习得到的模型性能在下游任务中展现出同等甚至超越有监督预训练模型的性能,将有监督和无监督的模型效果之间的距离拉近。