激活函数汇总及各优缺点
文章目录
1. 什么是激活函数
如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数
2. 激活函数作用
如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。
如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
激活函数的主要作用是提供网络的非线性建模能力。如果没有激活函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。因此也可以认为,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。
3.激活函数特性
可微性: 当优化方法是基于梯度的时候,这个性质是必须的。
单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数。
输出值的范围: 当激活函数输出值是 有限 的时候,基于梯度的优化方法会更加 稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是 无限 的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的learning rate
从目前来看,常见的激活函数多是分段线性和具有指数形状的非线性函数
4.常用激活函数
4.1 sigmoid
sigmoid缺点:
- (1)sigmod函数要进行指数运算,这个对于计算机来说是比较慢的
- (2)当输入稍微远离了坐标原点,函数的梯度就变得很小了,几乎为零。反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练
- (3)函数输出不是以0为中心的,这样会使权重更新效率降低。
4.2 tanh
tanh也是一种非常常见的激活函数。
tanh优缺点:
优点:与sigmoid相比,它的输出均值是0,使得其收敛速度要比sigmoid快,减少迭代次数。
缺点:tanh一样具有软饱和性,从而造成梯度消失,在两边一样有趋近于0的情况
4.3 ReLU,P-ReLU, Leaky-ReLU
这就是Leaky-ReLU, 而P-ReLU认为,αα也可以作为一个参数来学习,原文献建议初始化a为0.25,不采用正则。
ReLU 的优点:
Krizhevsky et al. 发现使用 ReLU 得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多
ReLU 的缺点:
训练的时候很”脆弱”,很容易就”die”了
例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0.
如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了。
4.8 softmax函数
softmax函数和sigmoid异同