激活函数

对于神经网络,网络的每一层计算可以理解为$f(wx+b)=f(w\'x)$,每一层可以认为是每个权重矩阵$W$ 乘输入特征矩阵$X$。根据矩阵乘法,如果是线性激励,即激活函数为$f(x) = x$,多层网络相当于一层网络。比如:$​​f(W1*f(W2x))=W1 W2x=Wx$ 。

因此,需要引入非线性激活函数,对特征进行充分组合。也可以说相当于进行空间变换,使得原来线性不可解的问题有非线性的表达,找到非线性的解。

好的激活函数的特性

  1. 非线性,保证不会退回线性网络。

  2. 几乎处处可微:可微性保证了在优化中梯度的可计算性。(有限不可微的点影响不大)

  3. 计算简单/计算量小:

  4. 非饱和性(no-saturation): 饱和指的是在某些区间梯度接近于零(即梯度消失),使得参数无法继续更新的问题。ReLU在x<0的情况下, 梯度为0,也饱和,dying ReLU

  5. 单调性:导数符号不变

  6. 输出范围有限:有限的输出范围使得网络对于一些比较大的输入也会比较稳定(但可能会导致梯度消失,或者限制神经元表达能力)

  7. 接近恒等变换(identity):即约等于x。这样的好处是使得输出的幅值不会随着深度的增加而发生显著的增加,从而使网络更为稳定,同时梯度也能够更容易地回传。

  8. 参数少:Maxout,尽管本身没有参数,但在同样输出通道数下k路Maxout需要的输入通道数是其它函数的k倍,这意味着神经元数目也需要变为k倍;但如果不考虑维持输出通道数的情况下,该激活函数又能将参数个数减少为原来的k倍。

  9. 归一化(normalization):这个是最近才出来的概念,对应的激活函数是SELU[8],主要思想是使样本分布自动归一化到零均值、单位方差的分布,从而稳定训练。在这之前,这种归一化的思想也被用于网络结构的设计,比如Batch Normalization。

我们来看看,哪些激活函数能满足这些特性。

可视化

从下面的菜单中选择激活函数,以绘制它及其一阶导数。右侧的框中提供了与神经网络相关的一些属性。

版权所有为 David Sheehan 原blog地址为:Visualising Activation Functions in Neural Networks

Note: 注意:建议您在Chrome上查看以获得最佳体验。在Firefox和IE上,框中的等式可能无法呈现。


这种激活函数更具理论性而非实际性,模仿生物神经元的全有或全无特性。它对神经网络没有 用,因为它的导数是零(除了0,它是未定义的)。这意味着基于梯度的优化方法是不可行的。