稀疏编码器(Sparse Encoder)
来源:互联网 发布:企查查的数据怎么来的 编辑:程序博客网 时间:2024/05/16 10:29
1.介绍
在自动编码器一文中,我们已经简单介绍了基于隐藏神经元数量较小的假设,本文主要基于隐藏神经元数量较大的假设。此时,我们仍然通过给自编码神经网络施加一些其他的限制条件来发现输入数据中的结构。比如我们给隐藏神经元加入稀疏性限制。
稀疏性可以被简单地解释如下:假设神经元的激活函数时sigmoid函数,那么当神经元的输出接近于1的时候我们认为它被激活,而输出接近于0的时候认为它被抑制,那么使得神经元大部分的时间都是被抑制的限制则被称作稀疏性限制。如果使用tanh作为激活函数的话,当神经元输出为-1的时候,我们认为神经元是被抑制的。
2.KL散度
在介绍自动编码器之前,我们先看下KL散度:
,这个是离散概率分布的公式
,这个是连续概率分布的公式
KL散度可以很好地测量两个概率分布之间的距离,比如公式中的p和q。如果两个分布越接近,那么KL散度越小;如果越远,KL散度就会越大。
KL散度的实战——1维高斯分布
我们先来一个相对简单的例子。假设我们有两个随机变量x1,x2,各自服从一个高斯分布,那么这两个分布的KL散度该怎么计算呢?
我们知道:
那么KL(p1,p2)就等于
同理:多维高斯分布的KL散度
首先给出多维高斯分布的公式:
3.稀疏 based on KL散度
注意到图1中表示隐藏神经元 j 的激活度,但是这一表示方法中并未明确指出哪一个输入x 带来了这一激活度。所以我们将使用来表示在给定输入为x 情况下,自编码神经网络隐藏神经元 j 的激活度。 进一步,让
表示隐藏神经元 j 的平均活跃度(在训练集上取平均)。我们可以近似的加入一条限制,即其中, 是稀疏性参数,通常是一个接近于0的较小的值(比如 = 0.05 )。换句话说,我们想要让隐藏神经元 j 的平均活跃度接近0.05。为了满足这一条件,隐藏神经元的活跃度必须接近于0。
为了实现这一限制,我们将会在我们的优化目标函数中加入一个额外的惩罚因子,而这一惩罚因子将惩罚那些和 有显著不同的情况从而使得隐藏神经元的平均活跃度保持在较小范围内。惩罚因子的具体形式有很多种合理的选择,我们将会选择以下这一种(KL散度):
所以,总体代价函数:
另外还有一种稀疏方式:加L0、L1、L2正则项,可以看参考文献2
基于正则化稀疏的keras实现:
from keras import regularizersencoding_dim = 32input_img = Input(shape=(784,))# add a Dense layer with a L1 activity regularizerencoded = Dense(encoding_dim, activation='relu', activity_regularizer=regularizers.activity_l1(10e-5))(input_img)decoded = Dense(784, activation='sigmoid')(encoded)autoencoder = Model(input=input_img, output=decoded)
参考文献:
(1)http://deeplearning.stanford.edu/wiki/index.php/Autoencoders_and_Sparsity
(2)http://deeplearning.stanford.edu/wiki/index.php/Sparse_Coding
(3)Bengio Y,Lamblin P,Popovici D,et al. Greedy layerwise training of deep networks[C]. Proc. of the 20th Annual Conference on Neural Information Processing System.2006: 153-160.
(4)https://zhuanlan.zhihu.com/p/22464760
- 稀疏编码器(Sparse Encoder)
- 稀疏自动编码器 (Sparse Autoencoder)
- Sparse Autoencoder(稀疏自编码器)
- 《深度学习》学习笔记(一):稀疏自编码器(Sparse Autoencoder)
- 自动编码器(Auto Encoder)
- Sparse coding(稀疏编码)
- 稀疏文件(Sparse File)
- SMS Encoder & Concatenated EMS Encoder (短信编码器)
- 自编码器(auto-encoder)介绍
- 自编码器Auto-Encoder
- linux 稀疏文件(Sparse File)
- linux 稀疏文件(Sparse File)
- 稀疏自动编码(Sparse Autoencoder)
- 资源—稀疏编码(sparse coding)
- 稀疏编码(Sparse Coding)(二)
- matlab 稀疏矩阵(sparse matrix)
- UFLDL练习一(稀疏自编码器 )
- UFLDL教程(一)---稀疏自编码器
- [2016/12/8]happy number:application of Floyd's Cycle Detection Algorithm
- Billboard
- 封装继承txt
- 图片抖动的效果(修改后)
- 揭开Socket编程的面纱
- 稀疏编码器(Sparse Encoder)
- 把字符串转换成整数
- 基于SpringMVC封装常用的CRUD操作
- 点赞 数据库设计
- 正则表达式
- react native 使用fetch进行网络请求(https),解决SSLHandshake问题,以及怎样进行二次封装
- Google开发者大会给我们带来了什么?
- otter进行数据同步
- 列表视图(ListView)