该章节参考ufldl
1.什么是自我学习(Self-Taught Learning)与半监督学习
首先,什么是半监督学习?当你手头上拥有在大量未标注数据和少量的已标注数据,那这种场景就可以说是半监督学习。自我学习和半监督学习的场景一样,不过有个细节不一样。
自学习(self-taught learning) 是更为一般的、更强大的学习方式,它不要求未标注数据 和已标注数据有同样的分布。而半监督学习不一样,它要求未标注数据 和已标注数据服从同样的分布。下面通过例子解释二者的区别。
假定有一个计算机视觉方面的任务,目标是区分汽车和摩托车图像;哪里可以获取大量的未标注数据呢?最简单的方式可能是从互联网上下载一些随机的图像数据集,在这些数据上训练出一个稀疏自编码器,从中得到有用的特征。这个例子里,未标注数据对比已标注数据,是一个完全不同的数据分布(未标注数据集中,或许其中一些图像包含汽车或者摩托车,但不是所有的图像都如此)。这种情形被称为自学习。
相反,如果有大量的未标注图像数据,要么是汽车图像,要么是摩托车图像,仅仅是缺失了类标号(没有标注每张图片到底是汽车还是摩托车)。也可以用这些未标注数据来学习特征。这种方式,即要求未标注样本和带标注样本服从相同的分布,有时候被称为半监督学习。在实践中,常常无法找到满足这种要求的未标注数据(到哪里找到一个每张图像不是汽车就是摩托车,只是丢失了类标号的图像数据库?)因此,自学习在无标注数据集的特征学习中应用更广。
2.自我学习的模型
2.1 数据预处理
首先对未标记数据和已标记数据进行相同的数据预处理。比如进行相同的归一化。如果对未标记数据进行PCA,那么PCA过程得到的特征向量矩阵U需要保留下来。之后对于已标记数据,应用 U T x U^Tx UTx 得到降维后的数据。或者,将已标记,未标记两部分数据凑起来,一同进行PCA降维。
2.2未标记数据训练稀疏自编码器
不懂稀疏自编码器的同学,可以参考我这篇博客
首先我们利用未标记数据训练一个自编码器。
利用训练得到的模型参数$ W^{(1)}, b^{(1)}, W^{(2)}, b^{(2)}$,给定任意的输入数据 x x x,可以计算隐藏单元的激活量(activations) a a a</