​作者丨科技猛兽
编辑丨极市平台
本文原创首发于极市平台,转载请获得授权并标明出处。

大概是全网最详细的何恺明团队顶作 MoCo 系列解读!(上)

本文目录

1 MoCo v2
1.1 MoCo v2 的 Motivation
1.2 MoCo 相对于 End-to-end 方法的改进
1.3 MoCo v2实验

2 MoCo v3
2.1 MoCo v3 原理分析 x
2.2 MoCo v3 自监督训练 ViT 的不稳定性
2.3 提升训练稳定性的方法:冻结第1层 (patch embedding层) 参数
2.4 MoCo v3 实验

科技猛兽:Self-Supervised Learning系列解读 (目录)zhuanlan.zhihu.com

Self-Supervised Learning,又称为自监督学习,我们知道一般机器学习分为有监督学习,无监督学习和强化学习。 而 Self-Supervised Learning 是无监督学习里面的一种,主要是希望能够学习到一种通用的特征表达用于下游任务 (Downstream Tasks)。 其主要的方式就是通过自己监督自己。作为代表作的 kaiming 的 MoCo 引发一波热议, Yann Lecun也在 AAAI 上讲 Self-Supervised Learning 是未来的大势所趋。所以在这个系列中,我会系统地解读 Self-Supervised Learning 的经典工作。

1 MoCo v2

论文名称:Improved Baselines with Momentum Contrastive Learning

论文地址:

https://arxiv.org/pdf/2003.04297.pdf

1.1 MoCo v2 的 Motivation

上篇文章我们介绍了 MoCo 这个系列的第一版 MoCo v1,链接如下所示。

MoCo v1的方法其实可以总结为2点

(a)[1 原始的端到端自监督学习方法] 里面,Encoder fqf_\textrm{q}fq 和 Encoder fkf_\textrm{k}fk 的参数每个step 都更新,这个问题在前面也有提到,因为Encoder fkf_\textrm{k}fk 输入的是一个 Batch 的 negative samples (N-1个),所以输入的数量不能太大,即dictionary不能太大,即 Batch size不能太大。

现在的 Momentum Encoder fMkf_\textrm{Mk}fMk 的更新是通过动量的方法更新的,不涉及反向传播,所以 fMkf_\textrm{Mk}fMk 输入的负样本 (negative samples) 的数量可以很多,具体就是 Queue 的大小可以比较大,可以比mini-batch大,属于超参数。队列是逐步更新的在每次迭代时,当前mini-batch的样本入列,而队列中最老的mini-batch样本出列,那当然是负样本的数量越多越好了。这就是 Dictionary as a queue 的含义,即通过动量更新的形式,使得可以包含更多的负样本。而且 Momentum Encoder fMkf_\textrm{Mk}fMk 的更新极其缓慢 (因为 m=0.999m=0.999m=0.999 很接近于1),所以Momentum Encoder fMkf_\textrm{Mk}fMk 的更新相当于是看了很多的 Batch,也就是很多负样本。

(b)[2 采用一个较大的memory bank存储较大的字典] 方法里面,所有样本的 representation 都存在 memory bank 里面,根据上文的描述会带来最新的 query 采样得到的 key 可能是好多个step之前的编码器编码得到的 key,因此丧失了一致性的问题。但是MoCo的每个step都会更新Momentum Encoder,虽然更新缓慢,但是每个step都会通过4式更新一下Momentum Encoder,这样 Encoder fqf_\textrm{q}fq 和 Momentum Encoder fMkf_\textrm{Mk}fMk 每个step 都有更新,就解决了一致性的问题。

SimCLR的两个提点的方法

今天介绍MoCo 系列的后续工作:MoCo v2 和 v3。MoCo v2 是在 SimCLR 发表以后相继出来的,它是一篇很短的文章, 只有2页。在MoCo v2 中,作者们整合 SimCLR 中的两个主要提升方法到 MoCo 中,并且验证了SimCLR算法的有效性。SimCLR的两个提点的方法就是:

  • 使用强大的数据增强策略,具体就是额外使用了 Gaussian Deblur 的策略和使用巨大的 Batch size,让自监督学习模型在训练时的每一步见到足够多的负样本 (negative samples),这样有助于自监督学习模型学到更好的 visual representations。
  • 使用预测头 Projection head。在 SimCLR 中,Encoder 得到的2个 visual representation再通过Prediction head (g(.)g(.)g(.))进一步提特征,预测头是一个 2 层的MLP,将 visual representation 这个 2048 维的向量hi,hjh_i,h_jhi,hj进一步映射到 128 维隐空间中,得到新的representation zi,zjz_i,z_jzi,zj。利用 zi,zjz_i,z_jzi,zj 去求loss 完成训练,训练完毕后扔掉预测头,保留 Encoder 用于获取 visual representation。

关于 SimCLR 的详细解读欢迎参考下面的链接:

科技猛兽:Self-Supervised Learning 超详细解读 (二):SimCLR系列zhuanlan.zhihu.com

SimCLR 的方法其实是晚于 MoCo v1 的。时间线如下:

MoCo v1 于 2019.11 发布于arXiv,中了CVPR 2020;
SimCLR v1 于 2020.02 发布于arXiv,中了ICML 2020;
MoCo v2 于 2020.03 发布于arXiv,是一个技术报告,只有2页。
SimCLR v2 于 2020.06 发布于arXiv,中了NIPS 2020;

在 SimCLR v1 发布以后,MoCo的作者团队就迅速地将 SimCLR的两个提点的方法移植到了 MoCo 上面,想看下性能的变化,也就是MoCo v2。结果显示,MoCo v2的结果取得了进一步的提升并超过了 SimCLR v1,证明MoCo系列方法的地位。因为 MoCo v2 文章只是移植了 SimCLR v1 的技巧而没有大的创新,所以作者就写成了一个只有2页的技术报告。

1.2 MoCo 相对于 End-to-end 方法的改进

MoCo v2 的亮点是不需要强大的 Google TPU 加持,仅仅使用 8-GPU 就能超越 SimCLR v1的性能。End-to-end 的方法和 MoCo v1的方法在本专栏的上一篇文章 Self-Supervised Learning 超详细解读 (四):MoCo系列 (1) 里面已经有详细的介绍,这里再简单概述下二者的不同,如下图1,2,3所示。

End-to-end 的方法 (原始的端到端自监督学习方法): 一个Batch的数据假设有 NNN 个 image,这里面有一个样本 query q\color{purple}{q}q 和它所对应的正样本 k+\color{crimson}{k^{+}}k+q\color{purple}{q}qk+\color{crimson}{k^{+}}k+ 来自同一张图片的不同的 Data Augmentation,这个Batch剩下的数据就是负样本 (negative samples),如下图3所示。接着我们将这个 Batch 的数据同时输入给2个架构相同但参数不同的 Encoder fqf_\textrm{q}fq 和 Encoder fkf_\textrm{k}fk 。然后对两个 Encoder的输出使用下式 1 所示的 Contrastive loss 损失函数使得query q\color{purple}{q}q 和正样本 k+\color{crimson}{k^{+}}k+ 的相似程度尽量地高,使得query q\color{purple}{q}q 和负样本 k−\color{green}{k^{-}}k 的相似程度尽量地低,通过这样来训练Encoder fqf_\textrm{q}fq 和 Encoder fkf_\textrm{k}fk,这个过程就称之为自监督预训练。训练完毕后得到的 Encoder 的输出就是图片的 visual representation。这种方法的缺点是:因为Encoder fqf_\textrm{q}fq 和 Encoder fkf_\textrm{k}fk 的参数都是通过反向传播来更新的,所以 Batch size 的大小不能太大,否则 GPU 显存就不够了。所以,Batch size 的大小限制了负样本的数量,也限制了自监督模型的性能。

KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲ \small \mathca…

MoCo 的方法: 一个Batch的数据假设有 NNN 个 image,这里面有一个样本 query q\color{purple}{q}q 和它所对应的正样本 k+\color{crimson}{k^{+}}k+q\color{purple}{q}qk+\color{crimson}{k^{+}}k+ 来自同一张图片的不同的 Data Augmentation,这个Batch剩下的数据就是负样本 (negative samples)。 接着我们只把query q\color{purple}{q}q 和正样本 k+\color{crimson}{k^{+}}k+ 输入给2个架构相同但参数不同的 Encoder fqf_\textrm{q}fq 和 Momentum Encoder fMkf_\textrm{Mk}fMk 。所有的负样本 k−\color{green}{k^{-}}k 都会保存在一个队列 Queue 里面。然后对两个 Encoder的输出使用上式 1 所示的 Contrastive loss 损失函数使得query q\color{purple}{q}q 和正样本 k+\color{crimson}{k^{+}}k+ 的相似程度尽量地高,使得query q\color{purple}{q}q 和负样本 k−\color{green}{k^{-}}k 的相似程度尽量地低。在任意一个 Epoch 的任意一个 step 里面,我们只使用反向传播来更新Encoder fqf_\textrm{q}fq 的参数,然后通过2式的动量方法更新 Momentum Encoder fMkf_\textrm{Mk}fMk 的参数。同时,队列删除掉尾部的一个 Batch 大小的负样本,再在头部进来一个 Batch 大小的负样本,完成这个step的队列的更新。这样,队列的大小可以远远大于 Batch size 的大小了,使得负样本的数量可以很多,提升了自监督训练的效果。而且,队列和 fMkf_\textrm{Mk}fMk 在每个 step 都会有更新,没有memory bank,也就不会存在更新不及时导致的 fqf_\textrm{q}fq 的更新和memory bank更新不一致的问题。

θk←mθk+(1−m)θq(2)\theta_\textrm{k}\leftarrow m\theta_\textrm{k}+(1-m)\theta_\textrm{q}\tag{2} θkmθk+(1m)θq(2)

FAQ:MoCo方法里面这个队列 Queue 的内容是什么,是如何生成的?

答: 是负样本 k−\color{green}{k^{-}}k通过Momentum Encoder fMkf_\textrm{Mk}fMk ( fMkf_\textrm{Mk}fMk 采用2式的动量更新方法,而不是反向传播) 之后输出的值,它代表所有负样本的 visual representation。队列 Queue 的是 Batch size 的数倍大,且每个step都会进行一次 Dequeue 和 Enqueue 的操作更新队列。

1.3 MoCo v2实验

全文阅读:大概是全网最详细的何恺明团队顶作 MoCo 系列解读!

推荐大家关注极市平台公众号,每天都会更新最新的计算机视觉论文解读、综述盘点、调参攻略、面试经验等干货~

大概是全网最详细的何恺明团队顶作MoCo系列解读...(完结篇)相关推荐

  1. 【深度学习】大概是全网最详细的何恺明团队顶作MoCo系列解读...(完结篇)

    作者丨科技猛兽 编辑丨极市平台 导读 kaiming 的 MoCo让自监督学习成为深度学习热门之一, Yann Lecun也在 AAAI 上讲 Self-Supervised Learning 是未来 ...

  2. 解决训练不稳定性,何恺明团队新作来了!自监督学习+Transformer=MoCoV3

    本文是FAIR的恺明团队针对自监督学习+Transformer的一篇实证研究.针对Transformer在自监督学习框架中存在的训练不稳定问题,提出了一种简单而有效的技巧:Random Patch P ...

  3. MoCoV3:何恺明团队新作!解决Transformer自监督训练不稳定问题!

    文 | happy 源 | 极市平台 论文链接: https://arxiv.org/abs/2104.02057 本文是FAIR的恺明团队针对自监督学习+Transformer的一篇实证研究.针对T ...

  4. 何恺明团队推出Mask^X R-CNN,将实例分割扩展到3000类

    翻译 | AI科技大本营(ID:rgznai100) 参与 | shawn,刘畅 今年10月,何恺明的论文"Mask R-CNN"摘下ICCV 2017的最佳论文奖(Best Pa ...

  5. 详解何恺明团队4篇大作 !(附代码)| 从特征金字塔网络、Mask R-CNN到学习分割一切

    来源:新智元 作者:krish 本文5000字,建议阅读10+分钟. 本文介绍FAIR何恺明.Tsung-Yi Lin等人的团队在计算机视觉领域最新的一些创新,包括特征金字塔网络.RetinaNet. ...

  6. Paper:2020年3月30日何恺明团队最新算法RegNet—来自Facebook AI研究院《Designing Network Design Spaces》的翻译与解读

    Paper:2020年3月30日何恺明团队最新算法RegNet-来自Facebook AI研究院<Designing Network Design Spaces>的翻译与解读 导读: 卧槽 ...

  7. Paper之RegNet:《Designing Network Design Spaces》的翻译与解读—2020年3月30日来自Facebook AI研究院何恺明团队最新算法RegNet

    Paper之RegNet:<Designing Network Design Spaces>的翻译与解读-2020年3月30日来自Facebook AI研究院何恺明团队最新算法RegNet ...

  8. 如何看待何恺明最新一作论文Masked Autoencoders?

    来源 | 知乎问题 地址 | https://www.zhihu.com/question/498364155 编辑 | 机器学习算法与自然语言处理 原问题:如何看待何恺明最新一作论文Masked A ...

  9. CVPR 2021大奖出炉!何恺明获最佳论文提名,华人四篇“最佳”!第一届Thomas S. Huang 纪念奖颁发...

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 作者 | 陈大鑫.琰琰.青暮 本文转载自:AI科技评论 就在刚刚,CVPR 2021最佳论文.最佳学生论文等 ...

最新文章

  1. nero结果,对应的分析。如下。
  2. mac下,svn配置
  3. 【数据结构与算法】之深入解析“字符串相乘”的求解思路与算法示例
  4. SAP 电商云 Spartacus UI 产品明细页面路由路径的自定义配置
  5. log双线性模型log-bilinear model简单概括
  6. 【VMCloud云平台】SCOM配置(额外篇)-应用可用性150点实时性测试
  7. insmod module 失败(skyeye + armlinux)
  8. Java大数据-Week2-Day4-IDEA安装
  9. Building Web Parts for Microsoft SharePoint Products and Technologies
  10. java语言打印上三角和下三角,进一步得到九九乘法表
  11. 常见的接口测试 开源网站
  12. SQL课设之报刊订阅管理
  13. 【阿里云镜像】使用VM虚拟机安装OpenWRT并更换阿里云镜像源
  14. LPC1768以太网控制器
  15. 如何解决青年大学习的复制粘贴问题???
  16. PS 2019 Mac版 自学入门系列(五)——调配冷色与暖色
  17. 光功率 博科交换机_华为交换机查看光功率的方法请大神指教
  18. weston 配置文件去掉状态工具栏
  19. [转]JAVA环境变量设置完全版
  20. 股票查询小程序_以龙虎榜数据为例

热门文章

  1. 【CF #777 div2】A—D
  2. 宣汉中学2021高考成绩查询,四川省宣汉中学2021年排名
  3. AN GridView文件管理器Demo
  4. OleDbDataAdapter里的update方法问题
  5. tomcat服务器访问webapps资源404
  6. QQ图判断一个分布是否为正态分布
  7. 图片隐写 安恒ctf_CTF中图片隐写的一些整理总结
  8. isequal函数的用法
  9. java利用shh2 读取远程服务器文件/删除服务器文件
  10. 残疾山村老师30年学没近30大教生 月薪不到3百