阅读Antonio Gulli《Deep Learning with Tensorflow 2 and keras》Second Edition 第九章 AutoEncoder笔记
- 自编码用来做什么?当神经网络要输入大量的信息,比如高清图片的时候,输入的图像数量可以达到上千万,要神经网络直接从输入的数据量中进行学习,是一件非常费力不讨好的工作,因此我们就想,为什么不压缩一下呢?提取出原图片中最具有代表性的信息,缩减输入中的信息量,然后在把缩减过后的信息放入到神经网络中学习,这样学习起来就变得轻松了。
- 自编码作用:去噪、数据降维。
- 自编码和PCA主成分降维的功能类似,只是PCA是一种线性的处理,自编码支持非线性的。
- 自编码器由两部分组成:encoder+decoder。编码器(encoder)能将输入压缩成潜在空间表征,解码器(decoder)重构来自潜在空间表征的输入,根据decoder的输出与原始输入x比较优化参数。
- 自编码是一种前向、无循环的无监督神经网络,有时候又称为半监督神经网络,因为输入也被当做输出。常见的有vanilla自编码、稀疏自编码、降噪自编码。
- vanilla自编码(by Hinton in his 2006 paper)(三巨头之一)结构简单,只有三个网络层,即只有一个隐藏层的神经网络,通过使用Adam优化器和均方误差损失函数。
- 稀疏自编码(Sparse autoencoders)本次案例中对损失函数添加一个L1正则化约束,这样能使自编码器学习到数据的稀疏表征。
- 降噪自编码(Denoising autoencoders)向训练数据加入噪声,并使自编码器学会去除这种噪声来获得没有被噪声污染过的真实输入。
- 代码建设的时候先build encoder结构,再定义decoder结构,组合起来autoencoder = model(encoder,decoder),设置损失函数,compile选择(Adam/SGD)等优化参数。隐藏层可以选择dense全连接层,也可以选择卷基层,RNN,LSTM等等。
- 本次案例涉及的操作对象为:图片,文本。
同样组装一个encoder,一个decoder的模式在之前的seq2seq(加密解密框架)出现过(seq2seq由一个加密部分,一个解密部分组合,使用RNN)