zoukankan      html  css  js  c++  java
  • SIGAI深度学习第五集 自动编码器

    深度学习模型-自动编码器(AE),就是一个神经网络的映射函数,f(x)——>y,把输入的一个原始信号,如图像、声音转换为特征。

    大纲:

    自动编码器的基本思想

    网络结构

    损失函数与训练算法

    实际使用

    去燥自动编码器

    稀疏编码

    收缩自动编码器

    多层编码器

    本集总结

    自动编码器的基本思想:

    人工神经网络实现的是一个向量X映射为另一个向量Y(Rn——>Rm,m<<n),通过多层复合函数来实现,Y一般设置为样本标签向量label。AE把Y设置为从原始数据X提取出的特征向量,如X是一个高维的图像或声音。而Y是自动训练出来的,不需要人工指定,因此需考虑怎么设置训练目标函数。

    直接用一个单层或者多层神经网络对输入数据进行映射,得到输出向量,作为从输入数据提取出的特征。核心问题:怎么设置训练目标?解决思想:编码器+解码器框架。

    网络结构:

    编码器-将输入数据映射为特征向量,解码器-将特征向量映射回输入向量重构。

    类似于PCA,不过PCA直接计算目标函数L,不用训练。

     损失函数与训练算法:

    损失函数定义为重构误差,类似PCA的做法。损失函数(L个样本):,h是编码器的映射函数,g是解码器的映射函数。xi编码之后再解码和原始数据xi尽可能的接近。训练好之后只需要编码器,即h(Xi)——>Yi

    训练算法和普通的神经网络相同,用BP算法训练+随机梯度下降法SGD、GD。

    实际使用:

    实际使用时,只需要编码器网络,解码器只用于训练阶段。输入一个数据向量,即可得到特征向量。也可以用多个隐含层。

    去噪自动编码器:

    Denoising Autoencoder,简称DAE。为了增强模型的鲁棒性,对训练样本X做一个随机扰动如(加噪声,X中随机挑几维数据设置为0,其他维数据不变),得到X'向量,再用X'去训练,训练出的模型更具有鲁棒性、泛化性能更好,因为模型能够抵抗这些噪声。 

    这样,输入数据变为X',重构值为X,即输入输出为(X',X),而标准自动编码器输入输出为(X,X)。DAE把从有污染的数据中把原始数据重构出来,则编码器那一块从有污染的数据中把没有污染的数据代表的向量的有效特征向量Y提出来。

    在训练样本中加入随机噪声,重构的目标是不带噪声的样本数据。用自动编码器学习得到的模型重构出来的数据可以去除这些噪声,获得没有被噪声污染过的数据。

    对于每个样本向量X随机选择其中的一部分分量,将它们值置为0,其他分量保持不变,得到的带噪声向量为

    稀疏自动编码器:

    加入稀疏性惩罚项,让编码器的输入结果(即编码器输出的向量)稀疏(很多数据为0)。

    编码器网络隐含层的第i个神经元的平均激活度为对所有训练样本的激活函数值的均值,记为pi^。

    使用相对熵构造惩罚项:,其中n为隐含层神经元个数,p为人工指定的活跃度(一个接近于0的数)。

    加上惩罚项后的目标函数变为:,其中前一项为AE的误差函数,后一项为编码器的稀疏性惩罚项。

    收缩自动编码器:

    Contractive Auto-Encoders,简称CAE,也是对自动编码器的一种改进,同样也是加上一个惩罚项。

    训练时在损失函数中加上正则化项,使得编码器函数的导数尽可能小,

    正则化项是编码器函数导数二范数平方,,这里hj是隐含层第j个神经元编码器函数,xi是输入向量的第i个分量,偏导数小则对输入值不敏感,输入X加上一个小的扰动项之后,产生的输出值变化也非常小,也更鲁邦一些。

     多层自动编码器:

    层叠自动编码器由多个自动编码器串联组成(因为很多实际应用中,一层特征抽象提取是不行的,如图像、声音),能够逐层提取输入数据的特征,在此过程中逐层降低输入数据的维度,将高维的输入数据转化为低维的特征。

    编码器可以看成一个降维,因为映射之后向量的维数比映射之前要低,和PCA类似,但是和PCA有一个本质的区别是PCA是线性的,自动编码器是非线性的一个编码,因此它的表达能力会更强一些。AE是在人工神经网络用于深度学习早期的时候,2006Hition发于science上的那篇文章,用玻尔兹曼机训练一个多层的AE,实际应用中现在很少使用了,只需记住这种编码器解码器框架能把一个特征性向量X的特征向量Y给提出来的思想即可。图像卷积的时候会用到这个原理(前面一半做编码,后边一半做解码),还有RNN做机器翻译的时候的seqtoseq,也是这个原理。

    训练也是逐层进行的。给定输入向量,采用无监督方式方式训练第一层自动编码器。把第一个自动编码器的输出作为第二个自动编码器的输入,采用同样的方法训练第二个自动编码器。

    重复第二步直到所有自动编码器训练完成。把最后一个自动编码器的输出作为最终的输出。

    在每一层,都会得到输入数据的不同抽象特征,随着层数的增加,这个特征越来越抽象。

    本集总结:

    1.AE基本想法:神经网络的映射函数来提取特征向量X的特征向量Y,f(X)——>Y

    2.训练的目标函数loss、网络结构Encoder和Decoder结构

    3.AE的实际使用

    4.AE的几种改进型,DAE、稀疏自动编码器、CAE

    5.AE的多层结构

  • 相关阅读:
    XML(学习笔记)
    css样式学习笔记
    Request(对象)
    sql一些错误修改的总结
    转载(如何学习C#)
    sql server(学习笔记2 W3Cschool)
    sql sqrver(学习笔记1 W3Cschool)
    关于 flutter开发碰到的各种问题,有的已经解决有的一直没解决或者用其他方法替代
    关于 Flutter IOS build It appears that your application still contains the default signing identifier.
    关于 flutter本地化问题 The getter 'pasteButtonLabel' was called on null
  • 原文地址:https://www.cnblogs.com/wisir/p/11712311.html
Copyright © 2011-2022 走看看