半监督学习指的是结合了少量的有标记数据和大量无标记数据来完成训练的过程。
在某些特定领域,大量有标记的数据很少也很难标注。
比方说,我们现在有一个公开数据集,它全部都是有标注的。此时我们可以使用有监督的学习来看一下结果,再使用10%的有标注的数据集结合剩下90%的未标注的数据来使用半监督学习的方法,我们希望半监督学习的方法也能达到有监督学习的水平。
半监督学习的应用
- 视频理解,
- 自动驾驶
- 医疗影像分割
- 心脏信号分析
半监督前提假设
- 连续性假设(Continuity Assumption):
我们用一个分类问题来举例,当我们的Input是比较接近的时候,比如说进行猫狗分类,两张猫的图片是比较接近的时候,此时output(后验概率矩阵)也必须是比较接近的。
比如说,x1和x2比较接近,x1的后验概率是0.9和0.1,明显它是分成第一个类0.9的。x2有两组输出,一个是0.85和0.15,另一个是0.55和0.45。那么我们可以看到这两组的输出虽然都是把类别分到了第一个,但是第二组输出
是不满足连续性假设的,因为它和
距离比较大,差的比较多。
- 聚类假设(Cluster Assumption)
聚类假设指的是类类要内聚,类间要分开。就是说同一类的东西要非常相似,比较靠近,接近于一点。不同的类别要尽可能的分开。所以不能有模糊不清的图片,如
- 流行假设(Manifold Assumption)
- 所有数据点都可以被低维流行表达。
- 相同流行上的数据点,标签一样。
这里可以理解成降维,很多高维的数据的一些维度是不起作用的,它们的特点集中在一些低维度上。
半监督学习数学定义
上表是一个学术论文上,字符所代表的含义,x代表的是输入;y代表的是输出,它要么是个分类输出,要么是个回归输出;
代表有标签的数据集;
代表无标签的数据集;X就是整个的数据集,包含有标签的和无标签的;L指损失函数;G是生成器,半监督学习可以用到生成式模型;D是判别器;C是分类器;H是熵,一般指交叉熵;E是期望;R是正则项,半监督学习中一般指一致性正则,当然半监督学习也可以使用传统的L1和L2正则;
是指标签。
半监督学习最核心的其实就是它的损失函数,它一般包含三个部分,第一部分就是有监督的loss(supervised loss),第二部分就是无监督的loss(unsupervised loss)以及第三部分正则项(regularization)。因为半监督学习有少量的有标签的数据,那么第一部分就是这些有标签数据的loss;当然还有大量的未标注的数据,第二部分就是这些未标注数据的loss;第三部分可以用L1、L2正则,也可以是一致性正则。
第一部分的loss跟之前是一样的,一般是交叉熵损失函数,最主要的就是设计后面两部分的损失函数。
半监督学习实施方法
半监督学习模型可以分为五大方法,第一个是生成式模型,第二个是一致性损失正则,第三个是图神经网络,第四个是伪标签的方法,第五个是混合方法。现在用的最多的是混合方法,它可以结合前面四种方法的优点。
- Generative Based:基于生成式网络
1、重用判别器(Re-using Discriminator)
在我们使用GAN的时候,我们知道,鉴别器充当的是二分类器的功能,对输入的真实的图片或者生成的图片来判定是真是假。重用鉴别器在半监督学习中是一个K分类的分类器,它不仅仅是对有标签的数据(x,y)进行分类,还有生成的数据(G(z))和未标注的数据x进行分类。通过这三块的损失来构建我们的K类别的分类器。这样就达到了我们的目的,联合了未标注的数据和有标签的数据。
2、用于正则化分类器的生成样本(Generated samples to regularize a classifier)
这里的鉴别器D依然是一个二分类器,生成器G生成数据的时候的输入包含了未标注数据x,还包含了某一分布的随机初始矩阵z,来共同生成
,再由
生成
,生成
的公式如下
这里的m是一个二值化的掩膜,即一个和x一样大的矩阵,它的值只有0和1。0乘以x中的像素点直接置为0,而1会保留x中的像素点的值。最后联合x和
一同送入鉴别器D中来判别它们是否是一致的。我们希望我们的判别结果是一致的,这就意味着能驱动判别器D来识别到图片的某一块的特征。一旦该模型训练完备之后,就可以单独将鉴别器提取出来用在别的分类器中去。也可以用于构建别的loss设计的一部分,相当于一个表征或特征抽取器。