您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > AI人工智能 > 自编码(Autoencoder)
大纲稀疏自编码(SparseAutoencoder)栈式自编码(StackedAutoencoder)去噪自编码(DenoisingAutoencoder)压缩自编码(ContrativeAutoencoder)自编码简介(Autoencoder)自编码简介(Autoencoder):输入值:编码函数:编码或内部表示:解码函数:输出,也称“重建值”()hfxxfg(())rgfx(,)Lrx:损失函数,用于测量重建的好坏,目标是最小化L的期望值。自编码简介(Autoencoder)自动编码器就是一种尽可能复现输入信号的神经网络;自动编码器必须捕捉可以代表输入数据的最重要的因素;类似PCA,找到可以代表原信息的主要成分。Input:数据的输入;Encoder:编码器;Code:输入的一个表示;Decoder:解码器;Reconstruction:input的重建;Error:重建数据和input的误差。自编码简介(Autoencoder)几种自编码的共同点自编码的共同点:是除了预防针对x简单地学习一个恒等函数外,还包含在以下两方面取折中。1、学习到一个针对x的表示h,x也能通过一个解码器从h中还原;需要注意的是:这并不需要对所有x都满足,只满足对那些服从数据分布的x即可。(重建误差)2、减小模型代表性的能力,使在尽可能多的输入方向上不敏感。(模型的表达能力,泛化能力??)自编码简介(Autoencoder)如何在重建误差和表达能力之间取折中呢?解决方法:区分训练样本的哪些变量需要表示。学到一个数据的表示(映射,mapping),对流形的方向比较敏感,对正交于流形的方向不敏感。将在正交于流形的方向产生一个收缩的表示。图中,黑色的线为流形空间,向右的绿色箭头与流形相切,蓝色的箭头正交于流形。自编码简介(Autoencoder)重建误差的概率解释log(|(()))LPxgfx目标函数:损失函数的选取取决于输入数据的类型:如果输入是实数值,无界值,损失函数使用平方差(squarederror);如果输入时位矢量,交叉熵(cross-entropy)更适合做损失函数。什么是交叉熵?p和q分布的交叉熵是:p分布的信息熵和p和q的DL散度的和。(,)[log]()(||)pKLHpqEqHpDpq我们可以认为训练一个解码函数等同于对条件分布P(x|h)的估计;同样的道理,可以将编码函数理解为一个条件分布Q(h|x),而不仅仅是一个“干巴巴”的函数式子。稀疏自动编码器(SparseAutoencoder)如果在AutoEncoder的基础上加上L1的Regularity限制(L1主要是约束每一层中的节点中大部分都要为0,只有少数不为0,这就是Sparse名字的来源),我们就可以得到SparseAutoEncoder法。如上图,其实就是限制每次得到的表达code尽量稀疏。因为稀疏的表达往往比其他的表达要有效(人脑好像也是这样的,某个输入只是刺激某些神经元,其他的大部分的神经元是受到抑制的)。稀疏自动编码器(SparseAutoencoder)输入:基础知识回顾3,1()()()TWbiiihxfWxfWxb输出:123,,xxx激活函数:1()1exp()fzzSigmiod'()()(1())fzfzfzSigmoid函数曲线导数:稀疏自动编码器(SparseAutoencoder)简单神经网络(三层,单隐藏层)L层第i个单元的输入单元总的加权和表示为:()liz例如:所以:进一步简写:稀疏自动编码器(SparseAutoencoder)反向传播算法(Backpropagationalgorithm)输入:共m个训练集损失函数:其中,类似于加入正则化项(权重衰减项,weightdecay),如下式:稀疏自动编码器(SparseAutoencoder)反向传播算法(Backpropagationalgorithm)首先,通过前向网络,计算每个神经元的激活值(activations),包括输出值:其次,对于第L层的第i节点,计算其误差项:对于输出节点,详细推导步骤表示输出层有:推导见下一张PPT。稀疏自动编码器(SparseAutoencoder)反向传播算法(Backpropagationalgorithm)如何得来的呢?推导过程:对于,有:其中,表示l+1层神经元个数详细推导步骤1(1)()()(1)()llsjlillljijizEEzzz1()(1)()[()]llslsjiilijljiwfzz1(1)'()()()lslljijijwfz稀疏自动编码器(SparseAutoencoder)自编码设法学习到一个函数,使得:回到自编码即:ˆxx稀疏自动编码器(SparseAutoencoder)为隐藏单元j的平均激活值如左图,(2)11ˆa(2)22ˆa(2)33ˆa一般强制约束ˆjWhy?看下文是一个稀疏参数,一般取接近于0的值,比如0.05;也就是说,每个隐藏单元j的平均激活值接近于0.05。稀疏自动编码器(SparseAutoencoder)该式的另外一个作用是:对ˆj偏离我们添加一个额外的惩罚项来最优化目标函数。即:其中,KL散度公式:的程度进行惩罚??左图中,=0.2当ˆ=0.2j时,KL散度值达到最小,其值为0。当ˆj趋于0或1时,KL散度值趋于无穷大。因此,为了使以上惩罚项最小,必须使得:ˆj稀疏自动编码器(SparseAutoencoder)因此,全局损失函数为:哎妈,这玩意终于出来了!!其中:稀疏自动编码器(SparseAutoencoder)为什么能稀疏?1、减小编码后隐藏层神经元个数。比如,后一层比前一层神经元个数少。如果激活函数不使用sigmoid函数,而使用线性函数,就是PCA模型。2、隐藏层的任何一个神经元不应该总是高度激活。通过设置ˆj的值充分小,一般接近于0,比如0.01等。为使KL散度尽可能小,则:(2)1a从而使得类似于右图中的神经元激活值较小,处于抑制状态。(2)2a(2)3a小稀疏自动编码器(SparseAutoencoder)部分代码:初始化前向计算各神经元的线性组合值和激活值权值惩罚项稀疏项损失函数的总表达式栈式自编码(StackedAutoencoder)栈式自编码在预训练(初始化)深度神经网络的权重使用较多栈式自编码神经网络是一个由多层稀疏自编码器组成的神经网络,其前一层自编码器的输出作为其后一层自编码器的输入。采用逐层贪婪训练法进行训练,获取栈式自编码神经网络参数。按照从前向后的顺序执行每一层自编码器的编码步骤:()()a()llfz(1)(,1)()(,1)llllzWab是最深层隐藏单元的激活值,这个向量是对输入值的更高阶的表示。其中,()an作为softmax分类器的输入特征,可以网络中学的特征用于分类问题。通过将()an栈式自编码(StackedAutoencoder)具体实例训练一个包含两个隐含层的栈式自编码网络,用来进行MNIST手写数字分类。首先,你需要用原始输入训练第一个自编码器,它能够学习得到原始输入的一阶特征表示然后,你再用这些一阶特征作为另一个稀疏自编码器的输入,使用它们来学习二阶特征()kx(1)kh(2)kh栈式自编码(StackedAutoencoder)接下来,你可以把这些二阶特征作为softmax分类器的输入,训练得到一个能将二阶特征映射到数字标签的模型。最终,你可以将这三层结合起来构建一个包含两个隐藏层和一个最终softmax分类器层的栈式自编码网络,这个网络能够如你所愿地对MNIST数字进行分类。栈式自编码(StackedAutoencoder)栈式自编码神经网络具有强大的表达能力及深度神经网络的所有优点。更进一步,它通常能够获取到输入的“层次型分组”或者“部分-整体分解”结构。自编码器倾向于学习得到能更好地表示输入数据的特征。举个例子,如果网络的输入数据是图像,网络的第一层会学习如何去识别边,第二层一般会学习如何去组合边,从而构成轮廓、角等。更高层会学习如何去组合更形象且有意义的特征。例如,如果输入数据集包含人脸图像,更高层会学习如何识别或组合眼睛、鼻子、嘴等人脸器官。本节小结去噪自编码(DenoisingAutoencoder):为输入值:通过对x随机映射或添加噪声而获得xxx(x|x)Dq'z()gyy(x)f训练指导思想:最小化L(x,z)H其中,1L(x,z)=-[log(1)log(1)]dHkkkkkxzxz信息熵KL散度+去噪自编码(DenoisingAutoencoder)噪声的两个来源:1、来自于样本中选择的训练数据集x2、对数据集x的随机破坏(或添加噪声),从而获得x去噪自编码(DenoisingAutoencoder)流形学习观点重建干净的数据xDAE用于从破损的x:破损处理,灰色的圈代表等概率的破损C(x|x)x:图中的红十字,分布在低维流形附近。DAE训练最小化均方误差:学习一个向量场(绿色的箭头)2g(())fxxg(())fxx向量场用于估计一个梯度场(log())Qxx(x)Q其中,是未知的数据分布去噪自编码(DenoisingAutoencoder)学习一个向量场用于估计梯度场这个属性在以下前提条件下已被证明(AlainandBengio,2012,2013)g(())fx用于估计梯度场(log())QxxDAE的一个重要属性是:他们的训练准则使得自编码学习一个向量场x是连续值,损坏(添加噪声)和重建分布都服从高斯分布均方误差:2g(())fxx破损处理服从以下分布:2(|)(;,)CXxxNxxI更准确地说,(log())Qxx2g(())fxx是一个相容估计,即:2g(())(log())fxxQxx去噪自编码(DenoisingAutoencoder)1、图中每个箭头长度正比于:重建值减去自编码的输入矢量;围绕一个一维弯曲流形,附近数据(橙色的圈)集中在一个二维空间,通过DAE学习一个向量场2、方向:根据隐含估计的概率分布指向更高的概率值;3、注意:估计密度函数的顶峰(数据流形上)和低谷(局部最小)向量场为零值。去噪自编码(DenoisingAutoencoder)将梯度场变成一个生成模型编码-解码对的应用可以给我们生成一个大概的结构,如果我们考虑蒙特卡罗马尔科夫链算法(MCMC),两方面需要注意:1、从低概率结构转移到高概率结构2、加入随机性,使得链可到处转移(不至于在一些概率或模型的顶峰被困住,陷入局部最优?),并且有机会遍历整个空间,使得概率等于潜在模型的概率从概念上的理解,我们在做编码解码操作时,需要加入噪声,但加入多少?怎么加合适呢?(Buthowmuchandhow?)下页将作出解释去噪自编码(DenoisingAutoencoder)图中,C和P是条件随机的,f和g是确定性计算。(a)在x中加入噪声,产生x(b)使用f函数对x进行编码(c)使用g函数进行解码(d)从重建的分布中进行采样获得一个新的状态xt+1(|(()))PXgfx从估计分布中产生马尔科夫链的步骤:答案在:Bengioetal.(2013)(Theorem1)理论表明,自编码是相关的真值条件分布的一个相容估计,然而,以上马尔科夫链的平稳分布是X的数据生成分布的一个相容估计。(|)PXX去噪自编码(DenoisingAutoencoder)图中数据(黑圈)分布在低维流形(螺旋线)的附近马尔科夫链的两个随机步骤:x:绿色的圆圈代表狗的真实图像值。:蓝色的圆圈代表添加噪声后狗的图像值。x(|)Cxx:代表各向同性(等概率?)高斯噪声,图中的绿色。(|)Cxx1、通过将x变换成x2、在降噪后重建的分布中对下一个状态进行采样。(|)Pxxx有很多种可能,取决于,x图中,蓝色的扁平形状就是的表示结果(|)Pxx
本文标题:自编码(Autoencoder)
链接地址:https://www.777doc.com/doc-5433647 .html