卷积神经网络(四)

一: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函数会导致梯度消失,无法收敛。原因就是,当神经网络进行误差反向传播梯度时,各层都要乘以**函数的一阶导数
GraError*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,相信我们的卷积神经网络将会由更好的效果。下一篇让我们来做一下总结吧。

Created by 苑鹏掣

卷积神经网络(四)