【论文阅读】MoCo阅读笔记

视觉领域使用对比学习的里程碑的工作

2020CVPR最佳论文

无监督模型,超越了许多有监督训练的模型

什么是对比学习

对比着去学习

模型知道两张图片类似,与另一张图片不类似

所有类似的物体在特征空间相邻的区域,不类似的物体在特征空间中远一点

怎么知道两张图片相不相似?通过定义一些规则,从而认为哪些图片是相似的,哪些图片不是相似的

代理任务:instance discrimination 个体判别

每张图片都是自成一类

对比学习的损失函数:NCE

对比学习最厉害的地方在灵活性:重点在于找到一种规律去定义什么是正样本,什么是负样本

只要脑洞够大,哪个领域都能用

标题和摘要

Momentum contrast 动量对比

无监督,预训练模型

它作为一个预训练模型提取特征的效果非常好

意味着无监督和有监督对很多视觉任务的鸿沟来说,已经填上了

MoCo是第一个在很多主流任务上,比很多有监督的模型效果要好

引言

把对比学习的方法归纳成一个字典问题

query和key

一个正样本:一个叫anchor,一个叫positive

其他的负样本都是negative

query里是anchor

key里是其他的元素

这个字典越大,就可以拿query去和key做抽样对比,效果好

字典的key是用相同或者相似的编码器抽取得到的

在一个很大的没有标注的数据集上做完预训练以后,可以直接迁移到下游任务上的

这种无监督的预训练方式,可以超越imageNet一些有监督的训练方式

Moco是更加偏向于真实世界,在一堆图片上是可以表现的很好的

Moco可以在很多视觉任务上把无监督学习和有监督学习的坑填平

结论

我们的方法在不同任务,不同数据集上都取得了比较好的结果

MoCo设计的初衷就是去构造一个大的字典,从而让正负样本能够更有效地去对比,从而让对比学习可以提供一个更稳定的自监督信号,最后去训练这个模型

相关工作

无监督和自监督学习,可以有两个方向可以做

自监督学习是无监督学习的一种,这部分围绕这两个方面去写

  • 代理任务
  • 目标函数

代理任务是为了学习一个好的特征

目标函数的研究可以和代理任务分开

loss函数

提出了InfoNCE

最常见的构建目标函数的方式:就是原图的输出和它应该是的差异

loss函数

  • 判别式、生成式(目标是一致的)

  • 对比学习的目标函数(目标是通过抽取出来的特征决定的)

  • 对抗学习?这是什么

Pretext task代理任务

denoising auto-encoder

context auto-encoder

对比学习和代理任务可以配对使用

对于无监督学习,缺少的是标签,代理任务就是去生成一个自监督信号,从而去生成表征信息,需要一个目标函数去衡量之间的差异,从而让模型学得更好

方法

目标函数的设计

key里面只有一个key positive,只有一个正样本对

使用了infoNCE的损失函数

这个是基于crossentropy loss的实现

Momentum Contrast

字典是动态的,是随机取样的

编码器里的参数也是不断改变的

如果想学一个好的特征,字典需要有两个特性:大、一致性

  • 把字典看成队列

可以把字典的大小和mini-batch的大小剥离开

字典的大小可以特别大

Momentum update

key的编码器没法通过反向传播去更新参数

有一个动量参数,来更新参数

字典一致性

  • 端到端的学习方式

可以通过梯度回传,来更新参数

字典的大小和mini-batch size的大小是等价的

  • memory bank的形式

在memory bank中存下所有数据的特征

其他

moco的伪代码写的特别好,代码简介明了

  • BN操作

模型会走捷径的问题:在做多卡训练之前,先把样本的顺序打乱,然后再放到GPU上去算

实验

数据集:

  • imageNet
  • instagram

优化器

  • SGD随机梯度下降法

MOCO学到的特征非常强大

在视觉领域,在做对比学习时,绝大多数工作都是用的MoCo这一套框架

性能最好,硬件要求最低

在无监督学习里,模型大小是比较关键的,一般模型越大,模型效果越好

无监督学习最主要的目标,就是去学习一个可以迁移的特征

使用了一个特征归一化的方法,使模型的训练更加稳定一些

总结

用普通的GPU就可以去跑对比学习的实验

MoCo学出来的特征,和有监督学出来的特征有什么不一样

你可能感兴趣的:(论文阅读,论文阅读,笔记,深度学习)