MoCo系列和SimCLR对比与总结

MoCo V1(Momentum Contrast for Unsupervised Visual Representation Learning)

MoCo的想法主要是在之前end-to-end和memory bank基础上产生的。q表示query,也就是对比的left;k表示key,也就是对比的right,k中既包含和q相似的样本(可能会标记为k+),也包含也q不相似的样本

关于end-to-end方式(The end-to-end update by back-propagation is a natural mechanism. It uses samples in the current mini-batch as the dictionary, so the keys are consistently encoded (by the same set of encoder parameters). But the dictionary size is coupled with the mini-batch size, limited by the GPU memory size. It is also challenged by large mini-batch optimization),实际上就是编码器q和k都可以通过梯度回传来传递参数,q和k都是在一个mini-batch中生成的,q和k可以用相同的编码器也可以用不同的编码器。因此end-to-end模式中字典大小和mini-batch size是等价的,受限于字典大小。SimCLR本质上也是一种end-to-end的方式,SimCLR用了更多的数据增量方式,而且提出在编码器后加一个projector,可以让效果大大编号。同时google的TPU可以把batch size调到8192,这是SimCLR普通人玩不起的。。。

memory bank会把整个数据集的特征都存到内存中,但是更新每次只能更新q的梯度,每次从memory bank里随机抽样一些key并且更新,但是这样的话大的bank里key不够一致。

因此MoCo主要两个contribution:1. Momentum解决memory bank不一致的问题,而且每次要给一个大的动量,实验测比如m=0.999;2. 用一个大的dictionary,通过一个动态queue来实现dictionary

另外MoCo在对下游任务做微调时,learning rate居然到30。。。如果和有监督的样本空间差别非常大

MoCo选择instance discrimination(个体判别,判断两张图是不是同一个东西)作为pretext tasks(代理任务,还有其他代理任务例如CPC【contrastive predictive coding,预测性对比学习,通过上下文信息来预测未来】和CMC【contrastive multiview coding,通过不同视角来进行对比,例如图片上色】),使用InfoNCE(Noise Contrastrive Estimation,两类,数据和噪声分两类;但是等到了InfoNCE就不止两类了,变成多类了,就这么点区别。注意NCE是要对噪声进行采样的,但是从形式上看和cross entropy loss区别只是一个是类别个数,另外一个是负样本个数)作为Loss Function。

这个视频讲解比较好

MoCo V2

1. 在末端用了非线性映射

2. 改进为扩充了一种数据增强方式,SimCLR 使用了模糊增强,于是 MoCo v2 也将此加入了增强集

3. 文章还采用了余弦学习率表(cosine learning rate schedule)

MoCo V3

1. 换了vit

2. MoCo v3采用了同一batch中的case作为key,取代之前版本中使用的memory queue。实验发现在batch size(4096)足够大的时候,两者的差异就很小

SimCLR

SimCLR本质上也是一种end-to-end的方式,SimCLR用了更多的数据增量方式,而且提出在编码器后加一个projector,可以让效果大大编号。同时google的TPU可以把batch size调到8192,这是SimCLR普通人玩不起的。。。

经验分享 程序员 微信小程序 职场和发展