自监督学习综述 | Self-supervised Learning: Generative or Contrastive

作者:Xiao Liu, Fanjin Zhang, Zhenyu Hou, Li Mian, Zhaoyu Wang, Jing Zhang, Jie Tang

Self-supervised Learning: Generative or Contrastive

摘要

在过去的十年中,深度监督学习取得了巨大的成功。但是,由于它对手动标签的依赖和容易受到攻击的缺点,促使人们寻求更好的解决方案。作为替代,自监督学习(SSL)在过去几年中因其在表示学习方面的飞速发展而吸引了许多研究人员。自监督的表示学习利用输入数据本身作为监督,并使几乎所有类型的下游任务受益。在这项调查中,我们研究了用于计算机视觉,自然语言处理和图学习表示的新的自监督学习方法。我们全面回顾了现有的经验方法,并根据其目标将其概括为三个主要类别:生成式,对比式和生成对比式(对抗式)。我们将进一步研究相关的理论分析工作,以提供有关自监督学习如何工作的更深层次的思想。最后,我们简要讨论了开放式问题和自指导学习的未来方向。提供了调查的概述幻灯片1。


1 介绍

深度神经网络[81]在各种机器学习任务上表现出了卓越的性能,尤其是在计算机视觉(图像分类[33],[57],[64],语义分割[46],[89]) ,自然语言处理(预训练语言模型[34],[78],[88],[159],情感分析[87],问题解答[5],[36],[117],[160]等)和图学习(节点分类[63],[74],[112],[146],图分类[7],[129],[167]等)中的监督学习上。通常,监督学习是使用大型手动标记的数据集针对特定任务进行训练的,该数据集被随机分为训练,验证和测试集。

但是,监督学习正在解决其瓶颈。它不仅严重依赖昂贵的手动标记,而且还存在泛化错误,虚假相关性和对抗性攻击。我们希望神经网络通过更少的标签,更少的样本或更少的试验来学习更多。作为有前途的候选人,自监督学习因其出色的数据效率和泛化能力而受到了广泛关注,并遵循了这种范例的许多最新模型。在本次调查中,我们将全面研究最近的自监督学习模型的发展,并讨论其理论上的合理性,包括诸如预训练语言模型(PTM),生成对抗网络(GAN),自编码器等框架及其扩展,Deep Infomax和对比编码。

术语“自监督学习”最早是在机器人技术中引入的,其中通过查找和利用不同输入传感器信号之间的关系来自动标记训练数据。然后,它被机器学习领域借用。在AAAI 2020的演讲中,Yann LeCun将自监督学习描述为“the machine predicts any parts of its input for any observed part”, 我们遵循LeCun, 可以将它们概括为两个经典定义:

• 通过“半自动”过程从数据本身获取“标签”。

• 用数据的其他部分预测数据的一部分。

具体而言,此处的“其他部分”可能是不完整的,变形的,变形的或损坏的。换句话说,机器学会了“恢复”原始输入的全部,部分或一些特征。

人们常常困惑无监督学习和自监督学习。自监督学习可以看作是无监督学习的一个分支,因为它不涉及手动标签。但是,从狭义上讲,无监督学习专注于检测特定的数据模式,例如聚类,社区发现或异常检测,而自监督学习旨在恢复,这仍然处于监督设置的范式中。图1生动地解释了它们之间的区别。

图1

有一些与预训练语言模型[113],生成对抗网络[151],自编码器和视觉表示的对比学习有关的综合评论。但是,它们都没有集中于启发性的自监督学习理念。在这项工作中,我们收集了近年来来自自然语言处理,计算机视觉和图学习的研究,以对自监督学习的前沿领域进行最新和全面的回顾。综上所述,我们的贡献是:

• 我们提供了对自监督学习的详细而最新的描述。我们介绍了背景知识,模型和变体,以及重要的框架。读者可以轻松地掌握自监督学习的前沿思想。

• 我们将自监督的学习模型分为生成型,对比型和生成对比型(对抗式),每种类型都包含特定的类型。我们展示了每种类别的利弊,并讨论了最近从生成转向对比的尝试。

• 检验自监督学习方法的理论健全性,并说明它如何有益于下游监督学习任务。

• 我们确定该领域中的所有开放问题,分析其局限性和边界,并讨论自监督表示学习的未来方向。

2 背景

2.1 NLP表示学习

2.2 CV表示学习

2.3 图表示学习

3 生成式自监督学习

在本节中,我们将介绍基于生成模型的自监督学习方法,包括自回归(AR)模型,流模型,自编码(AE)模型和混合生成模型。

3.1 自回归(AR)模型

自回归模型可被视作贝叶斯网络结构(有向图模型)。联合分布可以被分解为条件分布的乘积:

其中,每个变量的概率取决于之前的变量。

在自然语言处理中,自回归语言建模的目标通常是在正向自回归因式分解下最大化似然[159]。 GPT [115]和GPT-2 [116]将Transformer解码器结构[145]用于语言模型。与GPT不同,GPT-2删除了不同任务的微调过程。为了学习可以泛化搭配不同任务的统一表示法,GPT-2建模p(output | input,task),这意味着给定不同的任务,相同的输入可以具有不同的输出。

自回归模型也已经在计算机视觉中采用,例如PixelRNN [144]和PixelCNN [142]。总体思路是使用自回归方法逐像素建模图像。例如,下(右)像素是根据上(左)像素生成的。 PixelRNN和PixelCNN的像素分布分别由RNN和CNN建模。对于2D图像,自回归模型只能根据特定方向(例如,向右和向下)分解概率。因此,在CNN架构中采用了遮罩卷积核。此外,两个卷积网络被组合以去除图像中的盲点。在PixelCNN的基础上,提出了WaveNet [141]-音频生成模型。为了处理长时间的时间依赖性,研发了空洞因果卷积以改善接收场。此外,门控残差块和跳跃连接用于增强表示性。

自回归模型也可以应用于图域问题,例如图生成。You等[162]提出GraphRNN,利用深层自回归模型生成逼真的图。他们将图的生成过程分解为节点和边的序列生成,以之前生成的图为条件。 GraphRNN的目标定义为观察到的图生成序列的可能性。 GraphRNN可以看作是分层模型,其中图级别RNN维护图的状态并生成新节点,而边级别RNN根据当前图状态生成新边。此后,提出了MRNN [108]和GCPN [161]作为自回归方法。 MRNN和GCPN都使用强化学习框架,通过优化特定领域的奖励来生成分子图。但是,MRNN主要使用基于RNN的网络进行状态表示,而GCPN使用基于GCN的编码器网络。

自回归模型的优点是可以很好地对上下文依赖性进行建模。但是,缺点是每个位置只能从一个方向访问其上下文。

3.2 流模型

流模型的目标是从数据估计复杂的高维密度p(x)。直观地讲,直接确定密度是困难的。 为了获得复杂的密度,我们希望通过堆叠一系列分别描述不同数据特征的转换函数来“逐步”生成它。 通常,流模型首先定义一个潜在变量z,该变量遵循已知的分布p_Z(z)。 然后定义z =fθ(x),其中fθ是可逆和可微的函数。 目的是学习x和z之间的转换,以便可以描述x的密度。 根据积分规则,pθ(x)dx = p(z)dz。 因此,x和z的密度满足:

目标是要极大化似然:

流模型的优点是x和z之间的映射是可逆的。 但是,它还要求x和z必须具有相同维度。 fθ必须精心设计,因为它必须是可逆的,并且方程式(6)中的雅可比行列式也要是容易计算的。 NICE [37]和RealNVP [38]设计出仿射耦合层来参数化fθ。核心思想将x分成两个块(x1,x2),并以自回归方式将(x1,x2)转换为(z1,z2),即z1 = x1并且 z2 = x2 + m(x1)。 最近,有人提出了Glow [72],它引入了可逆的1×1卷积并简化了RealNVP。


3.3 自编码(AE)模型

自编码模型的目标是从(损坏的)输入中重建(部分)输入。 由于其灵活性,AE模型可能是最受欢迎的生成模型, 具有许多变体。

3.3.1基本AE模型

自编码器(AE)最早在[8]中提出,用于预训练人工神经网络。在自编码器之前,受限玻尔兹曼机(RBM)[128]也可视为一种特殊的“自编码器”。 RBM是无向图模型,它仅包含两层:可见层和隐藏层。 RBM的目标是最小化模型的边际分布与数据分布之间的差异。相反,自编码器可以看作是有向图模型,并且可以更容易地训练。自编码器通常用于降低维度。通常,自编码器是前馈神经网络,经过训练可在输出层生成其输入。 AE是由一个编码器网络h = f_enc(x)和一个解码器网络 x' = f_dec(h)组成。 AE的目的是使x和x'尽可能相似(例如通过均方误差)。可以证明线性自编码器对应于PCA方法。有时隐藏单元的数量大于输入单元的数量,并且可以通过在隐藏单元上施加稀疏约束来发现一些有趣的结构[97]。

3.3.2 上下文预测模型(CPM)

上下文预测模型(CPM)的思想是基于输入来预测上下文信息。

在自然语言处理中,关于词嵌入的自监督学习,CBOW和Skip-Gram [93]是开创性的工作。 CBOW旨在基于上下文标记来预测输入标记。 相反,Skipp-Gram旨在基于输入来预测上下文。 通常,采用负采样以确保计算效率和可伸缩性。 遵循CBOW架构,通过利用子词信息提出FastText [15]。

受到NLP中词嵌入模型的进步的启发,基于相似的上下文预测目标,提出了许多网络嵌入模型。 Deepwalk [106]对被截断的随机游走进行采样,以基于Skip-Gram模型学习潜在节点嵌入。 它将随机游走视为句子的等效项。 但是,LINE [134]旨在基于当前节点生成邻居:

其中,E表示边集合,v表示点,w_ij表示边(vi,vj)的权重。LINE还使用负采样对多个负边进行采样以逼近目标。

3.3.3 去噪AE模型

去噪自编码器模型表示应该对引入噪声具有鲁棒性。 掩码语言模型(MLM)可以被视为降噪AE模型,因为它的输入掩盖了预测token。 为了建模文本序列,掩码语言模型(MLM)从输入中随机掩盖了一些标记,然后根据其上下文信息进行预测,这类似于Cloze任务[136]。 BERT [34]是该领域最具代表性的工作。 具体来说,在BERT中,训练过程中引入了唯一token[MASK],以掩盖某些token。 但是,此方法的一个缺点是没有用于下游任务的输入[MASK]token。 为了减轻这种情况,作者在训练中并不总是用[MASK]替换预测的token。 相反,他们用原词或随机词替换它们的可能性很小。

继BERT之后,出现了MLM的许多扩展。 Span-BERT [69]选择掩盖连续的随机跨度,而不是BERT所采用的随机token。 此外,它训练跨度边界表示来预测掩盖的跨度,这受共参考分辨率中的思想启发。 ERNIE(百度)[132]掩盖实体或短语以学习实体级别和短语级别的知识,这在中文自然语言处理任务中获得了良好的效果。 ERNIE(清华大学)[170]进一步将知识图中的知识(实体和关系)集成到语言模型中。

与AR模型相比,在对语言进行AE降噪时,预测的token可以从双方访问上下文信息。 但是,如果给出了未屏蔽的token,则MLM假定预测的token相互独立。

在图学习中,Hu等[62]提出了GPT-GNN,一种用于图神经网络的生成式预训练方法。 它还利用图上的遮罩技术,然后要求图神经网络生成遮罩的边和属性。 GPT-GNN在OAG [127],[135],[165]上进行了广泛的实验,这是具有1亿个节点和20亿条边的最大的公共学术图,显示了在各种图学习任务上的显著改进。

3.3.4 变分自编码器

变分自编码模型假定数据是从潜在的(未观察到的)表示中生成的。 给定一些数据X,一组未观察到的变量Z = {z1,z2,...,zn}的后验分布通过变分分布q(z | x)近似。

训练过程中,数据对数似然的证据下届最大化。

其中,p(x)是证据概率,p(z)是先验,p(x|z)是似然概率。上式右侧被称为ELBO。从自编码的角度来看,ELBO的第一项是一个正则化器,它迫使后验近似于先验。 第二项是基于潜在变量重构原始输入数据的似然。

变分自编码器(VAE)[73]是利用变分推理的一个重要示例。 VAE假设先验p(z)和近似后验q(z | x)都遵循高斯分布。具体地说,令p(z)〜N(0,1)。此外,重参数化技巧被用于模拟近似后验q(z | x)。假设z〜N(μ,σ2),z =μ+σε,其中ε〜N(0,1)。μ和σ均由神经网络参数化。基于计算出的潜在变量z,利用解码器网络来重构输入数据。

最近,提出了一种新颖而强大的变分AE模型,称为VQ-VAE [143]。 VQ-VAE旨在学习离散的潜在变量,这是有动机的,因为许多模式本质上是离散的,例如语言,语音和图像。 VQ-VAE依靠向量离散化(VQ)来学习离散潜在变量的后验分布。具体来说,离散的潜在变量是使用共享的可学习的嵌入表通过最近的邻居查找来计算的。在训练中,梯度通过直通估计器[11]近似为

其中e表示码本,运算符sg表示阻止梯度流入其参数的停止梯度操作,β是控制不愿根据编码器输出的更改码的超参数。

最近,研究人员提出了VQ-VAE-2 [118],它可以在ImageNet [33]上生成与BigGAN [16]匹敌的通用高保真图像。首先,作者通过强大的PixelCNN [142]扩大了尺度并增强了自回归先验。此外,他们采用VQ-VAE的多尺度分层组织,可以分别学习图像的局部信息和全局信息。如今,VAE及其变体已广泛用于计算机视觉领域,例如图像表示学习,图像生成,视频生成。

VQ-VAE

在图上的节点表示学习中也采用了变分自编码模型。例如,变分图自编码器(VGAE)[75]使用与VAE相同的变分推理技术,并使用图卷积网络(GCN)[74]作为编码器。由于图结构数据的唯一性,VGAE的目的是通过测量节点近似度来重建图的邻接矩阵。朱等 [171]提出了DVNE,这是Wasserstein空间中的一种深度变分网络嵌入模型。它学习高斯节点嵌入以对节点的不确定性进行建模。 2-Wasserstein距离用于测量分布之间的相似性,以保持网络可传递性。 vGraph [130]可以通过生成的变分推理框架协作执行节点表示学习和社区检测。假定每个节点都可以从社区的混合中生成,并且每个社区都定义为节点上的多项式分布。

3.4 混合生成模型

3.4.1 结合AR和AE模型

一些研究人员建议结合AR和AE的优点。 MADE [91]对自编码器进行了简单的修改。 它掩盖了自编码器的参数,以遵守自回归约束。 具体来说,对于原始的自编码器,两个相邻层之间的神经元通过MLP完全连接。 但是,在MADE中,相邻层之间的某些连接被遮盖以确保仅从每个输入维之前的维来重建每个输入维。 MADE可以很容易地在条件计算上并行化,并且可以通过结合AE和AR模型来获得高维联合概率的直接且廉价的估计。

PLM

在NLP中,置换语言模型(PLM)[159]是一种具有代表性的模型,结合了自回归模型和自编码模型的优点。 引入PLM的XLNet [159]是一种广义的自回归预训练方法。 XLNet通过在因式分解阶数的所有排列上最大化预期的可能性来启用双向上下文的学习。 为了使这个想法公式化,令Z_T表示集合长度为T的索引序列[1,2,...,T]所有可能排列集合,PLM的目标是

实际上,对于每个文本序列,将采样不同的分解阶数。 因此,每个token都可以从双方看到其上下文信息。 基于排列的顺序,XLNet还会对位置进行重参数化,以使模型知道需要预测哪个位置,然后引入特殊的两流自注意力以进行目标感知的预测。

此外,与BERT不同的是,受AR模型最新进展的启发,XLNet将分段递归机制和Transformer-XL [31]的相对编码方案集成到预训练中,该模型可以比Transformer [145]更好地建模远程依赖性。

3.4.2 结合AE和流模型

在图域中,GraphAF [125]是用于分子图生成的流自回归模型。 它可以在迭代过程中生成分子,并且还可以并行计算确切的似然性。 GraphAF将分子生成形式化为顺序决策过程。 它将详细的领域知识整合到奖励设计中,例如效价检查。 受流模型的最新进展的启发,它定义了从基本分布(例如多元高斯)到分子图结构的可逆转换。 另外,利用去对偶技术[60]将离散数据(包括节点类型和边类型)转换为连续数据。

4 对比式自监督学习

从统计的角度来看,机器学习模型可分为两类:生成模型和鉴别模型。 给定输入X和目标Y的联合分布P(X,Y),生成模型通过以下方式计算p(X | Y = y):

而鉴别模型建模p (Y |X =x):

注意,大多数表示学习任务都希望对x之间的关系进行建模。 因此,长期以来,人们相信生成模型是表示学习的唯一选择。

图5 截止2020年6月,自监督表示学习在线性分类下的在ImageNet top-1准确性性能。 自监督学习的特征提取能力正在迅速接近监督方法(ResNet50)。 除了BigBiGAN外,以上所有模型都是对比自监督学习方法。

但是,对比学习的最新突破(例如Deep InfoMax,MoCo和SimCLR)揭示了鉴别模型用于表示的潜力。 对比学习旨在通过噪声对比估计(NCE)[51]进行“学习比较”,其格式为:

其中x +与x类似,x-与x不同,f是编码器(表示函数)。 相似性度量和编码器可能因任务而异,但是框架保持不变。 通过涉及更多不相似的对,我们将InfoNCE [101]表示为:

在这里,我们将最新的对比学习框架分为两种类型:上下文-实例对比和上下文-上下文对比。 它们在下游任务中都取得了惊人的性能,尤其是在线性协议下的分类问题上。

4.1 上下文-实例对比

上下文实例对比,或所谓的全局-局部对比,重点在于对样本的局部特征与其全局上下文表示之间的归属关系进行建模。 当我们学习局部特征的表示形式时,我们希望它与整体内容的表示形式相关联,例如条纹对老虎,句子对段落以及节点对邻居。

上下文实例对比度主要有两种类型:预测相对位置(PRP)和最大化互信息(MI)。 它们之间的区别是:

• PRP重点学习局部成分之间的相对位置。 全局上下文是预测这些关系的隐含要求(例如了解大象的长相对于预测其头尾之间的相对位置至关重要)。

• MI关注学习局部和全局内容之间关系的显式信息。 局部成分之间的相对位置将被忽略。

4.1.1 预测相对位置

许多数据的部分之间包含丰富的空间关系或顺序关系。 例如,在如图6所示的图像数据中,大象的头在尾巴的右侧。 在文本数据中,“Nice to meet you” 可能会出现在“Nice to meet you, too”之前。 各种模型都将识别其各部分之间的相对位置作为借口任务[68]。 可能是从样本中预测两个图像块的相对位置[39],或者是要恢复图像的打乱图像块的位置(解决拼图)[71],[98],[152],或推断图像的旋转角度[45]。 PRP还可以用作创建难正样本的工具。 例如,在PIRL [94]中应用了拼图技术来增加正样本,但是PIRL并不是以解决拼图和恢复空间关系为目标。

图6

在预训练语言模型中,还采用了类似的概念,例如“下一句预测”(NSP)。 NSP损失最初是由BERT [34]引入的,其中一个句子要求模型区分正确的下一个句子和一个随机采样的句子。 但是,后来的一些工作经验证明NSP几乎没有帮助,甚至损害了性能。 因此在RoBERTa [88]中,NSP损失被消除了。

为了替代NSP,ALBERT [78]提出了句子顺序预测(SOP)任务。 这是因为,在NSP中,否定的下一个句子是从与当前主题可能具有不同主题的其他段落中采样的,这使NSP变成了更容易的主题模型问题。 在SOP中,将交换位置的两个句子视为负样本,使模型集中于语义含义的连贯性。

4.1.2 最大化相互信息

这种方法源自互信息(MI)–统计中的基本概念。 互信息的目标是为两个变量之间的关联建模,而我们的目标是使其最大化。 通常,这种模型会优化

其中gi是表示编码器,Gi是有一些约束的编码器,I(·,·)是真实互信息的基于样本的估计器。 在实际应用中,MI难以计算。 一种常见的做法是通过NCE目标最大化 I 的下限。

图7 两种互信息在对比学习中的应用。 深度InfoMax(DIM)[59]首先将图像编码为特征图,然后利用读取函数(或称汇总函数)生成汇总向量。 AMDIM [6]通过随机选择图像的另一个视图来生成汇总向量,从而改进了DIM。

Deep InfoMax [59]是第一个通过对比学习任务,显式地建模互信息的模型,该学习任务使局部图像块与其全局上下文之间的MI最大化。 实际中,以图像分类为例,我们可以将猫图像x编码为f(x)∈R^{M×M×d},并提取局部特征向量v∈R^d。 为了在实例和上下文之间进行对比,我们还需要另外两件事:

• 一个汇总函数g:R^{M×M×d}→R^d, 生成上下文向量s = g(f(x))∈R^d

• 另一个猫图像 x− 及其上下文向量s− = g(f(x−))。

然后将对比目标表述为

深度InfoMax为我们提供了新的范例,并促进了自监督学习的发展。第一个有影响的跟随者是用于语音识别的对比预测编码(CPC)[101]。 CPC将音频片段与其上下文音频之间的关联最大化。为了提高数据效率,它需要同时使用多个负上下文向量。后来,CPC也已应用于图像分类。

AMDIM [6]增强了局部特征与其上下文之间的正相关关系。它随机采样图像的两个不同视图(截断,变色等)以分别生成局部特征向量和上下文向量。 CMC [137]将它扩展为一张图像的多个不同视图,并采样另一张无关图像作为负样本。但是,CMC从根本上不同于Deep InfoMax和AMDIM,因为它提议测量上下文-上下文相似性而不是上下文-实例相似性。我们将在下一部分中讨论它。

在语言预训练中,InfoWord [76]提出最大化句子的整体表示与其中的n-gram之间的相互信息。 从句子中导出上下文,将选定的n-gram掩盖起来,然后从语料库中随机抽取负上下文。

图8:Deep Graph InfoMax [147]使用读出函数来生成摘要向量s1,并将其放入带有节点1的嵌入x1和损坏的嵌入x􏰄1~的鉴别器中,以识别哪个嵌入才是真正的嵌入。 损坏是为了改组节点的位置。

在图学习中,Deep Graph InfoMax(DGI)[147]将节点的表示形式视为局部特征,并将随机采样的2跳邻居的平均值视为上下文。但是,很难在单个图上生成负上下文。为了解决此问题,DGI建议通过保留子图结构和置换节点特征来破坏原始上下文。 DGI之后是许多工作,例如InfoGraph [129],其目标是学习图级别表示而不是节点级别,从而最大化图级别表示与不同级别子结构之间的相互信息。正如CMC为改进Deep InfoMax所做的工作一样,在[55]中,作者提出了一种针对图的对比多视图表示学习方法。他们还发现,在图学习中,图扩散是产生增强的正样本对的最有效方法。

为了统一图的预训练,在[61]中,作者从两个方面系统地分析了图神经网络的预训练策略:属性/结构和结点级/图级。对于节点级别的结构预测,他们提出了“上下文预测”,以最大程度地提高k跳邻域表示及其上下文图之间的MI。对于化学领域中的属性,他们提出了“属性掩码”来根据节点的邻域来预测节点的属性,这是一个与BERT中的token掩码类似的生成目标。

S2GRL [105]进一步将上下文图中的节点分为k跳上下文子图,并分别将其MI与目标节点最大化。 但是,图预训练的一个基本问题是如何学习整个图的归纳偏差,而现有的图预训练工作仅适用于特定领域。

4.2 上下文-上下文对比

尽管基于MI的对比学习取得了巨大的成功,但最近的一些研究[22],[26],[56],[140]对MI的实际改进产生了怀疑。

[140]提供了经验证据,显示上限MI估计会导致病态和性能较低的表示,因此上述模型的成功与MI并不紧密相关。相反,应更多地归因于编码器结构和与度量学习有关的负采样策略。度量学习的一个重要重点是执行难正采样,并提高负采样效率,它们可能在基于MI的模型的成功中扮演更重要的角色。

作为替代方案,上下文-上下文对比学习会丢弃MI,并像度量学习一样直接研究不同样本的全局表示之间的关系。最初,研究人员借鉴了半监督学习的思想,通过基于聚类的判别产生伪标签,并在表示上取得了相当不错的表现。

最近,CMC [137],MoCo [56],SimCLR [22]和BYOL [48]进一步支持了上述结论,它们通过上下文之间的直接比较,表现优于基于上下文实例的方法,并在线性分类下获得了与监督方法媲美的结果。我们将从较早提出的基于聚类的判别开始,然后转向他们提倡的实例区分。

4.2.1 基于聚类的判别

首先在基于聚类的方法中研究上下文-上下文对比[20],[85],[99],[158],尤其是Deep Cluster [20],它首先获得了与监督模型AlexNet [77]竞争的性能。

图像分类要求模型正确地对图像进行分类,并且同一类别中图像的表示应相似。因此,动机是在嵌入空间拉近相似的图像。在有监督学习中,这种拉近过程是通过标签监督来完成的。然而,在自监督学习中,我们没有这样的标签。为了解决标签问题,Deep Cluster [20]提出利用聚类产生伪标签,并要求鉴别器对图像的标签进行预测。训练可以分为两个步骤。第一步,Deep Cluster使用K均值对编码表示进行聚类,并为每个样本生成伪标签。然后,在第二步中,鉴别器预测两个样本是否来自同一群集,然后反向传播到编码器。这两个步骤是迭代执行的。

最近,局部聚合(LA)[173]进一步推动了基于聚类方法。它指出了DeepCluster的几个缺点,并进行了相应的优化。首先,在DeepCluster中,将样本分配给互斥的群集,但是LA针对每个示例分别标识邻居。其次,DeepCluster优化了交叉熵判别损失,而LA采用了直接优化局部软集群度量的目标函数。这两个更改大大提高了LA在下游任务上的表示性能。

VQ-VAE [118],[143]是我们在第3部分中介绍的将相似矢量聚合在一起的类似工作。为了克服VAE生成高保真图像的传统缺陷,VQ-VAE建议量化矢量。对于从图像编码的特征矩阵,VQ-VAE将矩阵中的每个一维向量替换为嵌入字典中最接近的一个向量。这个过程与LA正在做的事情相同。

基于聚类的判别还有助于其他预训练模型的泛化性,从而更好地将模型从借口目标转移到实际任务。传统的表征学习模型只有两个阶段:一个阶段用于预训练,另一个阶段用于评估。 ClusterFit [157]在上述两个阶段之间引入了类似于DeepCluster的聚类预测微调阶段,从而提高了表示在下游分类评估中的表现。

在图学习中,M3S [131]采用相似的思想来执行基于DeepCluster的自监督预训练,以获得更好的半监督预测。在几乎没有标签数据且有大量无标签数据的情况下,对于每个阶段,M3S都会像DeepCluster一样先对其自身进行预训练,以在未标签数据上生成伪标签,然后将这些伪标签与在标签数据上受监督训练的模型所预测的伪标签进行比较。只有top-k可信标签会添加到标签集中,以进行下一阶段的半监督训练。在[163]中,该思想被进一步发展为三个预训练任务:拓扑划分(类似于频谱聚类),节点特征聚类和图完成。

4.2.2 实例区分

将实例区分作为借口任务的原型是InstDisc [153]。 在InstDisc的基础上,CMC [137]建议采用图像的多个不同视图作为正样本,而将另一个图像作为负样本。 在特征空间中,CMC拉近图像的多个视图,并远离其他样本。 但是,它在某种程度上受到Deep InfoMax概念的约束,即为每个正样本采样一个负样本。

在MoCo [56]中,研究人员进一步发展了通过动量对比进行实例区分的想法,这大大增加了负样本的数量。例如,给定输入图像x,我们的直觉是通过查询编码器fq(·)来学习内在表示q = fq(x),该编码器可以将x与其他图像区分开。 因此,对于一组其他图像xi,我们采用异步更新的密钥编码器fk(·)得出k += fk(x)和ki = fk(xi),并优化以下目标

其中K是负样本的数量。 这个公式是以InfoNCE的形式。

此外,MoCo还在负样本采样效率上提出了另外两个重要的想法。

• 首先,它放弃了传统的端到端训练框架,并设计了带有两个编码器(查询和键)的动量对比学习,这可以防止在开始阶段损失收敛的波动。

• 其次,为了扩大负样本的容量,MoCo使用队列(K最多为65536)将最近编码的批次保存为负样本。 这显着提高了负采样效率。

图10 Moco

还有其他一些辅助技术可以确保训练收敛,例如,通过batch shuffling来避免捷径解决方案,以及使用温度超参数τ来调整规模。

但是,MoCo采用了过于简单的正样本策略:一对正表示来自同一样本,没有任何变换或扩充,这使得正对太容易区分了。 PIRL [94]如第4.1.1节所述添加了拼图增强功能。 为了产生一个借口-不变的表示,PIRL要求编码器将一幅图像及其拼图视为相似对。

图11 simCLR的10种视角

在SimCLR [22]中,作者通过引入10种形式的数据增强进一步说明了难正样本策略的重要性。 这种数据增加类似于CMC [137],它利用几种不同的视图来增加正样本对。 SimCLR遵循端到端训练框架而不是MoCo的动量对比,并且为了处理大规模的负样本问题,SimCLR将批次大小N设为8196。

详情如下。 将N个样本的小批量增加为2N个样本xˆj(j = 1,2,...,2N)。 对于一对正样本xˆi和xˆj(源自一个原始样本),其他2(N-1)被视为负样本。 成对的对比损失NT-Xent损失[24]定义为

注意l_{i,j} 是不对称的,并且sim(·,·)函数在这里是可以对表示进行归一化的余弦相似度函数。 总计损失是

SimCLR 也提供了一些有用的技术,包括表示和对比损失之间可学习的非线性转换,更多的训练步长以及更深的神经网络。 [26]进行的消融研究表明,SimCLR中的技术也可以进一步改善MoCo的性能。

InfoMin [138]对增强正样本进行了更多研究。作者声称,为了在对比学习中更好地增强视图,我们应该选择互信息较少的视图。在最佳情况下,不同视图应仅共享标签信息。为了产生这样的最佳视图,作者首先提出了一种无监督的方法来最小化视图之间的相互信息。但这可能会导致丢失用于预测标签的信息(例如纯空白视图)。因此,然后提出了一种半监督方法来查找仅共享标签信息的视图。与MoCo v2相比,此技术可提高约2%。

BYOL [48]采取了更为激进的步骤,该方法在自监督学习中放弃了负采样,但取得了比InfoMin更好的结果。对于我们上面提到的对比学习方法,他们通过预测同一图像的不同视图来学习表示,并将预测问题直接投射到特征空间中。但是,直接在特征空间中进行预测可能会导致表示崩溃,因为多视图通常互相之间具有很高的可预测性。如果没有负样本,神经网络很容易区分。有关负样本在对比损失中的功能的更多讨论,请参见第6.3.2节。

在BYOL中,研究人员认为负样本可能不是这个过程中必须的。他们进行了初步实验,表明当我们使用固定的随机初始化网络(防止崩溃)为我们的预测生成目标时,尽管表示形式不是很好,但它已经比随机初始化的网络好得多。直觉是迭代此过程,以逐步实现更好的表示。因此,他们提出了一种具有指数移动平均策略的架构(图12),就像MoCo一样更新目标编码器。此外,它们不使用交叉熵损失,而是遵循回归范式,其中均方误差用作:

这不仅可以在下游任务中获得更好的性能,而且对于批处理大小也更可靠。 在MoCo和SimCLR中,批量大小的减小会导致性能显着下降。 但是在BYOL中,尽管批次大小仍然很重要,但通过实验表明512的批次大小和4096相比仅导致下降了0.3%,而SimCLR的下降了1.4%。

图12 BYOL

在图学习中,图对比编码(GCC)[109]是利用实例区分作为结构信息预训练的借口任务的开创新工作。 对于每个节点,我们通过重新启动随机游走独立地对两个子图进行采样,并使用归一化图拉普拉斯矩阵的顶级特征向量作为节点的初始表示。 然后,我们使用GNN对其进行编码,并像MoCo和SimCLR一样计算InfoNCE损失,其中来自同一节点(在不同子图中)的节点嵌入被视为相似。 结果表明,与以前的工作(例如struc2vec [119],GraphWave [42]和ProNE [166])相比,GCC学习的迁移结构知识更好。

4.3 半监督自训练中的自监督对比预训练

尽管基于对比学习的自监督学习持续突破各种基准,但标签仍然很重要,因为自监督学习和监督学习的训练目标之间存在差距。换句话说,无论自监督学习模型如何改进,它们仍然只是功能强大的特征提取器,要转移到下游任务,我们仍然需要大量标签。为了弥合自监督预训练和下游任务之间的差距,半监督学习正是我们所追求的。

回想一下在ImageNet排行榜上居首的MoCo [56],尽管事实证明它对许多其他下游视觉任务都是有益的,但它无法改善COCO目标检测任务。以下一些工作[96],[174]对此问题进行了调查,并将其归因于实例辨别的目标与目标检测的目标之间的差距。在这种情况下,尽管单纯的自监督预训练无法提供帮助,但基于半监督的自训练可以对此做出很大贡献。

首先,我们将阐明半监督学习和自训练的定义。半监督学习是一种机器学习的方法,它在训练过程中将少量标记的数据与大量未标记的数据结合在一起。许多方法都来自对数据分布的几种不同假设,其中最古老的方法是自训练(或自标记)。在自训练中,模型在少量标记数据上训练,然后在未标记数据上产生标记。只有那些具有高度自信标签的数据与原始标签数据相结合才能训练新模型。我们重复此过程以找到最佳模型。

ImageNet当前最新的监督模型[154]遵循自训练范式,在该模型中,我们首先在标记的ImageNet图像上训练EfficientNet模型,然后将其用作教师在300M未标记的图像上生成伪标签。然后,我们在带有标记和伪标记图像组合上训练更大的EfficientNet学生模型。我们通过让学生作为教师来迭代此过程。在伪标签的生成过程中,不会对教师产生干扰,从而使伪标签尽可能准确。但是,在学生学习期间,我们通过RandAugment向学生注入诸如dropout,随机深度和数据增强之类的噪声,从而使学生的泛化性优于老师。

注意,半监督式自训练的成功,很自然地重新思考其与自监督方法之间的关系,尤其是与成功的对比预训练方法之间的关系。在4.2.1节中,我们介绍了M3S,它试图将基于聚类的对比预训练和下游半监督学习相结合。对于计算机视觉任务,Zoph等人 [174]研究了MoCo的预训练和自训练方法,其中首先对教师进行下游数据集(例如COCO)的训练,然后在未标记的数据上产生伪标签(例如ImageNet),最后学生学习下游数据集上的真实标签和未标记数据上的伪标签。他们惊奇地发现,就非常强大的数据增强而言,预训练的性能会受到损害,而自训练仍然可以从中受益。此外,更多标记数据会降低预训练的价值,而半监督式自训练总是会提高。他们还发现,预训练和自训练的改进是累加的,即,它们从不同的角度对表现做出了贡献。具有联合预训练和自训练的模型是最好的。

Chen等 [23]的SimCLR v2支持上述结论,表明ResNet-50仅使用原始ImageNet标签的10%,就可以通过联合预训练和自训练来超越有监督。 他们提出了一个三步框架:

1)像SimCLR v1一样进行自监督的预训练,但需要进行一些小的体系结构修改和更深入的ResNet。

2)仅使用原始ImageNet标签的1%或10%来微调最后几层。

3)使用经过微调的网络作为老师,在未标记的数据上产生标签,以训练较小的学生ResNet-50。

自监督的对比预训练和半监督的自训练相结合的成功,为未来的数据有效深度学习范例打开了视线。 期望有更多工作来研究其潜在机制。


5 生成-对比(对抗)自监督学习

5.1 为什么要生成-对比(对抗)?

生成模型在自监督学习中取得成功的原因是它具有适应数据分布的能力,可以根据该数据分布执行各种下游任务。 生成式自监督学习的目标通常被表述为最大似然函数

其中x是我们希望建模的所有样本,而c是条件约束,例如上下文信息。然后,通过最大似然估计(MLE)优化此目标。但是,MLE存在两个致命问题:

1)敏感和保守的分布。当p(x | c)→0时,L_{MLE}变得非常大,使生成模型对稀有样本极为敏感。这直接导致性能低下的保守分布。

2)低层抽象目标。在MLE中,表示分布是在x级别上建模的,例如图像中的像素,文本中的单词以及图中的节点。但是,大多数分类任务都针对高级抽象,例如目标检测,长段理解和分子分类。

这两个问题严重限制了生成式自监督学习的发展。幸运的是,判别性和对比性目标可以解决此问题,因为它们旨在帮助人类理解。以自编码器和GAN [114]为例,自编码器利用了逐点重构l2损失,这可能只适合像素级模式,不适合样本分布。但是,GAN利用对比目标将生成的样本与真实样本区分开来,该样本在语义级别上可以避免此问题。

就与对比学习的区别而言,对抗方法仍然保留了由编码器和解码器组成的生成器结构,而对比方法则放弃了解码器组件(如图13所示)。至关重要的是,一方面,生成器赋予对抗学习以生成模型特有的强大表达能力;另一方面,它也使对抗方法的目标比对比性方法的目标更具挑战性,导致不稳定的收敛。在对抗环境中,解码器的存在要求表示是“可重构的”,换言之,包含了用于构造输入的所有必要信息。但是,在对比设置中,我们只需要学习“可区别”的信息即可区分不同的样本。

图13:自编码器,GAN和对比方法之间的概念比较。 它们的架构可以统一为两个通用组件:生成器和判别器,生成器可以进一步分解为编码器和解码器。 不同的是:1)对于潜在分布z:在自编码器和对比方法中,z是显式的,而在GAN中,它是隐式建模的。 2)对于鉴别器:自编码器没有鉴别器(完全生成),而GAN和对比有鉴别器。 对比鉴别器的参数比GAN少。 3)他们的目标是不同的。 自编码器利用了生成器,而GAN和对比器则选择了鉴别器。

综上所述,对抗方法吸收了生成和对比方法的优点以及一些缺点。在需要适合隐式分布的情况下,这是一个更好的选择。在接下来的几个小节中,我们将讨论其在表示学习中的各种应用。

5.2 使用完整输入生成

在本节中,我们介绍用于表示学习的GAN及其变体,其重点是捕获样本的完整信息。

对抗表示学习的开始应归因于生成对抗网络(GAN)[114],该网络提出了对抗训练框架。 随着GAN的出现,出现了许多变体[16],[65],[67],[70],[84],[103],并重塑了人们对深度学习潜力的理解。 GAN的训练过程可以看作是两个玩家进行博弈; 一个产生假样本,而另一个试图将其与真实样本区分开。 为了公式化这个问题,我们将G定义为生成器,将D定义为鉴别器,将p_data(x)定义为实际样本分布,将p_z(z)定义为学习的潜在样本分布,我们希望优化此最小-最大博弈

在VQ-VAE2之前,和纯生成模型(例如自回归PixelCNN和自编码器VAE)相比,GAN保持着图像生成任务的领先性能。 考虑GAN这个框架如何使表示学习受益是很自然的。

但是,生成和表示之间存在差距。 与自编码器的显式潜在样本分布pz(z)相比,GAN的潜在分布pz(z)是隐式建模。 我们需要提取出这种隐式分布。 为了弥补这一差距,AAE [90]首先提出了一种遵循自编码器的解决方案。 GAN中的生成器可以视为隐式自编码器。 为了提取表示,我们可以将生成器替换为显式变分自编码器(VAE)。 回顾VAE的目标

如前所述,与自编码器的l2损失相比,GAN中的判别损失可以更好地模拟高级抽象。 为了缓解该问题,AAE用判别损失代替了KL散度函数

要求鉴别器将编码器的表示和先验分布区分开。

但是,AAE仍然保留了重建误差,这与GAN的核心思想相矛盾。基于AAE的BiGAN [40]和ALI [43]主张毫无保留地接受对抗性学习,并提出了一个新的框架。给定真实样本x

• 生成器G:生成器实际上是在充当解码器,它利用来自先前的潜在分布(例如[uniform(-1,1)] ^d,d表示维度)的z 生成伪样本x'= G(z)。

• 编码器E:一个新添加的组件,将真实样本x映射到表示z'= E(x)。这也是我们想要训练的。

• 鉴别器D:给定两个输入[z,G(z)]和[E(x),x],确定哪一个是来自真实样本分布。

很容易看出他们的训练目标是E = G^{-1},换句话说,编码器E应该学习“转换”生成器G。对于自编码器[40],该目标可以重写为l0损失,但是它与传统的自编码器不同,因为该分布不对数据本身做任何假设。 分布由鉴别器确定,捕获语义级别的差异。 基于BiGAN和ALI,后来的研究[27],[41]发现,具有更深,更大的网络和经过改进的体系结构的GAN可以在下游任务上产生甚至更好的结果。

5.3 使用部分输入进行恢复

如上所述,GAN的结构并不是为表示学习而生的,需要对其框架进行修改。虽然BiGAN和ALI选择直接提取隐式分布,一些其他的方法例如着色[79],[80],[168],[169],修复[65],[103]和超分辨率[84]通过不同的方式进行对抗学习。他们没有要求模型重建整个输入,而是向模型提供了部分输入,并要求他们恢复其余部分。这类似于在自然语言处理中对诸如BERT家族之类的降噪自编码器(DAE),但是以对抗方式进行的。

图像着色首先由[168]提出。问题可以描述为给定图像中的一个颜色通道L并预测其他两个通道A,B的值。编码器和解码器网络可以设置为任何形式的卷积神经网络。有趣的是,为避免传统生成方法(如VAE)带来的不确定性,作者将生成任务转换为一种分类任务。他们首先找出(A,B)的常见位置区域,然后将其划分为313个类别。通过具有超参数T作为调整的softmax层执行分类。基于[168],提出了一系列基于着色的表示方法[79],[80],[169],以使下游任务受益。

图像修复[65],[103]更直接。我们要求模型根据图像的其余部分预测图像的任意部分。然后使用鉴别器将修补的图像与原始图像区分开。超分辨率方法SRGAN [84]遵循相同的思想,利用对抗学习将模糊低分辨率图像恢复出高分辨率图像。

5.4 预训练语言模型

5.5 图学习

5.6 域适应和多模态表示

从本质上讲,对抗学习中的鉴别器用于匹配潜在表示分布和数据分布之间的差异。 此功能自然涉及域自适应和多模式表示问题,旨在对齐不同的表示分布。 [1],[2],[44],[123]研究了GAN如何帮助领域适应。 [17],[149]利用对抗性抽样来提高负面样本的质量。 对于多模式表示,[172]的图像到图像的翻译,[124]的文本样式转换,[29]的单词到词的翻译和[121]图像到文本的翻译显示出强大的对抗性表示学习能力。

6 自监督学习背后的理论

7 讨论和未来方向

在本节中,我们将讨论自监督学习中的几个开放性问题和未来发展方向。

理论基础 尽管自监督学习取得了巨大的成功,但很少有著作研究其背后的机制。 在第6节中,我们列出了有关该主题的最新著作,并表明理论分析对避免误导经验结论具有重要意义。

在[4]中,研究人员提出了一个概念框架来分析对比目标在泛化能力中的作用。 [140]从经验上证明,互信息与几种基于MI的方法的成功并不密切相关,而采样策略和模型结构设计可能更相关。 这种类型的工作对于自监督学习形成坚实的基础至关重要,因此迫切需要进行更多与理论分析有关的工作。

下游任务迁移 预训练和下游任务之间存在本质差距。 研究人员设计了精心设计的借口任务,以帮助模型学习可以转移到其他工作的数据集的某些关键特征,但有时这可能无法实现。 此外,选择借口任务的过程似乎过于启发和困难,无法遵循模式。

一个典型的例子是在BERT和ALBERT中选择预训练任务。 BERT使用下一句预测(NSP)来增强其对句子级理解的能力。 但是,ALBERT显示NSP相当于一个幼稚的主题模型,这对于语言模型的预训练来说太容易了,甚至会降低BERT的性能。

对于预训练任务选择问题,一个可能令人兴奋的方向是针对特定的下游任务自动设计预训练任务,就像神经架构搜索[175]对神经网络架构所做的那样。

跨数据集迁移 此问题也称为如何学习归纳偏差或归纳学习。传统上,我们将数据集分为用于学习模型参数的训练集和用于评估的测试集。这种学习范例的基本前提是,现实世界中的数据要符合我们数据集中的分布。但是,这种假设在实验中经常失败。

自监督的表示学习解决了部分问题,特别是在自然语言处理领域。语言模型预训练中使用的大量语料库有助于覆盖大多数语言模式,因此有助于PTM在各种语言任务中取得成功。但是,这是基于以下事实:相同语言的文本共享相同的嵌入空间。对于诸如机器翻译之类的其他任务以及诸如图学习之类的领域(其中不同数据集的嵌入空间不同),如何有效地学习可传递的归因偏差仍然是一个悬而未决的问题。

探索采样策略的潜力 在[140]中,作者将基于互信息的方法成功的原因之一归因于更好的采样策略。 MoCo [56],SimCLR [22]和其他一系列对比方法也可能支持这一结论。 他们提议利用超大量的负样本和增强的正样本,在深度度量学习中研究其效果。 如何进一步释放采样能力仍然是一个尚未解决的有吸引力的问题。

对比学习的早期退化 对比学习方法,例如MoCo [56]和SimCLR [22],正在迅速接近计算机视觉监督学习的性能。但是,它们的性能通常仅限于分类问题。同时,用于语言模型预训练的生成对比方法ELETRA [28]在具有较少模型参数的几个标准NLP基准上也优于其他生成方法。但是,一些评论表明ELETRA在语言生成和神经实体提取方面的表现不尽人意。

上面的问题可能是因为对比目标经常陷入嵌入空间的早期退化问题,这意味着该模型过早地适合于区分性借口任务,因此失去了泛化能力。我们希望会有技术或新的范例来解决早期退化问题,同时保留对比学习的优势。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350