度量学习DML之MoCO

度量学习DML之Contrastive Loss及其变种_程大海的博客-CSDN博客

度量学习DML之Triplet Loss_程大海的博客-CSDN博客

度量学习DML之Lifted Structure Loss_程大海的博客-CSDN博客

度量学习DML之Circle Loss_程大海的博客-CSDN博客

度量学习DML之Cross-Batch Memory_程大海的博客-CSDN博客

度量学习DML之MoCO_程大海的博客-CSDN博客

数据增强之SpecAugment_程大海的博客-CSDN博客

数据增强之MixUp_程大海的博客-CSDN博客


 

度量学习的目标:

  1. 相似的或者属于同一类的样本提取到的embedding向量之间具有更高的相似度,或者具有更小的空间距离
  2. 对于out-of samples的样本,也就是未见过的样本,希望也能提取到有效的embedding,也就是模型的泛化能力更好

MoCo(queue+encoder滑动平均更新)

        论文:《Momentum Contrast for Unsupervised Visual Representation Learning》

        参考:MoCo论文解读 - 知乎

        参考:论文阅读笔记:MoCo - 知乎

        作者把contrastive learning学习问题(也可以理解为metric learning问题)比作一个在字典中的数据查找问题。以人脸识别问题为例,首先要准备人脸图像底库,把人脸图像向量化embedding得到底库中人脸图像的embedding集合(字典),人脸识别的过程就是给定一张新的人脸图片,用这张新图片在embedding集合中进行匹配查找。自监督的Contrastive loss的计算公式如下:

        从上述公式可以看到,在损失函数的计算过程中,强依赖于字典中的正负样本数量。在以往这类问题的模型训练方面,字典集合中的embedding通常来自于mini-batch中的样本,然后mini-batch中的样本相互之间进行匹配查找,这样的话就导致模型的性能受限于mini-batch的大小限制,增大mini-batch可以显著提升模型的性能。同时,mini-batch又受限于硬件资源的限制,不能设置的太大。如何在有限的硬件资源条件下,不增加模型训练的batch size,想办法来增加embedding匹配查找时的字典集合大小就成为至关重要的一步操作,上面讲到的Cross-Batch Memory方法也是从这个角度进行切入的。

        从增大embedding字典大小的角度进行切入会遇到两个核心问题:

  1. 在不增大batch size的条件下如何增大字典集合的大小?
  2. 增大字典集合势必会引入其他迭代轮次的样本特征,如何保证字典集合中不同迭代轮次的样本特征之间具有可比较性,也就是如何保持不同迭代之间样本特征的比较一致性?

         围绕上述两个问题,作者分别提出了对应的解决方案,对于第一个问题如何增大字典集合的大小,作者提出使用queue队列来存放embdding特征,队列的大小可以远远大于mini-batch的大小,队列中可以存放连续多个mini-batch中的样本特征,并且将当前mini-batch的特征入队列,最老的样本特征出队列。对于第二个问题如何保证连续的不同迭代轮次之间计算的样本特征之间具有一致的可比较性,作者提出了一种基于动量的滑动平均的encoder解决方案,通过在不同迭代之间的encoder进行动量滑动平均,得到具有“slowly progressing”的encoder,使得计算得到的字典中的不同迭代的特征之间具有可比性。

度量学习DML之MoCO_第1张图片

         假设当前迭代encoder的网络为,参数为,momentum encoder的网络为,参数为,更新momentum encoder的参数如下,同时在误差反向传播中只更新当前迭代的参数

        越大,momentum encoder模型更新的越平缓,队列queue中的特征之间的一致性就越高,可比较性也就越高。

度量学习DML之MoCO_第2张图片

你可能感兴趣的:(度量学习,DML,深度学习,度量学习,MoCO)