视觉领域使用对比学习的里程碑的工作
2020CVPR最佳论文
无监督模型,超越了许多有监督训练的模型
对比着去学习
模型知道两张图片类似,与另一张图片不类似
所有类似的物体在特征空间相邻的区域,不类似的物体在特征空间中远一点
怎么知道两张图片相不相似?通过定义一些规则,从而认为哪些图片是相似的,哪些图片不是相似的
代理任务:instance discrimination 个体判别
每张图片都是自成一类
对比学习的损失函数:NCE
对比学习最厉害的地方在灵活性:重点在于找到一种规律去定义什么是正样本,什么是负样本
只要脑洞够大,哪个领域都能用
Momentum contrast 动量对比
无监督,预训练模型
它作为一个预训练模型提取特征的效果非常好
意味着无监督和有监督对很多视觉任务的鸿沟来说,已经填上了
MoCo是第一个在很多主流任务上,比很多有监督的模型效果要好
把对比学习的方法归纳成一个字典问题
query和key
一个正样本:一个叫anchor,一个叫positive
其他的负样本都是negative
query里是anchor
key里是其他的元素
这个字典越大,就可以拿query去和key做抽样对比,效果好
字典的key是用相同或者相似的编码器抽取得到的
在一个很大的没有标注的数据集上做完预训练以后,可以直接迁移到下游任务上的
这种无监督的预训练方式,可以超越imageNet一些有监督的训练方式
Moco是更加偏向于真实世界,在一堆图片上是可以表现的很好的
Moco可以在很多视觉任务上把无监督学习和有监督学习的坑填平
我们的方法在不同任务,不同数据集上都取得了比较好的结果
MoCo设计的初衷就是去构造一个大的字典,从而让正负样本能够更有效地去对比,从而让对比学习可以提供一个更稳定的自监督信号,最后去训练这个模型
无监督和自监督学习,可以有两个方向可以做
自监督学习是无监督学习的一种,这部分围绕这两个方面去写
代理任务是为了学习一个好的特征
目标函数的研究可以和代理任务分开
提出了InfoNCE
最常见的构建目标函数的方式:就是原图的输出和它应该是的差异
loss函数
判别式、生成式(目标是一致的)
对比学习的目标函数(目标是通过抽取出来的特征决定的)
对抗学习?这是什么
denoising auto-encoder
context auto-encoder
…
对比学习和代理任务可以配对使用
对于无监督学习,缺少的是标签,代理任务就是去生成一个自监督信号,从而去生成表征信息,需要一个目标函数去衡量之间的差异,从而让模型学得更好
key里面只有一个key positive,只有一个正样本对
使用了infoNCE的损失函数
这个是基于crossentropy loss的实现
字典是动态的,是随机取样的
编码器里的参数也是不断改变的
如果想学一个好的特征,字典需要有两个特性:大、一致性
可以把字典的大小和mini-batch的大小剥离开
字典的大小可以特别大
key的编码器没法通过反向传播去更新参数
有一个动量参数,来更新参数
可以通过梯度回传,来更新参数
字典的大小和mini-batch size的大小是等价的
在memory bank中存下所有数据的特征
moco的伪代码写的特别好,代码简介明了
模型会走捷径的问题:在做多卡训练之前,先把样本的顺序打乱,然后再放到GPU上去算
数据集:
优化器
MOCO学到的特征非常强大
在视觉领域,在做对比学习时,绝大多数工作都是用的MoCo这一套框架
性能最好,硬件要求最低
在无监督学习里,模型大小是比较关键的,一般模型越大,模型效果越好
无监督学习最主要的目标,就是去学习一个可以迁移的特征
使用了一个特征归一化的方法,使模型的训练更加稳定一些
用普通的GPU就可以去跑对比学习的实验
MoCo学出来的特征,和有监督学出来的特征有什么不一样