[转]AutoEncoder原理
来源:互联网 发布:eclipse json编辑器 编辑:程序博客网 时间:2024/06/05 02:58
本文为UFLDL的翻译版本,转自:https://segmentfault.com/a/1190000003916882,翻译作者为大巧不工,英文原文链接为:http://ufldl.stanford.edu/tutorial/unsupervised/Autoencoders/。
有监督的神经网络需要我们的数据是有标注(Labeled)的,然而神经网络并不止限于处理有标注的数据,同时还能处理无标注的数据,形如:
其中的一种算法叫做AutoEncoder——自编码网络。
自编码网络模型
自编码网络的结构如下图所示:
网络中最左侧蓝色的节点是输入层,最右侧黄色的一列神经元是输出层。
输出层的神经元数量完全等于输入层神经元的数量。 隐藏层的神经元数量少于输出层。
自编码网络的作用是,将输入样本压缩到隐藏层,再在输出端重建样本。也就是说,自编码网络输出层与输入层存在如下关系:
注意:由于神经元的输出只在0和1之间,因此输入需要进行均值归一化
自编码网络可以看做将数据进行压缩(由原来的“n-维”压缩成“m维”(m=隐藏层神经元数目)),然后再在需要的时候用损失尽量小的方式将数据恢复出来。
这里有两层意思:
第一,自编码网络是要将经过压缩的数据还原,即将我们将学习一组
这是算法要学习的参数。hW,b≈x
第二,还原数据应该使得损失尽量小,也就规定了我们的目标函数:
J(W,b)=1m∑i=1m(x̂ −x)2
数据压缩原理
压缩:限制隐藏层神经元数量
限制隐藏层的神经元数量,就可以得到压缩的效果。例如:输入x是10*10图片的像素灰度值,即x是100维向量。输入层大小n=100。我们令隐藏层大小 s_2=50 ,那么隐藏层的输出a2是一个50维向量,网络的输出层必须使用这个50维向量来重建100维的输入。即实现了数据压缩。
压缩原理
数据压缩依靠的是数据本身是有冗余信息的。当输入是完全随机,相互独立同分布的时候,网络将很难习得一个有效的压缩模型,然而现实中的数据(自然图像、语言、声音)总是存在不同程度的冗余性。自编码网络通过学习发现并去掉了这些冗余信息。实际上,自编码网络学习出的低维数据表示十分类似于PCA(主成分分析)学习出的主成分。
压缩:限制隐藏层的稀疏性
另一种方式是限制隐藏层的稀疏性。首先定义稀疏性:
稀疏性--- 神经元总是使用一个激活函数,通常使用Sigmoid或者tanh函数,它们在输入很大的时候,趋于正无穷输出接近1的数,称该神经元为“激活状态”;在输入很小,趋于负无穷的时候分别输出0和-1,称该神经元为“非激活状态”。稀疏性要求隐藏层中的激活神经元是“稀疏”的——即大部分神经元处于非激活状态。
令
那么稀疏性限制可以限制:
为了保证ρj不偏离ρ,需要设置惩罚函数。
惩罚函数以相对熵(K-L Divergence)的形式给出。
注:K-L Divergence用于表示两个函数的差别,其定义为
KL(f(x)||g(x))=∑x∈Xf(x)⋅logf(x)g(x)
相对熵的性质:ρ与ρj相等时为0,随着偏差增大,相对熵增大,其图像如下图:
训练的注意事项
在BP步骤中,对隐藏层进行权值更新需要计算:
δ(2)i=(∑j=1s2W(2)jiδ(3)j)f‘(z(2)i) 事实上可以用下式计算:
δ(2)i=((∑j=1s2W(2)jiδ(3)j)+β(ρρj+1−ρ1−ρj))f‘(z(2)i)
注意:在网络训练中,前向传播步骤应同时计算ρ,然后在后向传播步骤时做相应的修改。这样,每次前向传播的步骤计算量就增大了一倍。
- [转]AutoEncoder原理
- VAE(Variational Autoencoder)的原理
- VAE(Variational Autoencoder)的原理
- VAE(Variational Autoencoder)的原理
- VAE(Variational Autoencoder)的原理
- Autoencoder
- autoencoder
- autoencoder
- Autoencoder
- Autoencoder
- AutoEncoder
- autoencoder
- Autoencoder
- autoEncoder
- Denosing Autoencoder原理以及结果简介
- sparse-autoencoder
- Sparse Autoencoder
- Autoencoder review
- 如何部署 Calico 网络?- 每天5分钟玩转 Docker 容器技术(67)
- Android中Cursor类的概念和用法
- sql查询
- 我又把HTMLTestRunner改了一下,支持Python3,添加echarts统计饼图
- javascript打印时的css样式的控制
- [转]AutoEncoder原理
- python自然语言处理学习笔记2——基础语句
- BZOJ 3036 浅谈逆拓扑序递推期望转移方程
- 剑指offer-24:搜索二叉树的后序遍历
- 分析HashSet,HashMap源码,如何保证HashSet集合元素唯一性。
- mybatis generator
- 2章 信息的表示和处理
- Android Studio中引用Module依赖注意事项
- JS