4. Stacked AutoEncoder(堆栈自动编码器)
1. AutoEncoder介绍
2. Applications of AutoEncoder in NLP
3. Recursive Autoencoder(递归自动编码器)
4. Stacked AutoEncoder(堆栈自动编码器)
1. 前言
深度学习的威力在于其能够逐层地学习原始数据的多种表达方式。每一层都以前一层的表达特征为基础,抽取出更加抽象,更加适合复杂的特征,然后做一些分类等任务。
堆叠自编码器(Stacked Autoencoder,SAE)实际上就是做这样的事情,如前面的自编码器,稀疏自编码器和降噪自编码器都是单个自编码器,它们通过虚构一个\(x->h->x\)的三层网络,能过学习出一种特征变化\(h = f(wx+b)\)。实际上,当训练结束后,输出层已经没有什么意义了,我们一般将其去掉,即将自编码器表示为:
2. SAE原理
之前之所以将自编码器模型表示为3层的神经网络,那是因为训练的需要,我们将原始数据作为假想的目标输出,以此构建监督误差来训练整个网络。等训练结束后,输出层就可以去掉了,因为我们只关心的是从\(x\)到\(h\)的变换。
接下来的思路就很自然了,我们已经得到特征表达\(h\),那么我们可不可以将\(h\)再作为原始信息,训练一个新的自编码器,得到新的特征表达呢?当软可以,而且这就是所谓的堆叠自编码器(Stacked Autoencoder,SAE)。Stacked就是逐层堆叠的意思,这个跟“栈”有点像。当把多个自编码器Stack起来之后,这个系统看起来就像这样:
2.1 第一层AE
这样就把自编码器改成了深度结构了,即《learning multiple levels of representation and abstraction》(Hinton, Bengio, LeCun, 2015)。需要注意的是,整个网络的训练不是一蹴而就的,而是逐层进行的。比如说我们要训练一个\(n -> m -> k\) 结构的网络,实际上我们是先训练网络\(n -> m -> n\),得到\(n -> m\)的变换,然后再训练\(m -> k -> m\)网络,得到\(m -> k\)的变换。最终堆叠成SAE,即为\(n -> m -> k\)的结果,整个过程就像一层层往上面盖房子,这就是大名鼎鼎的 layer-wise unsuperwised pre-training (逐层非监督预训练)。
接下来我们来看一个具体的例子,假设你想要训练一个包含两个隐藏层的堆叠自编码器,用来训练 MNIST 手写数字分类。
首先,你需要用原始输入\(x(k)\)训练第一个稀疏自编码器中,它能够学习得到原始输入的一阶特征表示\(h(1)(k)\),如下图所示:
2.2 第二层AE
接着,你需要把原始数据输入到上述训练好的稀疏自编码器中,对于每一个输入\(x(k)\),都可以得到它对应的一阶特征表示\(h(1)(k)\)。然后你再用这些一阶特征作为另一个稀疏自编码器的输入,使用它们来学习二阶特征\(h(2)(k)\),如下图:
2.3 第三层
同样,再把一阶特征输入到刚训练好的第二层稀疏自编码器中,得到每个\(h(1)(k)\)对应的二阶特征激活值$h(2)(k) $。接下来,你可以把这些二阶特征作为softmax分类器的输入,训练得到一个能将二阶特征映射到数字标签的模型。如下图:
2.4 组合
最终,你可以将这三层结合起来构建一个包含两个隐藏层和一个最终softmax分类器层的堆叠自编码网络,这个网络能够如你所愿地对MNIST数据集进行分类。最终模型如下图:
3. 总结
为什么逐层预训练的SAE有不错的效果?一个直观的解释是,预训练好的网络在一定程度上拟合了训练数据的结构,这使得整个网络的初始值是在一个合适的状态,便于有监督阶段加快迭代收敛。当然,有不少研究提出了很好的初始化策略,再加上现在常用的dropout、ReLU,直接去训练一个深层网络已经不是问题。
最后,多说一句,除了AE和SAE这种逐层预训练的方式外,还有另外一条类似的主线,即限制玻尔兹曼机(RBM)与深度信念网络(DBN)。
4. Stacked AutoEncoder(堆栈自动编码器)的更多相关文章
- 栈式自动编码器(Stacked AutoEncoder)
起源:自动编码器 单自动编码器,充其量也就是个强化补丁版PCA,只用一次好不过瘾. 于是Bengio等人在2007年的 Greedy Layer-Wise Training of Deep Netw ...
- matlab 实现 stacked Autoencoder 解决图像分类问题
Train Stacked Autoencoders for Image Classification 1. 加载数据到内存 [train_x, train_y] = digitTrainCellAr ...
- 论文翻译:2018_Artificial Bandwidth Extension with Memory Inclusion using Semi-supervised Stacked Auto-encoders
论文地址:使用半监督堆栈式自动编码器实现包含记忆的人工带宽扩展 作者:Pramod Bachhav, Massimiliano Todisco and Nicholas Evans 博客作者:凌逆战 ...
- 3. Recursive AutoEncoder(递归自动编码器)
1. AutoEncoder介绍 2. Applications of AutoEncoder in NLP 3. Recursive Autoencoder(递归自动编码器) 4. Stacked ...
- 降噪自动编码器(Denoising Autoencoder)
起源:PCA.特征提取.... 随着一些奇怪的高维数据出现,比如图像.语音,传统的统计学-机器学习方法遇到了前所未有的挑战. 数据维度过高,数据单调,噪声分布广,传统方法的“数值游戏”很难奏效.数据挖 ...
- 9.1、AutoEncoder自动编码器[转]
如果给定一个神经网络,我们假设其输出与输入是相同的,然后训练调整其参数,得到每一层中的权重.自然地,我们就得到了输入I的几种不同表示(每一层代表一种表示),这些表示就是特征.自动编码器就是一种尽可能复 ...
- 2. AutoEncoder在NLP中的应用
1. AutoEncoder介绍 2. Applications of AutoEncoder in NLP 3. Recursive Autoencoder(递归自动编码器) 4. Stacked ...
- 1. AutoEncoder介绍
1. AutoEncoder介绍 2. Applications of AutoEncoder in NLP 3. Recursive Autoencoder(递归自动编码器) 4. Stacked ...
- 堆叠式降噪自动编码器(SDA)
1.1 自动编码器 自动编码器(AutoEncoder,AE)就是一种尽可能复现输入信号的神经网络,其输出向量与输入向量同维,常按照输入向量的某种形式,通过隐层学习一个数据的表示或对原始数据进行有效 ...
随机推荐
- 【Oracle】详解ORACLE中的trigger(触发器)
本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2. ...
- hibernate的findByExample 外键参数查询解决方案
用了这么长时间的hibernate/spring,如果不是今天用的findByExample方法到现在还不知道findByExample的机制.惭愧 Class User{String usernam ...
- Visual C++中的TCHAR
为了使代码兼容ASCII码和Unicode编码,微软公司还提供了通用字符类型TCHAR. 通用字符类型的含义是,假设在项目属性中选择"Unicode字符集".则TCHAR代表WCH ...
- CTreeCtrl获得鼠标点击时的节点
原文链接: http://blog.csdn.net/lcalqf/article/details/21321923 1.添加图标 HICON icon[10]; icon[0]=AfxGetApp( ...
- Groovy 学习手册(7)
10. Groovy GPars GPars 一开始在 Groovy 中作为一个单独的项目,同时带来了很多并发的机制.它包含了很多并行的map/redue,Actors,以及其他很多并发的模块. 1. ...
- labview程序性能优化
课时15: 中级08:LabVIEW运行性能(作者:NI应用工程师 李甫成) 一.避免强制类型转换 二.防止内存泄漏 三.将vi的一部分转化为子vi 四轴项目中所占内存对比,变为子vi后执行速度也快了 ...
- MySql(十四):MySql架构设计——可扩展性设计之数据切分
一.前言 通过 MySQL Replication 功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我们还是会面临到扩展瓶颈.这时候,我 ...
- Android 4.1的新特性介绍
原文:http://android.eoe.cn/topic/summary 果冻豆 - Android 4.1 通知系统 - Notifications 在Android 4.1系统上通知的功能大大 ...
- 关于Java Webproject中web.xml文件
提及Java Webproject中web.xml文件无人不知,无人不识,呵呵呵:系统首页.servlet.filter.listener和设置session过期时限.张口就来,但是你见过该文件里的e ...
- 关于android fragment 某些使用记录
1.首先是当android2.3.3之前还是用着android-support-v4.jar来加载Fragment时. a.在xml布局应该如何定义呢? 答案:用FrameLayout标签来定义(在a ...