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)的更多相关文章

  1. 基于theano的降噪自动编码器(Denoising Autoencoders--DA)

    1.自动编码器 自动编码器首先通过下面的映射,把输入 $x\in[0,1]^{d}$映射到一个隐层 $y\in[0,1]^{d^{'}}$(编码器): $y=s(Wx+b)$ 其中 $s$ 是非线性的 ...

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

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

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

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

  4. iOS:UICollectionView纯自定义的布局:堆叠式布局、圆式布局 (一般用来制作相册)

    集合视图的自动布局:UICollectionViewLayout是抽象根类,必须用它的子类才能创建实例,下面是重写的方法,计算item的布局属性 //每一次重新布局前,都会准备布局(苹果官方推荐使用该 ...

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

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

  6. 堆叠降噪自编码器SDAE

    https://blog.csdn.net/satlihui/article/details/81006906 https://blog.csdn.net/github_39611196/articl ...

  7. 论文翻译:2020_A Recursive Network with Dynamic Attention for Monaural Speech Enhancement

    论文地址:基于动态注意的递归网络单耳语音增强 论文代码:https://github.com/Andong-Li-speech/DARCN 引用格式:Li, A., Zheng, C., Fan, C ...

  8. Archlinux 2015.07.01 和 Windows7 双系统 安装教程

    提前在windows7下给Archlinux预留一个分区,大小最好在20G以上(根据自己硬盘情况分配). 第一步,安装前的准备 从arch官网下载最新的ISO文件archlinux-2015.07.0 ...

  9. Latent Representation Learning For Artificial Bandwidth Extension Using A Conditional Variational Auto-Encoder

    博客作者:凌逆战 论文地址:https://ieeexplore.ieee.xilesou.top/abstract/document/8683611/ 地址:https://www.cnblogs. ...

随机推荐

  1. Python 小知识 杂七杂八 随手记

    1.assert 断言语句 例1:    print ‘11111111111’ assert 1==2 print ‘22222222’ 如果没有 assert 程序会输出  ‘1111111111 ...

  2. LOJ 6270

    最近(一直)有点(很)蠢 按照区间大小排序做区间包含多少区间的话 只用考虑 左端点比当前左端点小的和右端点比当前右端点大的,因为不可能同时满足 关于K,就在做到K的时候减一下就好了,一直傻逼在这了 # ...

  3. Vue使用vue-echarts图表

    vue-echarts和echarts的区别: vue-echarts是封装后的vue插件, 基于 ECharts v4.0.1+ 开发,依赖 Vue.js v2.2.6+,功能一样的只是把它封装成v ...

  4. CUDA相关问题

    之前装了GPU驱动后,再装了CUDA 9.0,再装了cuDNN,并且对样例mnistCUDNN进行执行,显示“Test passed!"通过.但是倒忘了有没有测试CUDA是否安装成功.驱动也 ...

  5. Random类 一般跟生成随机数有关

    public class MyRandom extends Random{ public static void main(String[] args) { // 随机数,生产随机数 // java提 ...

  6. python中一个py文件如何调用其他py文件中的类和函数

    HelloWorld  文件名称  Hello是类 from HelloWorld import Hello >>> h = Hello() >>> h.hello ...

  7. 召回率(Recall),精确率(Precision),平均正确率

    https://blog.csdn.net/yanhx1204/article/details/81017134 摘要 在训练YOLO v2的过程中,系统会显示出一些评价训练效果的值,如Recall, ...

  8. Spring Boot(一):环境搭建,建立简单项目

    一.基本环境搭建 1.下载IntelliJ IDEA :http://www.jetbrains.com/idea/ 2.拖到页面最下面下载旗舰版 3.新建项目 4.设置本地Maven 5.删除多于文 ...

  9. npm 使用指南参考

    [阮一峰npm scripts基本教程] [rimraf 跨平台删除文件] [ts-loader 安装问题] [nvm 安装使用] [npm镜像的问题] [webpack 如何引入jquery]web ...

  10. vue-cli 创建项目失败

    vue-cli 创建一个vue项目报错 npm code 404. 尝试解决方法都有,我是第3种方法生效 更新npm 重新安装nodejs vue-cli@3.0.1 在创建项目的时候,不能开启其他v ...