MoCo、SimCLR、BYOL、SwAV、iBot、DiNoV2、MAE、Beit、SimMIM、MaskFeat对比学习总结

本文深入探讨了对比学习在无监督视觉表示学习中的应用,包括MoCo、MoCoV2、MoCoV3、SimCLR、BYOL等方法。这些方法通过代理任务如实例判别、预测编码和多视图编码,利用对比损失函数优化特征表示。MoCo引入了动量编码和大型字典,解决了记忆库一致性问题。SimCLR扩大了批处理大小并使用投影层。BYOL则通过预测层避免了负样本坍塌。同时,文章还提到了SwAV、DiNo、iBot等聚类和预测式自监督方法,以及MAE、BEiT等生成式自监督模型,展示了各种自监督学习策略在图像表示学习中的创新和进步。

CPC(Representation Learning with Constrastive Predictive Encoding)

时间序列预测的代理任务

CMC(Constrastive MultiView Encoding)

对比式自监督图片,有负样本

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 论文逐段精读 - 知乎

手敲一下Pytorch版的伪代码:

import torch
import torch.nn as nn


loader = ...
encoder_q = ...
encoder_k = ...
aug1 = ...
aug2 = ...
queue = ... # (dim, K)
m = 0.9
tau = ...
optimizer = torch.optim.SGD(encod
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值