这篇博客对应的是Andrew.Ng的那篇文章:An Analysis o f Single-Layer Networks in Unsupervised Feature Learning,文章的主要目的是讨论receptive field size,number of hidden nodes, step-stride以及whitening在对卷积网络模型的影响。同时,单层网络中,作者用sparse auto-coding,RBM, k-means和GMM四种模型提取特征,最后得到的结果是 k-means 的结果是最好的,文章提供了对应的代码利用k-means在单层网络中提取特征分类。试验中用到的数据库是CIFAR。可以在这个网站下载http://www.cs.toronto.edu/~kriz/文章的代码可以去NG的主页下载:http://ai.stanford.edu/~ang/papers.php。
由于文章只是单纯的以实验的形式分析receptive field size,number of hidden nodes, step-stride以及whitening对网络的影响,并无数学分析过程,涉及到k-means的知识可以去看我前面的博文http://www.cnblogs.com/txg198955/p/4072859.html,如果我们用k-means得到了聚类中心,那么对于给定的一个样本我们对其有两种特征表示,即文中所讲的:
方法一:1-of-k(这种表示是一个向量,距离最近的那一类对应的值为1,其余为0)
方法二:给定一个样本,先求出这个样本到每一类的平均距离,然后用这个平均距离减去样本到每一类的距离得到A,若A<=0,则取0,否则取A。代码中用到的就是这种方法
好了,知道了这些,就可以对这几个影响因素进行分析了。文章给出的分析结果如下:
effect of Number of whithening:对于sparse auto-coding和RBM,whithening的影响不是很大,在选取100个特征的情况下,效果还是很明显,但是选取较多的特征后,效果就不明显了。但是对于k-means,whithening的影响就非常明显了,这可能是k-means不具备处理特征之间的相关性的原因。具体效果如下图所示:
effect of Number of features: 作者用k-means分别选取100,200,400,800,1200,1600个特征进行测试,得到的结论是特征越多效果越好,1600个特征点时,正确率为79.6%,4000个的时候为97.21%。所以理论上特征越多效果越好,不过特征越多计算的开销就越大,这个自己把握就是了。
effect of stride: 文中指出,stride=1的时候效果最好,随着stride不断增大,效果会越来越差。文中对此也有说明,stride越小则更多的samples会归到pooling中,特征的重复就更多
理论上,特征重复越多效果就越好。
effect of receptive field size:文中指出如果“receptive field”太大,则包含的特征就会有冗余。比如一个“receptive field”会包含多个nonlinear feature-edges。如果“receptive field”太小,则pooling处理的样本会增多,这样stride也必须小。
下面是我对代码解读的一个分析,画成图帮助大家理解: