1.1 自动编码器(AutoEncoder,AE)

自动编码器(AutoEncoder,AE)就是一种尽可能复现输入信号的神经网络,其输出向量与输入向量同维,常按照输入向量的某种形式,通过隐层学习一个数据的表示或对原始数据进行有效编码。值得注意的是,这种自编码器是一种不利用类标签的非线性特征提取方法, 就方法本身而言, 这种特征提取的目的在于保留和获得更好的信息表示, 而不是执行分类任务,尽管有时这两个目标是相关的。

一个典型的最简单的自动编码器拥有一个表示原始数据或者输入特征向量的输入层,一个表示特征转换的隐层和一个跟输入层匹配、 用于信息重构的输出层,如图一所示。当隐层数目大于 1 时, 自动编码器就被视为深层结构,我们称其为堆叠式自动编码器,而我们通常所说的自动编码器指的都是隐层数为1层的结构。自动编码器的主要目标是让输入值和输出值相等,所以首先用W1W_1W1​对输入进行编码,经过激活函数后,再用W2W_2W2​进行解码,而编码层和解码层的权重 W1W_1W1​、W2W_2W2​通常取为互为转置矩阵,即W2=W1TW_2=W_1^TW2​=W1T​,这便是自动编码器的核心思想:先编码,后解码,前后保持不变。


图一自动编码器结构图一 \ 自动编码器结构图一 自动编码器结构

除了上述介绍的最典型的自动编码器结构,还有其他几种自动编码器的变形结构。例如,如果自动编码器的基础上加上L1的正规性限制(L1主要是约束每一层中的节点中大部分都要为0,只有少数不为0,这就是Sparse名字的来源),我们就可以得到稀疏自动编码器(SAE,Sparse AutoEncoder)。还有,如果在自动编码器上加入了一个规则项,使其对权重值进行惩罚,就得到了收缩自动编码器(CAE,Contractive AutoEncoder)。此外,如果在网络的可视层(即数据的输入层)引入随机噪声,然后再进行编解码来恢复输入层的数据或特征,就得到了降噪自动编码器(DAE,Denoise AutoEncoder)

单隐层的自动编码器,充其量也就是个强化补丁版PCA(主成分分析),只用一次好不过瘾。于是Bengio等人在2007年的 “Greedy Layer-Wise Training of Deep Networks”一文中,仿照堆叠受限玻尔兹曼机(RBM)来构成深度置信网络(DBN)的方法,提出堆叠式自动编码器(Stacked AutoEncoder)。接下来,就将对其中的堆叠式降噪自动编码器(Stacked Denoise AutoEncoder)进行详细地分析。

1.2 堆叠式降噪自动编码器(Stacked Denoise AutoEncoder,SDAE)

对于单隐层的自动编码器,通常利用反向传播算法的诸多变种之一来进行训练(其中最典型的方法是随机梯度下降法), 就可以取得非常有效的结果。但是,如果仍将其应用于多隐层的网络中,反向传播的训练方法就会产生一些问题:通过最初的几层后, 误差会变得极小, 训练也随之变得无效。尽管更多先进的反向传播方法一定程度上缓解了这一问题, 但依然无法解决学习速度缓慢的问题,尤其是当训练数据量有限时, 该问题更为明显。 正如前面所提到的,如果可以通过把每一层当作一个简单的自解码器来进行预训练,然后再进行堆叠,那么训练效率就会得到大大地提高。正如图二所示,先对每个单隐层的降噪自动编码器单元进行无监督预训练,然后再进行堆叠,最后进行整体的反向调优训练,就得到了一个两层隐藏层结构的堆叠式降噪自动编码器。

图二堆叠式降噪自动编码器结构图二\ 堆叠式降噪自动编码器结构图二 堆叠式降噪自动编码器结构
下面详细介绍一下构建上述两层隐藏层结构的降噪自动编码器的具体步骤。

  • 首先对第一个DA单元进行预训练,其中X^\hat XX^为恢复后的输入数据或特征,XXX为未被噪声污染的原始输入数据或特征,yyy为被噪声污染后的输入数据或特征,σ(⋅)\sigma(\cdot)σ(⋅)为sigmoid函数:

    图三对第一个DA单元进行预训练图三 \ 对第一个DA单元进行预训练图三 对第一个DA单元进行预训练
  • 第一个自动编码器的输出可以表示如下:
    h(y)=σ(W1y,b1)h(y)=\sigma(W_1y,b_1)h(y)=σ(W1​y,b1​)
    X^=W1Th(y)+b2\hat X=W_1^Th(y)+b_2X^=W1T​h(y)+b2​
    采用最小均方差作为代价函数,且利用梯度下降的方法进行权重值W和偏置值b的更新:
    J(W1,b1,b2)=∑in∣∣Xi−X^i∣∣22J(W_1,b_1,b_2)=\sum^{n}_{i}||X_i-\hat X_i||_2^2J(W1​,b1​,b2​)=i∑n​∣∣Xi​−X^i​∣∣22​
    (W1,b1,b2)←argmin(J(W1,b1,b2))(W_1,b_1,b_2)\leftarrow arg\ min(J(W_1,b_1,b_2))(W1​,b1​,b2​)←arg min(J(W1​,b1​,b2​))
    其中梯度下降法的具体计算方式如下:
    W1T:ΔWi,j=ϵ⋅∂J∂X^i⋅∂X^i∂Wi,jW_1^T:\Delta W_{i,j}=\epsilon\cdot \frac {\partial J}{\partial \hat X_i}\cdot\frac {\partial \hat X_i}{\partial W_{i,j}}W1T​:ΔWi,j​=ϵ⋅∂X^i​∂J​⋅∂Wi,j​∂X^i​​
    b2:Δbi=ϵ⋅∂J∂X^i⋅∂X^i∂bib_2:\Delta b_i=\epsilon\cdot \frac {\partial J}{\partial \hat X_i}\cdot\frac {\partial \hat X_i}{\partial b_i}b2​:Δbi​=ϵ⋅∂X^i​∂J​⋅∂bi​∂X^i​​
    b1:Δbi=ϵ⋅∂J∂X^i⋅∂X^i∂h(y)⋅∂h(y)∂bib_1:\Delta b_i=\epsilon\cdot \frac {\partial J}{\partial \hat X_i}\cdot\frac {\partial \hat X_i}{\partial h(y)}\cdot\frac {\partial h(y)}{\partial b_i}b1​:Δbi​=ϵ⋅∂X^i​∂J​⋅∂h(y)∂X^i​​⋅∂bi​∂h(y)​     
    预训练完毕后,去掉输出层及其相应的权重和偏置,只保留输入层和隐藏层的W1W_1W1​和b1b_1b1​即可。然后将第一个DA单元的隐藏层作为第二个DA单元的输入,进行第二个DA单元的预训练如下所示:

图四对第二个DA单元进行预训练图四\ 对第二个DA单元进行预训练图四 对第二个DA单元进行预训练

  • 第二个降噪自动编码器的输出可以表示如下:
    h(h(y))=σ(W2h(y),b2)h(h(y))=\sigma(W_2h(y),b_2)h(h(y))=σ(W2​h(y),b2​)
    h(X^)=W2Th(h(y)+b3)h(\hat X)=W_2^Th(h(y)+b_3)h(X^)=W2T​h(h(y)+b3​)
    采用最小均方差作为代价函数,且利用梯度下降的方法进行权重值W和偏置值b的更新:
    J(W2,b2,b3)=∑in∣∣h(Xi)−h(X^i)∣∣22J(W_2,b_2,b_3)=\sum^{n}_{i}||h(X_i)-h(\hat X_i)||_2^2J(W2​,b2​,b3​)=i∑n​∣∣h(Xi​)−h(X^i​)∣∣22​
    (W2,b2,b3)←argmin(J(W2,b2,b3))(W_2,b_2,b_3)\leftarrow arg\ min(J(W_2,b_2,b_3))(W2​,b2​,b3​)←arg min(J(W2​,b2​,b3​))
    其中梯度下降法的具体计算方式如下:
    W2T:ΔWi,j=ϵ⋅∂J∂h(X^i)⋅∂h(X^i)∂Wi,jW_2^T:\Delta W_{i,j}=\epsilon\cdot \frac {\partial J}{\partial h(\hat X_i)}\cdot\frac {\partial h(\hat X_i)}{\partial W_{i,j}}W2T​:ΔWi,j​=ϵ⋅∂h(X^i​)∂J​⋅∂Wi,j​∂h(X^i​)​
    b3:Δbi=ϵ⋅∂J∂h(X^i)⋅∂h(X^i)∂bib_3:\Delta b_i=\epsilon\cdot \frac {\partial J}{\partial h(\hat X_i)}\cdot\frac {\partial h(\hat X_i)}{\partial b_i}b3​:Δbi​=ϵ⋅∂h(X^i​)∂J​⋅∂bi​∂h(X^i​)​
    b2:Δbi=ϵ⋅∂J∂h(X^i)⋅∂h(X^i)∂h(h(y))⋅∂h(h(y))∂bib_2:\Delta b_i=\epsilon\cdot \frac {\partial J}{\partial h(\hat X_i)}\cdot\frac {\partial h(\hat X_i)}{\partial h(h(y))}\cdot\frac {\partial h(h(y))}{\partial b_i}b2​:Δbi​=ϵ⋅∂h(X^i​)∂J​⋅∂h(h(y))∂h(X^i​)​⋅∂bi​∂h(h(y))​

  • 第二个DA单元预训练完毕后,去掉其输出层和相应的权重和偏置,只保留输入层和隐藏层的W2W_2W2​和b2b_2b2​,并将其堆叠在第一个DA单元上即可。最后,再第二个DA单元的隐藏层之上添加一层输出层(对输出层的权重值W3W_3W3​和b3b_3b3​偏置进行随机初始化即可),进行解码恢复。

  • 两个DA单元的预训练完毕后,最后要进行的是整体的反向调优训练。调优训练的代价函数也可以采用上述提到的代价函数,并利用梯度下降法自顶到底(预训练时的反向误差传播只有两层,而这里的误差反向传播为三层)进行权重和偏置值的更新。

参考文献:

  1. 文章:Li Deng, A tutorial survey of architectures, algorithms, and applications for deep learning, (2014,APSIPA Transactions on Signal and Information Processing)
  2. 博客:《自动编码器》,网址:https://www.cnblogs.com/taojake-ML/p/6475422.html

堆叠式降噪自动编码器(SDA)相关推荐

  1. 自编码器/堆叠式自编码器(SAE)

    自编码器( Auto-Encoder,AE) 定义: 通过将输入信息作为学习目标,对输入信息进行表征学习 (representation learning).(将原始数据转换成为能够被机器学习来有效开 ...

  2. 堆叠式传感器架构带来先进的视觉功能

    堆叠式传感器架构带来先进的视觉功能 Stacked sensor architecture brings advanced vision capabilities 巴黎-巴黎Prophesee公司是神 ...

  3. 8.QML Qt Quick Controls 2中常用的界面形式——堆叠式界面(StackView)

    堆叠式界面的实现的核心组件就是StackView.StackView是一个基于栈的导航浏览模型,可以与一组关联的页面一起使用.当用户浏览深层页面时,深层页面被推到栈顶,当用户选择返回时,之前浏览的页面 ...

  4. python 降噪_使用降噪自动编码器重建损坏的数据(Python代码)

    python 降噪 Autoencoders aren't too useful in practice, but they can be used to denoise images quite s ...

  5. Bootstrap 堆叠式导航

    默认情况下,标签导航和胶囊式导航都是水平排列的.只需再给导航列表额外添加一个 .nav-stacked 类,就可以让导航垂直堆叠排列.如,堆叠式标签导航: <ul class="nav ...

  6. theano学习指南5(翻译)- 降噪自动编码器

    降噪自动编码器是经典的自动编码器的一种扩展,它最初被当作深度网络的一个模块使用 [Vincent08].这篇指南中,我们首先也简单的讨论一下自动编码器. 自动编码器 文献[Bengio09] 给出了自 ...

  7. 堆叠式神经网络模型及GUI可视化应用

    Illustrations by Stas Yurev ♚ 作者:沂水寒城,CSDN博客专家,个人研究方向:机器学习.深度学习.NLP.CV Blog: http://yishuihancheng.b ...

  8. 堆叠降噪自动编码器 Stacked Denoising Auto Encoder(SDAE)

    原文链接 自动编码器(Auto-Encoder,AE) 自动编码器(Auto-Encoder,AE)自编码器(autoencoder)是神经网络的一种,经过训练后能尝试将输入复制到输出.自编码器内部有 ...

  9. bootstrap4侧边栏_如何使用纯CSS和Bootstrap 4构建多个堆叠式粘性侧边栏

    bootstrap4侧边栏 In this tutorial you'll work on building multiple sticky sidebars that stack without u ...

最新文章

  1. (转载)新年——顺民的牢骚
  2. codeforces524E
  3. 阿里P9架构师讲解从单机至亿级流量大型网站系统架构的演进过程
  4. [NOI2013]快餐店
  5. css2.1中 firefox 与IE 对margin-top的不同解释
  6. Sharepoin学习笔记 —架构系列--02 Sharepoint的处理(Process)与执行模型(Trust Model) 1
  7. (斜率,点和线段)zzuli1196数星星(二)
  8. Java 判断目录是否为空
  9. 年度大战即将拉开!iPhone 11系列后,轮到华为Mate30系列表演了
  10. CodeFirst 表之间的关联
  11. QtCreator中导入“.lib(.a)”和“.dll(.so)”文件的方法
  12. SpringBoot Unable to find a @SpringBootConfiguration, you need to use....
  13. 2006年 上半年 网络管理员 下午试卷
  14. eclipse 设置虚拟机内存(可用)
  15. javascript的笔记精简版
  16. Vue上传文件之后显示文件内容
  17. (CSCD 理工科)中文科技核心期刊汇总
  18. 如何测试网站服务器安全性,怎么检测网站安全性?
  19. (二十一)查询我的订单
  20. 卷积神经网络学习路线(二十一) | 旷世科技 ECCV 2018 ShuffleNet V2

热门文章

  1. 1027. MJ, Nowhere to Hide
  2. php 获取首字母,PHP_php 获得汉字拼音首字母的函数,php获取汉字拼音的第一个字母 - phpStudy...
  3. video视频播放截图, 跨域问题
  4. 你必须知道的推广渠道及投放效果指标
  5. [Greenfoot中文教程] 自序 – Greenfoot WWWWW
  6. 为什么程序员是吃青春饭的但还是这么多想当程序员的?
  7. du 查看使用 linux命令,Linux命令(17)du 查看文件和目录磁盘使用情况
  8. oracle 112040,Oracle 11.2.0.4 For Linux 64bit+32bit 11Gu4数据库介质百度云
  9. Oracle显示表裂开,【案例】Oracle RAC脑裂导致节点重启原因分析
  10. 40岁老程序员失业半年,内心崩溃要哭了,能从C语言转JAVA吗?