您的位置:首页 > 理论基础 > 计算机网络

神奇的卷积神经网络(四)

2015-10-17 11:48 295 查看


Convolutional Neural Networks (卷积神经网络)

一:ReLu激活函数

ReLu的全称是Rectified layer units,它是一层使用非饱和激活函数的神经元。神经网络通常使用sigmoid 和 tanh 作为非线性激活函数,它确实比早期的线性激活函数有好的多的效果。但在深度神经网络中,如果不使用pre-traning,会导致gradient vanishing problem (梯度消失,无法收敛)。后来,两位神经学家从脑神经元接收信号的角度考虑,模拟出了更精确的激活函数模型,就是ReLu激活函数:


还有一种ReLu的平滑版本,叫做SoftPlus:


这个是不是很眼熟啊?

对了!这个softplus的导数就是我们熟悉的sigmoid函数。



Relu激活函数主要有以下两个特点:
1.单侧抑制
2.稀疏激活性 (x负轴完全没有激活)

在神经科学方面,除了新的激活频率函数之外,神经科学家还发现了神经元的稀疏激活性。

2001年,Attwell等人基于大脑能量消耗的观察学习上,推测神经元编码工作方式具有稀疏性和分布性。

2003年,Lennie等人估测大脑同时被激活的神经元只有1~4%,进一步表明神经元工作的稀疏性。

从信号方面来看,即神经元同时只对输入信号的少部分选择性响应,大量信号被刻意的屏蔽了,这样可以提高学习的精度,更好更快地提取稀疏特征。

从这个角度来看,在经验规则的初始化W之后,传统的Sigmoid系函数同时近乎有一半的神经元被激活,这不符合神经科学的研究,而且会给深度网络训练带来巨大问题。

Softplus照顾到了新模型的前两点,却没有稀疏激活性。因而,校正函数max(0,x)成了近似符合该模型的最大赢家。

深度神经网络的致命问题就是gradient vanishing。上面说到在多层神经网络中使用sigmoid函数会导致梯度消失,无法收敛。原因就是,当神经网络进行误差反向传播梯度时,各层都要乘以激活函数的一阶导数
Grad = Error*Sigmoid’(x)*x,显而易见,经过每一层,Error都是成指数衰减,一旦神经网络层数太多的时候,梯度就会不停衰减直至消失,高层(靠近输出层)训练的比较好,而低层(靠近输入层)几乎由于梯度消失无法训练。神经网络的正向传播又是从低层开始的,高层再怎么训练也会被低层搞乱,使得低层学不动,高层在乱学,导致整个网络退化。
而ReLu激活函数的梯度为1,而且只有在x右半轴才饱和,这样使梯度可以很好的反向传播中传递,不但提高了网络的训练速度也避免了因为梯度消失导致的网络退化。

ReLu的使用,使网络引入了稀疏性并且大大缩短了学习周期,Deep
Learning中大部分激活函数都应该选择ReLu
。在Theano中,可以直接使用T.maximum(0,x)来实现( 用T.max(0,x)不能求导)。

二:Dropout
Layer

其实Dropout是一种特殊的正则化方法,不像L1和L2(两种通用正则化方法),它不用依靠修正cost
function来实现,它直接修正神经网络本身。Dropout的工作原理,简而言之就是随机的不让神经网络中某些神经元激活,可以理解成这些神经元暂时(临时)不属于网络结构中的一部分,但是该神经元的参数依旧要保存下来,因为下一次该神经元有可能是激活状态。下图形象对比了有无Dropout的情况。





我们可以自由的去选择禁止激活神经元的数量,70%,50%,30%等等,上图的Dropout禁止的数量是当前层神经元数目的1/3。Dropout可以看作是平均模型的一种(一种in place平均,当取50%时),它在深度神经网络中有很好的泛化能力,可以有效的减少overfitting。

加入了ReLu激活函数和Dropout,相信我们的卷积神经网络将会由更好的效果。下一篇让我们来做一下总结吧。

原文发于博客:http://blog.csdn.net/u013787595

GMX 2015.10.16 US Pacific Time
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: