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(堆栈自动编码器)的更多相关文章

  1. 栈式自动编码器(Stacked AutoEncoder)

    起源:自动编码器 单自动编码器,充其量也就是个强化补丁版PCA,只用一次好不过瘾. 于是Bengio等人在2007年的  Greedy Layer-Wise Training of Deep Netw ...

  2. matlab 实现 stacked Autoencoder 解决图像分类问题

    Train Stacked Autoencoders for Image Classification 1. 加载数据到内存 [train_x, train_y] = digitTrainCellAr ...

  3. 论文翻译:2018_Artificial Bandwidth Extension with Memory Inclusion using Semi-supervised Stacked Auto-encoders

    论文地址:使用半监督堆栈式自动编码器实现包含记忆的人工带宽扩展 作者:Pramod Bachhav, Massimiliano Todisco and Nicholas Evans 博客作者:凌逆战 ...

  4. 3. Recursive AutoEncoder(递归自动编码器)

    1. AutoEncoder介绍 2. Applications of AutoEncoder in NLP 3. Recursive Autoencoder(递归自动编码器) 4. Stacked ...

  5. 降噪自动编码器(Denoising Autoencoder)

    起源:PCA.特征提取.... 随着一些奇怪的高维数据出现,比如图像.语音,传统的统计学-机器学习方法遇到了前所未有的挑战. 数据维度过高,数据单调,噪声分布广,传统方法的“数值游戏”很难奏效.数据挖 ...

  6. 9.1、AutoEncoder自动编码器[转]

    如果给定一个神经网络,我们假设其输出与输入是相同的,然后训练调整其参数,得到每一层中的权重.自然地,我们就得到了输入I的几种不同表示(每一层代表一种表示),这些表示就是特征.自动编码器就是一种尽可能复 ...

  7. 2. AutoEncoder在NLP中的应用

    1. AutoEncoder介绍 2. Applications of AutoEncoder in NLP 3. Recursive Autoencoder(递归自动编码器) 4. Stacked ...

  8. 1. AutoEncoder介绍

    1. AutoEncoder介绍 2. Applications of AutoEncoder in NLP 3. Recursive Autoencoder(递归自动编码器) 4. Stacked ...

  9. 堆叠式降噪自动编码器(SDA)

    1.1 自动编码器  自动编码器(AutoEncoder,AE)就是一种尽可能复现输入信号的神经网络,其输出向量与输入向量同维,常按照输入向量的某种形式,通过隐层学习一个数据的表示或对原始数据进行有效 ...

随机推荐

  1. 【Servlet】web.xml中url-pattern的用法

    目录结构: contents structure [+] url-pattern的三种写法 servlet匹配原则 filter匹配原则 语法错误的后果 参考文章 一.url-pattern的三种写法 ...

  2. 【struts2】struts2的execAndWait拦截器使用

    使用execAndWait拦截器可以在等待较长时间的后台处理中增加等待页面.实现如下图所示的效果: 1)struts.xml主要部分 <action name="test" ...

  3. 【Linux】字符转换命令expand

    这命令就是在将 [tab] 按键转成空格键: [root@www ~]# expand [-t] file 选项与参数: -t :后面可以接数字.一般来说,一个 tab 按键可以用 个空格键取代. 我 ...

  4. Python - 列表解析式/生成器表达式

    列表解析式: [expr for iter_var in iterable if cond_expr] 生成器表达式: (expr for iter_var in iterable if cond_e ...

  5. Python 文件 writelines() 方法

    概述 Python 文件 writelines() 方法用于向文件中写入一序列的字符串. 这一序列字符串可以是由迭代对象产生的,如一个字符串列表. 换行需要制定换行符 \n. 语法 writeline ...

  6. php分享二十四:数组

    1:isset() 对于数组中为 NULL 的值不会返回 TRUE,而 array_key_exists() 会. 2:利用array_filter和strlen快速过滤数组中等于0的值 $path ...

  7. 修复 dji spark 的 micro sd/tf 存储卡里不能正常播放的视频文件

    可能是因为 1.在没有正确的操作停止录像前,关掉了 spark 的电源 2.在 spark 没有完成视频存储前,关掉了 spark 的电源 总之在电脑里想查看存储卡里的视频时,发现居然无法播放,这就太 ...

  8. 使用Spring4时, 运行时出现找不到MappingJacksonHttpMessageConverter的情况

    启动项目报错: [org.springframework.web.context.ContextLoader]Context initialization failed org.springframe ...

  9. DDR3控制

    很简单的,app_en和app_rdy一握手,代表MIG接受了一个写数据请求或者读数据请求,只要保证app_en和app_rdy握手,根本就不关心写数据rdy,这是MIG的一个bug,你看它源码就知道 ...

  10. vivado 的调试工具ILA抓到的波形可以保存

    Vivado下debug后的波形通过图形化界面并不能保存抓取到波形,保存按钮只是保存波形配置,如果需要保存波形需要通过TCL命令来实现: write_hw_ila_data0730_ila_1 [up ...