"); //-->
自监督学习通过设计适当的自监督任务,从大规模的无标注数据中学习可迁移的知识,从而提高下游任务上的表现。根据任务的类型,我们可以将常见的无监督预训练方法分为生成式预训练和对比式预训练。本文主要介绍常见的对比式预训练任务。
对比式预训练的核心想法是学习如何区分不同的数据。
日常生活中我们会进行大量类似的训练,比如区分你每天接触到的人。尽管他们每天的打扮都不同,但是大部分时候你可以只通过他们的外表、动作甚至背影就判断出他的名字。
大部分对比学习预训练方法都可以归结为以下几步:
对于任意一个数据 X,构造它的两个视图,查询视图Xq和键值视图Xk
使用编码器encoder将不同的视图映射到低维的特征空间,使用****decoder将这些特征映射到度量空间
优化编码器和****,使得在度量空间中,同一个数据的不同视图之间的距离尽可能近
将预训练得到的编码器作为下游任务的特征提取器
此处的查询视图Xk类似于我们对每个人的记忆/印象,而键值视图Xq则是在路上碰到的某个人,让同一个数据不同视图之间的度量距离尽可能近,类似于我们要避免认错人的尴尬。为此,模型需要找到对于区分数据最有用的特征,比如不同人走路时的姿态、气质,而不仅仅是衣服。
如果只是让同一个数据的不同视图之间的距离尽可能近,模型极有可能学到一些平凡解(trivial solution),例如所有的数据在度量空间都是某个常数。因此大部分对比学习中还需要让不同数据的距离尽可能远,来防止模型输出的坍塌。不同的数据也被称作负样本(negative samples)。
因模型所学到的特征表示取决于不同视图的构建方式。根据视图构建方式的不同,大多数对比式预训练方法可以大致分为:(1)互信息最大化,(2)相对位置预测,(3)实例鉴别。它们分别捕捉了训练数据的全局-局部关系、局部-局部关系和全局-全局关系。
互信息最大化使用全局特征和局部特征作为不同的视图。
以经典工作Deep InfoMax[1]为例。一张图片经过卷积网络会得到一个M x M大小的特征图,再经过一个全局池化层会得到一个一维的特征。互信息最大化的目标是使得同一张图片的任意局部特征(特征图上任意一个位置的特征)与全局特征之间的距离尽可能近,从而达到一叶知秋的效果(只看到狗的鼻子就知道某张图片是狗的照片,而不是负样本猫的照片)。
互信息最大化已被用于在多种数据上进行预训练,例如
图像数据上的 Deep InfoMax :最大化图像局部特征和全局特征之间的互信息
序列数据上的 Contrastive Predictive Coding[2]:最大化序列某一时刻的全局特征和未来某一时刻局部特征的互信息
图数据上的Deep Graph Infomax[3]:最大化节点的局部表示和 k-跳邻域内的上下文表示之间的互信息。
多模态数据上的Contrastive Language-Image Pre-training (CLIP) [4]:最大化图像和相应文本之间的互信息。在使用来自 Internet 的大规模图像-文本对数据集进行预训练后,CLIP在下游任务上具有了非常不错的零样本学习能力
相对位置预测使用数据不同的局部作为不同的视图。
BERT[5]除了引入了Masked Language Modeling任务,还引入了句子级别的对比任务Next Sentence Prediction (NSP),来提高句子级别的任务的迁移性。具体地,NSP 使用二元分类器判断从语料库中采样的两个句子是否相邻(每句话是整个文档的一个局部)。
然而,NSP 任务的有效性遭到了不少的质疑。通过NSP任务,预训练模型最终学到的可能只是主题预测的能力,而不是更困难的连贯性预测,而主题预测并不能很好地提高下游任务上的迁移性。因此,ALBERT[6]引入了句子顺序预测任务Sentence Order Prediction,其中,来自同一文档的两个连续片段是正例,而相同的片段交换顺序后则是负例。
计算机视觉中也探索过类似的想法,比如预测图像中两个补丁的相对位置[7]。
实例鉴别使用数据增广来生成同一实例的不同视图。
负采样降低了实例鉴别任务的难度,而不同实例之间的区分性与下游任务的迁移性密切相关,因此人们总是尽可能地增大K。比如 Inst-Disc [8]使用一个memory bank来存储每个键的表示,然后每隔一段时间再进行更新,从而在不增加计算负担的情况下,有效的增加负样本的数量。
但是memory bank也使得不同实例的键出现了不一致(来自于不同参数的特征编码器),导致了负样本的质量下降。为了缓解这个问题,Momentum Contrast (MoCo) [9]
使用一个队列存储所有负例的键,在一个batch后,更新队列中最老的负例
使用动量编码器对键进行编码,动量编码器使用了滑动平均的机制,因此它的参数变化不会太快,从而让不同样本的的键来自相似的网络。
SimCLR [10]发现数据增广对对比式预训练有非常大的影响。即使不需要memory bank或者队列,更强的数据增广就可以很好地提高下游任务的迁移性。
更神奇的是,SimSiam[11]发现负样本和动量编码器都不是必需的,只需要让键值对应的编码器的梯度不要回传,就可以获得不错的预训练模型。
对比式的无监督预训练在部分下游任务上,例如目标检测和语义分割,甚至超过了有监督预训练的模型,可能的原因是标准监督预训练通常关注了高层的语义信息,而对比预训练更加关注底层的语义信息。因此对比式学习能够学到更加通用的表示,从而提高任务差异较大的下游任务上的迁移性。
本文主要参考Transferability in Deep Learning: A Survey[12] 中的章节2.3.2 Contrastive Learning。感兴趣的读者可以阅读原文(https://arxiv.org/pdf/2201.05867.pdf)。
引用知乎——https://zhuanlan.zhihu.com/p/463840977
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。