自监督学习: 人工智能的未来

导读
什么是自监督学习?为什么自监督学习是AI的未来?自监督学习如何实现?
本文将回顾下自监督学习的前世今生,介绍它在CV、NLP、Graph、RecSys、RL等领域已经取得的令人惊叹的效果!

1. 什么是自监督学习?

实际的场景里通常有海量的无监督数据,而有监督数据却很少。那么能否利用这些海量的无监督数据,用来改进监督学习任务的效果呢?
▲自监督学习(Self-supervised Learning)作为Unsupervised Learning的一个重要分支,给出了很好地解决方案。它的目标是更好地利用无监督数据,提升后续监督学习任务的效果。
其基本思想是:Predicting everything from everything else。
具体方法是首先定义一个Pretext task (辅助任务),即从无监督的数据中,通过巧妙地设计自动构造出有监督(伪标签)数据,学习一个预训练模型。构造有监督(伪标签)数据的方法可以是:假装输入中的一部分不存在,然后基于其余的部分用模型预测缺失的这部分。如果学习的预训练模型能准确预测缺失部分的数据,说明它的表示学习能力很强,能够学习到输入中的高级语义信息、泛化能力比较强。而深度学习的精髓正在于强大的表示学习能力。
然后可以将预训练模型,通过简单的Finetune,应用到下游的多个应用场景,能比只使用监督数据训练的模型有更好的效果。
▲通常来说有标签数据越少的场景,自监督学习能带来的提升越大。事实上,在一些论文的实验结果里,在大量无标签数据上自监督学习的模型,不需要finetune,能取得比使用标签数据学得的监督模型更好的效果……
对于有大量标签数据的场景,自监督学习也能进一步提升模型的泛化能力和效果。
▲下图展示了在CV领域自监督学习的标准流程:
在自监督学习中,最重要的问题是:如何定义Pretext任务、如何从Pretext任务学习预训练模型。
Self-supervised Visual Feature Learning with Deep Neural Networks: A Survey

2. 为什么自监督学习是AI的未来?

Yann Lecun在AAAI 2020的演讲中,指出目前深度学习遇到的挑战:
▲监督学习:深度模型有海量参数,需要大量的label数据,标注成本高、扩展性差,难以应用到无标记或标记数据少的场景。
▲强化学习:agent需要和环境大量的交互尝试,很多实际场景(例如互联网搜索推荐、无人驾驶)中交互成本大、代价高,很难应用。
而人类和动物学习快速的原因:最重要的是观察世界,而不是靠大量的监督、强化学习。
Yann LeCun
智能的精髓在于预测:我们通过观察世界、理解世界、尝试预测未来,并根据实际结果的反馈信息,来不断调整自己的世界模型,变得越来越有智能。简单来说,无论人还是机器,预测的准确度越高,说明智能越强。
自监督学习的思想就是通过构造任务来提升预训练模型预测能力,即Predicting everything from everything else。具体方法是假装输入中的一部分不存在,然后基于其余的部分用模型预测这个部分,从而学习得到一个能很好地建模输入语义信息的表示学习模型。
Yann LeCun
例如,在NLP中,自监督学习Word2Vec、BERT、GPT、GPT2、GPT3等模型,可以很好地应用到语言模型、机器翻译、对话系统等多个任务中。
在CV中,自监督学习SimCLR等模型,可以应用到图像分类、补全等任务。
Yann LeCun
关于机器学习的作用,LeCun做了一个形象的比喻,如下图所示:强化学习像蛋糕上的樱桃,监督学习像蛋糕上的糖霜,而自监督学习是蛋糕本身。
Yann LeCun
通过这个比喻,可以很好的理解自监督学习在人工智能中的重要基石作用。
数据时代,很有前景的人工智能的实现方式是:在底层,首先基于海量的无标签数据,利用自监督学习,学习得到一个强大的通用表示模型。在上层,基于监督学习实现具体任务的目标、基于强化学习实现智能控制。自监督学习的作用在于,可以增强监督学习和强化学习模型的性能、泛化能力、鲁棒性等。
事实上,在CV、NLP等人工智能领域,自监督学习已经开始发挥着至关重要的作用。

3. 自监督学习如何实现?

自监督学习的关键在于如何设计Pretext任务、损失函数,来优化预训练模型参数。
下面我们通过介绍自监督学习在CV、NLP、Graph、Recsys等领域的经典工作,了解自监督学习的具体实现方式。

3.1 Computer Vision

CV领域中,自监督学习的Pretext任务可以是预测图片相对位置信息、旋转角度、视频中帧的顺序等。
[1] 2015 (ICCV) Unsupervised Learning of Visual Representations Using Videos
ICCV 2015这篇论文的思想是:视频场景,对物体跟踪,对于一个包含物体o的帧X,包含物体o的另外一个帧

应该比一个随机的帧

和X的相似度更高。

这篇论文里使用CNN作为Encoder, 对于图片X,f代表CNN,f(X)为X新的表示向量,定义两个图片的距离为如下:
然后就可以基于hinge loss来学习CNN的参数了:
学习完CNN参数,就可以将它作为表示学习器(特征抽取器),应用到后续的其他CV任务了。这篇论文里,作者对比了基于100k无标签的视频无监督预训练CNN,和基于ImageNet千万级的监督数据预训练CNN,在后续的CV任务中取得了很接近的效果。
[2] 2015 (ICCV) Unsupervised Visual Representation Learning by Context Prediction
ICCV 2015这篇论文里,构造训练数据的方法是:随机从图片采样一个patch,然后从它的邻居里随机采样一个patch,监督标签对应是邻居的位置信息。作者认为,准确地预测两个patch的位置关系,需要模型学会物体整体和部分的关系。
[3] 2016 (ECCV) Unsupervised learning of visual representations by solving jigsaw puzzles
EECV 2016这篇论文里,自监督的方法是:学习解决Jigsaw Puzzles(拼图)问题。随机打乱图片位置,学习恢复拼图,即生成原有图片的顺序。
[4] 2016 (CVPR) Deepak Pathak et al. Context Encoders: Feature Learning by Inpainting
CVPR 2016这篇论文里,自监督的方法是:学习恢复图片缺失部分。
[5] 2016 (ECCV) A Colorful image colorization
ECCV 2016这篇论文里,自监督的方法是:由黑白图片生成彩色图片。
[6] 2017 (CVPR) Split-Brain Autoencoders: Unsupervised Learning by Cross-Channel Prediction
CVPR 2017这篇论文里,学习使用输入的一个channel取预测另一个channel。
[7] 2018 (ICLR) Unsupervised Representation Learning by Predicting Image Rotations
2018 ICLR这篇论文里,采取的自监督的方法是:预测图片的旋转角度。
[8] 2017 (ICCV) Unsupervised Representation Learning by Sorting Sequences
ICCV 2017 这篇论文里,采取的自监督的方法是:随机打乱视频帧,然后学习对它们排序。
[9] 2018 (Google) (ICRA) Time-Contrastive Networks: Self-Supervised Learning from Video
ICRA 2018这篇论文里,采取的自监督的方法是:从视频里取一帧,然后选临近的帧作为正例,随机的离得远的帧作为负例,来学习DNN网络,然后结合强化学习,应用到机器人控制。
[10] 2018 (DeepMind) (Arxiv) (CPC) Representation Learning with Contrastive Predictive Coding
2018年DeepMind提出CPC,基本的思想是context信息能用来预测target的原因是,context的high-level表示是自回归依赖的。所以可以对输入x通过编码器encode到high-level表示,然后在high-level表示层学习出

,用来进行预测。

优化的目标是x和c的Mutual Information最大:
直接通过生成模型用

预测未来的

比较困难, 所以作者定义了概率密度来保持

的互信息:

作者采用的公式是:
作者使用InfoNCE loss来优化,使Mutual Information最大:
其中X为N个随机sample,包含1个正例和N-1个负例。
[11] 2019 (ICLR) [DIM] Learning deep representations by mutual information estimation and maximization
[12] 2020 (Hinton) (ICML) [SimCLR] A Simple Framework for Contrastive Learning of Visual Representations
Hinton等人,在这篇论文里提出SimCLR:
对一个输入x,首先通过两次独立的数据增强生成两个样本,然后分别通过编码器,再分别通过投影:
最后在投影空间定义对比loss,其中负样本从batch中的其他图片:
[13] 2020 (Hinton) (Arxiv) Big Self-Supervised Models are Strong Semi-Supervised Learners
Hinton等人在这篇论文里,首先在大量无监督数据上自监督学习task-agnostic的encoder,然后基于少量的label数据finetune,再通过蒸馏技术,利用无监督的标签或有标签数据,学习得到更强的task-specific的encoder,对面向具体任务的迁移学习很有指导意义。
Distillation:
无标签数据:
无标签数据+标签数据:
[14] 2020 (Google) (Arxiv) Supervised Contrastive Learning
一般自监督学习,对每个anchor,一般是一个positive, 多个negative。这篇论文里,提出在学习时,使用多个positive和多个negative一起学习。
[15] 2020 (CVPR) [MoCo] Momentum Contrast for Unsupervised Visual Representation Learning
[16] 2020 (DeepMind) (Arxiv) [BYOL] Bootstrap Your Own Latent: A New Approach to Self-Supervised Learning
一般自监督学习,需要负样本。这篇论文里,DeepMing的作者提出了BYOL,不需要负样本,也能自监督学习。

3.2 Natural Language Processing

NLP领域,包括多个任务:POS tagging, Named-entity recognition, Language Modeling, Word sense disambiguation, Summarization, Sentiment analysis, Text Classification, Relation Extraction, Question Answering, Machine Translation等。这些任务的标注成本很高,因此训练数据规模一般比较小,而无标签的文本数据却是海量的,因此通过自监督学习学习预训练模型,然后应用到下游任务,既是自然、也是必须的,已经成为state-of-the-art的NLP技术。
▲NLP领域的自监督学习方法包括经典的Word2vec、ELMo、BERT、GPT、GPT3等。
预训练模型,应用到下游任务的方式包括:
(1)Feature-based: 将训练好的embedding或模型输出,添加到下游任务的输入特征中。
例如Word2vec, ELMo
(2) Finetune: 预训练的模型基础上,添加输出层,用下游监督数据finetune模型参数。
例如BERT,GPT
[17] 2013 (Google) (NIPS) [word2vec] Distributed representations of words and phrases and their compositionality [Word2vec]
word2vec: Skip-gram模型,预测附近的单词。
NEG loss:
[18] 2017 (Google) (NIPS) [Transformer] Attention is All you Need [Transformer]
Transformer作为目前最强大的序列建模模型,是BERT等预训练模型的基本单元。
[19] 2018 (ACL) (ELMo) Deep contextualized word representations
word2vec的skip-gram模型中用一个单词预测附近的一个单词,ELMo模型的思想是使用整个句子学习更好的word embedding,来更好地建模单词的语法、语义、多义问题。
▲ELMo (Embeddings from Language Models) 模型中,作者使用Deep Bi-LSTM来建模一个句子,使用language model来学习模型参数:
▲把模型中多层的LSTM隐藏向量结合起来作为word的表示:
作者指出word的多层表示中,底层的表示一般包括语法(适合Pos tagging任务)、上层的表示更好地建模context信息(适合问答任务)。
▲ELMo中将预训练模型应用到下游任务的方式是feature-based,即将模型输出作为下游任务的特征。通过把这些不同的表示通过权重结合起来,添加到下游任务输入中,来提高下游模型指标:
[20] 2018 (Google) (NAACL) [BERT] Bert: Pre-training of deep bidirectional transformers for language understanding. [BERT example][BERT]
ELMo和GPT模型,预训练模型时采用的标准language model是单向的,对需要sentence-level或context-level信息的任务来说是不好的,BERT使用双向的Transformer来解决这个问题。
BERT, GPT, ELMo
BERT (Bidirectional Encoder Representations from Transformers):
▲阶段1 预训练模型:
(1) 提出Masked Language Model (MLM)预训练目标,来消除标准language model是单向的限制。MLM通过随机mask掉输入的一部分单词,然后使用句子中的其他context单词(包括左边的和右边的)来预测被mask的部分。从而BERT能够实现深度双向表示学习。
具体来说,构造训练数据时,随机选取输入句子中15%的token位置,对于第i个选取的token, 80%的概率替换为[MASK],10%的概率替换为随机token, 10%的概率不变。然后用BERT模型输出层在第i个token位置的向量,预测原始的第i个token,使用cross entropy loss优化。
(2) 提出Next Sentence Prediction预训练目标: 预测两个句子是否在源数据中是相邻的。
QA等任务,基于两个句子的关系理解来完,但language model无法建模这些信息。BERT中提出的NSP任务,可以很好的解决这个问题。在构造训练数据时,对于A和B,50%的概率B是A后的下一个句子,50%的概率B是随机的一个句子。使用C来预测这个标签是否真的是下一个句子,使用cross entropy loss优化。
BERT使用BooksCorpus和Wikipedia来预训练。
▲阶段2 Finetune:
BERT通过使用下游任务监督数据finetune所有参数,或将BERT在输入上的结果作为后续模型的输入,在下游多个任务取得很好地效果,已经成为NLP的主流技术。
BERT
▲具体任务Finetune的设计:
▲BERT模型参数:
BERT(base)包括12层,hidden size 768,self-attention head为12,参数量为1.1亿,与GPT参数相当。BERT(large)包括24层,hidden size 1024,self-attention head为16,参数量为3.4亿。
▲BERT输入:
为了使BERT预训练后能应用到各种各样的任务中,BERT的输入是一个sentence,可以对应原始的一个句子或句子对。一个<Question, Answer>,可以通过[SEP]连接成一个sentence。
其中第一个token是[CLS] ,用于汇总整个句子的表示,可以用于句子分类等任务。BERT采用WordPiece embedding, vocabulary size是30000。
输入序列中每一个单元的表示包括:token embedding, 指示在句子A还是B的segment embedding, Position embedding。
[21] 2018 (OpenAI) (Arxiv) (GPT) Improving Language Understanding by Generative Pre-Training
GPT模型的思想:基于大量无标签数据学习预训练模型,然后通过finetune应用到后续的多个任务。
▲阶段1:Unsupervised pre-training
使用language modeling目标来优化:
对应的模型结构,作者选取的是multi-layer Transformer Decoder (比Transformer少一半参数):将输入转化为embedding,经过Masked Multi-head Self-Attention,然后使用softmax层即可预测输出概率分布。
▲阶段2:Supervised fine-tuning
阶段1学习得到的预训练模型,后面连接一个Linear层,即可实现下游任务的预测。
对于下游任务,按下图的方式,构造模型的输入。例如对于文本分类问题:前后加入特殊字符后变成一个序列,经过预训练模型Transformer,Linear层即可实现预测。
▲论文实验结论:
(1)预训练能大幅提升在多个下游任务的指标。
(2)预训练模型中的embedding、序列模型各层参数,都有助于提升下游任务。
(3)Zero-shot Knowledge Transfer: 仅使用预训练模型,不用下游任务数据finetune, 预训练的越多,下游效果越好。
(4)在Finetune阶段也添加Language Modeling的辅助任务,有助于提升模型指标。简单理解是,在下游任务的数据上继续pre-training。
[22] 2019 (OpenAI) (Arxiv) (GPT-2) Language Models are Unsupervised Multitask Learners [GPT2]
作者提出的15亿参数的Transformer预训练模型GPT-2,具有很强的Zero-shot Knowledge Transfer能力:在多个任务上,即使不用下游数据finetune,也取得了比用下游数据监督学习的模型更好的表现。
GPT-2中采用了Byte Pair Encoding (BPE) 来取代character和word embedding。参数量如下:
第一行参数量1.17亿,和GPT相当。第二行参数量3.45亿,和BERT相当。最大的参数量为15.42亿,为GPT-2。
[23] 2020 (OpenAI) (Arixv) (GPT-3) Language Models are Few-Shot Learners [GPT3]
GPT-3采取的模型和GPT-2相同,但参数量有1750亿。
关于参数量和下游任务的性能的分析图如下:
可以看出:参数量越大,在Zero-shot, One-shot, Few-shot的情况下指标都不断提升。
[24] 2019 (ACL) Self-Supervised Dialogue Learning
这篇论文介绍,自监督学习如何应用到对话中。
[25] 2020 (ACL) Don’t Stop Pretraining: Adapt Language Models to Domains and Tasks
ACL这篇论文,指出在通用语料上预训练后,继续在具体的任务语料上预训练,可进一步提升任务上的效果。

3.3 Graph Learning

自监督学习同样可以用在图表示学习(例如GNN)中,通过预测节点属性、mask掉节点、边等方法,来提升图表示学习的泛化能力、鲁棒性。
[26] 2020 (KDD) GPT-GNN: Generative Pre-Training of Graph Neural Networks
GNN对于具体任务,需要大量的标签。这篇论文里提出首先通过Self-supervised learning,学习预测图中的节点属性、边。然后可以在下游任务中通过少量label finetune。
[27] 2020 (Arxiv) Self-supervised Learning on Graphs: Deep Insights and New Direction
[28] 2020 (WWW) Graph Representation Learning via Graphical Mutual Information Maximization

3.4 Recommender Systems

推荐系统中通常item都是亿级别,DNN模型中对应的embedding参数是百亿千亿级别、query/item-item交互的数据很稀疏,因此即使几百亿的训练数据,仍然显得有些不足。
通过无监督学习,能更好地利用全网用户的行为,学习更强大的召回、排序模型。
[29] 2020 (Google) (Arxiv) Self-supervised Learning for Large-scale Item Recommendations
实际推荐系统中query-item或者item-item交互数据稀疏,而且长尾item表示难以学好。
Google这篇论文将SimCLR思想用来改进召回模型(Two-tower),该工作对于召回模型优化、长尾item表示学习、纯曝光数据利用等方向具有很好的指导作用。
提出了两种数据增强模式:Feature Mask,Feature Dropout。具体做法,类似SIMCLR,对于输入特征,分成多组特征,将一些特征mask或dropout掉。
self-supervised loss: 对于输入x,做两种不同的变换,然后经过encoder,使得它们的相似度比别的输入x'经过变换、encoder后的表示高。
Feature Mask方法如下:
Feature Dropout方法如下:
然后和监督式任务相结合:
[30] 2020 (Alibaba) (KDD) Disentangled Self-Supervision in Sequential Recommenders
推荐系统一般采取seq2item这种方式来训练,存在对长尾item不能很好学习、短视的缺点。这篇论文里,作者提出seq2seq的思路,根据历史行为序列预测未来的行为序列,基于自监督学习辅助监督学习任务,在candidate generation任务上取得比较好的效果。
[31] 2020 (CIKM) [S3Rec] S3-Rec: Self-Supervised Learning for Sequential Recommendation with Mutual Information Maximization
这篇论文基于Mutual Information Maximization的自监督任务,来辅助推荐模型训练。
作者提出了四个自监督辅助任务:基于item-属性、基于序列-item、序列-item属性、序列-小序列,分别计算MIM的InfoNCE loss:
例如对于item-属性辅助任务,loss函数为:
自监督训练后,再基于监督训练来finetune推荐模型。
[32] 2020 (Arxiv) Self-supervised Graph Learning for Recommendation
这篇论文里,作者提出在GNN中使用自监督辅助任务来改进模型学习。
提出了四种方法:embedding masking, embedding dropout, node dropout, edge dropout。
[33] 2020 (SIGIR) Self-Supervised Reinforcement Learning for Recommender Systems
这篇论文里,作者将自监督学习和RL结合,用于推荐。

3.5 Machine Learning Perspective

Self-supervised learning与许多机器学习方法有着丰富的联系,例如与Semi-supervised learning、Pre-training、Self-training,都是希望利用更多的有标签或无标签数据,来提升某个任务下的性能。
具体关注的重点在于:
Semi-supervised learning: 同时利用无标签和有标签数据进行学习。
Self-supervised learning: 使用无监督数据,通过定义pretext task来学习。
Pre-training: 预训练。一般先在大量数据上学习,再在下游任务finetune。
Self-training: 自训练。用学习的模型,在无标记数据上标注生成伪标签,然后借助这些伪标签数据,改进监督模型效果。
下面我们介绍一些与自监督学习关系比较密切的机器学习方法相关的论文。
Self-supervised Learning:
[34] 2020 (ICLR) A Mutual Information Maximization Perspective of Language Representation Learning
Task Related Self-Supervised Learning:
[35] 2019 (ICCV) Boosting Few-Shot Visual Learning with Self-Supervision
[36] 2019 (Arxiv) Rethinking Data Augmentation: Self-Supervision and Self-Distillation
Self-supervised and Semi-supervised Learning:
[37] 2013 (ICML Workshop) Pseudo-Label - The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Networks
使用模型在无标签数据生成伪label,选取最大的预测结果作为分类结果。
然后基于有标签和伪标签数据联合训练:
逐渐增大伪标签的权重:
[38] 2019 (Google) (ICCV) S4L: Self-Supervised Semi-Supervised Learning
self-supervised learning: 同时利用无标签和有标签数据进行学习。
Self-supervised learning: 使用无监督数据,通过定义pretext task来学习。
Google这篇论文里,指出self-supervised有助于semi-supervised learning学习。
Semi-supervised :
[39] 2019 (Facebook) (Arxiv) Billion-scale semi-supervised learning for image classification
Facebook在这篇论文里,介绍如何利用有标签数据和无标签数据,共同学习,一个图像分类模型。首先基于有标签数据训练teacher模型,然后在无标签数据打分后,选出每个类别top K构成新的有标签数据,用于训练student model, 然后再用有标签数据对student model finetune。
Self training:
[40] 2020 (Google) (NIPS) NIPS 2020 Rethinking the Value of Labels for Improving Class-Imbalanced Learning
[41] 2020 (Google) (CVPR) Self-Training With Noisy Student Improves ImageNet Classification
这篇论文里,作者先用label数据训练teacher模型,然后在无标签数据上生成伪label,基于标签数据和伪label,训练noisy student模型,再把这个noisy student当作teacher模型,继续生成伪label,注意teacher model不添加noise,这样伪label尽可能准确。多次迭代,使得noisy的student模型与更强大的无noise的teacher模型一致,从而performance越来越好。
noise: (1) 输入: 数据增强 (2)模型:dropout,stochastic depth。
trick: (1)data filtering:过滤掉teacher模型置信度低的 (2) balancing: 每个类别,无标签数据规模接近。
[42] 2020 (Google) (NIPS) Rethinking Pre-training and Self-training
Multi-task Self-supervised Learning:
[43] 2017 (ICCV) Multi-task Self-Supervised Visual Learning
多个任务联合self-supervised learning:
[44] 2018 (CVPR) Cross-domain Self-supervised Multi-task Feature Learning Using Synthetic Imagery
利用合成图片多个任务联合self-supervised learning,并使用adversarial learning接近实际图片。
Reinforcement Learning:
[45] 2019 (NIPS) Unsupervised State Representation Learning in Atari
Bengio等人在这篇论文里,将Self-supervised learning和Reinforcement learning结合,从输入学习更好的状态编码器,改进泛化性能,从而在reward数据有限时,也能改进RL效果。

3.6 Survey

自监督学习的综述论文:
[46] 2020 (Arxiv) Self-supervised Learning: Generative or Contrastive.
[47] 2020 (T-PAMI) Self-supervised Visual Feature Learning with Deep Neural Networks: A Survey

后记

Self-supervised Learning在CV、NLP、Graph、RL、RecSys等领域已经取得了很awesome的效果。如何更好的挖掘无标签数据中的知识?如何和有监督数据更好地结合学习?仍然都是开放的问题,通过已有的研究工作,我们有充足的理由相信:
Self-supervised Learning is the future of AI!

本文介绍的论文集合:

https://github.com/guyulongcs/Awesome-Self-supervised-Learning-papers

END -

(0)

相关推荐