回顾过去一年左右的自监督学习领域的最重要发展,那么会发现很多优秀的作品:MoCo v1 和 v2,SimCLR v1 和 v2,BYOL。本文先对自监督表示学习进行一般性介绍,随后重点介绍这几种自监督学习方法。
Representation Learning
▲ Representations: The input image (224 x 224 x 3) is passed through a feature extractor (typically a trained CNN network) that non-linearly transforms the spatial features of the image to a vector space of dimension 512.
计算机视觉中的表征学习是从原始数据中提取特征。特征提取涉及将原始数据处理到向量空间中,捕获表示该数据的基础时空信息。
在计算机视觉中,表征学习算法可分为两类:
监督学习(Supervised learning): 利用大量的标注数据来训练神经网络模型,完成模型训练之后,不直接使用分类的 fc 层的输出,而是其前一层的输出作为 Representation 用于下游任务。
自监督学习(Self-Supervised Learning): 利用大规模的无标注的数据,选择合适的辅助任务(pretext)和自身的监督信号,进行训练,从而可以学习到 Representation 用于下游任务。
自监督学习的思想来源于自然语言处理(NLP)领域。在 NLP 中,一个大的未标记语料库通过表征学习抽取每个语料的表征,也就是将高维空间稀疏的表示转换为低维空间稠密的表示,然后再使用稠密的表示完成下游任务的训练。
而基于深度学习的计算机视觉任务面临的一个主要问题是大量数据处理的问题。为了获得良好的结果,通常需要标记大量的数据。在许多情况下,大量的标记是很麻烦的,所以自监督学习被用来作为一个解决方案来克服这一点。
现有的自监督学习通常分为两大类,生成方法(Generative Methods) 和对比方法(Contrastive Methods) 。生成方法专注于像素空间的特征,其过于关注像素细节,难以建立空间关联和结构。
而对比方法通过正面和负面的例子来学习表征。尽管不是全新的思路,但其在计算机视觉任务中取得了较快的发展。通常自监督的对比方法也称为自监督对比学习。
Contrastive Learning
3.1 Contrastive Loss(InfoNCE)
对比学习的核心思想是最大化相似性和最小化差异性的损失。先定义:
Positive sample (k₊):与 query 相似的样本
Negative sample (k₋):与 query 不相似的样本
Van den Oord et al.提出了一种称为 Noise Contrastive Estimation (InfoNCE) 得损失函数,如下:
这里的 q 是 encoded query 向量,而包含 encoded keys 的字典 k 记做
,每一个 query 有一个对应的 Positive sample 和 k 个 Negative samples,因此,研究的就是 (K+1)-way 分类器问题,其目标是将 q 分类为
。
也就是说,如果 q 尽可能接近
,同时又远离字典中其他 k 个负样本,那么损失值就会最小。
3.2 Contrastive Learning Architectures
3.2.1 End-to-End Backpropogation Based
一个思路是使用基于端到端反向传播的方法,有两个编码器,一个生成查询向量 q,另一个计算字典键 k(从当前的训练 batch 中获取)。举个例子来说,每一个 batch 采样 10 张图片,则每一张图片都和这 10 张图片算一个 contrastive loss。
虽然这在实践中可行,但算法由于 GPU 内存有限,字典的容量基本上是非常有限的,因此,end-to-end 问题的核心在于 dictionary size 和 batch size 的耦合。
针对 end to end 的耦合问题,memory bank 采用了将 dictionary 保存下来,每一个 batch 再去更新对应的表示。
Memory bank 中存储的是所有训练数据经过 key encoder 编码之后的表示。
在训练过程中,每一个 batch 采样出来的数据将重新被 key encoder 编码,替换掉 memory bank 中原来的表示。
而 key encoder 和 query encoder 是同样 network,不过在计算每个 batch 的 contrastive loss 时,虽然都要进行一次 dictionary 的采样,但在更新参数时,不会对 key encoder 传播梯度。
Memory Bank 的问题是:储存的 key 有用很早以前的参数的 key encoder 编码出来的,这会造成网络参数的不一致。
使用动量法实时更新键值编码器的参数,
而且每一个 batch 都会淘汰掉 dynamic dictionary 中最早被编码的那一批数据,然后把最新采样的数据加进去。这就缓解了 memory bank 中,过早 sample 的数据编码已经不一致的问题。
Related Papers
4.1 MoCo
先前的方法,有以下缺陷:
因此,FAIR 提出了 MoCo,使得构建的字典具有大容量和一致性的特点。如下图所示,MoCo 将字典表示为数据采样的队列:
当前 mini-batch 的编码表示特征入队时,旧的 mini-batch 的编码表示特征出队;
队列的大小和 mini-batch 的大小无关,因而字典可以有很大的容量;同时,字典的键值来自于先前的几个 mini-batches 的融合;
momentum encoder 是基于动量的滑动平均值计算得到,保证了字典的持续性。
伪代码如下,每次迭代时,对相同的样本使用了不同的数据增强方法,将结果分别作为查询集和键值。每次梯度传播不向 key encoder 传播,而只更新 query encoder 的参数。key encoder 的参数采用逐步向 query encoder 逼近的方式。
4.2 SimCLR
Google Brain 团队提出 SimCLR 发现了以下结论:
在我看来,第一点和第二点都是非常重要的结论,而第三点在后续的工作 MoCov2 和 BYOL 的试验中被证明不是必要条件。
SimCLR 的对比性学习主要来自两个部分:(1) 同张图片,通过不同 data augmentation 的互相拉引;(2) 不同图片的互相推离。论文相当关键的一部份就是研究了 data augmentation 对于 unsupervised contrastive learning 的帮助。
使用 ResNet-50 用作基础神经网络编码器,用于从增强数据示例中提取表示向量。最后一个平均池化层的输出,用于提取 representation。
在 representation 与 contrastive loss 间使用可学习的 non-linear projection,并证明效果较好。这边使用可学习的网路的优势在于避免计算 similarity 的 loss function 在训练时丢掉一些重要的 feature。论文中使用非常简单的单层 MLP,配上 ReLU activation function 作为 non-linear projection。
Contrastive Loss Function
在算 contrastive loss 时使用在 NT-Xent (the normalized temperature-scaled cross entropy loss),并证明效果会比较好。公式如下,可以把它当成一种算 similarity 的延伸方法就好。
其中,zi 和 zj 是从 Projection Head 获得的输出矢量,output∈{0,1} if k≠i,τ 表示温度参数。
最后提一个隐藏在 SimCLR 的细节:SimCLR 宣称的 SSL 与 CL 的效果是在做在 visual representation上,白话点就是指一组高维空间的 latent feature,在预训练之后,可以使用 CNN 图像的 representation,然后,此经过微调的网络将用于图像分类等下游任务。
MoCo v2 使用了 SimCLR 的两点有效改进:在 encoder 编码特征计算 loss 前加入了 MLP 的 projection head 以及多种数据增强手段,并且将这两点改进应用到 MoCo 框架,同时又解决 SimCLR 本身需要大 batch size 的问题。
原始的 SimCLR 是采用end to end 的方式,负例 keys 都是来源于同一个 batch,并且通过反向传播来更新参数。假设 batch 里有 N 个样本,则计算 affinity 的复杂度为 N*N, 计算量较大,且比较依赖于大的 batch size。
而通过引入 MoCo 的框架,只需要把 query 送到 encoder 中去,而不需要很大的Batch。其中Momentum encoder用于计算 positive 和 negative 的 encoding,但是这个 encoder 是不用反向梯度来更新的,而是直接用左边的 encoder 来做一个 moving average。
实验的结果也非常好,在 ImageNet 任务提升了 6%。在我看来,Moco v2 是站在了 MoCo 和 SimCLR 基础上,还是很好理解的。
4.4 SimCLR v2
SimCLRv2 使用了一种独特的训练方法,包括使用的无监督预训练、半监督训练、有监督的微调和未标记数据的蒸馏,这超出了本文的范围,就不做详细介绍,不过 SimCLRv2 对工业界还是有很多用处的。
因为现实世界中有很多未标记的数据,手动标记每个样本以进行监督学习是一种非常低效的方法。而 SimCLRv2 利用未标记的数据来改进和传输特定于任务的知识,并取得了很好的结果,难道这不值得借鉴吗?
4.5 BYOL
终于到了 BYOL,这篇是我非常喜欢的一篇。BYOL 不仅仅是集大成所作,使用了 MPL、DataAugment 和 momentum constant 而已,更重要的是其提出了 CL 中关于负样本的新认识,并证明了无需负样本也能够取得好的效果。
由于 BYOL 不需要进行 negative 样本,因此性能对 batch size 的大小不是特别敏感。同等参数量的情况下,BYOL 的效果也是非常好。
总结
关于近年来的自监督表示学习就介绍到这里,个人对这个方向有很多的期待,希望本文对您有所帮助。
[1] Falcon, William, and Kyunghyun Cho. "A Framework For Contrastive Self-Supervised Learning And Designing A New Approach."arXiv preprint arXiv:2009.00104(2020).
[2]Philip Bachman, R Devon Hjelm, and William Buchwalter. Learning representations by maximizing mutual information across views. arXiv preprint arXiv:1906.00910, 2019.
[3] Olivier J Hénaff, Ali Razavi, Carl Doersch, SM Eslami, and Aaron van den Oord. Data-effificient image recognition with contrastive predictive coding. arXiv preprint arXiv:1905.09272, 2019.
[4] Ting Chen, Simon Kornblith, Mohammad Norouzi, and Geoffrey Hinton. A simple framework for contrastive learning of visual representations. arXiv preprint arXiv:2002.05709, 2020.
[5] Kaiming He, Haoqi Fan, Yuxin Wu, Saining Xie, and Ross Girshick. Momentum contrast for unsupervised visual representation learning. arXiv:1911.05722, 2019.
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读 ,也可以是学习心得 或技术干货 。我们的目的只有一个,让知识真正流动起来。
📝 来稿标准:
• 稿件确系个人原创作品 ,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)
• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接
• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志
📬 投稿邮箱:
• 投稿邮箱: hr@paperweekly.site
• 所有文章配图,请单独在附件中发送
• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通
🔍
现在,在「知乎」 也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」 订阅我们的专栏吧
关于PaperWeekly
PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」 ,小助手将把你带入 PaperWeekly 的交流群里。