让学习器不依赖外界交互、自动地利用未标记样本来提升学习性能,就是半监督学习(semi-supervised learning)。
要利用未标记样本,必然要做一些将未标记样本所揭示的数据分布信息与类别标记相联系的假设。假设的本质是“相似的样本拥有相似的输出”。
半监督学习可进一步划分为纯(pure)半监督学习和直推学习(transductive learning),前者假定训练数据中的未标记样本并非待测的数据,
而后者则假定学习过程中所考虑的未标记样本恰是待预测数据,学习的目的就是在这些未标记样本上获得最优泛化性能。
图片来源: A Tutorial on Graph-based Semi-Supervised Learning Algorithms for Speech and Spoken Language Processing
左图表示根据现有的数据,我们得到的分类边界如左图中蓝线所示。但是当我们有了无标签数据的分布信息后,两个类的分类超平面就变得比较明确了。
因此,使用无标签数据有着提高分类边界的准确性,提高模型的稳健性。
来源: Pseudo-labeling a simple semi-supervised learning method
伪标签学习也可以叫简单自训练(simple self-training):用有标签数据训练一个分类器,然后用这个分类器对无标签数据进行分类,
这样就会产生伪标签(pseudo label)或软标签(soft label),挑选你认为分类正确的无标签样本(此处应该有一个挑选准则),把选出来的无标签样本用来训练分类器。
上图反映的便是简单的伪标签学习的过程,具体描述如下:
i)使用有标签数据训练模型;
ii)使用训练的模型为无标签的数据预测标签,即获得无标签数据的伪标签;
iii)使用(ii)获得的伪标签和标签数据集重新训练模型;
最终的模型是(iii)训练得到,用于对测试数据的最终预测。
伪标签方法在实际的使用过程中,会在(iii)步中增加一个参数:采样比例(sample_rate),表示无标签数据中本用作伪标签样本的比率。
伪标签方法的更加详细介绍以及Python实现可以最后的参考文献。
有监督学习中的传统SVM试图找到一个划分超平面,使得两侧支持向量之间的间隔最大,即“最大划分间隔”思想。对于半监督学习,S3VM则考虑超平面需穿过数据低密度的区域。
TSVM是半监督支持向量机中的最著名代表,TSVM主要思想是尝试将每个未标记样本分别作为正例或反例,在所有结果中,寻找一个在所有样本上间隔最大的划分超平面。
TSVM采用局部搜索的策略来进行迭代求解,即首先使用有标记样本集训练出一个初始SVM,接着使用该学习器对未标记样本进行标记,这样所有样本都有了标记,
并基于这些有标记的样本重新训练SVM,之后再寻找易出错样本不断调整。
2-2-1、无标签数据初始化网络
一个好的初始化可以使得网络的结果准确率提高,迭代次数更少。因此该方式即是利用无标签数据让网络有一个好的初始化。
初始化的两种方法,无监督预训练与伪有监督预训练
无监督预训练:用所有训练数据训练自动编码器(AutoEncoder),然后把自编码网络的参数作为初始参数,用有标签数据微调网络(验证集)。
伪有监督预训练:通过半监督算法或聚类算法等方式,给无标签数据附上伪标签信息,先用这些伪标签信息来预训练网络,然后再用有标签数据来微调网络(验证集)。
2-2-2、有标签数据提取特征的半监督学习
i)用有标签数据训练网络(此时网络一般过拟合);
ii)通过隐藏层提取特征,以这些特征来用某种分类算法对无标签数据进行分类;
iii)挑选认为分类正确的无标签数据加入到训练集;
重复上述过程。
想法美好,实际应用不太行,误差会放大。
2-2-3、网络本身的半监督学习(端到端的半监督深度模型)
ICML 2013 的文章Pseudo-Label : The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Networks:
该文章简单的说就是在伪标签学习中使用深度学习网络作为分类器,就是把网络对无标签数据的预测,作为无标签数据的伪标签(Pseudo label),用来对网络进行训练。
但方法虽然简单,但是效果很好,比单纯用有标签数据有不少的提升。其主要的贡献在于损失函数的构造:
损失函数的第一项是有标签数据的损失,第二项是无标签数据的损失,
在无标签数据的损失中, 为无标签数据预测得到的伪标签,是直接取网络对无标签数据的预测的最大值为标签。
其中 决定着无标签数据的代价在网络更新的作用,选择合适的 很重要,太大性能退化,太小提升有限。
在网络初始时,网络的预测时不太准确的,因此生成的伪标签的准确性也不高。
在初始训练时, 要设为 0,然后再慢慢增加,论文中给出其增长函数。
Semi-Supervised Learning with Ladder Networks:
ladderNet 是有监督算法和无监督算法的有机结合。上面提及到的无监督预训练+有监督微调的思想中所有监督和无监督是分开的,两个阶段的训练相互独立,并不能称之为真正的半监督学习。
无监督学习是用重构样本进行训练,其编码(学习特征)的目的是尽可能地保留原始数据的信息;而有监督学习是用于分类,希望只保留其本质特征,去除不必要的特征。
举例来说:我们的分类任务判断一张人脸图片是单眼皮,还是双眼皮;那么有监督学习经过训练完毕后,就会尽可能的把与这个分类任务无关的信息过滤掉,过滤的越好,那么分类的精度将会更高。
比如一个人的嘴巴、鼻子信息这些都是与这个分类任务无关的,那么就要尽量的过滤掉。
因此,基于这个原因以至于一直以来有监督学习和无监督学习不能很好的兼容在一起。
ladderNet 成功的原因在于损失函数和 skip connection 。通过在每层的编码器和解码器之间添加跳跃连接(skip connection),减轻模型较高层表示细节的压力,
使得无监督学习和有监督学习能结合在一起,并在最高层添加分类器。
损失函数的第一项是有标签样本数据的交叉熵损失函数,第二项是无监督各层噪声解码器重构误差欧式损失函数。
其他的几种半监督网络的具体见参考文献[4]中.
Temporal Ensembling for Semi-supervised Learning
Mean teachers are better role models: Weight-averaged consistency targets improve semi-supervised deep learning results
Mean teacher是对模型的参数进行移动平均(weight-averaged),使用这个移动平均模型参数的就是 teacher model 。
其思想有点类似于网络模型融合中的随机加权平均(SWA,Stochastic Weight Averaging)。
[1]. 周志华. 机器学习[M]. Qing hua da xue chu ban she, 2016.
[2].【译文】伪标签学习导论 - 一种半监督学习方法
[3].半监督深度学习小结
[4].深度学习的自编码
[5].深度学习(三十二)半监督阶梯网络学习笔记
感谢并转自kamekin:https://www.cnblogs.com/kamekin/p/9683162.html