Momentum Contrast for Unsupervised Visual Representation Learning

今日学习内容来自B站沐神对MOCO这篇论文的逐句讲解,简要做一下记录。主要是自己的一些理解,可能会存在理解不正确的地方。主要思想感觉大概理解,但是很多细节部分还不太懂,所以明天继续阅读一下源码,解决一下疑惑问题。

本文方法简:MOCO

再附上对比学习的一个总结:对比学习串烧总结

有代码,且官方发布的代码形式十分简洁明了,推荐。(正在学习中)

1、引入:

无监督学习的好处就在于不需要大量标注的data。对比学习通用的套路其实都是一致的,关键在于对正负样本的定义。简单来讲,就是取一个图像样本x,随机进行两次数据增强操作得到x1,x2。假设除了x之外的其他样本都作为负样本,x1,x2作为正样本,那么我们希望正样本之间的相似性越大越好,正样本与负样本之间的相似性越小越好。看起来很朴素无奇,但是对比学习的关键在于它的灵活性。

比如对于视频来讲,可以假设同一视频的两帧作为正样本,其他视频的所有帧都作为负样本;对于一个句子,把它送入模型,做两次前行传播且适用不同的dropout得到的两个特征作为正样本,其他句子得到的特征作为负样本;又或者,可以将一个物体的不同视角作为正样本,比如RGB图和语义分割图,其他图像作为负样本。可以看出,只要有想法,可以对自己的应用对象进行合理的正负样本的定义,就可以将它用在自己的研究方向上。

2、主要思路:

将对比学习转化为一个字典查询问题

此时我们将第一次数据增强后的样本作为一个anchor,我们称它为query,简称q; 另一次数据增强后的样本作为它的正样本,把它称为key,简称k0(其实也就是q+);其他的不同图像都作为负样本,简称k1,k2....kn.所以此时字典就可以定义为(把正样本与负样本放在一起,作为字典,因为他们都是相对于query来得到的正负样本的定义)

q                          [k0,k1,k2...........kn]

我们希望q可以查询到与它很相似的正样本k0在距离上尽可能接近, 与它不相似的k1,k2.......kn尽可能的远离。

所以此时会要求两个点:(1)这个字典key要足够大。因为只有它足够大,包含的样本信息足够丰富,模型才可以学习到更多不同的特征,泛化能力会更好

(2)希望key使用的是与query相同或者相似的编码器。排除编码器对模型训练带来的影响。因为如果使用相同的编码器,那么模型就会去学习特征,只能从特征中判断哪个样本与我相似,哪个样本与我是不相似的。否则模型就会去学习一个“ 捷径解”,比如这个key它使用的是和query相同的编码器,我就直接认为它和我是相似的,而不是深层的语义特征了。

3、损失函数

使用的是InfoNCE损失函数。K指的是负样本数量。

τ是一个温度超参数。对于该损失函数的理解就是当 ki !=k+  时,表明我们的查询q与 字典中的 k+ 不相似,尽可能让小,loss会很大,希望模型赶紧更新它的参数当  ki =k+时,表明查询q与字典中的  k+相似,希望尽可能大,log里的值会接近1,损失loss就会很小,说明模型已经学习到很好的特征。艰难理解中)

注意:温度τ的选择很重要。

看视频中是这样解释的:不能过大也不能过小。过大则损失对所有的负样本都一视同仁,导致模型不会学习到有用的特征;设置过小模型又只会关注到那些学习起来非常困难的样本,负样本里有可能存在潜在的正样本,导致模型学习不到好的特征,泛化效果不好。

4、主要改进

(1)字典以队列的形式表示出来:主要概括就是“新的进入,旧的出去”

模型在训练过程中,每个minibatch会有新的一批key进来,然后将之前最老的那些Key丢掉,那么这个字典里就可以建立的很大,有点像“动态更新?”所以key和batchsize大小就可以分离开,不会互相影响。batchsize可以固定为一个比较小的值,但是key就可以不断的动态更新,里面的值就会很多,从而建立起一个很大的字典。

(2)用动量的思想去更新编码器

但是上面Key字典建立的太大会导致一个问题,就是key这边的编码器无法进行反向传播更新梯度。所以解决办法:

理想办法:直接将q那边的编码器的参数复制一份过来,使用q的参数进行更新。但是实际上发现效果并不好。给出的解释是:快速改变的编码器降低了队列中的所有key的一致性(艰难理解中)。所以实际k这边采用的方法是:动量更新:

 别人的解释  :我理解这个一致性是对于字典中的反向传播来说,网络的参数受到每个样本的影响,而字典中包含大量的样本,那么在每一次反向传播的过程中对于字典的编码器网络的变化太大,从而导致提取的特征一致性太低,所以在这里采用的时momentum update的方法。

今日打卡!假期结束,明天继续加油呀~~~搞科研,不要emo~~~~~~~

参考链接:

学习笔记(三)对于moco模型的一些自我理解(有代码解读)

ZwQing:对比学习(Contrastive Learning)

Frank Cao:MOCO(基于动量比对的非监督式视觉表征学习)

宋原青 MoCo论文解读

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linear algebra is a pillar of machine learning. You cannot develop a deep understanding and application of machine learning without it. In this new laser-focused Ebook written in the friendly Machine Learning Mastery style that you’re used to, you will finally cut through the equations, Greek letters, and confusion, and discover the topics in linear algebra that you need to know. Using clear explanations, standard Python libraries, and step-by-step tutorial lessons, you will discover what linear algebra is, the importance of linear algebra to machine learning, vector, and matrix operations, matrix factorization, principal component analysis, and much more. This book was designed to be a crash course in linear algebra for machine learning practitioners. Ideally, those with a background as a developer. This book was designed around major data structures, operations, and techniques in linear algebra that are directly relevant to machine learning algorithms. There are a lot of things you could learn about linear algebra, from theory to abstract concepts to APIs. My goal is to take you straight to developing an intuition for the elements you must understand with laser-focused tutorials. I designed the tutorials to focus on how to get things done with linear algebra. They give you the tools to both rapidly understand and apply each technique or operation. Each tutorial is designed to take you about one hour to read through and complete, excluding the extensions and further reading. You can choose to work through the lessons one per day, one per week, or at your own pace. I think momentum is critically important, and this book is intended to be read and used, not to sit idle. I would recommend picking a schedule and sticking to it.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值