激活函数
在先讲述Relu函数首先需要了解的是激活函数的含义,了解激活函数才能知道Relu函数的具体使用事项
定义
激活函数(Activation Function): 神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数。
作用
激活函数的作用为对模型加入非线性因素,因为线性模型其实现的表达效果没有非线性因素好。对于线性模型来说,无论是在神经网络里面有多少个隐藏层,其输出都是输入的线性组合,跟没有隐藏层效果相当,也就是说没有激活函数的每层都相当于矩阵相乘。那这样的话,网络的逼近能力就相当有限。
假如是所使用的激活函数是线性函数,则他预测的效果如下:
若使用的是非线性因素,则他的预测效果如下
Relu函数
定义
Relu函数是常见的激活函数中的一种,表达形式如下
函数图像所示:
从表达式和图像可以明显地看出:Relu其实就是个取最大值的函数。
而且根据Relu函数可以看的到在x小于0的情况下,其最后反馈的都是0,也就是在输入小于0的情况下,这个神经元还没有被激活,而当x大于0的情况下其输出的值就是x。这种操作被成为单侧抑制。使用这种方式意味着同一时间只有部分神经元会被激活,从而使得网络很稀疏。尤其体现在深度神经网络模型(如CNN)中,当模型增加N层之后,理论上ReLU神经元的激活率将降低2的N次方倍。
优势
1.没有饱和区,不存在梯度消失问题。
2.没有复杂的指数运算,计算简单、效率提高。
3.实际收敛速度较快,比 Sigmoid/tanh 快很多。
4.比 Sigmoid 更符合生物学神经激活机制。
缺点
Relu函数在使用时,非常脆弱。举个例子,当一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了。如果这个情况发生了,那么这个神经元的梯度就永远都会是0.实际操作中,如果你的learning rate 很大,那么很有可能你网络中的40%的神经元都”dead”了。