对比式无监督预训练(Contrastive Pre-training)

一、背景知识

1.Pre-train

深度学习发展起来至今已在许多领域取得非凡成就,但是data efficiency仍然是一个难题。为取得较好的性能,常常需要很大的数据集,对于各式各样的新领域和新任务而言,这无疑是耗费巨大的。解决这一难题的一个有效途径是探索深度领域的“可转移性”,即,人们从少量的样本和其他相关的事情中获取知识用于新的任务。
深度学习应用的生命周期常被划分为pre-train阶段和adaptive阶段,其中pre-train就是在获取可转移的知识。

2.对比学习

自监督学习(Self-supervised Learning,SSL)主要是利用辅助任务(pretext)从大规模的无监督数据中挖掘自身的监督信息。通过构造的监督信息,对网络进行训练,从而可以学习到下游任务有价值的表征。
即:

  • 其监督信息不是人工标注的;
  • 算法在大规模无监督数据中自动构造监督信息

自监督学习又可以分为对比学习(contrastive learning) 和 生成学习(generative learning) 两条主要的技术路线。本次主要记录关于对比学习的相关知识。

二、对比式预训练

对比学习就是通过学习对两个事物的相似或不相似进行编码来构建表征。
例如,对于一个你认识的朋友A,在路上你看到一个和A十分相似的身影,你就会将这个身影和你记忆里A的身影进行对比,从而确定这个身影是不是A,这就是对比学习的思路。

如下图所示,是对比式预训练的示意图,其方法可归结如下:
1. 由原始数据x,构造得到两个视图xq和xk;
2. 编码器将把不同的视图映射成潜在的表示zq和zk,解码器将进一步将表示映射到度空间;
3. 对模型不断优化,使同一实例x的查询q和键k之间的距离最小化;
4. 将预训练得到的编码器作为下游任务的特征提取器。

对比式无监督预训练(Contrastive Pre-training)_第1张图片
接下来回顾三种在训练前广泛使用的典型对比学习方法:

  • 互信息最大化
  • 相对位置预测
  • 实例判别(使用数据增强来生成同一个实例的不同视图)

由于生成和比较不同视图的方式不同,这些方法可以分别捕获训练数据的全局-局部关系、局部-局部关系和全局-全局关系。

1.互信息最大化

互信息最大化使用全局上下文和局部特征作为不同的视图,以经典工作Deep InfoMax为例,通俗地说,我们根据输入图像的这个”狗鼻子“就要知道,输入图片是一幅狗的图片,而不是负样本猫的。

输入图片经过卷积网络得到M x M大小的特征图,拉成一个一维的特征,互信息最大化要使得同一张图片的任意局部特征(特征图上任意一个位置的特征)与全局特征之间的距离尽可能近,从而能“一叶知秋”。对比式无监督预训练(Contrastive Pre-training)_第2张图片对比式无监督预训练(Contrastive Pre-training)_第3张图片

2.相对位置预测

相对位置预测使用不同的局部组件作为不同的视图;
BERT除了引入了Masked Language Modeling任务,还引入了句子级别的对比任务Next Sentence Prediction (NSP),来提高句子级别的任务的迁移性。具体地,NSP 使用二元分类器判断从语料库中采样的两个句子是否相邻(每句话是整个文档的一个局部)。

然而,NSP 任务的有效性遭到了不少的质疑。通过NSP任务,预训练模型最终学到的可能只是主题预测的能力,而不是更困难的连贯性预测,而主题预测并不能很好地提高下游任务上的迁移性。因此,ALBERT引入了句子顺序预测任务Sentence Order Prediction,其中,来自同一文档的两个连续片段是正例,而相同的片段交换顺序后则是负例。

计算机视觉中也探索过类似的想法,比如预测图像中两个块的相对位置。

3.实例判别

实例判别使用数据增强来生成同一个实例的不同视图。
对比式无监督预训练(Contrastive Pre-training)_第4张图片

负采样降低了实例鉴别任务的难度,而不同实例之间的区分性与下游任务的迁移性密切相关,因此人们总是尽可能地增大K。比如 Inst-Disc使用一个memory bank来存储每个键的表示,然后每隔一段时间再进行更新,从而在不增加计算负担的情况下,有效的增加负样本的数量。

但是memory bank也使得不同实例的键出现了不一致(来自于不同参数的特征编码器),导致了负样本的质量下降。为了缓解这个问题,Momentum Contrast (MoCo)使用一个队列存储所有负例的键,在一个batch后,更新队列中最老的负例使用动量编码器对键进行编码,动量编码器使用了滑动平均的机制,因此它的参数变化不会太快,从而让不同样本的的键来自相似的网络。

SimCLR [10]发现数据增广对对比式预训练有非常大的影响。即使不需要memory bank或者队列,更强的数据增广就可以很好地提高下游任务的迁移性。
更神奇的是,SimSiam[11]发现负样本和动量编码器都不是必需的,只需要让键值对应的编码器的梯度不要回传,就可以获得不错的预训练模型。

对比式的无监督预训练在部分下游任务上,例如目标检测和语义分割,甚至超过了有监督预训练的模型,可能的原因是标准监督预训练通常关注了高层的语义信息,而对比预训练更加关注底层的语义信息。因此对比式学习能够学到更加通用的表示,从而提高任务差异较大的下游任务上的迁移性。

你可能感兴趣的:(深度学习,深度学习,学习,计算机视觉)