UFLDL练习总结--杨炜炜.HFLS

UFLDL Tutorial

http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial

UFLDL是Unsupervised Feature Learning and Deep Learning的缩写。UFLDL wiki由斯坦福大学计算机系Andrew Ng教授研究组制作,页面上罗列了目前比较经典的一些UFLDL方面的算法,并配有练习。


 


    练习1:Sparse Autoencoder


    这个练习是后面所有练习的基础。Sparse Autoencoder的实现基于人工神经网络,activation function用的是sigmoid函数,参数调整用的是backpropagation。这个练习主要用于熟悉整个神经网络的实现和对Matlab各项基本功能的了解。练习所用的数据是一组黑白图片,神经网络对图片进行学习后,可以探测出图片中的一些边缘。


学习结果


 


    练习2:Vectorization


    练习2是对练习1的一点点加强。由于Matlab对矩阵的运算进行过优化,所以在Matlab中,直接对矩阵进行操作的效率会比用for循环对矩阵进行操作的效率高许多(我一开始不知道,被各位大牛各种鄙视)。这个练习就是将练习1中所有用for语句实现的操作全部改用直接的矩阵操作。不过练习数据换成了MNIST手写数字图片,程序会对图片进行特征提取,用于之后的使用。但可能由于参数设置的问题,我的结果一直不是太好(通过后续的练习,确认我的实现没有问题)。


 


    练习3:PCA and Whitening


    练习3主要是对PCA和(ZCA) Whitening的练习。PCA是对数据中主元素的提取,通过特征值来确定保留的维数,并算出新的一组基,然后将原来的数据映射到低维空间中,从而达到压缩数据同时又不造成太多数据特征损失的目的。练习中对一组144维的图片进行PCA操作,在保留99%的图片特征的前提下,图片被压缩到116维,通过对压缩后图片的检验,发现与原图几乎没有差异。Whitening则是对数据进行一些预处理,主要是对数据的均值、方差进行缩放,便于后续处理(一般将均值调为0,方差调为1)。


原数据


PCA处理后的数据


ZCA处理后的数据


原图


PCA处理后的图


ZCA处理后的图


 


    练习4:Softmax Regression


    Softmax是一个很神奇的方法。我之前写的分类器都只能进行二分类,而softmax则可以进行多分类。从算法原理上可以看出,其实二分类也是softmax的一种(分类个数为2而已)。softmax原理是将提取到的输入数据特征与特征库进行比对,计算出每一个分类结果的概率,然后取概率最高的一个结果进行输出。练习所用的是对MNIST手写数字图片进行识别,识别正确率达到92.64%。


 


    练习5:Self-Taught Learning


    练习5是对之前练习的一个综合。练习4中,分类器学习时得到的数据为原始数据。而在练习5中,softmax分类器在进行学习之前,将由sparse autoencoder预先进行学习,将学习结果作为softmax分类器的输入数据,理论上来说这样将获得更好的学习效果。而实际结果也确实如此,识别正确率上升到了98.56%。


特征提取结果


 


    练习6:Deep Networks


    练习6是对练习5的加强。在第一阶段用sparse autoencoder进行学习时,练习5用的神经网络只有一层hidden layer,而在练习6中,hidden layer增加到两层,这样可以对特征进行更好的学习。在学习时,有两种学习策略。第一种是按顺序独立训练每一层神经网络,也就是先训练第一层,然后训练第二层。经过实验,这种方法的正确率能达到91.77%。第二种方法是在第一种方法的基础上用backpropagation对各层进行综合调整(fine-tuning)。实验发现,这种方法的效果显然要比第一种好,正确率达到97.61%。


 


    练习7:Linear Decoder


    练习7其实只对sparse autoencoder做了一个小调整,将activation function从sigmoid函数调整为恒等函数,使其输出范围从[0,1]扩展到了所有实数,这样可以用来对彩色图片进行特征提取。


特征提取结果


 


    练习8:Convolution and Pooling


    练习8是对于大数据的一些学习,首先用卷积的方法对大图片中的一个个小片(有重叠)进行特征提取,然后再用pooling方法对特征再进行分片(无重叠),记录每片的平均值,然后用这些特征来识别新的图片。这个算法可以将大图片的特征量进行压缩,但是会有损失,所以准确率也不是很高,实验用的图片是4种自然图片,分别是飞机、汽车、猫、狗,识别正确率为80.34%。
特征提取结果 


 


    练习9:Sparse Coding


    这个目测有点像PCA,是在一组过完备数据集上去学习出一组基,从而提取出图片的特征。如果在学习中,加入一个分组矩阵,可以将相似的特征聚到一起,从non-topographic变成topographic。这个练习的难点在于求矩阵导数,我之前也在状态中提问过。另外一个问题困扰了我好久,就是迭代似乎收敛到的值很大。后来发现,原来是讲义中的cost function中的一项写错了。cost function中的平方误差是需要除以样例个数的,而讲义中没有除,我调了两天后才从给的代码中发现的(讲义中是J(A,s)=Σ((As-x).^2)+λ*sqrt(V*(s.^2)+ε)+γ*Σ(A.^2),而实际上应该是J(A,s)=Σ((As-x).^2)/m+λ*sqrt(V*(s.^2)+ε)+γ*Σ(A.^2),其中A是变换矩阵,s是特征矩阵,x是输入数据,V是分组矩阵,m是样例个数,λ和γ是系数)。


Non-topographic


Topographic


 


    练习10:ICA


    ICA是从数据集中学习一组线性无关的基的方法。ICA的难点在于比较难收敛。练习中用的方法是变步长的迭代(定步长的迭代不能保证cost function值总往下降的方向走)。每次迭代时,通过多次尝试,确定出一个新的步长,然后更新cost function的值。可是由于所给的变步长代码写错位置了,又害我调了好久,不过最后总算是发现了,调整了过来。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值