SIGAI深度学习第五集 自动编码器
深度学习模型-自动编码器(AE),就是一个神经网络的映射函数,f(x)——>y,把输入的一个原始信号,如图像、声音转换为特征。
大纲:
自动编码器的基本思想
网络结构
损失函数与训练算法
实际使用
去燥自动编码器
稀疏编码
收缩自动编码器
多层编码器
本集总结
自动编码器的基本思想:
人工神经网络实现的是一个向量X映射为另一个向量Y(Rn——>Rm,m<<n),通过多层复合函数来实现,Y一般设置为样本标签向量label。AE把Y设置为从原始数据X提取出的特征向量,如X是一个高维的图像或声音。而Y是自动训练出来的,不需要人工指定,因此需考虑怎么设置训练目标函数。
直接用一个单层或者多层神经网络对输入数据进行映射,得到输出向量,作为从输入数据提取出的特征。核心问题:怎么设置训练目标?解决思想:编码器+解码器框架。
网络结构:
编码器-将输入数据映射为特征向量,解码器-将特征向量映射回输入向量重构。
类似于PCA,不过PCA直接计算目标函数L,不用训练。

损失函数与训练算法:
损失函数定义为重构误差,类似PCA的做法。损失函数(L个样本):
,h是编码器的映射函数,g是解码器的映射函数。xi编码之后再解码和原始数据xi尽可能的接近。训练好之后只需要编码器,即h(Xi)——>Yi。
训练算法和普通的神经网络相同,用BP算法训练+随机梯度下降法SGD、GD。
实际使用:
实际使用时,只需要编码器网络,解码器只用于训练阶段。输入一个数据向量,即可得到特征向量。也可以用多个隐含层。
去噪自动编码器:
Denoising Autoencoder,简称DAE。为了增强模型的鲁棒性,对训练样本X做一个随机扰动如(加噪声,X中随机挑几维数据设置为0,其他维数据不变),得到X'向量,再用X'去训练,训练出的模型更具有鲁棒性、泛化性能更好,因为模型能够抵抗这些噪声。
这样,输入数据变为X',重构值为X,即输入输出为(X',X),而标准自动编码器输入输出为(X,X)。DAE把从有污染的数据中把原始数据重构出来,则编码器那一块从有污染的数据中把没有污染的数据代表的向量的有效特征向量Y提出来。
在训练样本中加入随机噪声,重构的目标是不带噪声的样本数据。用自动编码器学习得到的模型重构出来的数据可以去除这些噪声,获得没有被噪声污染过的数据。
对于每个样本向量X随机选择其中的一部分分量,将它们值置为0,其他分量保持不变,得到的带噪声向量为

稀疏自动编码器:
加入稀疏性惩罚项,让编码器的输入结果(即编码器输出的向量)稀疏(很多数据为0)。
编码器网络隐含层的第i个神经元的平均激活度为对所有训练样本的激活函数值的均值,记为pi^。
使用相对熵构造惩罚项:
,其中n为隐含层神经元个数,p为人工指定的活跃度(一个接近于0的数)。
加上惩罚项后的目标函数变为:
,其中前一项为AE的误差函数,后一项为编码器的稀疏性惩罚项。
收缩自动编码器:
Contractive Auto-Encoders,简称CAE,也是对自动编码器的一种改进,同样也是加上一个惩罚项。
训练时在损失函数中加上正则化项,使得编码器函数的导数尽可能小,
正则化项是编码器函数导数二范数平方,
,这里hj是隐含层第j个神经元编码器函数,xi是输入向量的第i个分量,偏导数小则对输入值不敏感,输入X加上一个小的扰动项之后,产生的输出值变化也非常小,也更鲁邦一些。
多层自动编码器:
层叠自动编码器由多个自动编码器串联组成(因为很多实际应用中,一层特征抽象提取是不行的,如图像、声音),能够逐层提取输入数据的特征,在此过程中逐层降低输入数据的维度,将高维的输入数据转化为低维的特征。
编码器可以看成一个降维,因为映射之后向量的维数比映射之前要低,和PCA类似,但是和PCA有一个本质的区别是PCA是线性的,自动编码器是非线性的一个编码,因此它的表达能力会更强一些。AE是在人工神经网络用于深度学习早期的时候,2006Hition发于science上的那篇文章,用玻尔兹曼机训练一个多层的AE,实际应用中现在很少使用了,只需记住这种编码器解码器框架能把一个特征性向量X的特征向量Y给提出来的思想即可。图像卷积的时候会用到这个原理(前面一半做编码,后边一半做解码),还有RNN做机器翻译的时候的seqtoseq,也是这个原理。
训练也是逐层进行的。给定输入向量,采用无监督方式方式训练第一层自动编码器。把第一个自动编码器的输出作为第二个自动编码器的输入,采用同样的方法训练第二个自动编码器。
重复第二步直到所有自动编码器训练完成。把最后一个自动编码器的输出作为最终的输出。
在每一层,都会得到输入数据的不同抽象特征,随着层数的增加,这个特征越来越抽象。
本集总结:
1.AE基本想法:神经网络的映射函数来提取特征向量X的特征向量Y,f(X)——>Y
2.训练的目标函数loss、网络结构Encoder和Decoder结构
3.AE的实际使用
4.AE的几种改进型,DAE、稀疏自动编码器、CAE
5.AE的多层结构
SIGAI深度学习第五集 自动编码器的更多相关文章
- SIGAI深度学习第六集 受限玻尔兹曼机
讲授玻尔兹曼分布.玻尔兹曼机的网络结构.实际应用.训练算法.深度玻尔兹曼机等.受限玻尔兹曼机(RBM)是一种概率型的神经网络.和其他神经网络的区别:神经网络的输出是确定的,而RBM的神经元的输出值是不 ...
- SIGAI深度学习第四集 深度学习简介
讲授机器学习面临的挑战.人工特征的局限性.为什么选择神经网络.深度学习的诞生和发展.典型的网络结构.深度学习在机器视觉.语音识别.自然语言处理.推荐系统中的应用 大纲: 机器学习面临的挑战 特征工程的 ...
- SIGAI深度学习第八集 卷积神经网络2
讲授Lenet.Alexnet.VGGNet.GoogLeNet等经典的卷积神经网络.Inception模块.小尺度卷积核.1x1卷积核.使用反卷积实现卷积层可视化等. 大纲: LeNet网络 Ale ...
- SIGAI深度学习第七集 卷积神经网络1
讲授卷积神经网络核心思想.卷积层.池化层.全连接层.网络的训练.反向传播算法.随机梯度下降法.AdaGrad算法.RMSProp算法.AdaDelta算法.Adam算法.迁移学习和fine tune等 ...
- SIGAI深度学习第三集 人工神经网络2
讲授神经网络的理论解释.实现细节包括输入与输出值的设定.网络规模.激活函数.损失函数.初始化.正则化.学习率的设定.实际应用等 大纲: 实验环节: 理论层面的解释:两个方面,1.数学角度,映射函数h( ...
- SIGAI深度学习第一集 机器学习与数学基础知识
SIGAI深度学习课程: 本课程全面.系统.深入的讲解深度学习技术.包括深度学习算法的起源与发展历史,自动编码器,受限玻尔兹曼机,卷积神经网络,循环神经网络,生成对抗网络,深度强化学习,以及各种算法的 ...
- SIGAI深度学习第二集 人工神经网络1
讲授神经网络的思想起源.神经元原理.神经网络的结构和本质.正向传播算法.链式求导及反向传播算法.神经网络怎么用于实际问题等 课程大纲: 神经网络的思想起源 神经元的原理 神经网络结构 正向传播算法 怎 ...
- 深度学习(五)基于tensorflow实现简单卷积神经网络Lenet5
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/8954892.html 参考博客:https://blog.csdn.net/u01287127 ...
- 深度学习——无监督,自动编码器——尽管自动编码器与 PCA 很相似,but自动编码器既能表征线性变换,也能表征非线性变换;而 PCA 只能执行线性变换
自动编码器是一种有三层的神经网络:输入层.隐藏层(编码层)和解码层.该网络的目的是重构其输入,使其隐藏层学习到该输入的良好表征. 自动编码器神经网络是一种无监督机器学习算法,其应用了反向传播,可将目标 ...
随机推荐
- malloc/free和new/delete详解与应用
C++面试经常会问到关于malloc/free和new/delete的区别,网上有不同版本的解释,这里总结下并加上个人理解和使用. 两者相同点 1.都可以申请动态堆内存. 两者不同点 1.new/de ...
- 版本管理——Git和SVN的介绍及其优缺点
版本管理 概念:版本管理是软件配置管理的基础,它管理并保护开发者的软件资源. 好处:可以保留我们的历史版本,在代码开发到一半的时候,不至于无故丢失,还可以查看BUG的来龙去脉. 版本管理种类: ...
- MongoDB添加删除节点
副本集添加删除节点 sharding添加删除节点 先将节点设置为hidden,再remove
- Ubuntu16.04 换源(或者404 Not Found问题)
当执行sudo apt-get update或者sudo apt-get install命令时,出现以下两个问题: “apt-get 404 Not Found Package Repository ...
- Python3 使用pygal 生成世界人口地图
最近在看<python从入门到实践>,其中有一个例子是使用pygal制作世界人口地图,觉得挺有意思的,这里就记录下来了, 其实代码不是很复杂,使用环境环境python3.废话不多说,直接上 ...
- MongoDB增删改
一.数据库操作 显示现有的数据库,命令:show dbs 或者 databases; 示当前使用的数据库,命令:db 切换当前使用的数据库,命令:use 数据库名称 删除数据库,命令:db.dropD ...
- 如何使用JavaScript实现纯前端读取和导出excel文件(转)
转自小茗同学博客:https://www.cnblogs.com/liuxianan/p/js-excel.html js-xlsx 介绍 由SheetJS出品的js-xlsx是一款非常方便的只需要纯 ...
- 关于Vue父组件把异步获取的数据传给子组件的问题
由于父组件中的数据是异步获取的,而子组件在一开始便会渲染,所以会造成子组件渲染完成后,数据还未获取到的情况 这里有一个简单的解决方案:在子组件渲染前,判断父组件数据是否获取完成,数据获取完成后再渲染子 ...
- SQL中新建注释、查询注释和说明
1.查询注释 SELECT A.name AS table_name, B.name AS column_name, C.value AS column_description FROM sys.ta ...
- ASE19团队项目beta阶段Backend组 scrum8 记录
本次会议于12月17日,19:30在微软北京西二号楼sky garden召开,持续10分钟. 与会人员:Hao Wang, Lihao Ran, Xin Kang, Zhikai Chen 每个人的工 ...