前言:
本次主要是重新复习下Sparse autoencoder基础知识,并且加入点自己的理解。关于sparse autoencoder在前面的博文Deep learning:八(Sparse Autoencoder)中已有所介绍。
基础知识:
首先来看看为什么sparse autoencoder能够学习到输入数据的特征呢?当使用autoencoder时,隐含层节点的个数会比输入层小(一般情况下),而autoencoder又要能够重构输入数据,说明隐含层节点压缩了原始数据,既然这个压缩是有效的,则它就代表了输入数据(因为输入数据每个分量值并不是相互独立的)的一部分特征了。如果对隐含节点加入稀疏性限制(此时隐含层节点的个数一般比输入层要多),即对输入的数据而言,其大部分时间都处于抑制状态,这时候学习到的特征就更有代表性,因为它只对它感兴趣的输入值响应,说明这些输入值就是我们需要学习的特征。
在前面讲的稀疏性中,并不是说对于某一个输入样本,隐含层中大部分的节点都处于非抑制状态(虽然事实上有可能确实是如此),而是说对于所有的输入样本,某一个节点对这些输入的响应大部分都处于非抑制状态。
此时的稀疏性惩罚值公式如下所示:
其中的变量一般取很小,比如0.05. 而 的计算公式则如下:
把其中的KL散度展开后,其公式如下:
不过在Ng的一节视频教程http://www.stanford.edu/class/cs294a/handouts.html中,关于稀疏性的一些表达和计算方式稍有不同,它的并不是一次计算所有样本在本节点i的期望,而是通过每一个样本来迭代得到,如下面的讲解截图所示:
比较难理解的是,它这里的偏置值b竟然不是由偏导公式来求得的,而是通过稀疏性来求得,有点不解,求解过程如下所示:
参考资料: