自编码器
自编码器是一种无监督学习技术,利用 反向传播算法 使得输出值(输入数据的高效表示)等于输入值的人工神经网络,它先将输入压缩成潜在空间表征,然后通过这种表征来重构输出。
自编码是一种数据压缩算法,其中压缩和解压功能是:1)数据特定的,2)有损的,3)从例子中自动学习而不是由人工设计。此外,在几乎所有使用术语“自动编码器”的情况下,压缩和解压缩功能都是由神经网络来实现的。
自编码器的结构如下图:
自编码器由编码器和解码器两部分组成。其中,编码器能将输入压缩成潜在空间表征,用编码函数h=f(x)表示;解码器能够重构来自潜在空间表征的输入,用加码函数r=g(h)来表示。所以,整个自编码器可以用函数g(f(x))=r来描述,其中输入r与原始输入x相近。
用处:
1) 可用来降维,通过设置合适的维度和稀疏约束,它可以学习到比PCA等更有意思的数据投影。原因:输入数据的这一高效表示成为编码,编码的维度一般远小于输入数据。限制h的维度使其小于输入x,这种情况下称作有损自编码器。通过训练有损表征,使得自编码器能学习到数据中最重要的特征。
2) 可以用作强大的特征检测器,应用于深度神经网络的预训练。原因:自编码器能从数据样本中进行无监督学习,意味着可以将这个算法用于某个数据集中,不需要任何新的特征工程,只需要适当地训练数据,就能取得良好的性能。当处理一个复杂的有监督学习问题又没有足够的标注数据,解决办法之一是找到一个解决类似任务的训练好的模型,复用低层。类似的,如果有一个很大的数据集但是绝大部分都是未标注数据,可以使用所有的数据先训练一个栈式自编码器,然后复用低层来完成真正的任务。
3) 可以用作生成模型,随机生成与训练数据类似(维度一般变小)的数据。比如,图像修复,也可以用人脸图片训练一个自编码器,它可以生成新的图片。对于数据好,但是它在图像压缩方面表现不如JPEG、GAN好,因为数据会有损。
4) 数据去噪,如数据样本、图像、音频等,去噪自编码器。
5) 信息检索
6) 异常检测
分类:
如果一个自编码器只是简单地学会将自编码器设置成g(f(x))=x,即输入与输出完全相等,那就没什么用处。所以通常需要给自编码器强加一些约束,强制模型考虑输入数据的哪部分需要被优先复制,这使得他只能近似地复制与训练数据相似的输入,通过训练输出值等于输入值的自编码器,让潜在表征h将具有价值属性,这在重构任务中构建约束来实现。
香草自编码器
多层自编码器
卷积自编码器
欠完备线性自编码器
稀疏自编码器
正则自编码器
去噪自编码器
压缩自编码器
栈式自编码器
构建的实现:
构建需要三件事情:编码函数、解码函数和数据压缩表示与解压缩表示(即“丢失”函数)之间的信息损失量之间的距离函数。
编码器和解码器作为参数函数(通常是神经网络),相对于距离函数是可微分的,所以可以使用随机梯度下降,通过优化编码/解码函数的参数以最小化重构损失。
使用Keras建立简单的自编码器
1.单隐含层自编码器
分类从:https://zhuanlan.zhihu.com/p/51960803学习到
http://www.atyun.com/17888.html
还有这个写的不错https://blog.csdn.net/qq_19707521/article/details/78740986