有监督学习的神经网络,总体上可以看做是特征降维的过程。
把原始的高维输入向量变换到低维的变量 y y y。特征降维在机器学习中有广泛的应用,最常见的降维算法有主成分分析法(Principal components analysis,简称PCA)—通过对协方差矩阵进行特征分解而得到数据的主要成分,但是PCA 本质上是一种线性变换,提取特征的能力极为有限。
自编码器本质上是利用神经网络的强大非线性表达能力去学习到低维的数据表示,但是无监督的数据没有额外的标注信息,只有数据本身,所以不妨自己重建自己,输入输出的维度一样,即建立映射: → 。
把网络切分为两个部分,前面的子网络尝试学习映射关系:1 : → ,后面的子网络尝试学习映射关系g2 : → 。
把1看成一个数据编码(Encode)的过程,把高维度的输入编码成低维度的隐变量(Latent Variable,或隐藏变量),称为Encoder 网络(编码器);
把g2看成数据解码(Decode)的过程,把编码过后的输入解码为高维度的,称为Decoder 网络(解码器)
编码器和解码器共同完成了输入数据的编码和解码过程,我们把整个网络模型叫做自动编码器(Auto-Encoder)。
自编码器网络和普通的神经网络并没有本质的区别,只不过训练的监督信号由标签变成了自身。借助于深层神经网络的非线性特征提取能力,自编码器可以获得良好的数据表示,相对于PCA 等线性方法,自编码器性能更加优秀,甚至可以更加完美的恢复出输入。
自编码器的损失函数如下:
对于二进制输入,其损失函数就是交叉熵损失函数。
对于实数输入,其损失函数就是均方差损失函数。
自编码器的作用:
PCA与自编码器比较:
现实中绝大多数数据都是非线性数据,PCA是线性变换,用线性变化去处理非线性,失真较大;神经网络的非线性体现在激活函数上,因此,在特征维度提取上高于PCA
输入的时候加入高斯噪声,表示从混乱的信息中重建出高层次的信息
Dropout AutoEncoders断掉部分的连接层,减少了过拟合的程度。控制一定的Dropout,效果会比较好,一般是先变好后变差。
Train时,以概率p选择断掉该连接,可以理解为:所给的信息有限,必须做一个判断,迫使神经网络robust
Adversarial AutoEncoders它是一种概率式自动编码器,利用生成性对抗网络(GAN)将编码器隐藏向量的后验集合与任意先验分布相匹配,进行变分推理先验后,确保从先验空间的任何部分生成有意义的样本。结果,adversarial自动编码器的解码器学习了一个深度生成模型,该模型将所施加的优先级映射到数据分布。在这个模型中自编码器的训练具有双重目标——传统的重建误差和对抗性训练准则。
在原先的自编码器中,z不属于任何分布,Adversarial AutoEncoders就是使得z符合某个分布。
将原来的z与希望它属于服从的分布的z输入到Discriminator中,得到z是(real=1)否(Fake=0)符合这个分布,最后结果就是该自编码器不仅能够重建,而且还服从某个分布p
Varational Auto Encoder通过KL散度,强制使p分布逼近q分布。
Varational Auto Encoder损失函数如下:
前一部分是:Auto Encoder的重建误差,后面一部分是:q、p的KL散度
z~q(z|x)分布时,z*sample()是不可导的,所以,需要后续变换
如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论留言!