PCA,SparseNN,DBN在MNIST上的对比

接上篇PCA介绍,以及MNIST简介.

PCA,主成分分析,最简单的降维方法,寻找数据分布中方差(波动)最大的方向,进行投影.

MNIST,手写数字数据库,0到9十个数字,60000张训练图片和10000张测试图片,每张图片是大小28*28的灰度图.

这里用三种方法对MNIST手写数字数据进行降维,或者说特征提取.实际上MNIST数据本来是要用作数字分类的,但这里没有做这一步,只是为了对比三种方法对特征的提取能力.

PCA

用PCA计算出28*28=784个特征向量,每个特征向量维度也是784.下面是前196个特征值最大的特征向量reshape成28*28的矩阵后,显示出来的东西.


可以看出前几个特征还有意义,它大致是各种数字融合起来的样子,可以用来表示数字的特征,特征值越小的向量,就越来越看不出特征了,每张都看着差不多,因为数据在这些方向上变化很小.

Sparse neural network

这里用的这个神经网络作用是一个autoencoder,所以UFLDL教程上把它叫Sparse autoencoder.Autoencoder的作用就是对数据进行编码,auto是因为它的编码过程是自动的,编码过后又解码,期望得到的输出结果和输入结果几乎一样,就是autoencoder要完成的.下面左图就是这个autoencoder神经网络的结构,它的输入层和输出层神经元个数是一样的(忽略第一层那个+1神经元,它是作为偏置项or截距项,这里没用它).这个神经网络的结构是784-196-784.

如果约束这个神经网络,使得隐藏层的每个神经元的平均激活度很小,意思就是输入一个图片只有几个隐藏层的神经元激活,那这个神经网络的功能就类似sparse coding,所以叫做sparse neural network.稀疏性具体能干啥我暂时也说不清楚,只知道这真正的神经信号传递就是这个样子的,只有少数的神经元激活,大部分都是抑制状态.

右边就是经过训练后(使用反向传播算法计算误差函数关于各参数的导数,使用L-BFGS优化这些参数)的神经网络中,第一层与第二层之间的连接权重,reshape成的28*28的矩阵后的样子了.具体地,输入层有784个单元,隐藏层有196个,每个隐藏层单元都有784个输入层单元连接着它,把这784个连接权值reshape后显示出来.这些特征和PCA很相似,就像是各种图片的融合.

DBN

Deep belief network,Hinton大牛在06年首次介绍它时,就把它当作了一个autoencoder,所以它在这里的功能其实和上边的sparse autoencoder一样.但是它的训练过程复杂的多.

如下图,先看中间,中间图就表面了这个神经网络的功能是一个autoencoder,输入经过计算,再计算回去,期望得到一个和输入一样的结果.左边实际上是DBN的关键,它是这个神经网络为什么要叫Deep belief network的原因,因为它的每一层参数都是用一个Restricted Boltzmann Machine计算得来的,计算出每一层参数后,对称的将这些参数接在后面,就得到了autoencoder,然后又开始用BP计算误差导数,用优化算法(Hinton这个实验里用了conjugate gradient)寻找最合适的参数.


Hinton在MNIST上用的神经网络结构为784-500-500-2000-10,最后一层10个神经元是用作分类.下图中,左边是前196个第二层神经元对应输入层的权值reshape后的图像,这里第二层是500个神经元,这500个特征的地位是相等的,不像PCA,所以应该看看500个全部的特征,如下右图.

直觉上理解,相比sparse autoencoder,DBN提取出的特征更加精细,并且这只是第一层便于用图像观察的特征,后面的层还可以更进一步提取特征,就是我们不能看它们了.这些图片使用了imagesc函数显示,图中纯粹的黑色表示-1,中间色是0,纯白色是1.这样很明显就能看出特征的含义:

  • 1.特征具有稀疏性.因为从图上看大部分是灰色的,也就是接近0,这样给一个输入,由于连接权值大部分是0,中间层的激活度就很小.
  • 2.特征中黑色的权值对应这负数,会抑制神经元激活;白色对应正数,会促使神经元激活.
  • 3.特征中的白条纹对应着原始图片中的条纹.如何理解这个?想象随便有一个输入图片,连接图片的这个神经元连接权值(也就是特征)上有一个白条纹(看着上面的图脑补一下),也有黑的条纹,其它地方全是灰色(对应0).那这个神经元会不会激活呢?由于大部分都是灰色,连接权值是0,所以这些权值对应的输入对神经元是否激活没有作用,而黑色对应的输入图片中的位置,如果像素点值不为0,反而会抑制这个神经元.所以想要激活这个神经元,最好的输入图片是这样的:在权值为白色对应着的位置像素点有值,权值为黑色对应着的像素点灰度为0(灰度为0也就是背景,在MNIST中),这就是纹理信息了.其实上边的sparse autoencoder的特征也是这样解释的.这是UFLDL上给出的结论:

    想要让这个神经元最大程度激活,针对这些训练好的权值(ie,训练好的特征),输入应该是什么样的?刚好就应该对应着这些特征,如上式.

DBN进一步可以提取出更抽象的特征,这些特征的意义一定是更明确,更加底层的表示着输入,虽然不能看的见.

参考: