首页 > Web开发 > 详细

(六)6.4 Neurons Networks Gradient Autoencoders and Sparsity

时间:2016-03-20 16:06:14      阅读:216      评论:0      收藏:0      [点我收藏+]

BP算法是适合监督学习的,因为要计算损失函数,计算时y值又是必不可少的,现在假设有一系列的无标签train data: 技术分享 ,其中 技术分享,autoencoders是一种无监督学习算法,它使用了本身作为标签以此来使用BP算法进行训练,即技术分享,见如下示例:

技术分享

自编码器尝试学习一个 技术分享 的函数,它尝试逼近一个恒等函数,从而使得输出 技术分享 接近于输入 技术分享,这样做的意义在于如果对hidden layer加上一些限制,比如hidden layer的数量限制,就可以从输入数据中发现一些有趣的结构。

举个栗子:假设网络的输入技术分享是一张 技术分享 的灰度图像(共100个像素),即input layer 有100个单元,设置 hidden layer有50个单元,且对output layer有技术分享,这样就会迫使网络学习图像的压缩表示,因为要从这50个隐藏单元中重构出输入的技术分享,如果输入数据x是完全随机的,即每个 技术分享 都是一个跟其它特征完全无关的独立同分布高斯随机变量,那么这一压缩表示将会非常难学习。当某些特征之间彼此相关时,那么这一算法就可以发现输入数据中的这些相关性。事实上,这一简单的自编码神经网络通常可以学习出一个跟PCA结果非常相似的输入数据的低维表示。 

以上是隐藏层单元很少的情况,当隐层有很多的单元时(可能多于输入层),仍可以对网络施加一些限制来发现输入数据的结构,比如给网络加上稀疏性限制(假设神经元的激活函数是sigmod函数)稀疏性简单来说就是当网络中某个单元的输出接近1的时候就认为他被激活,而输出接近0的时候则认为他被抑制,那么使得神经元大部分情况下都被抑制的情况称作稀疏性限制,如果使用tanh作为激活函数的话,当神经元输出为-1的时候,我们认为神经元是被抑制的。

技术分享 表示隐层神经元 技术分享 的激活度,对于给定的输入 技术分享 ,使用 技术分享 代表给定的输入为 技术分享 的情况下,自编码神经网络隐藏神经元 技术分享 的激活度。进一步有

技术分享

其中技术分享  表示隐藏神经元 技术分享 的平均活跃度(在训练集上取平均)。我们可以近似的加入一条限制技术分享,其中, 技术分享 是稀疏性参数,通常是一个接近于0的较小的值(比如 技术分享 )。换句话说,想让隐藏神经元 技术分享 的平均活跃度接近0.05,隐藏神经元的活跃度必须尽可能接近0才能使技术分享=0.05。

想满足这一限制,在原有的损失函数中加入额外的惩罚因子,惩罚那些 技术分享 和 技术分享 有显著不同的情况,进而使隐层的平均激活度尽可能的= 技术分享 ,惩罚因子的选择很多,本文如下:

技术分享

 技术分享 是隐藏层中隐藏神经元的数量,而索引 技术分享 依次代表隐藏层中的每一个神经元。这其实是相对熵,可以表示如下:

技术分享

 技术分享 是一个以 技术分享 为均值和一个以 技术分享 为均值的两个伯努利随机变量之间的相对熵。相对熵是一种标准的用来测量两个分布之间差异的方法。

这一惩罚因子有如下性质,当 技术分享 时 技术分享 ,并且随着 技术分享 与 技术分享 之间的差异增大而单调递增。举例来说,在下图中,我们设定 技术分享并且画出了相对熵值 技术分享 随着 技术分享 变化的变化。

技术分享

 

我们可以看出,相对熵在 技术分享 时达到它的最小值0,而当 技术分享 靠近0或者1的时候,相对熵则变得非常大(其实是趋向于技术分享)。所以,最小化这一惩罚因子具有使得 技术分享 靠近 技术分享的效果。 现在,我们的总体代价函数可以表示为

技术分享

其中 技术分享 如之前所定义,而 技术分享 控制稀疏性惩罚因子的权重。 技术分享 项则也(间接地)取决于 技术分享 ,因为它是隐藏神经元 技术分享 的平均激活度,而隐藏层神经元的激活度取决于 技术分享 。

此处因为损失函数的改动,需要重新计算BP算法中残差项:

由原来的:

技术分享

现在我们将其换成

技术分享

 

如上公式,计算残差时需要知道 技术分享 。所以在计算后向传播之前,需要对所有的训练样本计算一遍前向传播,从而获取平均激活度。如果训练样本可以整个存到内存之中(对于编程作业来说,通常如此),便可以方便地在所有的样本上计算前向传播并将得到的激活度存入内存并且计算平均激活度 。然后就可以使用事先计算好的激活度来对所有的训练样本进行后向传播的计算。如果数据量太大,无法全部存入内存,就可以扫过训练样本并计算一次前向传播,然后将获得的结果累积起来并计算平均激活度 技术分享 (当某一个前向传播的结果中的激活度 技术分享 被用于计算平均激活度 技术分享 之后就可以将此结果删除)。然后当完成平均激活度 技术分享 的计算之后,需要重新对每一个训练样本做一次前向传播从而可以对其进行后向传播的计算。对于后一种情况,对每一个训练样本需要计算两次前向传播,所以在计算上的效率会稍低一些。

如果想要使用经过以上修改的后向传播来实现自编码神经网络,那么就会对目标函数 技术分享 做梯度下降。使用梯度验证方法确保其准确性即可。

训练完(稀疏)自编码器之后,可以把学到的函数可视化出来,对于训练10*10的图像,每个隐藏单元进行如下计算:

技术分享

将要可视化的就是上面这个以2D图像为输入,由隐藏单元i计算出来的结果。它是依赖于参数技术分享的(暂时忽略偏置项bi),技术分享可看作输入技术分享的非线性特征,存在一个问题,什么样的输入图像技术分享可让技术分享得到最大程度的激励?(通俗一点说,隐藏单元技术分享要找个什么样的特征?),若假设输入有范数约束技术分享,则令隐藏单元技术分享得到最大激励的输入应由下面公式计算的像素 技术分享 给出(共需计算100个像素,j=1,…,100):

技术分享

当用上式算出各像素的值、把它们组成一幅图像、并将图像呈现出来,隐藏单元 技术分享 所寻找的特征的真正含义也渐渐明朗起来。

假如训练的自编码器有100个隐藏单元,可视化结果就会包含100幅这样的图像——每个隐藏单元都对应一幅图像。由这100幅图像可以看出隐藏单元学出来的整体效果如何,当对稀疏自编码器(100个隐藏单元,在10X10像素的输入上训练 )进行上述可视化处理之后,结果如下所示:

技术分享

上图的每个小方块都给出了一个(带有有界范数 的)输入图像技术分享,它可使这100个隐藏单元中的某一个获得最大激励。我们可以看到,不同的隐藏单元学会了在图像的不同位置和方向进行边缘检测。

(六)6.4 Neurons Networks Gradient Autoencoders and Sparsity

原文:http://www.cnblogs.com/ooon/p/5297903.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!