UFLDL——Exercise:Self-Taught Learning 自我学习

实验要求可以参考deeplearning的tutorial, Exercise:Self-Taught Learning  。本实验和上一个实验一样都是对手写数字0-9的识别,区别在于上一个实验直接把原始图像的像素值作为特征输入到softmax回归进行分类,而本实验通过自学习从原始像素值从学习到维度更低的特征(稀疏自动编码),再交给softmax回归,相当于比之前的实验多了自学习特征的步骤,最后实验显示,加上自学习特征之后模型的正确率更高。

1. 神经网络结构:

实验中为三层神经网络,输入层28*28个neuron,隐含层200个neuron(都不包括bias结点),输出层为10个neuron。

2. 数据:

实验中的数据采用的是MNIST手写数字数据库(0-9手写数字),共6万个手写数据,每个样本是大小为28*28的图片,下图是把训练数据中的前100个手写数据图像进行显示。
 

因为稀疏自动编码为非监督模型,softmax回归为监督模型,所以我们把原始数据集分成unlabeled数据集和labeled数据结。把数据集中所有5-9的数字组成unlabeled数据集,用于训练稀疏自动编码学习得到新的特征;0-4的数字组成labeled数据集用于softmax回归,其中0-4的一半数据用于训练,剩余一半用于测试。下图是三部分数据集的大小。
 


3. 特征学习

特征学习是通过稀疏自动编码得到从输入层到隐含层的参数,有了这个参数我们可以把任意的手写数字映射到新的特征空间,新的特征就是隐含层的激活量。

在稀疏自动编码中,设置最大的迭代次数为400次,我刚开始的时候没有注意,设了100次,最后的正确率变成了97.6%(虽然减少的不多)参数转化成图片后也和实验要求不同。虽然本实验中初始参数已知,但在实际的应用中都需要自己定这些参数,从中可以发现,参数的设定也非常的重要。


                                                      稀疏自动编码迭代400次的参数显示                                            稀疏自动编码迭代100次的参数显示

通过稀疏自动编码之后,我们知道如何把原始特征转化成新的特征,接下来,需要把labeled数据集的训练数据和特征数据都变成新的特征。


4. Logistic回归

现在,训练集的新特征训练logistic回归,然后用学习到的模型对测试集的新特征进行测试,最后正确率为98.3%,相比于直接用原始数据(92.6%)设计分类器高不少。


 

5. 扩展

实验中,我们是用5-9的数字训练稀疏自动编码,然后对0-4的数字进行分类,最后表现出较好的分类结果。现在我们会有一个疑问,如果只用0-4的数字训练稀疏自动编码,最后的性能会不会特高呢?

我们被0-4的数字分成了3部分,然后进行和上面一样的实验,下面是代码修改的地方。

% numTrain = round(numel(labeledSet)/2);
% trainSet = labeledSet(1:numTrain);
% testSet  = labeledSet(numTrain+1:end);
 
numTrain = round(numel(labeledSet)/3);
trainSet = labeledSet(1:numTrain);
testSet  = labeledSet(numTrain+1:numTrain*2);
unlabeledSet  = labeledSet(numTrain*2+1:end);

最后我们得到稀疏自动编码的参数图像,可以发现和之间的几乎没有明显的区别,正确也值提高了0.09%,可以说几乎没变,这说明特征的学习不一定要从需要分类的数据中学习得到,因为自学习是非监督模型。很想知道如果用和数字差别很大的图像(比如自然图像)进行训练稀疏自动编码,最后的正确率会是多少,等有空的时候测试下。



6. 补充:无监督特征学习

有两种常见的无监督特征学习方式,区别在于你有什么样的未标注数据。自学习(self-taught learning) 是其中更为一般的、更强大的学习方式,它不要求未标注数据 x_u 和已标注数据  x_l 来自同样的分布。另外一种带限制性的方式也被称为半监督学习,它要求x_u和x_l 服从同样的分布。下面通过例子解释二者的区别。

假定有一个计算机视觉方面的任务,目标是区分汽车和摩托车图像;也即训练样本里面要么是汽车的图像,要么是摩托车的图像。哪里可以获取大量的未标注数据呢?最简单的方式可能是从互联网上下载一些随机的图像数据集,在这些数据上训练出一个稀疏自编码器,从中得到有用的特征。这个例子里,未标注数据完全来自于一个和已标注数据不同的分布(未标注数据集中,或许其中一些图像包含汽车或者摩托车,但是不是所有的图像都如此)。这种情形被称为自学习。

相反,如果有大量的未标注图像数据,要么是汽车图像,要么是摩托车图像,仅仅是缺失了类标号(没有标注每张图片到底是汽车还是摩托车)。也可以用这些未标注数据来学习特征。这种方式,即要求未标注样本和带标注样本服从相同的分布,有时候被称为半监督学习。在实践中,常常无法找到满足这种要求的未标注数据(到哪里找到一个每张图像不是汽车就是摩托车,只是丢失了类标号的图像数据库?)因此,自学习在无标注数据集的特征学习中应用更广。


7. 代码

源代码下载





发布了24 篇原创文章 · 获赞 29 · 访问量 25万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章