一、定义
自编码器是神经网络的一种,它尝试将输入进行处理以后再从输出还原。自编码器由编码器和解码器构成。损失函数一般是重构误差。自编码器是无监督学习,样本和标签都是原始输入。
自编码器关注的是中间隐层的结果,利用中间的隐层,可以起到数据降维和特征提取的作用。
二、特点
自编码器是前馈神经网络的一种,最开始用于数据降维和特征提取,现在也可以用于生成模型。自编码器和生成对抗网络(GAN)是生成网络的研究热点。
三、过拟合
我们需要的是自编码器中间隐层的结果,但是如果使用不当,自编码器容易出现过拟合。这时自编码器会简单地将输入复制到输出,达不到预期的效果。
当中间隐层的维度大于或等于输入层,会出现过拟合的情况。利用mnist进行测试的结果如下。
上面一层是原始图像,下面一层是中间隐层的图像,可以发现,两者的差别很小。
四、测试
利用keras进行测试,tensorflow作为后端,实现了一个简单的自编码器。keras实现比较简单,搭建了一个全连接神经网络。这里借鉴了 https://github.com/Nana0606/Autoencoder/tree/master/Autoencoder 这位大佬的代码。
生成的结果并不理想,这是一个三层的模型,隐层维度为2。如果适当提高隐层的维度,生成的效果应该会有所提高。