“UFLDL 无监督特征学习”本节全称为自我学习与无监督特征学习,和前一节softmax回归很相似,因此本篇笔记会比较简化,主题思路和步骤以下:php
后面两个步骤和前一节softmax回归相同,区别仅仅是输入变成了原始数据的稀疏自编码隐藏层激活值。html
特征提取网络组合形态git
根据前面的步骤描述,咱们要实现对有监督数据的特征提取,为了报出稀疏自编码模块sparseAutoencoderCost.m
的独立性,单独写一个feedForwardAutoencoder.m
模块来实现。代码是否是很是简单?github
function [activation] = feedForwardAutoencoder(theta, hiddenSize, visibleSize, data) W1 = reshape(theta(1:hiddenSize*visibleSize), hiddenSize, visibleSize); b1 = theta(2*hiddenSize*visibleSize+1:2*hiddenSize*visibleSize+hiddenSize); m = size(data,2); activation = sigmoid(W1*data + repmat(b1,1,m)); end function sigm = sigmoid(x) sigm = 1 ./ (1 + exp(-x)); end
从UFLDL原有代码中能够发现分类标签从0-9移动到了1-10,缘由在于matlab的数组索引从1开始,最后作softmax判决时,找最大几率的分类的类别号获得的是1-10,因此才作移动的。数据库
此外练习说明中将类别为6-10做为无监督学习的素材,1-5做为有监督softmax回归的素材,无非就是为了判决出类别号后,统计准确率时能够将softmaxPredict.m
输出的类别号与测试集的真实label直接比较,不用考虑偏移的问题。数组
数据集仍然来自Yann Lecun的笔迹数据库,再瞜一眼原始MMIST数据集的笔迹。网络
设定与练习说明相同的参数,运行完整代码https://github.com/codgeek/deeplearning 能够看到预测准确率达到98.35%。达到了练习的标准结果。学习
回过来看一下,无监督学习到底学习到了什么呢?测试
相似稀疏自编码对边缘的学习,上图的特征其实仍是稀疏自编码学习到的阿拉伯数字的笔迹基本特征,各类弧线样式。另一点有点讲究的是对总数据集合拆分两组,也能够不按照1-五、6-10来拆,若是按照数据集的前一半后一段拆成两组。这样无监督训练数据就是全部0-9的数字笔迹,softmax判决的也是0-9的数字笔迹。代码见stlExercise.m
的% 拆分无监督学习和softmax监督学习方法二
部分。优化
结果有些意外又能够解释:准确率为95.8%。 能够解释为稀疏自编码、softmax有监督学习对每一个分类的数据量都减小了,在1E5量级上,数据量对结果好坏有明显的影响。