zoukankan      html  css  js  c++  java
  • Auto-Encoder(自编码器)原理

    1.无监督学习

    无监督学习和监督学习是机器学习的两个方向,监督学习主要适用于已经标注好的数据集(如mnist分类问题),无监督学习则是希望计算机完成复杂的标注任务,简单的解释就是——教机器自己学习,它常见的应用场景有:从庞大的样本集合中选出一些具有代表性的加以标注用于分类器的训练、将所有样本自动分为不同的类别,再由人类对这些类别进行标注、在无类别信息的情况下,寻找好的特征。

    2.Auto-Encoders

    Auto-Encoders一大重要应用就是生成数据集,新手了解VAE一般都从生成mnist数据集开始,对于生成mnist的一个网络模型,Auto-Encoders与传统FNN或者CNN的区别在于它的输入维度与输出维度相同,且中间有一个neck层用于降维或升维,经过这样一个操作可以保持输入数据的语义相关性。

    下图是只有一个包含两个神经元的隐藏层以及包含3个神经元的输出层的自编码器,输出是在设法重建输入,损失函数是重建损失

    在Auto-Encoders的训练过程中,最常用的Loss function有均方误差和交叉熵,其中,交叉熵损失函数更加适用于二进制的输入数据。

    3.Auto-Encoders的变种

    经常拿来和Auto-Encoder比较的一个数据降维的方法叫PCA

    PCA的原理请见以下链接:https://blog.csdn.net/program_developer/article/details/80632779

    Auto-Encoders的一个变种叫Denoising AutoEncoders,它是为了防止模型对像素值的单纯记忆产生的,通过加入一些噪声让网络模型在混乱的数据中发现它们真实的语义特征;还有一个变种叫做Dropout AutoEncoders,和监督学习神经网络中的dropout层道理相同,通过阻止部分神经元的激活来防止网络过拟合(可能会记住一些噪声特征,而无法提取真实的特征)

    Adversarial AutoEncoders是比较有名的一个,在自编码过程中,一个比较常见的问题就是生成的数据总是偏向于某一方向分布,而不符合我们平时接触的任何一种分布(均匀分布、正太分布、高斯分布等),为了解决这个问题,adversarial autoencoders通过加入一个“鉴别器”来对数据进行筛选,从而保证网络输出数据的质量。

  • 相关阅读:
    年度回忆录(2012.102013.01)
    Java中的Annotation(1)三个基本Annotation
    Java7中的文件和目录管理Path类
    Struts1和Struts2核心控制器的执行原理
    java中的IO基础3
    动态代理(2)动态代理和AOP
    java中的IO基础
    《嫌疑犯x的献身》看完了。。。
    像NHibernate致敬ado.net entity framework的范型DAO和open session in view实现
    我的MBTI职业性格测试
  • 原文地址:https://www.cnblogs.com/zdm-code/p/12271075.html
Copyright © 2011-2022 走看看