自编码器 AutoEnoder(AE)

转载请注明出处 http://www.jianshu.com/p/dd0761a2fdfd
作者:@贰拾贰画生


自编码器(AE)与受限玻尔兹曼机(RBM)都可以用来对神经网络进行预训练(pre-training),这种预训练都是无监督的。只是它们的实现原理不同,AE是想让输出尽可能的等于输入,当然输入与输出维度是相同的,但是在中间隐藏层的维度小于输入维度,那么训练结束后,中间层低维的神经元就可以表示高维的输入,达到降维和特征提取的功能。如果激励函数是线性函数,且只有一层隐藏层,那AE与PCA有极为类似的效果。

例如如果我输入的是X,我们的AE网络结构是X->H->X‘,我们的目的是让X’尽可能的等于X(X‘与X有相同维度),这样训练出来的H就可以用来表示或重构X。

AE与RBM的预训练有什么用呢?

预训练的主要目的是为了给神经元之间的权重一个合理的初值,防止反向传播算法陷入局部最优。预训练结束后,在用数据集进行有监督的微调(fine-tune),就可以得到全局最优。

如果将AE应用于分类的话,是要将解码层去掉的。如果AE的网络结构是X->H->X',那么在预训练结束后要将最后一层去掉,换成其他网络结构,然后分类。比如我用mnist数据集进行分类,我加一个全连接层X->H->Y,H与Y是全连接,且Y是10个输出,然后我在用mnist进行微调。微调结束后,就可以用于分类了。

今天用Tensorflow实现了重构和分类两个功能,代码在此:https://github.com/youthpasses/autoencoder

我没有使用Tensorflow自带的mnist数据流文件,而是使用的本地的图片数据,README.md给出了mnist的网盘链接。
重构功能的网络结构是:784 -> 512 -> 256 -> 512 -> 784
分类功能的网络结构是:784 -> 512 -> 256 -> 10

贴一张重构的图:


自编码器 AutoEnoder(AE)_第1张图片

重构的图片有些模糊,这是必然的。

你可能感兴趣的:(自编码器 AutoEnoder(AE))