关于稀疏自编码器的自己的理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/roach_zfq/article/details/53791761

今天看了一天的稀疏自编码器,也跑了UFLDL教程 http://ufldl.stanford.edu/wiki/index.php/Exercise:Sparse_Autoencoder 上的exercise,参考了很多博客的代码,谢谢http://blog.csdn.net/llp1992/article/details/45579615 , 很快就跑通了,最后得到的权值结果,
最后得到的权值结果

这些都还好,如果只是看教程,推导公式,按算法得到伪代码,再写出代码,看似跑完了所有流程,但是对稀疏自编码器还是没什么具体的印象,感觉和没学过一样,所以稍微思考下,仅是个人愚见,仅作记录,防止忘了而已。

一个稀疏自编码器为什么最后可视化得到这样的结果呢?
首先输入是随机的10000张图片的任意局部裁剪出来的8x8的图片,随机抽取200张出来看看就是这样
很乱,没有任何规律,可以理解成自然界的所有图像的局部的缩影,然后通过随机的W,b得到第二层的输出,这个输出因为经过sigmoid所以范围为(0,1),我们把输出接近1的理解为该神经元被激活,而接近0的理解为被抑制。那么对于一个特定的神经元来讲,输入10000张图片有10000个响应,对这些响应取平均值如果接近0那么就说明大多数情况下都是被抑制的,接近1同理。
这时候,看到有的解释说从生物学的角度来讲,大脑接受某一刺激也是只有单一的神经元兴奋,或者说某个神经元只对某种刺激兴奋,以这种形式构成的神经网络更符合人脑的思维方式,更能够得到好的结果。
事实证明,确实如此,我们希望一个神经元对所有图片的响应的均值接近0,人为加上的这种限制就叫做稀疏性(Sparsity)限制,但往往是不可能为0的,试想10000张图片几乎包含了所有模式,不管你再怎么变化W,b,都不可能为0,所以一般定一个接近0的值,如0.01,0.05,来限制这个平均响应,这个值就可以这样理解了,10000张图片里有10000*0.01张产生了完全的响应,就是图片模式与权值刚好对应,公式就是xi = wi, 这样能产生最大输出,而其余所有图片都刚好相反,输出为0,那对于这个神经元就达到了我们的稀疏性要求。
当然不可能一开始就达到,需要经过训练,那就是计算当前所有神经元的响应p与目标p=0.01的距离(相对熵,KL,因为p是隐藏层的所有的响应是列向量),对W,b求偏导,做梯度下降,就可以得到我们想要的那个目标了,最后输出就是这样一个边缘的图形。
再来看这些边缘图形,似乎确实满足了这样的要求,他们可以对所有的输入响应平均进行求和后达到最低,如果再反过来看得到了这些W,那什么样的输入图像可以让它得到最大响应呢,结果貌似更好看,是更标准的不同方向不同大小的边缘:

也就证明了机器学习到的这些权值可以检测出一幅图像的边缘,输入边缘图像时响应最大。

猜你喜欢

转载自blog.csdn.net/roach_zfq/article/details/53791761
今日推荐