栈式自编码算法

Contents

[hide]

  • 1概述
  • 2训练
  • 3具体实例
  • 4讨论
  • 5中英文对照
  • 6中文译者

概述

逐层贪婪训练法依次训练网络的每一层,进而预训练整个深度神经网络。在本节中,我们将会学习如何将自编码器“栈化”到逐层贪婪训练法中,从而预训练(或者说初始化)深度神经网络的权重。

栈式自编码神经网络是一个由多层稀疏自编码器组成的神经网络,其前一层自编码器的输出作为其后一层自编码器的输入。对于一个 层栈式自编码神经网络,我们沿用自编码器一章的各种符号,假定用 表示第 个自编码器对应的 参数,那么该栈式自编码神经网络的编码过程就是,按照从前向后的顺序执行每一层自编码器的编码步骤:

同理,栈式神经网络的解码过程就是,按照从后向前的顺序执行每一层自编码器的解码步骤:

其中, 是最深层隐藏单元的激活值,其包含了我们感兴趣的信息,这个向量也是对输入值的更高阶的表示。

通过将 作为softmax分类器的输入特征,可以将栈式自编码神经网络中学到的特征用于分类问题。

训练

一种比较好的获取栈式自编码神经网络参数的方法是采用逐层贪婪训练法进行训练。即先利用原始输入来训练网络的第一层,得到其参数 ;然后网络第一层将原始输入转化成为由隐藏单元激活值组成的向量(假设该向量为A),接着把A作为第二层的输入,继续训练得到第二层的参数;最后,对后面的各层同样采用的策略,即将前层的输出作为下一层输入的方式依次训练。

对于上述训练方式,在训练每一层参数的时候,会固定其它各层参数保持不变。所以,如果想得到更好的结果,在上述预训练过程完成之后,可以通过反向传播算法同时调整所有层的参数以改善结果,这个过程一般被称作“微调(fine-tuning)”。

实际上,使用逐层贪婪训练方法将参数训练到快要收敛时,应该使用微调。反之,如果直接在随机化的初始权重上使用微调,那么会得到不好的结果,因为参数会收敛到局部最优。

如果你只对以分类为目的的微调感兴趣,那么惯用的做法是丢掉栈式自编码网络的“解码”层,直接把最后一个隐藏层的 作为特征输入到softmax分类器进行分类,这样,分类器(softmax)的分类错误的梯度值就可以直接反向传播给编码层了。

具体实例

让我们来看个具体的例子,假设你想要训练一个包含两个隐含层的栈式自编码网络,用来进行MNIST手写数字分类(这将会是你的下一个练习)。首先,你需要用原始输入 训练第一个自编码器,它能够学习得到原始输入的一阶特征表示(如下图所示)。

接着,你需要把原始数据输入到上述训练好的稀疏自编码器中,对于每一个输入,都可以得到它对应的一阶特征表示。然后你再用这些一阶特征作为另一个稀疏自编码器的输入,使用它们来学习二阶特征。(如下图所示)

同样,再把一阶特征输入到刚训练好的第二层稀疏自编码器中,得到每个 对应的二阶特征激活值。接下来,你可以把这些二阶特征作为softmax分类器的输入,训练得到一个能将二阶特征映射到数字标签的模型。

如下图所示,最终,你可以将这三层结合起来构建一个包含两个隐藏层和一个最终softmax分类器层的栈式自编码网络,这个网络能够如你所愿地对MNIST数字进行分类。

讨论

栈式自编码神经网络具有强大的表达能力及深度神经网络的所有优点。

更进一步,它通常能够获取到输入的“层次型分组”或者“部分-整体分解”结构。为了弄清这一点,回顾一下,自编码器倾向于学习得到能更好地表示输入数据的特征。因此,栈式自编码神经网络的第一层会学习得到原始输入的一阶特征(比如图片里的边缘),第二层会学习得到二阶特征,该特征对应一阶特征里包含的一些模式(比如在构成轮廓或者角点时,什么样的边缘会共现)。栈式自编码神经网络的更高层还会学到更高阶的特征。

举个例子,如果网络的输入数据是图像,网络的第一层会学习如何去识别边,第二层一般会学习如何去组合边,从而构成轮廓、角等。更高层会学习如何去组合更形象且有意义的特征。例如,如果输入数据集包含人脸图像,更高层会学习如何识别或组合眼睛、鼻子、嘴等人脸器官。

中英文对照

自编码器 Autoencoder
逐层贪婪训练法 Greedy layer-wise training
预训练 PreTrain
栈式自编码神经网络 Stacked autoencoder
微调 Fine-tuning
原始输入 Raw inputs
层次型分组 Hierarchical grouping
部分-整体分解 Part-whole decomposition
一阶特征 First-order features
二阶特征 Second-order features
更高阶特征 Higher-order features
激活值 Activation
from: http://ufldl.stanford.edu/wiki/index.php/%E6%A0%88%E5%BC%8F%E8%87%AA%E7%BC%96%E7%A0%81%E7%AE%97%E6%B3%95

Stanford UFLDL教程 栈式自编码算法相关推荐

  1. Stanford UFLDL教程 微调多层自编码算法

    微调多层自编码算法 Contents [hide] 1介绍 2一般策略 3使用反向传播法进行微调 4中英文对照 5中文译者 介绍 微调是深度学习中的常用策略,可以大幅提升一个栈式自编码神经网络的性能表 ...

  2. 深度学习-栈式自编码算法

    http://deeplearning.stanford.edu/wiki/index.php/%E6%A0%88%E5%BC%8F%E8%87%AA%E7%BC%96%E7%A0%81%E7%AE% ...

  3. DDos攻击,使用深度学习中 栈式自编码的算法

    转自:http://www.airghc.top/2016/11/10/Dection-DDos/ 最近研究了一篇论文,关于检测DDos攻击,使用了深度学习中 栈式自编码的算法,现在简要介绍一下内容 ...

  4. Stanford UFLDL教程 主成分分析(PCA)

    Stanford UFLDL教程 主成分分析 Contents [hide] 1 引言 2 实例和数学背景 3 旋转数据 4 数据降维 5 还原近似数据 6 选择主成分个数 7 对图像数据应用PCA算 ...

  5. Stanford UFLDL教程 自编码算法与稀疏性

    自编码算法与稀疏性 目前为止,我们已经讨论了神经网络在有监督学习中的应用.在有监督学习中,训练样本是有类别标签的.现在假设我们只有一个没有带类别标签的训练样本集合 ,其中 .自编码神经网络是一种无监督 ...

  6. Stanford UFLDL教程 稀疏编码自编码表达

    稀疏编码自编码表达 Contents [hide] 1稀疏编码 2拓扑稀疏编码 3稀疏编码实践 3.1将样本分批为"迷你块" 3.2良好的s初始值 3.3可运行算法 4中英文对照 ...

  7. Stanford UFLDL教程 稀疏编码

    稀疏编码 Contents [hide] 1稀疏编码 2概率解释 [基于1996年Olshausen与Field的理论] 3学习算法 4中英文对照 5中文译者 稀疏编码 稀疏编码算法是一种无监督学习方 ...

  8. Stanford UFLDL教程 独立成分分析

    独立成分分析 Contents [hide] 1概述 2标准正交ICA 3拓扑ICA 4中英文对照 5中文译者 概述 试着回想一下,在介绍 稀疏编码算法中我们想为样本数据学习得到一个超完备基(over ...

  9. Stanford UFLDL教程 反向传播算法(BP算法)

    反向传播算法(BP算法) 假设我们有一个固定样本集 ,它包含  个样例.我们可以用批量梯度下降法来求解神经网络.具体来讲,对于单个样例,其代价函数为: 这是一个(二分之一的)方差代价函数.给定一个包含 ...

最新文章

  1. 2019年云计算发展状态
  2. Spring框架中ApplicationContext与BeanFactory的区别
  3. HCIE-Security Day32:IPSec:深入学习ipsec ikev1、主模式、野蛮模式、快速模式、dh算法、预共享密钥
  4. 现实竞争激烈,学透才能在职场做个风云人物,单片机存储器篇
  5. Combination Sum II - LeetCode
  6. 使用Bind配置DNS Load Balancing
  7. 石头科技财报背后:不甘再当小米打工仔?
  8. 程序员常去的14个顶级开发社区
  9. 椭圆曲线的加密算法解析和程序设计—基于python语言
  10. Sun jdk, Openjdk, Icedtea jdk关系
  11. 注册表编辑已经被您的系统管理员停用
  12. 小白学习Basemap气象画地图的第五天(读取micaps站点数据,省级能见度分布)
  13. 古人的智慧之回文诗——《两相思》
  14. c代码实现 ifft运算_X^n+1=0上的FFT和IFFT(基2)——C语言实现
  15. web前端培训JS 运行机制的梳理
  16. backbone.js_架构介绍
  17. 使用VPB生成OSG的.ive格式地形方法
  18. 【案例4-2】饲养员喂养动物
  19. 电容的等效串联电阻 ESR
  20. 【汇智学堂】-JS菜鸟版过河小游戏(之八---补充返程判断)

热门文章

  1. 10年前,三星差点收购了安卓
  2. Java-JDK动态代理
  3. 《数据结构》知识点Day_03
  4. python获取用户输入的数字_Python 将用户输入的数字 提取整数谢谢
  5. ros知识:关于catkin_init_workspace不能执行的错误
  6. halcon的算子清点: Chapter 5 滤波
  7. 类别选择器在HTML中如何表示,CSS类别选择器
  8. 5个很常用的CSS3网页小实例
  9. 查找_排序_思维导图
  10. 【深度学习】训练集、验证集、测试集