深度自编码器原理_编码器原理

深度自编码器原理_编码器原理自编码器的目标:使用少量高阶特征重构输入定义:使用自身的高阶特征编码自己思想:自编码器其实也是一种神经网络,他的输入和输出一致的,借助稀疏编码的思想,目标是使用高阶特征重新组合来重构自己。特点:期望输入和输出一致;希望使用高阶特征来重构自己,而不只是复制像素点。Hinton提出基于信念网络(deepbeliefNetwords,DBN,由多层RBM堆叠而成)可以使用无监督学习逐层训练的贪心算法…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

自编码器的目标:使用少量高阶特征重构输入

定义:使用自身的高阶特征编码自己

思想:自编码器其实也是一种神经网络,他的输入和输出一致的,借助稀疏编码的思想,目标是使用高阶特征重新组合来重构自己。

特点:期望输入和输出一致;希望使用高阶特征来重构自己,而不只是复制像素点。

Hinton提出基于信念网络(deep belief Networds,DBN,由多层RBM堆叠而成)可以使用无监督学习逐层训练的贪心算法,为训练很深的网络提供了一个可行方案:我们可能很难直接训练极深的网络,但是可以用无监督的逐层训练提取特征,将网络的权重初始化到一个比较好的位置,辅助后面的监督训练,其中无监督的逐层训练,其思想就和自编码器相似,就是提取中间层特征或者最后输出的高阶特征,来作为研究初始化权重用;后面的目标就是让神经网络的输出能和原始输出一致,相当于学习一个恒等式y=x

一:AutoEncoder自编码器:自动编码器是一种尽可能复现输入信号的神经网络。为了实现复现输入数据,自动编码器必须捕捉可以代表输入数据的最重要的因素,当中间隐层节点的数量少于输入节点数量时,那只能学习数据中最重要的特征复原,将不太相关的特征去除,此时类似PCA一样,找到代表原信息的主要成分,同时也可以再给中间隐层加一个L1的正则,可以惩罚隐层节点的稀疏程度,惩罚稀疏越大,学到的特征组合就越稀疏,时间使用的特征数量就越少。

二:AutoEncoder是一种无监督学习学习特征

 对比一下监督学习和AutoEncoder的区别:

深度自编码器原理_编码器原理                           深度自编码器原理_编码器原理

左侧的为监督学习,给定了target作为标签,而右侧的为非监督的未给定标签

深度自编码器原理_编码器原理

AutoEncoder编码器,code也就是输入的一个表示,我们找的也是让重构误差最小的折合coder来作为input信号的良好表达,input先经过encoder再经过decoder过程解码,我们最后得到一个重构的输出信号,我们希望这个重构的输出和input有最小的重构误差。这里重点来说明一下监督学习和自编码器在优化时的区别吧:监督学习优化的是prediction-real_data的均方差来op的,而在利用自动编码器的时候我们没有target这个真实值,所以优化的是重构之后的输出和input之间的误差。

三:每一层都会得到原始input的不同表达,这里我们希望它是越抽象越好,像人的视觉系统一样最好。

       因为这里AutoEncoder还不能用来分类数据,AutoEncoder还没有学习如何去连接一个输入和一个类,这里的AutoEncoder只是学习了如何去重构或者复现他的输入而已。只是学习获得了一个可以良好代表输入的特征,这个特征最大程度的代表输入信号。只需要在AutoEncoder的最顶层添加一个LR、SVM、Softmax分类器等就可以,最后再通关标准的多层神经网路的监督训练方法去训练(SGD)

四:在原有的特征上添加一些自动学习得到的特征可以大大提高Accuracy,接下来介绍两种AutoEncoder的两种变体:

      ①:Sparse AutoEncoder稀疏编码器:前提是当隐层节点数少于输入的时候,将相当于一个降维的过程,类似pca;在AutoEncoder的中间隐层加上L1的Regulations限制,就得到了Sparse AutoEncoder,L1主要用来约束每一层节点中大部分为0,少数为1.

code尽量稀疏,稀疏的表达比其他的表达效果更好。

②:Denoising AutoEncoder降噪自动编码

最具代表性的就是去噪自编码器,应用范围广,其中去噪自编码器只需要去掉噪声,并保证隐层节点小于输入层节点;Masking Noise的自编码器只需要将高斯噪声改为随机遮挡噪声;VAE(Variational AutoEncoder)相对比较复杂,VAE中间节点的分布有强假设,拥有额外的损失项,且会使用特殊的SGVB算法进行训练,目前VAE在生成模型 中发挥了很大作用。

      DA实在AutoEncorder的基础上,在训练数据中加入了噪声,加入噪声之后,自动编码器必须学习如何去得到没有噪声的原始输入,自动编码器就去学习输入信号的鲁棒性的表达,所以在训练数据中加入噪声经过AutoEncoder之后得到的输出有更好的泛化能力。

⑤:Output=a1*Q1+……….an*Qn,其中Qi是基向量,ai是系数,我们要求Min|Output-Input}+regulations的最小值,SC就是将一个信号表示为一组基的线性组合,而且要求只需较少的几个基就可以将信号表示出来。稀疏自动编码就是一种无监督学习,它是来寻求一组“超完备”基向量来更高效的表示样本数据。类似PCA,让我们找到一组完备的基向量Qi,超完备基的好处是它能更好的找出隐含在输入数据内部的结构与模式。对于超完备基来说,稀疏ai不再有输入唯一确定。所以,在稀疏自编码算法中,我们加入了冷一个评判标准“稀疏性”来解决因超完备导致的退化问题。

⑥Sparse coding 主要由两部分组成:

      1:Training阶段:给定一系列的样本图片[x1,x2….],要学习得到一组完备基[Q1,Q2,….],这组完备基也就是字典。

        2:Coding阶段:给定一个新图片x,由完备基通过一个Lasso问题得到稀疏向量a。

自编码器的隐层只有一层那么原理类似PCA,DBN训练的时候,需要先对每两层间进行无监督训练,这个过程相当于另一个多层的自编码器,可以将整个网络的权重初始化到一个理想的分布,最后通过反向传播调整模型权重,这个步骤会使用经过标注的信息来做监督性的分类训练。

总结:自编码器的作用不仅局限在给监督学习做预训练,直接使用自编码器进行特征特区和分析也是可以的,现实生活中最多的还是未标注的数据,因此自编码器拥有用武之地。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187137.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java实现字符串逆序输出

    Java实现字符串逆序输出【题目描述】写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。【输入】一行字符【输出】逆序后的字符串【样例输入】123456abcdef【样例输出】fedcba654321 【解题思路】首先定义两个String字符串a,b,其中a用于存放正序的字符串,b用于存放逆序的字符串,然后在定义一个字符数组c,然后调用类库中的t…

    2022年7月16日
    19
  • 命名规范与规则

    命名规范与规则命名规范1、项目名全部小写,就是如果项目名是多个英语单词组成的,每个单词都要全部小写。如:doubanssm。2、包名全部小写。3、类名首字母大写,若类名由多个单词构成,每个单词首字母大写,即

    2022年7月1日
    32
  • Kivy A to Z — 怎样从python代码中直接訪问Android的Service「建议收藏」

    Kivy A to Z — 怎样从python代码中直接訪问Android的Service

    2022年2月3日
    42
  • ContentPlaceHolderID属性

    ContentPlaceHolderID属性内容页ContentPlaceHolder里使用CSS我想在内容页里放个文本框和按钮,然后让他们并排,我加了CSS不行,网上查了说内容页不能使用CSS好像,那应该怎么做才能让他们并排呢?内容页可以

    2022年6月30日
    22
  • 总结:程序员的三大出路怎么写_程序员年龄大了的出路

    总结:程序员的三大出路怎么写_程序员年龄大了的出路自己也是一个程序员,整天coding,debugging,有时候也在想,真的有一天写不动了,或者公司更倾向于用年轻人做这些事,因为便宜而且有精力,那我怎么办?虽然国外也有很多老程序员,像我认识的几个德国同事,年纪一大把了,还是个软件工程师,干得还有滋有味。他们不在乎名也不在乎利,全在兴趣。可我不一样啊!国内和国外的环境也不同。时常到网上了解一些程序员的出路问题,总结起来觉得下面三条比较可行。

    2022年10月10日
    2
  • 3. java缓存-线程内缓存guava cache

    3. java缓存-线程内缓存guava cacheguavacache的缓存结构常用的guavacache缓存根据上图中的缓存框架,我们常用的一些缓存实例有:LocalManualCache和LocalLoadingCache,两者唯一的区别就是LocalLoadingCacheextendsLocalManualCacheimplementsLoadingCache<K,V>接口。LocalManualCache…

    2022年10月4日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号