解决什么问题
做无监督的表征学习
用什么方法解决
本文提出了MoCo去做无监督的表征学习,虽然是基于对比学习的,但是本文是从另外一个角度来看对比学习,也就是说把对比学习看作是一个字典查询的任务。
具体来说,就是做一个动态的字典,这个动态的字典由两个部分组成:
效果如何
MoCo作为一个无监督的预训练模型,能够在7个下游任务(分割、检测等)上,而且比如说在VOC、COCO这些数据集上超越之前的有监督的预训练模型,有时候甚至是大幅度超越。
最后作者总结说,这就意味着对于很多视觉任务来说,无监督和有监督的表征学习中间的鸿沟已经填上了。
还存在什么问题
无监督对比学习学到的特征分布跟有监督学习学到的特征的分布是非常不同的 ,哪里不同,有多不同? 【等待学习中…】
那不还是需要标签使 模型知道哪几张图片为一类吗?
那为什么 对比学习一般在视觉领域被认为是无监督的训练方式呢?
因为在视觉领域,大家巧妙地设计代理任务,从而人为定义一些规则,这些规则可以用来定义哪些图片是相似的,哪些图片是不相似的,从而可以提供一个监督信号去训练模型,这也就是所谓的自监督训练
讲一个最广泛的代理任务:instance discrimination
如何定义哪些图片是相似的,哪些图片是不相似的呢?
instance discrimination 是这么做的:只有从自己图片裁剪下来的才是正样本,属于同一类,其它都是负样本。
这样一个框架就是对比学习常见的实现方式了。看起来好像平平无奇,但对比学习就厉害的地方就是它的灵活性。只要你能找到一种方式定义什么是正样本,什么是负样本,这就够了,剩下的操作都是比较标准。
大开脑洞去制定很多正样本负样本的规则,
对比学习实在是太灵活了,比天比地比空气,什么都能比,只要你脑洞够大,哪个领域都能用。
扩展到多模态领域,也就造就了open AI 的 CLIP 模型
什么是动量Momentum
本文提出了MoCo去做无监督的表征学习,虽然是基于对比学习的,但是本文是从另外一个角度来看对比学习,也就是说把对比学习看作是一个字典查询的任务
具体来说,就是做一个动态的字典,这个动态的字典由两个部分组成
这篇论文主要的亮点在于它的结果,所以剩下大篇幅的摘要留给了结果
更重要的是MoCo学习到的特征能够很好地迁移到下游的任务,这才是整篇文章的精髓
MoCo作为一个无监督的预训练模型,能够在7个下游任务(分割、检测等)上,而且比如说在VOC、COCO这些数据集上超越之前的有监督的预训练模型,有时候甚至是大幅度超越
最后作者总结说,这就意味着对于很多视觉任务来说,无监督和有监督的表征学习中间的鸿沟已经填上了
信号空间:
构造动态字典:
第二段:别人怎么用对比学习的方法在 CV 的无监督学习里?dynamic dictionaries
近期结合 对比学习和 CV 的无监督学习效果不错,出发点motivation 不一样,但可以被归纳为 “动态字典法”
这个字典满足两个要求:1.大(高维的视觉信息抽样);2.一致性(keys用相同或者相似的编码器得到的,这样跟query去对比才尽可能一致,否则query可能找到一个key跟它使用相同的编码器,而不是真的含有相同语义信息的key,变相地引入一个shortcut ,这样模型学不好)
介绍完了研究动机,还有之前工作的局限性,还有想要达到的目标,那么很自然地作者提出他们的方法了。
贡献:
第五段:MoCo 的代理任务 pretext task? instance discrimination
MoCo只是建立中间模型的方式,只是为对比学习提供了一个动态字典。
选择什么代理任务去做自监督学习呢?instance discrimination(简单,效果好)
最后一段老套路:卖一下结果
迁移下游任务,跟有监督的训练打个平手甚至在某些领域大幅度领先,模型永无止境,有望取代有监督的预训练的模型
最后一句话点题总结:希望MoCo 能对其它那些使用对比学习的代理任务有帮助
==之所以强调对比学习,MoCo 设计的初衷:去构造一个大的字典,从而让正负样本能够更有效地去对比,提供一个稳定的自监督信号,最后去训练这个模型 ==
对比学习的目标函数,在一个特征空间里,衡量各个样本的相似性。要达到的目标:让相似物体的特征拉得尽量近,不相似的物体特征推开得尽量远。
参考文字参考1——MoCo 论文逐段精读【论文精读】
NCE(noise contrastive estimatation ) loss
Info NCE
已经有了代理任务提供的正负样本,也有了目标函数,接下来该考虑模型的输入输出了
(整个论文,每一段和每一段之间最好都有承上启下的段落,每当开始讲一个新的东西的时候最好先讲一下为什么需要它,一旦有了这个承上启下的段落,也就是因为所以的逻辑关系之后,论文读起来就会更加顺畅。否则论文上来每一段都是直接讲方法的话,很容易让人看得一头雾水,无论自己觉得写的有多清晰,读者可能从一开始就没明白为什么要这么做)
文章的第一个贡献:如何把一个字典看成队列
文章的第二个贡献:如何使用动量的思想去更新编码器
作者在引言中提到过,之前的那些对比学习方法都可以看作是字典查找,但是它们都或多或少受限于字典的大小和字典的一致性的问题,这里作者将之前的方法总结了一下,归纳成了两种架构
第一种就是比较直接的端到端学习的方式
第2种:memory bank
MoCo的伪代码,走一遍 前向过程
建议看一下官方代码,写得极其出色,非常简洁明了,基本同伪代码
参考文字参考1——MoCo 论文逐段精读【论文精读】
划重点:无监督学习最主要的目标就是学习一个可以迁移的特征
MoCo这篇论文以及它高效的实现,能让大多数人有机会用普通的GPU就能跑对比学习的实验,做研究
因为MoCo在各个视觉任务上取得了更好的性能,也激发了很多后续分析性的工作,去研究MoCo学出来的特征到底和有监督学出来的特征有什么不同,还能从别的什么方向去提高对比学习
MoCo 论文逐段精读【论文精读】
文字参考1——MoCo 论文逐段精读【论文精读】
文字参考2——MoCo 论文逐段精读【论文精读】