堆叠式降噪自动编码器(SDA)
1.1 自动编码器
自动编码器(AutoEncoder,AE)就是一种尽可能复现输入信号的神经网络,其输出向量与输入向量同维,常按照输入向量的某种形式,通过隐层学习一个数据的表示或对原始数据进行有效编码。值得注意的是,这种自编码器是一种不利用类标签的非线性特征提取方法, 就方法本身而言, 这种特征提取的目的在于保留和获得更好的信息表示, 而不是执行分类任务,尽管有时这两个目标是相关的!
一个典型的最简单的自动编码器拥有一个表示原始数据或者输入特征向量的输入层,一个表示特征转换的隐层和一个跟输入层匹配、 用于信息重构的输出层,如图一所示。当隐层数目大于 1 时, 自动编码器就被视为深层结构,我们称其为堆叠式自动编码器,而我们通常所说的自动编码器指的都是隐层数为1层的结构。自动编码器的主要目标是让输入值和输出值相等,所以首先用对输入进行编码,经过激活函数后,再用进行解码,而编码层和解码层的权重 、通常取为互为转置矩阵,即,这便是自动编码器的核心思想:先编码,后解码,前后保持不变。
这里的深度学习实现了基本的 编码 激活 解码的过程
图一 自动编码器结构
除了上述介绍的最典型的自动编码器结构,还有其他几种自动编码器的变形结构。例如,如果自动编码器的基础上加上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 堆叠式降噪自动编码器
对于单隐层的自动编码器,通常利用反向传播算法的诸多变种之一来进行训练(其中最典型的方法是随机梯度下降法), 就可以取得非常有效的结果。但是,如果仍将其应用于多隐层的网络中,反向传播的训练方法就会产生一些问题:通过最初的几层后, 误差会变得极小, 训练也随之变得无效。尽管更多先进的反向传播方法一定程度上缓解了这一问题, 但依然无法解决学习速度缓慢的问题,尤其是当训练数据量有限时, 该问题更为明显。 正如前面所提到的,如果可以通过把每一层当作一个简单的自解码器来进行预训练,然后再进行堆叠,那么训练效率就会得到大大地提高。正如图二所示,先对每个单隐层的降噪自动编码器单元进行无监督预训练,然后再进行堆叠,最后进行整体的反向调优训练,就得到了一个两层隐藏层结构的堆叠式降噪自动编码器。
图二 堆叠式降噪自动编码器结构
下面详细介绍一下构建上述两层隐藏层结构的降噪自动编码器的具体步骤。首先对第一个DA单元进行预训练,其中为恢复后的输入数据或特征,为未被噪声污染的原始输入数据或特征,为被噪声污染后的输入数据或特征,为sigmoid函数:
图三 对第一个DA单元进行预训练
第一个自动编码器的输出可以表示如下:
采用最小均方差作为代价函数,且利用梯度下降的方法进行权重值W和偏置值b的更新:
其中梯度下降法的具体计算方式如下:
预训练完毕后,去掉输出层及其相应的权重和偏置,只保留输入层和隐藏层的和即可。然后将第一个DA单元的隐藏层作为第二个DA单元的输入,进行第二个DA单元的预训练如下所示:
图四 对第二个DA单元进行预训练
第二个降噪自动编码器的输出可以表示如下:
采用最小均方差作为代价函数,且利用梯度下降的方法进行权重值W和偏置值b的更新:
其中梯度下降法的具体计算方式如下:
第二个DA单元预训练完毕后,去掉其输出层和相应的权重和偏置,只保留输入层和隐藏层的和,并将其堆叠在第一个DA单元上即可。最后,再第二个DA单元的隐藏层之上添加一层输出层(对输出层的权重值和偏置进行随机初始化即可),进行解码恢复。
两个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)的更多相关文章
- 基于theano的降噪自动编码器(Denoising Autoencoders--DA)
1.自动编码器 自动编码器首先通过下面的映射,把输入 $x\in[0,1]^{d}$映射到一个隐层 $y\in[0,1]^{d^{'}}$(编码器): $y=s(Wx+b)$ 其中 $s$ 是非线性的 ...
- 降噪自动编码器(Denoising Autoencoder)
起源:PCA.特征提取.... 随着一些奇怪的高维数据出现,比如图像.语音,传统的统计学-机器学习方法遇到了前所未有的挑战. 数据维度过高,数据单调,噪声分布广,传统方法的“数值游戏”很难奏效.数据挖 ...
- theano学习指南5(翻译)- 降噪自动编码器
降噪自动编码器是经典的自动编码器的一种扩展,它最初被当作深度网络的一个模块使用 [Vincent08].这篇指南中,我们首先也简单的讨论一下自动编码器. 自动编码器 文献[Bengio09] 给出了自 ...
- iOS:UICollectionView纯自定义的布局:堆叠式布局、圆式布局 (一般用来制作相册)
集合视图的自动布局:UICollectionViewLayout是抽象根类,必须用它的子类才能创建实例,下面是重写的方法,计算item的布局属性 //每一次重新布局前,都会准备布局(苹果官方推荐使用该 ...
- 9.1、AutoEncoder自动编码器[转]
如果给定一个神经网络,我们假设其输出与输入是相同的,然后训练调整其参数,得到每一层中的权重.自然地,我们就得到了输入I的几种不同表示(每一层代表一种表示),这些表示就是特征.自动编码器就是一种尽可能复 ...
- 堆叠降噪自编码器SDAE
https://blog.csdn.net/satlihui/article/details/81006906 https://blog.csdn.net/github_39611196/articl ...
- 论文翻译:2020_A Recursive Network with Dynamic Attention for Monaural Speech Enhancement
论文地址:基于动态注意的递归网络单耳语音增强 论文代码:https://github.com/Andong-Li-speech/DARCN 引用格式:Li, A., Zheng, C., Fan, C ...
- Archlinux 2015.07.01 和 Windows7 双系统 安装教程
提前在windows7下给Archlinux预留一个分区,大小最好在20G以上(根据自己硬盘情况分配). 第一步,安装前的准备 从arch官网下载最新的ISO文件archlinux-2015.07.0 ...
- Latent Representation Learning For Artificial Bandwidth Extension Using A Conditional Variational Auto-Encoder
博客作者:凌逆战 论文地址:https://ieeexplore.ieee.xilesou.top/abstract/document/8683611/ 地址:https://www.cnblogs. ...
随机推荐
- Phone List 字典树 OR STL
Phone List Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 140 Solved: 35 Description ...
- 前端性能优化 —— 添加Expires头
简要:添加Expires头能有效的利用浏览器的缓存能力来改善页面的性能,能在后续的页面中有效避免很多不必要的Http请求,WEB服务器使用Expires头来告诉Web客户端它可以使用一个组件的当前副本 ...
- 搜素题 --java
Poj2531 首先把所有节点都放在一组,然后采用深度优先搜索的方法,对每一个节点都做判断是否应该移到另一组去,判断的依据是移过去和不移过去哪个得到的和值比较大(这里移去B组后的计算方法就是加上该点和 ...
- java 实现加密算法(在网上看的,保存)
import java.util.ArrayList; import java.util.List; /** * DES加密/解密 * * @Copyright Copyr ...
- MongoDB_简介_安装_基本使用_js_mongoose 操作 MongoDB 编程
数据库 按照数据结构来组织.存储和管理数据的仓库 程序运行时,数据存储于内存中,一旦程序结束或者断电,就会数据丢失 为了将有些数据持久化存储到硬盘中,并确保可操作性和安全性,就需要数据库 分类: 关系 ...
- 什么是 js 变量提升 (Javascript Hoisting)
Javascript是一门容易遭人误解的语言,但是它的强大毋庸置疑.个人觉得,要想深入理解Javascript语言,首先必须对其基本的概念(例如:Scope,Closure,Hoisting等)要真正 ...
- 日期类的使用(java)-蓝桥杯
蓝桥杯日期问题常考,java提供了日期类很方便: //日历类 Calendar c = Calendar.getInstance(); // 获取实例化对象 Date date =c.getTime( ...
- DEV_TreeList使用经验小结
1. 点击叶子节点是希望Open键显示,点击非叶子节点时希望隐藏.实践中发现点击到了非叶子节点图标,Open没有隐藏,如何解决? 增加一个判断: if (_hitInfo.HitInfoType != ...
- Easyui datagrid 数据表格 表格列头右键菜单选择展示列 JS
Easyui ,数据表格加载出来以后,在表格头右键,会有显示筛选的功能: 如图: 然后可以取消勾选,就变成下面这个样子: 功能的实现是通过重写了easyui 的 $.fn.datagrid.defau ...
- Mac ssh启动和停止
原文地址:http://blog.csdn.net/cwj649956781/article/details/37913637 mac本身安装了ssh服务,默认情况下不会开机自启 1.启动sshd服务 ...