DeepLearning(二) 自编码算法与稀疏性理解与实战

Markdown博文大赛清新开启天天爱答题 一大波C币袭来寻找Java大牛!大数据完美组合Spark+Scala,这样学才够值!

DeepLearning(二) 自编码算法与稀疏性理解与实战

分类:

【原创】Liu_LongPo 转载请注明出处 【CSDN】

在有监督学习中,训练样本是有类别标签的。现在假设我们只有一个没有带类别标签的训练样本集合 {

自编码神经网络是一种无监督学习算法,它使用了反向传播算法,并让目标值等于输入值,比如 ,示例图如下:

自编码神经网络尝试学习一个 的函数。这看上去好像并不现实,因为我们在信息论中学过,信息经过每一层传递处理都会发生损耗,因此自编码神经网络的输入和输出是不可能相等的吼吼吼。

确实,自编码神经网络的输入和输出是不可能相等的,但是我们就是要强迫它相等,或者说尽可能地相等。(感觉它好不情愿= =)也就是:I ==> Sn ==> O , 且I要尽可能等于O。(I代表输入,Sn代表每一层中间隐藏层的输出a,O代表网络输出)

这么折腾究竟是要干嘛?要I等于O干嘛,好好的,要O去干嘛就直接拿I去不就好了。着实,O确实不重要,但是我们注意,Sn很重要! Sn为什么重要?我们看上面的模型,输入I有6维,,输出O有6维,中间层Sn呢?只有3维!这看出了什么?PCA?白化?差不多,但又有点不同。可以说是降维了,但PCA做的工作是提取了数据的最重要的成分,而这里的Sn是学习了数据更加本质的结构!为什么是这样?因为我们强迫它学习用3维的数据去表示6维的数据,为了完成这个目标,它不得不去寻找输入数据中存在的一些结构。

所以,中间层学习得到的3维输出Sn,就是深度学习网络学习得到的输入数据的更加本质的特征。如果增加中间层的层数,如下图:

也就是:I–>S1–>S2–>…–>Sn–>O,每一个中间层 的输出 ,都作为下一层 的输入 , 于是每一个中间层学习到的特征都得到进一步学习抽象,比如,输入I是人脸的图像,S1学习到了图像的边缘,S2学习到了图像的边缘的组合,比如鼻子,S3学习到了人脸的大概模型等等,因此多层深度学习学习到的最终的特征将能够非常透彻的描述输入数据的本质,从而大大增加了最后面的分类和识别的精确度。

哦哦,这里说一下,深度学习本质:深度学习模型是工具,目的是学习到输入数据的特征。

也就是说,我们最后的分类或者识别之类的,还要加个分类器或者其他的东西。

稀疏性限制

刚才的论述是基于隐藏神经元数量较小的假设。但是即使隐藏神经元的数量较大(可能比输入像素的个数还要多),我们仍然通过给自编码神经网络施加一些其他的限制条件来发现输入数据中的结构。具体来说,如果我们给隐藏神经元加入稀疏性限制,那么自编码神经网络即使在隐藏神经元数量较多的情况下仍然可以发现输入数据中一些有趣的结构。 稀疏性可以被简单地解释如下。如果当神经元的输出接近于1的时候我们认为它被激活,而输出接近于0的时候认为它被抑制,那么使得神经元大部分的时间都是被抑制的限制则被称作稀疏性限制。这里我们假设的神经元的激活函数是sigmoid函数。如果你使用tanh作为激活函数的话,当神经元输出为-1的时候,我们认为神经元是被抑制的。

令 的激活度,可得到

其中 的平均活跃度,注意,这里是在训练集上求平均。

然后,我们又要委屈它了,我们加入一个条件:

其中, 为稀疏性参数,是一个比较接近于0的值,比如0.05.为了满足这个条件,我们得让大多数隐藏神经元的活跃度接近0.

何必为难它呢?为什么要让只要少部分中间隐藏神经元的活跃度,也就是输出值大于0,其他的大部分为0.原因就是我们要做的就是模拟我们人脑。神经网络本来就是模型人脑神经元的,深度学习也是。在人脑中有大量的神经元,但是大多数自然图像通过我们视觉进入人脑时,只会刺激到少部分神经元,而大部分神经元都是出于抑制状态的。而且,大多数自然图像,都可以被表示为少量基本元素(面或者线)的叠加。又或者说,这样更加有助于我们用少量的神经元提取出自然图像更加本质的特征。

为了实现这一限制,我们将会在我们的优化目标函数中加入一个额外的惩罚因子,而这一惩罚因子将惩罚那些 显著不同的情况,惩罚因子如下:

其中, 表示隐藏神经元的数量。

基于相对熵的话,上述惩罚因子也可以表示为:

假设 随着 的变化如下图:

大多数人想要改造这个世界,但却罕有人想改造自己。

DeepLearning(二) 自编码算法与稀疏性理解与实战

相关文章:

你感兴趣的文章:

标签云: