对比学习MocoV1

对比学习:希望模型能分辨哪些图片类似,哪些图片不类似,即类似的图片特征空间拉近,不类似的拉远。

可以设计不同的代理任务提供监督信号。

代理任务例子:个体判别

Xi经过两种Ti变成两张不一样的照片,为正样本。其他都是负样本。

损失:NCE loss

找到一种方式定义正负样本

视频:同一视频的任意两帧都是正样本,其他视频负样本。

NLP:SimCSE,同样句子forward,dropout不同,也是正样本。

物体的正面背面,深度图像等等。

MOCO v1

momentum contrast for unsupervised visual representation learning

momentum:Yt=m·Yt-1+(1-m)Xt加权移动平均

Abstract

把对比学习看成字典查询任务,构造了动态的字典(两个部分:队列(样本不用做梯度回传),移动平均编码器(字典里特征尽量保持一致,训练过程中发现很大一致的字典对无监督对比学习有好处))

linear protocol:骨干网络预训练好了,用到其他数据集时backbone freeze,只学FC层,间接证明特征提取的好不好

全面的在视觉领域比有监督好。

Introduction

NLP:信号空间是离散的(单词,词根词缀等等),很容易构建Tokenize(词对应成特征)的字典

CV:原始信号连续,高维

构造一个动态的字典

X1->X11(anchor)->Encoder11->f11

X1->X21(Positive)->Encoder12->f12

Negative:X2,X3,X4,…Xn

Encoder11和Encoder12可以是不同模型

负样本用Encoder12编码器,获得f2,f3,f4,…,fn

x11:xq

x12:xk

f2,f3,f4,…,fn:k1,…

f12:k0

对比学习转化为字典查询问题:

query:f11

key: f12(特征尽量相似),f2,f3,f4,…,fn(特征空间尽量远离f11)

最小化对比学习目标函数

好的结果猜想:1.字典大2.字典再训练过程中保持一致性

  1. 字典越大,key越多,表示视觉信息越多越丰富,q泛化好,小的字典模型可能学shortcut,泛化不好
  2. k0,k1,…,kn相同或相似编码器得到,和q对比时保持一致,否则q找到使用相似编码器的k,学到shortcut

之前对比学习方法受限于上述两个问题。

MoCo:给无监督对比学习构造一个大又一致的字典

img

queue:表示字典,受限于显卡内存,字典大小和前向batchsize大小分开

当前的mini-batch入队,最早的mini-batch出队,字典大小可以很大,其中元素更新不频繁

当前的batch是由当前编码器得到的,不同时刻的encoder不同,特征不同:

momentum encoder:Θk=m·Θk+(1-m)Θq

Θq:现在的编码器

Θk:momentum encoder

尽最大可能保持字典k的一致性

代理任务:instance discrimination

q和k是同一个图片的不同视角(同一个图片不同的随机裁剪),qk能配上对。

直接迁移到7个下游任务上(检测,分割)都能超越有监督

Related Work

自监督是无监督学习的一种。

1.代理任务pretext:没有实际应用场景,用来学习好的特征

2.Loss functions:最常见的是衡量输出和固定目标的差别,L1,L2,生成式(mae),判别式(eight position,一张图分9块,给出5,随机给一块预测在那个位置)

对比学习目标函数:衡量相似性,相似特征拉近,不同特征拉远

对比学习目标函数和生成式,判别式区别:前面两个是固定目标,对比学习目标是不断改变的(目标是encoder抽出的特征,在变,上文的k)

对抗性目标函数:衡量的是两个概率分布之间的差异,做无监督数据生成,后来做特征学习

Pretext tasks

  1. denoising auto-encoders:重建整张图
  2. context auto-encoders:重建某个patch
  3. colorization:图片上色当自监督信号

生成伪标签:

examplar image:同一张图做数据增广

patch oderings,tracking,聚类

**对比学习和不同代理任务关系:**代理任务可以配对某种目标函数使用。contrastive predictive coding (CPC)做预测性对比学习(context auto-encoding),contrastive multiview coding (CMC)用物体不同视角做对比和(图片上色很像,黑白和彩色)

对比有监督学习:

X->Y 和GT算loss

X->Y 代理任务充当GT,算loss

Method

Contrastive Learning as Dictionary Look-up

encoded query q

set of encoded samples{k0,k1,…},假设字典里只有一个k和q配对(理论上可以用多个)

对比学习目标函数要求:q和k0相似,loss低,q和其他所有k都不相似,loss也低(训练好了,不更新了)

为什么不能用cross entropy loss:k太大了算的多

NCE loss(noise contrastive estimation):之前类别太多不好算softmax不能算目标函数,简化为二分类,数据类别,噪声类别,做对比,计算复杂度还是很高,就选一些负样本取近似,选的样本少就不那么近似,选的多效果好。

InfoNCE:一个变体,噪声类别可能也有很多类。tao是温度超参数,类似知识蒸馏。K指的是负样本数量,sum是一个正样本和K个负样本上做的。就是cross entropy loss,做K+1分类。

img

代理任务不同时fq和fk可以完全相等、参数部分共享也可以不一样

Momentum Contrast

写作:第一段承上启下

如何把字典看成队列:队列里放key,每个minibatch新的入队,老的出队。可以用标准的minibatch size,字典可以很大。早的算的是过时的key,新的一致。

Momentum Update

key编码器没办法通过反向传播更新参数(梯度本来要更新队列中所有的k)。直接复制q的encoder的参数效果不好,更新太快参不一致。

提出动量更新:Θk=m·Θk+(1-m)Θq,虽然编码器不同,但区别不打,实验里m=0.999,更新非常缓慢,m=0.9效果比0.999效果不好

解释之前方法为何受限:

  1. 端到端:好处是encoder都可以通过梯度回传更新,字典一致性高,encoder可以不同以前工作用的都是同一个,实验都用res50,受限于字典大小(显存不够大),simCLR

    img

  2. memory bank:把数据集特征存到一起,高效,但是特征一致性不好,是在bank里随机抽样的,回传梯度更新encoder后在对应k的位置生成新的k,替换memory bank里旧的。这些特征都缺乏一致性,q和k计算时一个bank里的k是上一轮epoch更新的,非常不一致。

    img

    3.MoCo:

img

shuffle bn:多卡训练之前打乱样本再送

实验:

1.lr=30,有监督和无监督学到的分布是很不一样的

2.针对贡献的消融实验

3.下游任务数据集足够大可以直接随机初始化训练

Discussion and Conclusion

预训练数据集imagenet(100万)换到in-1m上,提升比较小,有没有可能和MAE结合起来用

he等人希望moco对其他contrastive learning的pretext任务有帮助,提供一个稳定自监督信号

MOCO v2

img

使用预测头

将 MoCo 网络结构中经过卷积层后的一层线性MLP扩展为两层非线性的MLP,使用ReLU激活函数。该方法在 SimCLR 中使用

数据增强策略

增加使用 Blur augmentation 来进行数据增光。但 color distortion 并未取得很好的效果

MOCO v3

还没看完,总的是使用transformer架构,backbone换成transformer encoder

猜你喜欢

转载自blog.csdn.net/qq_52038588/article/details/130857141