教程地址:http://www.deeplearning.net/tutorial/dA.html#autoencoders
降噪的自编码器由[Vincent08]提出,首先先介绍自编码器。
Autoencoders
See section 4.6 of [Bengio09] for an overview of auto-encoders.
自编码器输入为:,通过
映射到隐层,隐层为
,
是非线性激活函数,如sigmoid。这步是encoder。
通过 来重构 x,使 z 尽量与输入 x 一样。这是decoder。
自编码器的输入假设为100维,隐层神经元为50维,输出层(重构)100维,50少于100维,相当于用更少的维数表示更高维的数据,这就可以看成一种数据压缩。
注意:这里不是W的转置,而是隐层到第3层的权重。
下面介绍下tied weights:当我们设置时,就叫tied weights,这时3层的自编码器参数就只有
,
,
;如果不设置tied weights,
和 W 就没关系,这是参数就是
,
,
,
。
有不有 tied weights 对结果影响并不是很大,这方面大家可以自己研究研究,我就觉得 tied weights 比较省内存点。
重构误差 的度量方法的选取取决于输入服从的具体分布,这里使用 squared error
如果输入可以表示为 bit vectors or vectors of bit probabilities,可以使用 cross-entropy:
下面这段描述了自编码和PCA的联系:(当激活函数为线性且使用MSE度量误差时,自编码的隐层就表示了PCA中数据主要成分;若为非线性时,表达能力强于PCA)
The hope is that the code is a distributed representation that captures the coordinates along the main factors of variation in the data. This is similar to the way the projection on principal components would capture the main factors of variation in the data. Indeed, if there is one linear hidden layer (the code) and the mean squared error criterion is used to train the network, then the
hidden units learn to