概念
神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数。
激活函数做的事情时把神经元的输入通过函数计算保留有价值的特征并送入输出端。
通常我们的网络使用线性Linear构建,无论多少层,输出都是输入的线性组合,引入非线性的函数计算,输出的结果更丰富。最早用的激活函数为sigmoid或者tang这类函数。
采用sigmoid函数,计算量大,反向传播求梯度时,需要除法计算,计算量较大。对于深层网络,容易出现梯度消失现象。ReLu会使一部分神经元的输出为0,这样就造成了 网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。
激活函数形式
relu函数是常见的激活函数中的一种,表达形式如下:
Relu其实就是个取最大值的函数。
结论
1.sigmoid的导数只有在0附近的时候有比较好的激活性,在正负饱和区的梯度都接近于0,所以这会造成梯度弥散,而relu函数在大于0的部分梯度为常数,所以不会产生梯度弥散现象。
2.relu函数在负半区的导数为0 ,所以一旦神经元激活值进入负半区,那么梯度就会为0,而正值不变,这种操作被成为单侧抑制。在输入是负值的情况下,它会输出0,那么神经元就不会被激活。这意味着同一时间只有部分神经元会被激活,从而使得网络很稀疏,进而对计算来说是非常有效率的。正因为有了这单侧抑制,才使得神经网络中的神经元也具有了稀疏激活性。尤其体现在深度神经网络模型(如CNN)中,当模型增加N层之后,理论上ReLU神经元的激活率将降低2的N次方倍。
RELU实现稀疏后的模型能够更好的挖掘相关特征,拟合训练数据。
3.relu函数的导数计算更快,程序实现就是一个if-else语句,而sigmoid函数要进行浮点四则运算。
relu优点
1、没有饱和区,不存在梯度消失问题,防止梯度弥散;
2、稀疏性;
3、没有复杂的指数运算,计算简单、效率提高;
4、实际收敛速度较快,比 Sigmoid/tanh 快很多;
5、比 Sigmoid 更符合生物学神经激活机制。
sigmoid和tanh的gradient在饱和区域非常平缓,接近于0,很容易造成vanishing gradient的问题,减缓收敛速度。vanishing gradient在网络层数多的时候尤其明显,是加深网络结构的主要障碍之一。相反,Relu的gradient大多数情况下是常数,有助于解决深层网络的收敛问题。Relu的另一个优势是在生物上的合理性,它是单边的,相比sigmoid和tanh,更符合生物神经元的特征。
而提出sigmoid和tanh,主要是因为它们全程可导。还有表达区间问题,sigmoid和tanh区间是0到1,或着-1到1,在表达上,尤其是输出层的表达上有优势。
ReLU更容易学习优化。因为其分段线性性质,导致其前传,后传,求导都是分段线性。而传统的sigmoid函数,由于两端饱和,在传播过程中容易丢弃信息。
relu缺点
训练时候比较脆弱。例如一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了。如果这个情况发生了,那么这个神经元的梯度就永远都会是0。实际操作中,如果你的learning rate 很大,那么很有可能你网络中的40%的神经元都”dead”了。 当然,如果你设置了一个合适的较小的learning rate,这个问题发生的情况其实也不会太频繁。
参考自安全验证 - 知乎