如何选择激活函数;关于激活函数,你想要知道的都在这

激活函数

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

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

好的激活函数的特性

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

  2. 几乎处处可微:可微性保证了在优化中梯度的可计算性。(有限不可微的点影响不大),即保证了直接利用数值优化的方法学习网络参数的可能

  3. 计算简单/计算量小:提高网络计算效率。

  4. 非饱和性(no-saturation): 数学概念中,饱和指的是在某些区间梯度接近于零(即梯度消失),若$x \rightarrow-\infty$时导数$f^{\prime}(x) \rightarrow 0$,则称为左饱和;另一端为右饱和。使得参数无法继续更新的问题。ReLU在x<0的情况下, 梯度为0,也饱和,即dying ReLU

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

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

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

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

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

如何选择激活函数

  1. 首先尝试ReLU,速度快,但要注意训练的状态.
  2. 如果ReLU效果欠佳,尝试Leaky ReLU或Maxout等变种。
  3. 尝试tanh正切函数(以零点为中心,零点处梯度为1)
  4. sigmoid型函数(logistic/tanh)在RNN(LSTM、注意力机制等)结构中有所应用,作为门控或者概率值.
  5. 在浅层神经网络中,如不超过4层的,可选择使用多种激励函数,没有太大的影响.
  6. Kaiming He 也验证过maxout几乎能到the state of art的结果。两个maxout函数几乎可以拟合所有凸函数。

特例:LSTM

sigmoid/tanh在RNN(LSTM、注意力机制等)结构中有所应用,作为门控或者概率值。对于用在了状态和输出上,是对数据的处理,使用何种激活函数参考上述内容。

梯度消失问题和关于原点对称/以0为中心的问题

Sigmoid 型函数是指一类 S 型曲线函数,为两端饱和函数。常用的 Sigmoid型函数有 Logistic 函数和 Tanh 函数。

Tanh函数相当于放大并平移的logistic函数,$\tanh (x)=2 \sigma(2 x)-1$。因为这两个函数都是在中间(0 附近)近似线性,两端饱和。因此,这两个函数可以通过分段函数来近似。通过x=0位置的一阶泰勒展开可以得到分段函数近似的hard-sigmoid函数。

  1. 解释tanh 为什么相对收敛更快。(主要是tanh梯度消失问题较轻)

    $\begin{array}{l}{\tanh ^{\prime}(x)=1-\tanh (x)^{2} \in(0,1)} \ {\text { sigmoid: } s^{\prime}(x)=s(x)\times(1-s(x)) \in(0,1 / 4)}\end{array}$

  2. 以零为中心的影响

    Tanh函数的输出是零中心 化的(Zero-Centered),而 Logistic 函数的输出恒大于 0。非零中心化的输出会 使得其后一层的神经元的输入发生偏置偏移(Bias Shift),并进一步使得梯度下降的收敛速度变慢。

    如果当前参数$(w_0,w_1)$的最佳优化方向是$(+d_0, -d_1)$,则根据反向传播计算公式,我们希望$x_0$ 和 $x_1$符号相反。但是如果上一级神经元采用 Sigmoid 函数作为激活函数,sigmoid不以0为中心,输出值恒为正,那么我们无法进行最快的参数更新,而是走 Z 字形逼近最优解。

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

可视化

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

可视化详细页面

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


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


0%