稀疏自动编码之自动编码器和稀疏性

到目前为止,已经叙述了神经网络的监督学习,即学习的样本都是有标签的。现在假设我们有一个没有标签的训练集,其中. 自动编码器就是一个运用了反向传播进行无监督学习的神经网络,学习的目的就是为了让输出值和输入值相等,即.下面就是一个自动编码器:

自动编码器试图学习一个函数. 换句话说,它试图逼近一个等式函数,使得该函数的输出  和输入  很近似。举一个具体的例子,假设输入  是来自一个  图像(共100个像素点)像素点的灰度值,在  层有  个隐层节点. 注意输出 . 由于隐层节点只有50个,所以网络必须学习出输入的压缩表示,即给出以隐层节点激活值作为元素的向量,它需要重构出100个像素点灰度值的输入 . 如果输入是完全随机的,那么这种压缩学习的任务将会很难,但是数据具有一定的结构,例如一些输入特征彼此关联,那么这个算法就可以发现这些关联关系。事实上,自动编码器往往最终就是学习出一个较低维度的表示。

我们认为,上面讨论是依赖于隐层节点数很少。但是,即使隐层节点数很多(也许比输入的像素点个数还多),通过对网络加上某些约束,我们仍然能够发现感兴趣的结构。特别是,对隐层节点加上稀疏约束。

简答来说,如果一个神经元的输出为1,我们认为这个神经元是被激活的,如果某个神经元的输出是0,就认为这个神经元是抑制的。我们想约束神经元,使得神经元在大多数时候是处于抑制状态。假设激活函数是sigmoid函数。

在上面的网络中, 表示隐层(第二层)节点  的激活值。但是这种表示并没有显示给出哪一个输入  导致了这个激活值。因此,用  去表示当输入为  时这个隐层节点的激活值。进一步,令

表示隐层单元节点  的平均激活值(对于每一个输入样本,该节点都会输出一个激活值,所以将该节点对应的所有样本的激活值求均值)。然后加以约束:

这里, 是稀疏参数,通常被设为一个很小的接近于0的值(比如 )。换句话说,我们想要隐层神经元  的平均激活值接近 0.05. 为了满足这个约束,隐层节点的激活值必须大多数都接近0.

为了达到这个目的,我们将在优化目标函数的时候,对那些与 稀疏参数  偏差很大的   加以惩罚,我们使用下面的惩罚项:

其中  是隐层神经元的数目。这个约束想也可写为:

其中 ,容易验证,如果,如果  和  差值很大,那么该项也会变大。符合我们想要的惩罚方式。例如我们令 ,画出

 随  变化而变化的情况:

由上图可以看出,在时,函数到达最小值0.但是当无论从左边还是右边远离(0.2)时,函数值显著增大。

于是,我们总体的代价函数(损失函数)就变为:

这里的 是在前面的博文

稀疏自动编码之反向传播算法(BP)

中定义的, 是用来控制稀疏惩罚项的权重。 其实也依赖于 ,因为 是隐层节点的平均激活值,而计算平均激活值,首先需要计算该节点所有激活值,激活值是多少是取决于的(训练集一定)。

下面把惩罚项加入代价函数,再计算导数。只需在原来的代码中作很小的改动,例如在反向传播的第2层,前面博文中已经计算出:

现在用下面的式子代替:

稍微需要注意的是,为了计算这一项,需要知道,因此,在前馈传播过程中首先把隐层所有神经元的平均激活值计算出来。当训练集很小的时候,在前馈传播的时候,把所有神经元的激活值和平均值都存储在内存里,然后在反向传播过程中可以利用这些提取计算好的激活值。如果训练集太大,没有那么多内存存储中间结果,可以在前馈传播过程中先计算每个节点针对所有的样本的激活值,从而计算出该节点的平均激活值,在计算下一个节点的平均激活值的时候就可以丢掉前一个节点的针对所有样本的激活值,值存储它的平均激活值,这样之后,在反向传播之前,就需要再一次前馈传播得到神经元的激活值,这样会让计算效率有些降低,但是保证内存的够用。

整个用梯度下降求解过程的伪代码在

稀疏自动编码之反向传播算法(BP)

中已经给出,只不过目标函数改为这里给出的. 然后用

稀疏自动编码之梯度检验

中介绍的导数检验的方法,可以验证代码的正确与否。

学习来源:http://deeplearning.stanford.edu/wiki/index.php/Autoencoders_and_Sparsity

时间: 2024-10-29 12:35:14

稀疏自动编码之自动编码器和稀疏性的相关文章

稀疏自动编码之反向传播算法(BP)

假设给定m个训练样本的训练集,用梯度下降法训练一个神经网络,对于单个训练样本(x,y),定义该样本的损失函数: 那么整个训练集的损失函数定义如下: 第一项是所有样本的方差的均值.第二项是一个归一化项(也叫权重衰减项),该项是为了减少权连接权重的更新速度,防止过拟合. 我们的目标是最小化关于 W 和 b 的函数J(W,b). 为了训练神经网络,把每个参数 和初始化为很小的接近于0的随机值(例如随机值由正态分布Normal(0,ε2)采样得到,把 ε 设为0.01), 然后运用批量梯度下降算法进行优

稀疏自动编码之梯度检验

众所周知,反向传播算法很难调试和得到正确结果,特别是在执行过程中存在许多细小难以察觉的错误.这里介绍一种方法来确定代码中导数的计算是否正确.使用这里所述求导检验方法,可以帮助提升写正确代码的信心. 假设我们想最小化关于  的函数   . 对于这个例子,假设 ,所以 . 在一维空间,梯度下降的一次迭代公式如下: 假设我们已经实现了某个函数  去计算 ,那么梯度下降时参数更新就可以这样:. 该如何检验我们编写的函数  是正确的呢? 回忆导数的定义: 对于任意的  ,可以用如下公式来从数值上近似导数值

稀疏自动编码之可视化自动编码器

对于训练出的一个稀疏自动编码器,现在想看看学习出的函数到底是什么样子.对于训练一个的图像,.计算每一个隐层节点    的输出值: 我们要可视化的函数,就是这个以一副2D图像为输入,以 为参数(忽略偏置项),由隐层节点  计算出来的函数.特别是,我们把  看作是输入  的非线性特征.我们很想知道:什么样的的图像  能使得  成为最大程度的激励? 还有一个问题,就是必须对  加上约束.如果假设输入的范数约束是,可以证明,能够使得隐层神经元得到最大程度激活的像素输入   (所有100个像素点,): 展

稀疏自动编码之练习

从10幅图像中采样出10000幅小图像块,每个小图像块大小是8*8,利用采样出的图像作为样本学习,利用LBFGS进行优化. 下面是对10幅图像白化之后的结果: train.m %% CS294A/CS294W Programming Assignment Starter Code % Instructions % ------------ % % This file contains code that helps you get started on the % programming ass

稀疏自动编码之神经网络

考虑一个监督学习问题,现在有一些带标签的训练样本(x(i),y(i)).神经网络就是定义一个复杂且非线性的假设hW,b(x),其中W,b 是需要拟合的参数. 下面是一个最简单的神经网络结构,只含有一个神经元,后面就用下图的形式代表一个神经元: 把神经元看作是一个计算单元,左边的x1,x2,x3 (和 截距+1 )作为计算单元的输入,输出为:,其中,函数被称为激活函数,在这里我们的激活函数是sigmoid函数: 还有一种激活函数是正切函数(tanh function): 下面是两种激活函数图像:

Sparse Autoencoder稀疏自动编码

本系列文章都是关于UFLDL Tutorial的学习笔记 Neural Networks 对于一个有监督的学习问题,训练样本输入形式为(x(i),y(i)).使用神经网络我们可以找到一个复杂的非线性的假设h(x(i))可以拟合我们的数据y(i).我们先观察一个神经元的机制: 每个神经元是一个计算单元,输入为x1,x2,x3,输出为: 其中f()是激活函数,常用的激活函数是S函数: S函数的形状如下,它有一个很好的性质就是导数很方便求:f'(z) = f(z)(1 ? f(z)): 还有一个常见的

带阈值的平滑l0范数加速稀疏恢复——同名英文论文翻译

原文链接:Thresholded Smoothed l0 Norm for Accelerated Sparse Recovery http://ieeexplore.ieee.org/document/7069222/ 带阈值的平滑l0范数加速稀疏恢复 Han Wang, Qing Guo, Member, IEEE, Gengxin Zhang, Guangxia Li, and Wei Xiang, Senior Member, IEEE 译者:柳如风   摘要:平滑l0范数(Smooth

深度学习浅层理解(四)-- 稀疏编码

借鉴前人的文章链接 http://blog.csdn.net/zouxy09/article/details/8777094 http://www.gene-seq.com/bbs/thread-2853-1-1.html http://ibillxia.github.io/blog/2012/09/26/convex-optimization-overview/ UFLDL教程 http://ufldl.stanford.edu/wiki/index.php/%E7%A8%80%E7%96%8

《神经网络与深度学习》(三) 稀疏编码

转自:http://www.cnblogs.com/caocan702/p/5666175.html 借鉴前人的文章链接 http://blog.csdn.net/zouxy09/article/details/8777094 http://www.gene-seq.com/bbs/thread-2853-1-1.html http://ibillxia.github.io/blog/2012/09/26/convex-optimization-overview/ UFLDL教程 http://