如何将栈式堆栈卷积自编码码中的分类改为预测

From Ufldl
逐层贪婪训练法依次训练网络的每一层,进而预训练整个深度神经网络。在本节中,我们将会学习如何将自编码器“栈化”到逐层贪婪训练法中,从而预训练(或者说初始化)深度神经网络的权重。
栈式自编码神经网络是一个由多层稀疏自编码器组成的神经网络,其前一层自编码器的输出作为其后一层自编码器的输入。对于一个
层栈式自编码神经网络,我们沿用自编码器一章的各种符号,假定用
个自编码器对应的
参数,那么该栈式自编码神经网络的编码过程就是,按照从前向后的顺序执行每一层自编码器的编码步骤:
同理,栈式神经网络的解码过程就是,按照从后向前的顺序执行每一层自编码器的解码步骤:
其中, 是最深层隐藏单元的激活值,其包含了我们感兴趣的信息,这个向量也是对输入值的更高阶的表示。
作为softmax分类器的输入特征,可以将栈式自编码神经网络中学到的特征用于分类问题。
一种比较好的获取栈式自编码神经网络参数的方法是采用逐层贪婪训练法进行训练。即先利用原始输入来训练网络的第一层,得到其参数 ;然后网络第一层将原始输入转化成为由隐藏单元激活值组成的向量(假设该向量为A),接着把A作为第二层的输入,继续训练得到第二层的参数 ;最后,对后面的各层同样采用的策略,即将前层的输出作为下一层输入的方式依次训练。
对于上述训练方式,在训练每一层参数的时候,会固定其它各层参数保持不变。所以,如果想得到更好的结果,在上述预训练过程完成之后,可以通过反向传播算法同时调整所有层的参数以改善结果,这个过程一般被称作“微调(fine-tuning)”。
实际上,使用逐层贪婪训练方法将参数训练到快要收敛时,应该使用微调。反之,如果直接在随机化的初始权重上使用微调,那么会得到不好的结果,因为参数会收敛到局部最优。
如果你只对以分类为目的的微调感兴趣,那么惯用的做法是丢掉栈式自编码网络的“解码”层,直接把最后一个隐藏层的
作为特征输入到softmax分类器进行分类,这样,分类器(softmax)的分类错误的梯度值就可以直接反向传播给编码层了。
让我们来看个具体的例子,假设你想要训练一个包含两个隐含层的栈式自编码网络,用来进行MNIST手写数字分类(这将会是你的下一个练习)。
首先,你需要用原始输入
训练第一个自编码器,它能够学习得到原始输入的一阶特征表示(如下图所示)。
接着,你需要把原始数据输入到上述训练好的稀疏自编码器中,对于每一个输入,都可以得到它对应的一阶特征表示。然后你再用这些一阶特征作为另一个稀疏自编码器的输入,使用它们来学习二阶特征 。(如下图所示)
同样,再把一阶特征输入到刚训练好的第二层稀疏自编码器中,得到每个
对应的二阶特征激活值 。接下来,你可以把这些二阶特征作为softmax分类器的输入,训练得到一个能将二阶特征映射到数字标签的模型。
如下图所示,最终,你可以将这三层结合起来构建一个包含两个隐藏层和一个最终softmax分类器层的栈式自编码网络,这个网络能够如你所愿地对MNIST数字进行分类。
栈式自编码神经网络具有强大的表达能力及深度神经网络的所有优点。
更进一步,它通常能够获取到输入的“层次型分组”或者“部分-整体分解”结构。为了弄清这一点,回顾一下,自编码器倾向于学习得到能更好地表示输入数据的特征。因此,栈式自编码神经网络的第一层会学习得到原始输入的一阶特征(比如图片里的边缘),第二层会学习得到二阶特征,该特征对应一阶特征里包含的一些模式(比如在构成轮廓或者角点时,什么样的边缘会共现)。栈式自编码神经网络的更高层还会学到更高阶的特征。
举个例子,如果网络的输入数据是图像,网络的第一层会学习如何去识别边,第二层一般会学习如何去组合边,从而构成轮廓、角等。更高层会学习如何去组合更形象且有意义的特征。例如,如果输入数据集包含人脸图像,更高层会学习如何识别或组合眼睛、鼻子、嘴等人脸器官。
Autoencoder
逐层贪婪训练法
Greedy layer-wise training
栈式自编码神经网络
Stacked autoencoder
Fine-tuning
Raw inputs
层次型分组
Hierarchical grouping
部分-整体分解
Part-whole decomposition
First-order features
Second-order features
更高阶特征
Higher-order features
Activation
张天雷(), 邓亚峰(), 许利杰()
| 栈式自编码算法 |
Language&:
Personal tools
This page was last modified on 8 April 2013, at 05:15.
This page has been accessed 88,275 times.从自编码器到生成对抗网络:一文纵览无监督学习研究现状从自编码器到生成对抗网络:一文纵览无监督学习研究现状有静有动百家号选自Medium机器之心编译参与:Nurhachu、蒋思源、吴攀无监督学习是深度学习的圣杯。它的目的是希望能够用极少量且不需要标注的数据训练通用系统。本文将从无监督学习的基本概念开始再进一步简述无监督学习的各个基础算法及其优缺点。本文作者为专注机器人与视觉研究的e-Lab的研究者EugenioCulurciello。如今深度学习模型都需要在大规模的监督数据集上训练。这意味着对于每一个数据,都会有一个与之对应的标签。在很流行的ImageNet数据集中,其共有一百万张带人工标注的图片,即1000类中的每一类都有1000张。创建这么一个数据集是需要一番功夫的,可能需要很多人花数月的功夫完成。假定现在要创建一个有一百万类的数据集,那么就必须给总共1亿帧视频数据集中的每一帧做标注,这基本是无法实现的。现在,回想一下在你很小的时候,自己是如何得到教导的。没错,我们的确受到了一些监督,但是当你的父母告诉你这是一只「猫」之后,他们不会在日后的生活中每一次观察到猫时都告诉你这是「猫」!而如今的监督式学习是这样的:我一次又一次地告诉你「猫」是什么样的,也许会重复一百万次。然后你的深度学习模型就领会了关于猫的知识。理想情况下,我们希望有一个更像我们的大脑一样去运行得模型。它仅仅需要很少的一些标签就能够理解现实世界中的很多类事物。在现实世界中,我指的类是物体类别、动作类别、环境类别、物体的部分的类别,诸如此类还有很多很多。正如你会在这篇评论中看到的一样,最成功的模型就是那些能够预测视频中即将出现的画面的模型。很多这类技术面临并正尝试解决的一个问题,即为了达到良好的全局表现,训练要在视频上进行,而不是静态的图片上。这是将学习到的表征应用在实际任务中的唯一途径。基本概念无监督学习研究的主要目标就是要预训练出能够用于其他任务的模型(即鉴别器或者编码器)。编码器的特点应该尽可能的通用,以便可以用在分类任务中(如在ImageNet上进行训练),并且提供尽可能像监督模型一样好的结果。最新的监督模型总是表现得比无监督预训练模型更好。那是因为,监督会允许模型能够更好的编码数据集上的特征。但是当模型应用在其他的数据集上时,监督会衰减。在这方面,无监督训练有希望提供更加通用的特性来执行任何任务。如果以实际生活中的应用为目标,例如无人驾驶、动作识别、目标检测和实时提取中的识别,那么算法需要在视频上训练。自编码器UCDavis的BrunoOlshausen和康奈尔大学的DavidField于1996年的发表的论文《SparseCodingwithanOvercompleteBasisSet:AStrategybyV1?》(论文链接:http://redwood.psych.cornell.edu/papers/olshausen_field_1997.pdf)表明,编码理论可以被用在视觉皮层的接收域中。他们证明了我们大脑中的基本视觉旋涡(V1)使用稀疏性原理来创建一个能够被用于重建输入图像的基本功能的最小集合。下面的链接是2014年伦敦微软Bing团队的PiotrMirowski关于自动编码器的一个很好的综述。链接:https://piotrmirowski.files.wordpress.com/2014/03/piotrmirowski_2014_reviewautoencoders.pdfYannLeCun的团队也从事这个领域的研究。在链接网页中的demo中,你可以看到像V1一样的滤波器是如何学习的。(链接:http://www.cs.nyu.edu/~yann/research/deep/)通过重复贪婪逐层训练的过程,堆栈式自编码器(Stacked-autoencoder)也被使用了。自动编码器方法也被称为直接映射方法。自动编码器/稀疏编码/堆叠式自动编码的优点和缺点优点:简单的技术:重建输入多层可堆叠直观和基于神经科学的研究缺点每一层都被贪婪地(greedily)训练没有全局优化比不上监督学习地性能多层失效对通用目标地表征而言,重建输入可能不是理想的指标聚类学习它是用k-means聚类在多层中学习滤波器的一种技术。我们组把这项技术命名为:聚类学习(见论文:ClusteringLearningforRoboticVision)、聚类连接(见论文:AnAnalysisoftheConnectionsBetweenLayersofDeepNeuralNetworks),以及卷积聚类(见论文:ConvolutionalClusteringforUnsupervisedLearning)。就在最近,这项技术在流行地无监督学习数据集STL-10上实现了非常好的结果。我们在这个领域的研究和AdamCoates与AndrewNg在基于k-means学习特征表示(LearningFeatureRepresentationswithK-means)中发表的研究成果是独立的。众所周知,由于在求解配分函数时的数值问题,受限波尔兹曼机(RBM),深波尔兹曼机(DBM),深度信念网络(DBN/参见GeoffreyE.Hinton等人的研究:Afastlearningalgorithmfordeepbeliefnet)等模型已经很难去训练了。因此,它们没有广泛应用于解决问题中。聚类学习的优缺点:简单的技术:得到相似群集的输出多层可堆叠直观和基于神经科学的研究缺点:每一层都被贪婪地训练没有全局优化在某些情况下可以和监督学习的性能媲美多层递增式失效==性能回报递减生成对抗网络模型生成对抗网络尝试通过鉴别器和生成器的对抗而得来一个优良的生成模型,该网络希望能够生成足以骗过鉴别器的逼真图像。生成模型这一领域近年来十分优秀的生成对抗网络正是由IanGoodfellow和YoshuaBengio等人在论文《GenerativeAdversarialNets》中提出。这里还有OpenAI的研究员Ian在2016年底做的关于生成对抗网络(GANS)的总结,视频链接:https://channel9.msdn.com/Events/Neural-Information-Processing-Systems-Conference/Neural-Information-Processing-Systems-Conference-NIPS-2016/Generative-Adversarial-Networks。由AlecRadford、LukeMetz以及SoumithChintala等人实例化的一个被称作DCGAN的生成对抗模型取得了非常好的结果。他们的研究发表在论文:UnsupervisedRepresentationLearningwithDeepConvolutionalGenerativeAdversarialNetworks。VincentDumoulin和IshmaelBelghazi等人对这个模型做了一个比较好的解释(链接:https://ishmaelbelghazi.github.io/ALI/)。DCGAN鉴别器被设计来判断一副输入图片是真实的(来源于某个数据集的真实图片)或虚假的(来源于某个生成器)。生成器将随机地噪声向量(例如1024个数值)作为输入,并生成一副图片。在DCGAN中,生成器网络如下:尽管这个鉴别器是一个标准的神经网络。具体的细节可以参考下文提及的代码。关键是要并行地去训练这两个网络,同时不要完全过拟合,因此才会复制数据集。学习到的特征需要泛化在未知的样本上,所以学习数据集将不会有用。在Torch7上训练DCGAN的代码(https://github.com/soumith/dcgan.torch)也被提供了。这需要大量的实验,相关内容YannLeCun在Facebook中也分享过:https://www.facebook.com/yann.lecun/posts/22143当生成器和鉴别器都被训练之后,你可以同时使用两者。主要的目标就是训练出一个能够被用于其他任务的鉴别器网络,例如在其他数据集上可以分类。生成器可以用来从随机向量中生成图片。这些图片有着非常有趣的属性。首先,它们从输入空间中提供了平滑的变换。如下所示的例子展示了在9个随机输入向量中移动而生成的图片:输入向量空间也提供了数学属性,证明学习到的特征是按照相似性来组织的,如下图所示:生成器学习到的平滑空间启示鉴别器也要有类似的属性,这使得鉴别器在编码图像时成了一个很棒的通用特征提取器。这有助于解决CNN在训练不连续图像的时候由于对抗噪声而造成的失败(详见ChristianSzegedy等人的文章《Intriguingpropertiesofneuralnetworks》,https://arxiv.org/abs/)。GAN最新的进展,在仅有1000个标签样本的CIFAR-10数据集上实现了21%的错误率,参见OpenAI的TimSalimans等人的论文《ImprovedTechniquesforTrainingGANs》,论文链接:https://arxiv.org/pdf/v1.pdf。最近关于infoGAN的论文《InfoGAN:InterpretableRepresentationLearningbyInformationMaximizingGenerativeAdversarialNets》(链接:https://arxiv.org/abs/)中,能够产生特征非常清晰的图像,并且这些图像具有更加有趣的意义。然而,他们并没有公布学习到的特征在某项任务或某个数据集中的性能对比。在如下所示的博客和网站中也有关于生成对抗模型的总结,参见OpenAI的技术博客https://blog.openai.com/generative-models/和网页https://code.facebook.com/posts/5490/a-path-to-unsupervised-learning-through-adversarial-networks/。另一个非常有趣的例子如下,在例子中,作者用生成对抗训练去学习从文本描述中生成图像。参见论文《GenerativeAdversarialTexttoImageSynthesis》,链接:https://arxiv.org/abs/。我最欣赏这项工作的地方在于它所使用的网络用文本描述作为生成器的输入,而不是随机向量,这样就可以精确地控制生成器的输出。网络模型结构如下图所示:生成对抗模型的缺点和优点对整个网络的全局训练易于编程和实现难以训练和转换问题在某些情况下可以比得上监督学习的性能需要提升可用性(这是所有无监督学习算法面临的问题)可以从数据中学习的模型通过设计不需要标签的无监督学习任务和旨在解决这些任务的学习算法,这些模型直接从无标签的数据中学习。在视觉表征中通过解决拼图问题来进行无监督学习确实是一个聪明的技巧。作者将图像分割成了拼图,并且训练深度网络来解决拼图问题。最终得到的网络的表现足以比肩最好的预训练网络。详见论文《UnsupervisedLearningofVisualRepresentationsbySolvingJigsawPuzzles》,链接:https://arxiv.org/abs/在视觉表征中通过图像补丁和布局来进行无监督学习也是一个聪明的技巧。他们让同一幅图像上的两个补丁紧密分布。这些补丁在统计上来讲是同一个物体。第三个补丁选择随机的图像,并且布局在随机的位置,从统计上来讲与前两个补丁并不是同一类物体。然后训练一个深度网络来区分两个属于同一类的补丁和另一个不同类别的补丁。最终得到的网络具有和最高性能精调网络之一相同的性能。详情参见论文《Learningvisualgroupsfromco-occurrencesinspaceandtime》,链接:https://arxiv.org/abs/。从立体图像重建中进行的无监督学习模型采用立体图像作为输入,例如图像一帧的左半部分,然后重建出图像的右半部分。虽然这项工作并不针对无监督学习,但是它可以用作无监督学习。这种方法也可以用来从静态图片生成3D电影。参见论文《Deep3D:FullyAutomatic2D-to-3DVideoConversionwithDeepConvolutionalNeuralNetworks》,链接:https://arxiv.org/abs/,github上的Python源码:https://github.com/piiswrong/deep3d。利用替代类别的无监督学习视觉表征使用图像不行来创建非常大的替代类。这些图像补丁然后被增强,然后被用来训练基于增强替代类的监督网络。这在无监督特征学习中给出了最好的结果。详情参见论文《DiscriminativeUnsupervisedFeatureLearningwithExemplarConvolutionalNeuralNetworks》,链接:https://arxiv.org/abs/。使用视频的无监督学习视觉表征采用了基于LSTM的编码器-解码器对。编码LSTM运行在视频帧的序列上以生成一个内部表征。随后这些表征通过另一个LSTM被解码以生成一个目标序列。为了使这个变成无监督的,一种方法是预测与输入相同的序列。另一种方式是预测未来的帧。详情参见论文《UnsupervisedLearningofVisualRepresentationsusingVideos》,链接:https://arxiv.org/abs/。另一篇使用视频的文章出自MIT的Vondrick和Torralba等人(http://arxiv.org/abs/),有着非常惹人注目的结果。这项工作背后的思想是从视频输入中预测未来帧的表示。这是一种优雅的方法。使用的模型如下:这项技术的一个问题就是:一个训练在静态图像帧上的神经网络被用来解释视频输入。这种网络不会学习到视频的时间动态变化以及在空间运动的物体的平滑变换。所以我们认为这个网络并不适合用来预测未来视频中的画面。为了克服这个问题,我们团队创建了一个大型的视频数据集eVDS(https://engineering.purdue.edu/elab/eVDS/),可用来直接从视频数据上训练新的(递归和反馈)网络模型。PredNetPredNet是被设计来预测视频中未来帧的网络。在这个博客中可以看到一些例子,博客链接:https://coxlab.github.io/prednet/。PredNet是一个非常聪明的神经网络型,在我们看来,它将在将来的神经网络中起着重要的作用。PredNet学习到了超越监督式CNN中的单帧图片的神经表征。PredNet结合了生物启发的双向[人脑模型](详见论文《UnsupervisedPixel-prediction》,https://papers.nips.cc/paper/1083-unsupervised-pixel-prediction.pdf)。它使用了[预测编码和神经模型中的反馈连接](详见论文《NeuralEncodingandDecodingwithDeepLearningforDynamicNaturalVision》,http://arxiv.org/abs/)。下面是PredNet模型以及一个具有两个堆叠层的例子:PredNet结合了生物启发的双向人脑模型这个模型有以下这几个优点:可使用无标签的数据来训练在每一层嵌入了损失函数来计算误差具有执行在线学习的能力,通过监控错误信号,当模型不能预测输出的时候,它会知道需要学习误差信号PredNet存在的一个问题是,对第一层的一些简单的基于运动的滤波器而言,预测未来输入的帧是相对容易的。在我们所做的PredNet的实验中,PredNet在重建输入帧的时候学会了在重建输入帧时达到很好的效果,但是更高层不会学到较好的表征。事实上,在实验中更高层连简单的分类任务都解决不了。事实上,预测未来的帧是不必要的。我们愿意做的就是去预测下一帧的表征,就像CarlVondrick做的一样。详见论文《AnticipatingVisualRepresentationsfromUnlabeledVideo》,链接:https://arxiv.org/abs/。通过观察物体的运动来学习特征最近的这篇论文通过观察视频中物体的运动来训练无监督模型(《LearningFeaturesbyWatchingObjectsMove》,https://people.eecs.berkeley.edu/~pathak/unsupervised_video/)。运动以光流的形式被提取出来,并被用作运动物体的分割模板。尽管光流信号并没有提供任何一个接近良好的分割模板,但是在大规模数据集上的平均效果使得最终的网络会表现良好。例子如下所示:这项工作是非常激动人心的,因为它遵循关于人类视觉皮层如何学习分割运动物体的神经学理论。参见论文《Developmentofhumanvisualfunction》,链接:http://www.sciencedirect.com/science/article/pii/S068X。未来未来需要你们来创造。无监督训练仍然还是一个有待发展的主题,你可以通过以下方式做出较大的贡献:创建一个新的无监督任务去训练网络,例如:解决拼图问题、对比图像补丁、生成图像等......想出能够创造很棒的无监督功能的任务,例如:像我们人类视觉系统的工作方式一样,理解立体图像和视频中什么是物体、什么是背景。本文由百家号作者上传并发布,百家号仅提供信息发布平台。文章仅代表作者个人观点,不代表百度立场。未经作者许可,不得转载。有静有动百家号最近更新:简介:是一种爱好,为娱不为渔!作者最新文章相关文章当前位置: >>
自编码(Autoencoder)
大纲自编码简介(Autoencoder) 稀疏自编码(Sparse Autoencoder)栈式自编码 (Stacked Autoencoder)去噪自编码(Denoising Autoencoder) 压缩自编码(Contrative Autoencoder) 自编码简介(Autoencoder)x :输入值 f :编码函数 h ? f ( x) :编码或内部表示g:解码函数r ? g ( f ( x)) :输出,也称“重建值” L(r , x) :损失函数,用于测量重建的好 坏,目标是最小化L的期望值。 自编码简介(Autoencoder)Input:数据的输入; Encoder:编码器; Code:输入的一个表示; Decoder:解码器; Reconstruction: input的重建; Error: 重建数据和input的误差。自动编码器就是一种尽可能复现输入信号的神经网络;自动编码器必须捕捉可以代表输入数据的最重要的因素;类似 PCA,找到可以代表原信息的主要成分。 自编码简介(Autoencoder)几种自编码的共同点自编码的共同点:是除了预防针对x简单地学习一个恒等函数外,还包含在以下两方面取折中。1、学习到一个针对x的表示h,x也能通过一个解码器从h中还原;需要 注意的是:这并不需要对所有x都满足,只满足对那些服从数据分布的x 即可。(重建误差) 2、减小模型代表性的能力,使在尽可能多的输入方向上不敏感。(模型 的表达能力,泛化能力??) 自编码简介(Autoencoder)如何在重建误差和表达能力之间取折中呢?解决方法:区分训练样本的哪些变量需要表示。 学到一个数据的表示(映射, mapping),对流形的方向比 较敏感,对正交于流形的方向 不敏感。将在正交于流形的方 向产生一个收缩的表示。图中,黑色的线为流形空间,向右 的绿色箭头与流形相切,蓝色的箭 头正交于流形。 自编码简介(Autoencoder)重建误差的概率解释目标函数: L ? ? log P( x | g ( f ( x))) ? 损失函数的选取取决于输入数据的类型:如 果输入是实数值,无界值,损失函数使用平 方差(squared error);如果输入时位矢量, 交叉熵(cross-entropy)更适合做损失函数。 ? 我们可以认为训练一个解码函数等同于对 条件分布P(x|h)的估计;同样的道理,可以 将编码函数理解为一个条件分布Q(h|x),而什么是交叉熵?不仅仅是一个“干巴巴”的函数式子。p和q分布的交叉熵是:p分布的信息熵和p和q的DL散度的和。H ( p, q) ? Ep [? log q] ? H ( p) ? DKL ( p || q) 稀疏自动编码器(Sparse Autoencoder )如果在AutoEncoder的基础上加上L1的 Regularity限制(L1主要是约束每一层 中的节点中大部分都要为0,只有少数 不为0,这就是Sparse名字的来源), 我们就可以得到Sparse AutoEncoder法。如上图,其实就是限制每次得到的表达 code尽量稀疏。因为稀疏的表 达往往比其他的表达要有效(人脑好像也是这样的,某个输入只是刺激 某些神经元,其他的大部分的神经元是受到抑制的)。 稀疏自动编码器(Sparse Autoencoder )基础知识回顾输入: x1 , x2 , x3T 输出: hW ,b ( x) ? f (W x) ? f (? i ?1Wi xi ? b) 31 激活 f ( z ) ? 函数: 1 ? exp(? z )SigmiodSigmoid函 数曲线' 导数: f ( z) ? f ( z)(1 ? f ( z)) 稀疏自动编码器(Sparse Autoencoder )简单神经网络(三层,单隐藏层)L层第i个单元的输入单元总的加权和表示为: 例如: 所以: 进一步简写:zi(l ) 稀疏自动编码器(Sparse Autoencoder )反向传播算法(Backpropagation algorithm)输入: 损失函数: 其中,共m个训练集类似于加入正则化项(权重衰减项,weight decay),如下式: 稀疏自动编码器(Sparse Autoencoder )反向传播算法(Backpropagation algorithm) 详细推导步骤 首先,通过前向网络,计算每个神经元的激活值(activations),包括输出值: 其次,对于第L层的第i节点,计算其误差项: 对于输出节点, 有: 表示输出层推导见下一张PPT。 稀疏自动编码器(Sparse Autoencoder )反向传播算法(Backpropagation algorithm) 详细推导步骤 对于 ,有: 其中, 表示l+1层神经元个数如何得来的呢?推导过程:? i(l )( l ?1) ? z ?E ?E j ? (l ) ? ? (l ?1) ? (l ) ?zi ?zi j ?z j sl ?1(l ) ? [ w ? f ( z ? ji i )] ( l ?1) i ? ?? j ? ?zi(l ) j sl ?1 sl? ? (w ji ? ? (j l ?1) )?f ' ( zi(l ) )jsl ?1 稀疏自动编码器(Sparse Autoencoder )回到自编码自编码 设法学习到一个函数,使得:即:? ?x x 稀疏自动编码器(Sparse Autoencoder )为隐藏单元 j 的平均激活值?1 ? a1 如左图, ?(2)(2) (2) ?3 ? a3 ? 2 ? a2 ? ??j ? ? 一般强制约束 ?Why? 看下文? 是一个稀疏参数,一般取接近于0的值,比如0.05;也就是说,每个隐藏单元j的平均激活值接近于0.05。 稀疏自动编码器(Sparse Autoencoder )我们添加一个额外的惩罚项来最优化目标函数。 即: 该式的另外一个作用是:对 其中,KL散度公式: 左图中,? =0.2? j 偏离 ? 的程度进行惩罚 ?? ?? j =0.2 时,KL散度值达到最小,其值为0。 当 ? ? j 趋于0或1时,KL散度值趋于无穷大。 当 ?因此,为了使以上惩罚项最小,必须使得:?j ? ? ? 稀疏自动编码器(Sparse Autoencoder )因此,全局损失函数为:哎妈,这玩 意终于出来 了!!其中: 稀疏自动编码器(Sparse Autoencoder )为什么能稀疏? 1、减小编码后隐藏层神经元个数。比如,后一层比前一层神经元个数少。如果激活函数不使用sigmoid函数,而使用线性函数,就是PCA模型。2、隐藏层的任何一个神经元不应该总是高度激活 。通过设置 ? 的值充分小,一般接近于0,比如0.01等。?j ? ? 为使KL散度尽可能小,则: ?从而使得类似于右图中的神经元 激活值较小,处于抑制状态。(2) (2) a1(2) a2 a3小 稀疏自动编码器(Sparse Autoencoder )部分代码:初始化前向计算各神经元的线 性组合值和激活值权值惩罚项 稀疏项 损失函数的总表达式 栈式自编码 (Stacked Autoencoder)栈式自编码神经网络是一个由多层稀疏自编码器组成的神经网络,其前 一层自编码器的输出作为其后一层自编码器的输入。采用逐层贪婪训练法进行训练,获取栈式自编码神经网络参数。 栈式自编码在预训练(初始化)深度神经网络的权重使用较多按照从前向后的顺序执行每一层自编码器的编码步骤:a (l ) ? f ( z (l ) )z (l ?1) ? W (l ,1) a(l ) ? b(l ,1)其中, a 通过将(n)是最深层隐藏单元的激活值,这个向量是对输入值的更高阶的表示。 作为softmax分类器的输入特征,可以网络中学的特征用于分类问题。a (n) 栈式自编码 (Stacked Autoencoder)具体实例训练一个包含两个隐含层的栈式自编码网络,用来进行MNIST手写数字分类。 首先,你需要用原始输入x(k )(1)然后,你再用这些一阶特征作为另 一个稀疏自编码器的输入,使用它 们来学习二阶特征 hk(2)训练第一个自编码器,它能够学习 得到原始输入的一阶特征表示 hk 栈式自编码 (Stacked Autoencoder)接下来,你可以把这些二阶特征作 为softmax分类器的输入,训练得到 一个能将二阶特征映射到数字标签 的模型。 最终,你可以将这三层结合起来构建一个 包含两个隐藏层和一个最终softmax分类 器层的栈式自编码网络,这个网络能够如 你所愿地对MNIST数字进行分类。 栈式自编码 (Stacked Autoencoder)本节小结栈式自编码神经网络具有强大的表达能力及深度神经网络的所有优点。 更进一步,它通常能够获取到输入的“层次型分组”或者“部分-整体分解” 结构。自编码器倾向于学习得到能更好地表示输入数据的特征。 举个例子,如果网络的输入数据是图像,网络的第一层会学习如何去识别边,第二层一般会学习如何去组合边,从而构成轮廓、角等。更高层会学习如何去组合更形象且有意义的特征。例如,如果输入数据集 包含人脸图像,更高层会学习如何识别或组合眼睛、鼻子、嘴等人脸器官。 去噪自编码(Denoising Autoencoder)x:为输入值? :通过对x随机映射或添加噪声而获得 x? ? qD (x|x) ? x? y ? f? (x)z ? g? ' ( y)训练指导思想:最小化LH (x,z)d k ?1其中,L H (x,z) = -?[ xk log zk ? (1 ? xk ) log(1 ? zk )]信息熵+KL散度 去噪自编码(Denoising Autoencoder)噪声的两个来源:1、来自于样本中选择的训练数据集x? 2、对数据集x的随机破坏(或添加噪声),从而获得 x 去噪自编码(Denoising Autoencoder)流形学习观点x : 图 中 的 红十字 , 分布在低维流形附近。? C(x|x):破损处理,灰色的圈代表 等概率的破损DAE 训练最小化均方误差:? )) ? x g( f ( x2学习一个向量场(绿色的箭头) ? )) ? x g( f ( x DAE用于从破损的? 重建干净的数据 x x向量场用于估计一个梯度场 ? (log Q ( x)) ?x其中,Q(x)是未知的数据分布 去噪自编码(Denoising Autoencoder)学习一个向量场用于估计梯度场g( f ( x))用于估计梯度场? (log Q( x)) ?x这个属性在以下前提条件下已被证明(Alain and Bengio, )? x是连续值,损坏(添加噪声)和重建分布都服从高斯分布? )) ? x ? 均方误差: g( f ( x2? ?x ? | x) ? N ( x ?; ? ? x, ? ? ? 2 I ) ? 破损处理服从以下分布:C( X更准确地说,g( f ( x)) ? x?2? (log Q ( x)) 一个相容估计,即: 是 ?x ? ? (log Q( x)) ?xg( f ( x)) ? x?2 去噪自编码(Denoising Autoencoder)1、图中每个箭头长度正比于:重建 值减去自编码的输入矢量; 2、方向:根据隐含估计的概率分布 指向更高的概率值; 3、注意:估计密度函数的顶峰(数据流形上)和低谷(局部最小)向量场为零值。 去噪自编码(Denoising Autoencoder)将梯度场变成一个生成模型编码-解码对的应用可以给我们生成一个大概的结构,如果我们考虑蒙特卡罗 马尔科夫链算法 (MCMC),两方面需要注意: 1、从低概率结构转移到高概率结构2、加入随机性,使得链可到处转移(不至于在一些概率或模型的顶峰被困住,陷入局部最优?),并且有机会遍历整个空间,使得概率等于潜 在模型的概率 从概念上的理解,我们在做编码解码操作时,需要加入噪声,但加入多少? 怎么加合适呢?(But how much and how?) 下页将作出解释 去噪自编码(Denoising Autoencoder)答案在:Bengio et al. (2013) (Theorem 1) 从估计分布中产生马尔科夫链的步骤:? (a)在x中加入噪声, 产生 x(b)使用f函数对x进行编码 (c)使用g函数进行解码? ))) (d)从重建的分布 P( X | ? ? g ( f ( x中进行采样获得一个新的状态 xt+1图中,C 和P 是条件随机的,f 和g 是确定性计算。? )是相关的真值条件分布 的 一个相容估计, 理论表明,自编码 P( X | X然而,以上马尔科夫链的平稳分布是X 的数据生成分布 的 一个相容估计。 去噪自编码(Denoising Autoencoder)图中数据(黑圈)分布在低维流形 (螺旋线)的附近 x: 绿色的圆圈 代表狗的真实图像值。? : 蓝色的圆圈 代表添加噪声后狗的 x 图像值。? | x) : 代表各向同性(等概率?) C( x高斯噪声,图中的绿色。 马尔科夫链的两个随机步骤:? | x) 将x变换成 x 1、通过C ( x ??) 2、在降噪后重建的分布中 P( x | x对下一个状态进行采样。说明:? , x分布在 x ? 附近的流形上。 x有很多种可能,取决于 x? ) 的表示结果 图中,蓝色的扁平形状就是 P( x | x 去噪自编码(Denoising Autoencoder)本节小结去噪自动编码器DA是在自动编码器的基础上,训练数据加入噪声, 所以自动编码器必须学习去去除这种噪声而获得真正的没有被噪声 污染过的输入。 因此,这就迫使编码器去学习输入信号的更加鲁棒的表达,这也 是它的泛化能力比一般编码器强的原因。 压缩自编码(Contrative Autoencoder)引言好的特征表示大致有2个衡量标准:1. 可以很好的重构出输入数据; 2.对输入数据一定程度下的扰动具有不变形。 普通的autoencoder、sparse autoencoder和stacked autoencoder主要是符合第一个标准。而deniose autoencoder和contractive autoencoder则主要体现在第二个。在一些分类任务中,第二个标准显得更重要。 压缩自编码(Contrative Autoencoder)普通自编码:压缩自编码:雅克比矩阵: 其中,When Sigmoid, 压缩自编码(Contrative Autoencoder)CAE与正则化自编码(即weight decay)的关系对于, 1、当线性编码,并且sf为恒等函数时,有:J AE ?wd ? JCAE此时,使权值W尽量小是收缩的唯一方法。 2、当sf为 sigmoid 函数时,通过使隐藏节点达到饱和状态,也能达到收缩和编码的健壮性。如何解释?Sigmoid函数曲线 压缩自编码(Contrative Autoencoder)CAE与稀疏自编码的关系自编码时,使用稀疏特性的目的在于:使得编码层输出值大部分趋于0。 使用sigmoid激活函数时,为使编码层输出值 (特征值)趋于0,必须尽可能的离开函数曲线 的饱和部分。见图中的左下角。 可以看出,值很小,并且曲线基本是水平的, 因此,下面式子必然较小。Sigmoid函数曲线所以,稀疏自编码中,很多趋近于0的特征输出值可以理解为一个高度 压缩映射(contractive mapping)。 压缩自编码(Contrative Autoencoder)与DAE相比,CAE的优势:CAE很明确的一个目的就是对f(x)进行健壮的表示;DAE是对 ( g。f )( x) 进行 健壮性的重构,对f(x)的健壮表示是部分的或者间接的。在特征抽取方面,因为编码输出(h(x))才是我们提取的特征,我们使用编码 部分用于分类,健壮的抽取特征比健壮的重构更加的重要。因此,CAE相比DAE是一个更好的选择。DAE是通过对输入添加随机噪声,经过编码解码来获得健壮的重构;而CAE对 扰动的健壮性是通过惩罚 雅克比矩阵F范数各元素的和得到。CAE抓住内部因素 提高特征提取健壮性,DAE通过外部因素提高特征提取健壮性。 Thank you!
All rights reserved Powered by
www.tceic.com
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。

我要回帖

更多关于 堆栈卷积自编码 的文章

 

随机推荐