稀疏自编码器及其实现——如何搞基

自编码器是什么?
自编码器本身就是一种BP神经网络 。它是一种无监督学习算法 。
我们都知道神经网络可以从任意精度逼近任意函数,这里我们让神经网络目标值
等于输出值x , 也就是模拟一个恒等函数:

稀疏自编码器及其实现——如何搞基

文章插图
太无聊了,是吗?输入等于输出,这网络有什么意义?但是,当我们把自编码神经网络加入某些限制 , 事情就发生了变化 。如图1所示,这就是一个基本的自编码神经网络,可以看到隐含层节点数量要少于输入层节点数量 。
稀疏自编码器及其实现——如何搞基

文章插图
图1
举个例子,如果我们输入一张10*10的图像,这样就有100个像素,所以输入层和输出层的节点数量就是100 。而我们取隐藏层节点数量为25 。注意,这样就会迫使隐藏层节点学习得到输入数据的压缩表示方法 , 逼得隐藏层要用25维数据重构出100维的数据 。这样也就完成了学习过程 。
这和我们学习的过程很像,假设一共有100个考点,但是只允许你用25个知识点概括所有这些考点,这就是学习的过程 。
稀疏自编码器又是什么?
更一般的 , 如果隐藏层节点数量很大 , 甚至比输入层节点数量还要多时,我们仍然可以使用自编码算法 , 但是这时需要加入稀疏性限制 。这就是稀疏自编码器 。
什么是稀疏性限制?
【稀疏自编码器及其实现——如何搞基】简单说就是要保证隐藏神经元在大多数情况下是被抑制的状态 。具体表现就是函数的输出大多数状态是0,tanh函数的输出大多数状态是-1 。这样有什么好处?这样能够迫使隐藏神经元发挥最大的潜力,在很不利的条件下学习到真正的特征 。