再介绍一篇最新的Contrastive Self-supervised Learning综述论文

自监督学习(Self-supervised learning)最近获得了很多关注,因为其可以避免对数据集进行大量的标签标注。它可以把自己定义的伪标签当作训练的信号,然后把学习到的表示(representation)用作下游任务里。最近,对比学习被当作自监督学习中一个非常重要的一部分,被广泛运用在计算机视觉、自然语言处理等领域。它的目标是:将一个样本的不同的、增强过的新样本们在嵌入空间中尽可能地近,然后让不同的样本之间尽可能地远。这篇论文提供了一个非常详尽的对比自监督学习综述。

我们解释了在对比学习中常用的前置任务(pretext task),以及各种新的对比学习架构。然后我们对不同的方法做了效果对比,包括各种下游任务例如图片分类、目标检测、行为识别等。最后,我们对当前模型的局限性、它们所需要的更多的技术、以及它们未来的发展方向做了总结。

图片

公众号「对白的算法屋」后台回复关键词【0910】下载论文PDF

1. 介绍

==============

深度学习从大量数据中自动学习的能力使其在各种领域广泛应用,例如CV和NLP。但是深度学习也有其瓶颈,就是它需要大量的人工标注的标签。例如在计算机视觉中,监督模型需要在图片的表示和图片的标签之间建立关联。

===

传统的监督学习模型极度依赖于大量的有标签数据。所以研究者们想研究出一种办法,如何利用大量的无标签数据。所以自监督学习的到了广泛关注,因为它可以从数据自己本身中寻找标签来监督模型的训练。

图片

图一:对比学习的直观理解:让原图片和增强的图片变近,让原图片和其他图片变远

监督学习不仅需要大量的标注数据,它还面临着下面的各种问题:

  • 模型的泛化性能

  • 伪相关

  • 对抗攻击

最近,自监督学习结合了生成模型和对比模型的特点:从大量无标签数据中学习表示。

一种流行的方式是设计各种前置任务(pretext task)来让模型从伪标签中来学习特征。例如图像修复、图像着色、拼图、超分辨率、视频帧预测、视听对应等。这些前置任务被证明可以学习到很好的表示。

图片

图二:对比自监督学习训练范式

在2014年生成对抗网络(GAN)推出之后,生成模型得到了很多关注。它之后变成了许多强大的模型的基础,例如 CycleGAN, StyleGAN, PixelRNN, Text2Image, DiscoGAN 等。

这些模型启发研究者去研究自监督学习(不需要标签)。

他们发现基于GAN的模型很复杂,不容易训练,主要是由于下面原因:

  1. 难以收敛

  2. 判别器太强大而导致生成器难以生成好的结果

  3. 判别器和生成器需要同步

图片

图三:不同的对比学习方法在ImageNet上的效果(TOP1 分类准确率)

与生成模型不同,对比学习是一种判别模型,它让相似样本变近,不同样本变远(见图一)。

为了达到这一点,一种衡量远近的指标被用来衡量嵌入之间的远近。

如图二所示,对比损失用来训练对比学习模型。一般来说,以图片为例,对比学习把一张图片的增强版本当作一个正例,其余图片当作反例,然后训练一个模型来区分正反例。区分依赖于某种前置任务。

这样做,学习到的表示就可以用到下游任务之中。

2.前置任务

前置任务是自监督学习中非常重要的一种策略。它可以用伪标签从数据中学习表示。

伪标签是从数据本身中定义而来的。

这些任务可以应用到各种数据之中,例如图片、视频、语言、信号等。

在对比学习的前置任务之中,原始图片被当作一种anchor,其增强的图片被当作正样本(positive sample),然后其余的图片被当作负样本。

大多数的前置任务可以被分为四类:

  • 颜色变换

  • 几何变换

  • 基于上下文的任务

  • 基于交叉模式的任务

具体使用哪种任务取决于具体的问题。

颜色变换

图片

图四:颜色变换前置任务,包括:原图,高四噪声,高斯模糊,颜色失真(jitter)

颜色变换很好理解,不多说了。在这个前置任务中,图片经过变换,它们还是相似的图片,模型需要学会辨别这些经过颜色变换的图片。

几何变换

几何变换也很好理解,不多说了。

原图被当作全局视图(global view),转换过的图片被当作局部试图(local view):

图片

图五:几何变换,包括:原图,裁剪、旋转、翻转等

基于上下文的

拼图

解决拼图问题是无监督学习中一个非常重要的部分。

在对比学习中,原图被当作anchor,打乱后的图片被当作正样本,其余图片被当作负样本。

图片

图六:解决一个拼图问题被当作学习表示的前置任务

基于帧的

这个策略一般应用于时许数据,例如传感器的数据或者一系列视频帧。

策略背后的意义是:时间上相近的相似,时间上很远的不相似。

解决这样的前置任务可以让模型学习到一些跟时间有关的表示。

在这里,一个视频中的帧被当作正样本,其余视频被当作负样本。

其余的方法还包括:随机抽样一个长视频中的两个片段,或者对每个视频片段做几何变换。

目标是使用对比损失(contrastive loss)来训练模型,使得来自一个视频的片段在嵌入空间中相近,来自不同视频的片段不相近。

Qian 等人 [20] 提出的一个模型中将两个正样本和其余所有的负样本之间进行对比。

一对正样本是两个增强的来自同一个视频的视频片段。

这样,所有的视频在嵌入空间中都是分割开来的,每个视频占据一个小的嵌入空间。

未来预测

图片

图七:对比预测编码CPC:contrastive predictive coding。图中的例子是音频预测。类似的想法可以用在图片、视频、文本等领域上

对于时序数据做对比一个最直观的方法是预测将来或者预测缺失的信息。

这个前置任务是基于已有的一系列时间点数据,去预测将来的高阶的信息。

在 [21] [22] 等模型中,高阶数据被压缩在一个低维度的隐藏嵌入空间之中。强大的序列模型被当作encoder来生成一个基于上下文的
  ,然后用  来预测未来的信息。其中蕴含的意义是最大化两者之间的互信息(Mutual information maximization)。

视图预测 View Prediction (Cross modal-based)

视图预测任务一般用在数据本身拥有多个视图的情况下。

在 [23] 中,anchor和它的正样本图片来自同时发生的视角下,它们在嵌入空间中应当尽可能地近,与来自时间线中其他位置的负样本图片尽可能地远。

在 [24] 中,一个样本的多视角被当作正样本(intra-sampling),其余的inter-sampling当作负样本。

图片

图八:从视频帧序列中学习表示

确定对的前置任务

选择什么样的前置任务取决于你所要解决的任务。

尽管已经有很多类型的前置任务在对比学习中提出来了,但是选择哪种前置任务依旧没有一个理论支撑。

选择正确的前置任务对表示学习有非常大的帮助。

前置任务的本质是:模型可以学习到数据本身的一些转换(数据转换之后依然被认作是原数据,转换后到数据和原数据处于同一嵌入空间),同时模型可以判别其他不同的数据样本。

但是前置任务本身是一把双刃剑,某个特定的前置任务可能对某些问题有利,对其他问题有害。

图片

图九:两张图片的形状差不多。但是,很多低阶的细节是不一样的。在这里使用正确的前置任务是非常重要的。

在 [26] 中,作者专注于选取正确的前置任务的重要性。

图片

图十:一个例子:为什么旋转前置任务有时候表现不好

3.架构

对比学习依赖于负样本的数量,来生成好的表示。

它有时候可以看作是一个字典查询任务,字典有时候是整个训练集,有时候是训练集的子集。

有时候对比学习可以根据如何采样负样本来进行分类。

我们将对比学习的架构分为以下四类(见图十一)。

图片

图十一:(a)端到端训练,一个encoder用来生成正样本的表示,一个encoder用来生成负样本的表示;(b)使用一个memory bank来存储和抽取负样本;(c)使用一个momentum encoder当作一个动态的字典查询来处理负样本;(d)额外使用一个聚类机制

端到端学习

端到端学习是一种复杂的基于梯度的学习系统,其中所有的模块都是可微的。这种架构偏好于大的batch size来存储更多的负样本。除了原图片和其增强的图片,其余的batch中的图片被当作负样本。这种架构包含两个encoder:一个query一个key(见图十一a)。

这两个encoder可以是一样的,也可以是不一样的。

使用一个对比损失,模型会让正样本的表示相近,让负样本和正样本的表示相远。

最近,一种端到端的模型 [15] SimCLR 获得了很大成功。他们使用了非常大的batch size(4096)训练了100个epochs。SimCLR证明了一种简单机制的模型也可以获得非常好的效果。

图片

图十二:SimCLR的效果

另外一种端到端的模型 [21] CPC从高维的时序数据中学习表示,其使用对比损失来预测将来。

端到端学习中的负样本与batch size有关。而batch size的大小受限于GPU/TPU 内存,所以这里有一个计算资源的限制,而且如何优化大batch训练也是一个问题。

使用 Memory Bank

端到端依赖于大的batch(译者:存疑,某些任务可能不需要),所以一种可行的解决方案是使用 memory bank。

Memory bank:的作用是在训练的时候维护大量的负样本表示。所以,创建一个字典来存储和更新这些样本的嵌入。Memory bank M 在数据集 D 中对每一个样本  存储一个表示  。该机制可以更新负样本表示,而无需增大训练的batch size。

图片

图十三:PIRL中的memory bank

PIRL [17] 是一种使用了 Memory bank 来学习图像表示的方法。

但是,在训练的时候维护一个大的memory bank是一个很复杂的任务。这种策略的一个缺点是更新表示的计算复杂度很高。

使用 Momentum Encoder

为了解决 memory bank 的缺点,momentum encoder [14] 被提了出来。这种机制创建了一种特殊的字典,它把字典当作一个队列的keys,当前的batch进入队列,最老的batch退出队列。

Momentum encoder 共享了encoder Q的参数。它不会在每次反向传播后更新,而是依据query encoder的参数来更新:
θ k ← m θ k + ( 1 − m ) θ q \theta_k \leftarrow m\theta_k + (1-m)\theta_

图片

特征表示聚类 Clustering Feature Representation

上面介绍的三种架构都是用某种相似度衡量来对比样本,使得相似样本相近,不相似样本变远,从而学习到好的表示。

本节介绍的机制使用两个共享参数的端到端架构,这种架构使用聚类算法来聚类相似样本表示。

图片

图十四:传统对比样本学习 vs 对比聚类学习

SwAV [13] 使用了聚类方法。其背后的idea在于,在一个嵌入空间中,猫的样本们应该和狗的样本们相近(都是动物),而与房子的样本们相远。

在基于样本的学习中,每个样本被当作一个数据集中的离散类。

离散类在连续的嵌入空间中(相似的样本表示相近)可能会有问题。

例如在一个batch里,正样本是猫,负样本们中也有猫,模型会让正样本的猫和负样本中的猫变远,不利于表示学习。

4.Encoders

在自监督学习中,Encoder非常重要,因为它们把数据样本遍历到隐空间中。

图片

图十五:训练一个Encoder,然后迁移学习到下游任务

没有一个强大的encoder的话,模型可能难以学到有效的表示,从而执行分类任务。对比学习中的大多数模型都采用了ResNet或其变种。

5.训练

为了训练一个encoder,需要一个前置任务来利用对比损失来进行反向传播。

对比学习最核心的观点是将相似样本靠近,不相似样本靠远。

所以需要一个相似度衡量指标来衡量两个表示的相近程度。

在对比学习中,最常用的指标是cosine similarity。

图片

Noise Contrastive Estimation (NCE) [38] 函数定义为:

图片

如果负样本的数量很多,NCE的一个变种 InfoNCE 定义为:

图片

与其他深度学习模型类似,对比学习应用了许多训练优化算法。训练的过程包括最小化损失函数来学习模型的参数。

常见的优化算法包括 SGD 和 Adam 等。

训练大的 batch 的网络有时需要特殊设计的优化算法,例如 LARS。

6.下游任务

图片图十六:计算机视觉中的各种下游任务

一般来说,计算机视觉的自监督训练包括两个任务:

  • 前置任务

  • 下游任务

下游任务聚焦于具体的应用,在优化下游任务的时候,模型利用到了前置任务优化时期所学到的知识。这些任务可以是分类、检测、分割、预测等。图十七提供了一个迁移学习的流程。

图片

图十七:计算机视觉中的下游任务

为了测试自监督学习中学习到的特征对下游任务的效果,一些方法,例如

  • kernel visualization

  • feature map visualization

  • nearsest-neighbor based approaches

被用来分析前置任务的有效性。

对 Kernels 和 特征图进行可视化

在这里,第一个卷积层的特征的kernels(分别来自于自监督训练和监督训练)被用来做比较。

类似地,不同层的 attention maps 也可以被用来测试模型的有效性。

图片

图十八:AlexNet所训练的 attention map

最近相邻撷取

一般来说,相同类的样本在隐藏空间中的位置应该相近。对一个输入的样本,使用最近相邻方法,可以在数据集中使用 top-K 抽取来分析自监督学习的模型是否有效。

**7.基准
**

最近,许多自监督学习模型挑战了监督模型的效果。在本章中,我们收集和对比了这些模型的效果,在下游任务上。对于图像分类,我们选择了ImageNet和Places数据集。类似的,对于目标检测,我们选择了Pascal VOC数据集。行为识别和视频分类我们选择了UCF-101,HMDB-51和Kinetics。

图片

图片

**8.结论
**

这篇论文总结了各种流行的自监督对比模型。

我们解释了对比学习中不同的模块:

  • 如何选择正确的前置任务

  • 如何选择学习架构

  • 如何在下游任务上优化

基于对比学习的模型获得了非常好的实验效果。

本文最后总结了当前对比学习面临的问题。

机器学习/对比学习算法交流群

已建立机器学习/对比学习算法交流群!想要进交流群学习的同学,可以直接加我的微信号:duibai996。加的时候备注一下:昵称+学校/公司。群里聚集了很多学术界和工业界大佬,欢迎一起交流算法心得,日常还可以唠嗑~

图片

图片

后台回复关键词【进群】

加入对比学习/CV/NLP交流群

后台回复关键词【对比学习】

获取最新对比学习在各大顶会上的论文合集!

最后欢迎大家关注我的微信公众号: 对白的算法屋duibainotes),跟踪NLP、推荐系统和对比学习等机器学习领域前沿,日常还会分享我的创业心得和人生感悟。想进一步交流的同学也可以通过公众号加我的微信,和我一同探讨技术问题,谢谢!

posted @   对白的算法屋  阅读(160)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2019-04-10 安装kubelet报错 : Depends: init-system-helpers (>= 1.18~) but 1.14ubuntu1 is to be installed
2019-04-10 Ubuntu14.04安装nvidia-docker2
点击右上角即可分享
微信分享提示