ReLU激活函数

激活函数(Activation Function),就是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。引入激活函数是为了增加神经网络模型的非线性。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。

如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机(Perceptron)。如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

Relu激活函数(The Rectified Linear Unit)修正线性单元,用于隐层神经元输出。公式如下

函数图像如下
  

ReLU激活函数_第1张图片

从ReLU函数图像可知,它是分段线性函数,所有的负值和0为0,所有的正值不变,这种操作被称为单侧抑制ReLU函数图像其实也可以不是这个样子,只要能起到单侧抑制的作用,对原图翻转、镜像都可以。

当训练一个深度分类模型的时候,和目标相关的特征往往也就那么几个,因此通过ReLU实现稀疏后的模型能够更好地挖掘相关特征,拟合训练数据。正因为有了这单侧抑制,才使得神经网络中的神经元也具有了稀疏激活性。尤其体现在深度神经网络模型(如CNN)中,当模型增加N层之后,理论上ReLU神经元的激活率将降低2的N次方倍

不用simgoid和tanh作为激活函数,而用ReLU作为激活函数的原因是:加速收敛。因为sigmoid和tanh都是饱和(saturating)的。何为饱和?可理解为把这两者的函数曲线和导数曲线plot出来:他们的导数都是倒过来的碗状,也就是越接近目标,对应的导数越小。而ReLu的导数对于大于0的部分恒为1。于是ReLU确实可以在BP的时候能够将梯度很好地传到较前面的网络。

一般情况下,使用ReLU会比较好

1、使用 ReLU,就要注意设置 learning rate,不要让网络训练过程中出现很多 “dead” 神经元;

2、如果“dead”无法解决,可以尝试 Leaky ReLU、PReLU 、RReLU等Relu变体来替代ReLU;

3、不建议使用 sigmoid,如果一定要使用,也可以用 tanh来替代。

 

 

 

你可能感兴趣的:(深度学习)