Autoencoder 自编码器

        自编码,又称自编码器(Autoencoder,AE),是神经网络的一种,经过训练后能尝试将输入复制到输出。自编码器内部有一个隐藏层h,可以产生编码(code)表示输入。该网络可以看作由两部分组成:一个由函数h = f(x) 表示的编码器和一个生成重构的解码器r = g(h)。  (百度百科)

       作用:特征提取、数据降维、生成式建模

      自编码器是一个3层或者大于3层的神经网络,将输入表达X编码为一个新的表达Y,然后再将Y解码回X。这是一个非监督学习算法,使用反向传播算法来训练网络使得输出等于输入。当向网络中添加一些限制时,可以学到一些关于输入表达的有趣结构。当隐含层节点数d比输入层节点数n小时,可以得到一个输入的压缩表达。当d比n大时,添加一些限制,比如稀疏限制,会得到类似于稀疏编码的结果。

https://blog.csdn.net/marsjhao/article/details/73480859

https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-5-autoencoder/ (莫凡教程)

https://blog.csdn.net/u010089444/article/details/52601193

https://blog.csdn.net/zb123455445/article/details/78924074

        自动编码器就是一种尽可能复现输入信号的神经网络。为了实现这种复现,自动编码器就必须捕捉可以代表输入数据的最重要的因素,就像PCA那样,找到可以代表原信息的主要成分。

1)给定无标签数据,用非监督学习学习特征:

Autoencoder 自编码器_第1张图片

        如上图,我们将input输入一个encoder编码器,就会得到一个code,这个code也就是输入的一个表示,那么我们怎么知道这个code表示的就是input呢?我们加一个decoder解码器,这时候decoder就会输出一个信息,那么如果输出的这个信息和一开始的输入信号input是很像的(理想情况下就是一样的),那很明显,我们就有理由相信这个code是靠谱的。所以,我们就通过调整encoder和decoder的参数,使得重构误差最小,这时候我们就得到了输入input信号的第一个表示了,也就是编码code了。因为是无标签数据,所以误差的来源就是直接重构后与原输入相比得到。
        Autoencoder 自编码器_第2张图片

2)通过编码器产生特征,然后训练下一层。这样逐层训练:

       那上面我们就得到第一层的code,我们的重构误差最小让我们相信这个code就是原输入信号的良好表达了,或者牵强点说,它和原信号是一模一样的(表达不一样,反映的是一个东西)。那第二层和第一层的训练方式就没有差别了,我们将第一层输出的code当成第二层的输入信号,同样最小化重构误差,就会得到第二层的参数,并且得到第二层输入的code,也就是原输入信息的第二个表达了。其他层就同样的方法炮制就行了(训练这一层,前面层的参数都是固定的,并且他们的decoder已经没用了,都不需要了)。

Autoencoder 自编码器_第3张图片

你可能感兴趣的:(Python学习,机器学习)