修正线性单元(Rectified linear unit,ReLU)是神经网络中最常用的激活函数。它保留了 step 函数的生物学启发(只有输入超出阈值时神经元才激活),不过当输入为正的时候,导数不为零,从而允许基于梯度的学习(尽管在 x=0 的时候,导数是未定义的)。使用这个函数能使计算变得很快,因为无论是函数还是其导数都不包含复杂的数学运算。然而,当输入为负值的时候,ReLU 的学习速度可能会变得很慢,甚至使神经元直接无效,因为此时输入小于零而梯度为零,从而其权重无法得到更新,在剩下的训练过程中会一直保持静默。
综上可知,ReLu激活函数的优点是:
1,相比Sigmoid/tanh函数,使用梯度下降(GD)法时,收敛速度更快
2,相比Sigmoid/tanh函数,Relu只需要一个门限值,即可以得到激活值,计算速度更快
缺点是:
Relu的输入值为负的时候,输出始终为0,其一阶导数也始终为0,这样会导致神经元不能更新参数,也就是神经元不学习了,这种现象叫做“Dead Neuron”。
为了解决Relu函数这个缺点,在Relu函数的负半区间引入一个泄露(Leaky)值,所以称为Leaky Relu函数,如下图所示:
带泄露修正线性单元(Leaky ReLU)函数是经典(以及广泛使用的)的ReLu激活函数的变体,该函数输出对负值输入有很小的坡度。由于导数总是不为零,这能减少静默神经元的出现,允许基于梯度的学习(虽然会很慢),解决了Relu函数进入负区间后,导致神经元不学习的问题。
Andrew Ng说:
1,Leaky ReLU函数比ReLU函数效果好,但实际中Leaky ReLU并没有ReLU用的多。
2,除了输出层是一个二元分类问题外,基本不用Sigmoid函数
3,Relu是最常用的默认激活函数,若不确定用哪个激活函数,就使用Relu或者Leaky Relu
转载自作者:LabVIEW_Python
原文链接:https://www.jianshu.com/p/7c57e42e88e8