博文参考standford UFLDL网页教程线性解码器。
1、线性解码器
前面说过的稀疏自编码器是一个三层的feed-forward神经网络结构,包含输入层、隐含层和输出层,隐含层和输出层采用的激活函数都是sigmoid函数,由于sigmoid函数的y值范围在[0,1],这就要求输入也要在这个范围内,MNIST数据是在这个范围内的,但是对于有些数据,我们不知道用什么办法缩放到[0,1]才合适,所以就有线性解码器。线性解码器(linear decoders)其实就是输出层采用线性激活函数,最简单的线性激活函数就是恒等激活函数,就是a=f(z)=z。但是中间隐含层必须采用sigmoid函数或者tanh函数,这两个都是对输入的非线性变换,如果采用线性变换,一方面表达能力没有那么强,另一方面就是没有必要采用三层结构了,直接隐含层当做输出层也可以学到一样的函数关系。有了线性解码器之后,输入层的单元就没必要限制在[0,1]了。
线性解码器的输出层可以通过调整W2使得输出数值可以大于1或者小于0。
对于线性解码器,当输出层的激活函数变为恒等激活函数,输出单元的误差项变为:
使用BP算法计算隐含层单元的误差为:
2、Learning color features with Sparse Autoencoders
关于实验的一些说明:
- 实验的数据集是STL-10数据,是RGB三通道图,之前的实验用的是MNIST数据集,MNIST是灰度图;STL-10数据是把RGB组成一个长向量,这样就跟MNIST数据一样了。实验数据patches的大小是192*100000,因为RGB patches大小是8x8,把RGB组