2.1 从有标签和无标签数据中学习
半监督学习是监督学习和无监督学习的中间地带,可以看成是监督学习或者无监督学习的扩展,具体来说,可以分成下面几大类:
- 半监督分类(Semi-supervised classification):对于有监督分类问题的扩展,使用有标签数据和无标签数据共同训练分类器。希望通过无标签数据的加入,提升分类器的学习性能。
- 带约束聚类(Constrained clustering):对无监督聚类问题的扩展。比如在聚类时,知道哪些样本应该在同一类,或者知道哪些样本不能在同一类。希望获取更好的聚类性能。
还有其他一些半监督学习比如:半监督回归,半监督降维。本书只关注半监督分类问题。
半监督学习的研究有两个价值:
- 应用价值:构建性能更好的计算机算法
- 理论价值:理解人类和机器的学习
2.2 半监督学习的可行性
半监督学习的一个假设:无标签数据和带标签数据同分布。通过无标签数据的分布,可以学习到一个更准确的分类边界。(这个分析似乎不太适合deeplearning时代,deeplearning中特征都是映射得到的,如果分类器较差,映射得到的特征本身的分布可能并不具备某些规律)
2.3 半监督学习:归纳(INDUCTIVE) VS. 转导(TRANSDUCTIVE)
半监督分类问题可以分成两大类:inductive semi-supervised learning 和 transductive learning。
- 归纳半监督学习(Inductive semi-supervised learning):给定训练集(包含带标签数据和无标签数据)和测试集,在训练集上训练分类器,在测试集上测试分类器的性能。
- 转导学习(Transductive learning):只有训练集,学习分类器,在训练集的无标签数据中获取更好的预测性能。
归纳半监督学习像闭卷考试,学生不知道会考什么,需要考虑所有可能的情况;转导学习像开卷考试,学生知道什么会被考到,不需要提前准备。
2.4 警告
使用无标签数据来辅助提升分类器的性能看起来似乎是合理的。但是通常情况下针对某一个特定的任务盲目地选择一种半监督算法并不会带来性能上的提升。
2.5 Self-Training 模型
Self-Training 模型算法流程图:
输入:带标签数据
,无标签数据
循环:
- 使用数据集
训练分类器
- 使用分类器预测无标签数据集
- 从
中选择一个子集
,把
添加到
Self-Training 模型的核心思想是通过模型自己预测的标签作为真实标签,把无标签数据变成伪标签数据,然后使用伪标签数据+带标签数据共同训练分类器。有两种迭代方式:
- 每次从无标签数据集 U 中选择一个子集 S 计算标签,其中 S 包含少量比较可靠的样本
- 每次都对 U 中的所有元素计算一个标签,样本的伪标签每次迭代都是可变的
Self-Training 假设:模型打出的标签,趋于正确(至少对可信度高的样本,趋于正确)。
Self-Training 模型的优点和缺点:
- 优点:Self-Training 模型比较简单,适用不同的分类器,不论是简单的knn分类器还是复杂的LSTM分类器。
- 缺点:误差可能会累积。如果最开始的分类器训练得不好,分类器打出的标签就不可靠,这样得到的伪标签数据训练得到的模型性能会更差,多次迭代之后,误差累积越来越多。
下面是一个 Self-Training 模型的例子:最初有两个带标签样本(红色和蓝色表示两类样本,绿色表示无标签样本),使用KNN作为分类器,每次把一个样本(最可靠的样本)加入带标签数据集中,迭代过程中标签传播如下:
Self-Training 算法容易受到噪声样本的干扰,下面的例子中,由于一个离群点的存在,伪标签的生成发生了很大的变化。