Semi-supervised Learning
我们知道监督学习就是使用带标签的数据进行学习,无监督学习就是使用无标签的数据进行学习,那么顾名思义,半监督学习就是使用的数据集中有部分数据带标签,部分数据不带标签,在这样的数据集上进行学习。
为什么我们需要半监督学习呢?这就要从两个方面来说。首先,如果我们丢弃无标签的数据,那么我们掌握的数据量会变小,训练效果也会相应变差,这是一种数据浪费;其次,如果我们手动标注无标签的数据,将会消耗很大的人力,这在现实中也是划不来的。为了利用这部分无标签的数据,同时节约人力,我们就需要借助半监督学习的方法。
那么为什么半监督学习可以将这些无标签的数据利用起来呢?原因如下:
简单来说,就是无标签的数据的分布信息对我们的训练是有帮助的。
假设各类数据都服从高斯分布,那么我们可以建立生成式模型:
图中蓝色点和橙色点代表两类中的有标签数据,剩下的绿色点代表无标签数据。
可以看到,如果把左边的绿色点当成蓝色点,右边绿色点当成橙色点,那么得到的参数估计将与仅使用带标签数据的情形大不相同。但问题在于,我们怎么得到这些无标签数据点属于两类的概率呢?直接用有标签的数据点进行参数估计得到两类的分布然后再计算无标签数据点属于两类的概率吗?
这里我们可以采用EM算法进行迭代,过程如下:
可以看到,上述生成式模型实际上给数据的标签并不是一个固定的类别,而是它属于各个类别的概率,也就是说,这其实是一种“软标签”。
我们还可以使用“硬标签”来做标注,比如Self-training方法:
Self-training思路其实很简单,就是使用有标签的数据训练一个模型,然后用这个模型去标注一部分无标签数据,然后把这部分数据加入有标签数据集再次修正模型,如此循环进行。
注意,这里我们对无标签数据进行标注的时候遵循”非黑即白“的原则,即直接将其归入某一类,而不是采用属于各类的概率作为标签,这样的原因很简单,通过下面的例子就可以说明:
假如我们用有标签数据训练一个神经网络,然后喂给此网络一个无标签的样本数据,得到其属于两类的概率分别为0.7和0.3,那么此时我们的软标签就是,而我们的硬标签就是,此时若选用软标签,并将此样本放入有标签的数据集对网络重新进行训练,并不会对使模型有所改进……因为这个标签就是由当前模型产生的,而硬标签则可以在一定程度上改进模型。
这个方法的效果如何呢?这实际上取决于我们对无标签样本标注时有多大的把握,如果模型得到此样本属于两类的概率为,那么我们有很大信心将标签变成并用来修正模型,但是如果模型得到此样本属于两类的概率为呢?看起来这个做法就不是那么有把握了。
为了衡量我们有多大把握,可以使用Entropy-based Regularization:
Entropy-based Regularization的思路很简单,用熵来衡量模型对无标签模型的分类结果的好坏,熵越小代表分类效果越小(越有信心),把熵作为整个模型的正则项就可以实现对模型进行修正的效果。
注意这里实际上直接把对无标签数据的利用都体现在正则项当中了,因此当前损失函数可以视作在整个数据集上的损失函数,直接以此为目标进行梯度下降法就可以训练模型了,因此这个算法是比较简单的。
其它还有一些常用的方法,比如针对SVM的:
这个算法的思想很朴素,就是穷举无标签样本可能的标签组合……然后看那种标签组合能使得SVM训练得到的margin最大error最小,就选这个标签组合当作无标签样本的标签。然而穷举的计算效率是很低的,如何优化这个过程呢?大致来说就是改变一个样本标签,观察margin和error的变化,若有所改进就保留此标签,否则使用原标签,对各个样本进行此操作就可以得到一个不错的模型。
还有基于平滑性假设的:
这个算法的思想很简单,就是若两个样本都在高密度区域且距离较近,那么这两个样本的标签大概率是相同的。距离较近很好理解,为什么要求密度较大呢》这是因为在这个算法中,对无标签数据的标注是具有传递性的,若密度不大,那么这样的传递可能就导致很远处的样本也被标注为同样类别,这是不切合实际的。
为了更好的说明这样做的意义,可以看如下例子:
直接通过图片来看,我们可以看到中间的2可能和最右的3更接近,而和左侧的2相差较大,但若有如下的渐变过程,我们就可以通过高密度的传递将2的标签传递过来,这就是以上算法思想的体现:
还有一种基于图结构的方法和这种方法很类似:
基于图结构的方法是通过某种度量计算点之间的相似性,然后把相似性大的点进行连接,并让标签通过边进行传递。
当然这种方法也可以通过量化图的好坏并作为正则项加入损失函数进行训练,具体过程如下: