一、有监督、半监督、无监督、弱监督、自监督的定义和区别

以下各个概念的分类并不是严格互斥的:

  • 有监督:
  • 利用大量的标注数据来训练模型,模型最终学习到输入和输出标签之间的相关性;
  • 用有标签的数据训练;
  • 监督学习需要每一个数据都有标签。一般来说这些标签都是人工设计的标签,通常标注需要花费大量的人力物力。
  • 监督学习更像学习一种映射关系,大多数的训练数据都带有标签。输入数据是x,标签是y,学习f函数的映射关系。监督学习的特征通常是具体的特征抽取。
  • 无监督:
  • 不依赖任何标签值,通过对数据内在特征的挖掘,找到样本间的关系,比如聚类;
  • 用无标签的数据训练;
  • 训练数据不要求有标签,没有显示的。没有标签的数据。无监督学习通常是学习的特征不是针对具体任务,更像去噪训练,常用的方法包括主成分分析和自编码器等。典型的无监督训练方法是聚类
  • 半监督:
  • 利用少量有标签的数据和大量无标签的数据来训练网络
  • 让学习器不依赖外界交互、自动的利用未标记的样本提升学习性能,就是半监督学习。
  • 半监督学习希望从大量无标记的数据中挖掘有用的信息,减少标注成本,降低对标注成本的要求。
  • 同时用有标签和无标签的数据进行训练。最近非常火热,此领域的发展也非常迅速,先前通常是两阶段的训练,先用(较小规模的)有标签数据训练一个Teacher模型,再用这个模型对(较大规模的)无标签数据预测伪标签,作为Student模型的训练数据;目前已经有很多直接end-to-end地训练,大大减少半监督训练的工作;
  • 自监督:
  • 自监督也属于无监督的一个分支。模型通过学习没有标签的训练数据。模型具有自己学习的能力。
  • 在无标注数据上训练,通过一些方法让模型学习到数据的inner representation,再接下游任务,例如加一个mlp作为分类器等。但接了下游任务之后还是需要在特定的有标签数据上finetune,只是有时候可以选择把前面的层完全固定,只finetune后面接的网络的参数。
  • 利用辅助任务(pretask)从大规模的无监督数据中挖掘自身的监督信息,通过这种构造的监督信息对网络进行训练,从而可以学习到对下游任务有价值的表征;
  • 弱监督:
  • 弱监督是模型只有很弱的标签,但是要去完成一个很强的任务。例如,模型要完成目标分割,分割需要目标类别以及目标的位置box信息,但是标签只有类别信息。
  • 用包含噪声的有标签数据训练。 

二、强化学习、对抗学习、对比学习

  • 强化学习:强化学习没有显示的给出输入和输出对的方式给出训练样本。强化学习的数据没有标签,学习的过程中并没有规定哪一步正确或者哪一步错误,直到游戏结束才能知道输赢。模型根据最后游戏的输赢可以知道有用的策略,以及不好的策略。强化学习也称为是一种奖励机制。
  • 对抗学习:gan网络是一种典型的对抗学习。一个生成器和一个评分器,他们之间产生对抗学习,最后获得模型对样本的辨别能力。
  • 对比学习:是一种自监督学习的方法。通过学习目标之间的相似性来判断目标的类别。

三、半监督学习


1. 进行半监督学习的原因

很容易找到海量的无类标签的样例,但需要使用特殊设备或经过昂贵且用时非常长的实验过程进行人工标记才能得到有类标签的样本,由此产生了极少量的有类标签的样本和过剩的无类标签的样例。

因此,人们尝试将大量的无类标签的样例加入到有限的有类标签的样本中一起训练来进行学习,期望能对学习性能起到改进的作用,由此产生了半监督学习(Semi-supervised Learning),如如图1所示。半监督学习(Semi-supervised Learning)避免了数据和资源的浪费,同时解决了监督学习(Supervised Learning)的 模型泛化能力不强和无监督学习(Unsupervised learning)的模型不精确等问题。

半监督学习 半监督定义_python

同时,收集数据很容易,但是收集到有标签的数据代价很昂贵,从人类的学习认知模式进行类比,可能半监督学习(Semi-supervised Learning)是一种更加科学的学习方法。


2. 半监督学习的三个基本假设

  1. 平滑假设(Smoothness Assumption):位于稠密数据区域的两个距离很近的样例的类标签相似,也就是说,当两个样例被稠密数据区域中的边连接时,它们在很大的概率下有相同的类标签;相反地,当两个样例被稀疏数据区域分开时,它们的类标签趋于不同。
  2. 聚类假设(Cluster Assumption):当两个样例位于同一聚类簇时,它们在很大的概率下有相同的类标签。这个假设的等价定义为低密度分离假设(Low Sensity Separation Assumption),即分类决策边界应该穿过稀疏数据区域,而避免将稠密数据区域的样例分到决策边界两侧。
  3. 聚类假设是指样本数据间的距离相互比较近时,则他们拥有相同的类别。根据该假设,分类边界就必须尽可能地通过数据较为稀疏的地方,以能够避免把密集的样本数据点分到分类边界的两侧。在这一假设的前提下,学习算法就可以利用大量未标记的样本数据来分析样本空间中样本数据分布情况,从而指导学习算法对分类边界进行调整,使其尽量通过样本数据布局比较稀疏的区域。例如,Joachims提出的转导支持向量机算法,在训练过程中,算法不断修改分类超平面并交换超平面两侧某些未标记的样本数据的标记,使得分类边界在所有训练数据上最大化间隔,从而能够获得一个通过数据相对稀疏的区域,又尽可能正确划分所有有标记的样本数据的分类超平面。
  4. 流形假设(Manifold Assumption):将高维数据嵌入到低维流形中,当两个样例位于低维流形中的一个小局部邻域内时,它们具有相似的类标签。


3. 半监督学习分类

(1)半监督分类 (Semi-Supervised Classification)

在无类标签的样例的帮助下训练有类标 签的样本,获得比只用有类标签的样本训练得到的分类器性能更优的分类器,弥补有类标签的样本不足的缺陷,其中类标签yi取有限离散值yi∈{c1,c2,···,cc},cj∈N。

(2)半监督回归(Semi-Supervised Regression)

在无输出的输入的帮助下训练有输出的输入,获得比只用有输出的输入训练得到的回归器性能更好的回归器,其中输出yi 取连续值 yi∈R。

(3)半监督聚类(Semi-Supervised Clustering)

在有类标签的样本的信息帮助下获得比只用无类标 签的样例得到的结果更好的簇,提高聚类方法的精度。

(4)半监督降维(Semi-Supervised Dimensionality Reduction)

在有类标签的样本的信息帮助下找到高维输入数据的低维结构,同时保持原始高维数据和成对约束(Pair-Wise Constraints)的结构不变,即在高维空间中满足正约束(Must-Link Constraints)的样例在低维空间中相距很近,在高维空间中满足负约束(Cannot-Link Constraints)的样例在低维空间中距离很远。

半监督学习 半监督定义_python_02


4. 半监督学习方法

  1. 简单自训练(simple self-training):用有标签数据训练一个分类器,然后用这个分类器对无标签数据进行分类,这样就会产生伪标签(pseudo label)或软标签(soft label),挑选你认为分类正确的无标签样本(此处应该有一个挑选准则),把选出来的无标签样本用来训练分类器。
  2. 协同训练(co-training):其实也是 self-training 的一种,但其思想是好的。假设每个数据可以从不同的角度(view)进行分类,不同角度可以训练出不同的分类器,然后用这些从不同角度训练出来的分类器对无标签样本进行分类,再选出认为可信的无标签样本加入训练集中。由于这些分类器从不同角度训练出来的,可以形成一种互补,而提高分类精度;就如同从不同角度可以更好地理解事物一样。
  3. 半监督字典学习:其实也是 self-training 的一种,先是用有标签数据作为字典,对无标签数据进行分类,挑选出你认为分类正确的无标签样本,加入字典中(此时的字典就变成了半监督字典了)
  4. 标签传播算法(Label Propagation Algorithm):是一种基于图的半监督算法,通过构造图结构(数据点为顶点,点之间的相似性为边)来寻找训练数据中有标签数据和无标签数据的关系。是的,只是训练数据中,这是一种直推式的半监督算法,即只对训练集中的无标签数据进行分类,这其实感觉很像一个有监督分类算法…,但其实并不是,因为其标签传播的过程,会流经无标签数据,即有些无标签数据的标签的信息,是从另一些无标签数据中流过来的,这就用到了无标签数据之间的联系
  5. 半监督支持向量机:监督支持向量机是利用了结构风险最小化来分类的,半监督支持向量机还用上了无标签数据的空间分布信息,即决策超平面应该与无标签数据的分布一致(应该经过无标签数据密度低的地方)(这其实是一种假设,不满足的话这种无标签数据的空间分布信息会误导决策超平面,导致性能比只用有标签数据时还差)


半监督学习的训练目标

最初在有监督学习的背景下,所有人考虑的是如何改变网络结构可以使检测结果更加准确,因此产生了一些列的基础网络如:Lenet,Alexnet,vgg,resnet等等。之后考虑到半监督学习的任务目标,需要改变除了网络结构模型之外的数据处理架构(数据增强等任务),构造新的损失函数,网络模型外的整体架构等方面,在保持原有网络模型不变的基础上充分利用label data和unlabel data使最终的性能尽可能贴近有监督学习的性能指标

5. 自监督学习


1) 进行自监督学习的原因

机器学习中基本的学习方法有:监督学习(supervised learning)、半监督学习(semi-supervised learning)和无监督学习(unsupervised learning)。他们最大的区别就是模型在训练时需要人工标注的标签信息,监督学习利用大量的标注数据来训练模型,使模型最终学习到输入和输出标签之间的相关性;半监督学习利用少量有标签的数据和大量无标签的数据来训练网络;而无监督学习不依赖任何标签值,通过对数据内在特征的挖掘,找到样本间的关系,比如聚类。

使用监督学习时我们需要足够的标记数据。为了获得这些信息,需要手工标记数据(图像/文本),这是一个既耗时又昂贵的过程。还有一些领域,比如医疗领域,获取足够的数据本身就是一个挑战。而在使用无监督学习的时候,例如自编码器,仅仅是做了维度的降低而已,并没有包含更多的语义特征,对下游任务并没有很大的帮助。

因此我们想要在不需要手工标记数据的情况下,训练过程还能对任务本身有很大的帮助,可以包含更多的语义特征,自监督学习因此被提出。


2) 自监督学习有效性评估

评测自监督学习的能力,主要是通过 Pretrain-Fintune 的模式。我们首先回顾下监督学习中的 Pretrain - Finetune 流程:我们首先从大量的有标签数据上进行训练,得到预训练的模型,然后对于新的下游任务(Downstream task),我们将学习到的参数进行迁移,在新的有标签任务上进行「微调」,从而得到一个能适应新任务的网络。而自监督的 Pretrain - Finetune 流程:首先从大量的无标签数据中通过 pretrain 来训练网络,得到预训练的模型,然后对于新的下游任务,和监督学习一样,迁移学习到的参数后微调即可。所以自监督学习的能力主要由下游任务的性能来体现。


3) 自监督学习的主要方法

自监督学习的方法主要可以分为 3 类:

  1. 基于上下文(Context based)
  2. 基于时序(Temporal Based)
  3. 基于对比(Contrastive Based)