美文网首页
机器学习笔记(五)——激活函数

机器学习笔记(五)——激活函数

作者: ____X | 来源:发表于2020-02-29 16:30 被阅读0次

    激活函数区别和作用

    本质:
        激活函数是来向神经网络中引入非线性因素,通过激活函数,神经网络就可以拟合各种曲线。
        在神经网络中,我们经常可以看到对于某一个隐藏层的节点,该节点的激活值计算一般分为两步:
          1.输入该节点的值为x1,x2 时,在进入这个隐藏节点后,会先进行一个线性变换,计算出值 z^{\left [ 1 \right ]} = w_{1}x_{1} + w_{2}x_{2}+ b^{\left [ 1 \right ]} = W^{\left [ 1 \right ]}x+b^{\left [ 1 \right ]},上标 [1]表示第 1 层隐藏层。
          2.再进行一个非线性变换,也就是经过非线性激活函数,计算出该节点的输出值(激活值) \alpha ^{(1)} = \sigma (z^{(1)}),其中 \sigma (z) 为非线性函数。

    激活函数.png

    常见的激活函数

        在深度学习中,常用的激活函数主要有:sigmoid函数tanh函数ReLU函数softmax函数。下面我们将一一介绍。

    1.sigmoid函数

        sigmoid函数是将(-∞,+∞)的数映射到(0,1)之间。sigmoid函数的公式以及图形如下:
    g(z)=\frac{1}{1+e^{-z}}

    sigmoid.png

        sigmoid函数作为非线性激活函数,但其很少被使用,因为又以下几个缺点:
          1.sigmoid极容易导致梯度消失问题。sigmoid神经元在值为0或1的时候接近饱和,在这些区域梯度将接近于0,使得梯度更新十分缓慢,即梯度消失;
          2.计算费时;
            a.计算sigmoid函数中,幂计算会导致耗时增加;
            b. 函数的输出不是以0为均值,将不便于下层的计算;
          3. sigmoid函数不是关于原点中心对称的(zero-centered),Sigmoid函数的输出值恒大于0,这会导致模型训练的收敛速度变慢。

    2.tanh函数

        tanh函数相较于sigmoid函数要常见一些,tanh函数将取值为(-∞,+∞)的数映射到(-1,1)之间。tanh函数在0附近很短的一段区域可以近似看作线性。tanh函数均值为0,弥补了sigmoid函数均值为0.5的缺点,解决了sigmoid中的zero-centered问题,但同样也存在着梯度消失的问题。tanh函数的公式以及图形如下:
    g(z)=\frac{e^{z}-e^{-z}}{e^{z}+e^{-z}}

    tanh.png

        特征其实与sigmoid激活函数相似,解决了sigmoid函数的zero-centered问题,但仍然存在梯度消失的问题。

    3.ReLU函数

        ReLU函数又称为修正线性单元(Rectified Linear Unit),是一种分段线性函数,其弥补了sigmoid函数以及tanh函数的梯度消失问题。ReLU函数的公式以及图形如下:
    g(z)=\left\{\begin{matrix} z,if\; z>0\\ 0,if\; z<0 \end{matrix}\right.

    ReLU.png

    g^{'}(z)=\left\{\begin{matrix} 1,if\; z>0\\ 0,if\; z<0 \end{matrix}\right.
        ReLU函数的优点
          1. 在输入为正数的时候,解决了梯度消失问题;
          2. 计算速度非常快,只需要判断输入是否大于0,只有线性关系,不管是前向传播还是反向传播,都比sigmoid和tanh要快很多(sigmoid和tanh要计算指数);
          3. 收敛速度远快于sigmoid和tanh
        虽然ReLU很不错,但依旧有一些缺点
          1. ReLU的输出不是zero-centered
          2. 当输入为负时,产生梯度消失。Dead ReLU Problem,由于ReLU在小于0时梯度为0,导致其相应的参数永远不能被更新,这以为这某些神经元可能永远不会被激活。
        尽管ReLU激活函数存在一些问题,但它目前仍然是最常用的Activation Function,在构建人工神经网络的时候推荐优先尝试。

    4.Leaky-ReLU函数

        为了解决ReLU函数的Dead ReLU Problem,人们提出了将ReLU函数的前半段设为固定值α,这就是Leaky-ReLU函数。Leaky-ReLU函数的公式以及图形如下:
    g(z)=\left\{\begin{matrix} z,if\; z>0\\ \alpha\! z,if\; z<0 \end{matrix}\right.

    Leaky-ReLU.png

        理论上来讲,Leaky-ReLU具有ReLU函数的所有有点,也克服了Dead ReLU Problem。

    5.PReLU函数(Parametric Rectified Linear Unit)

        参数化修正线性单元(Parameteric Rectified Linear Unit,PReLU)属于 ReLU 修正类激活函数的一员。它和 RReLU 以及 Leaky ReLU 有一些共同点,即为负值输入添加了一个线性项。而最关键的区别是,这个线性项的斜率实际上是在模型训练中学习到的。
        如果α=0,那么PReLU退化为ReLU;如果α是一个很小的固定值(如α=0.01),则PReLU退化为Leaky ReLU(LReLU)。PReLU是通过在训练中,根据数据自学习参数得到α。 有实验证明,与ReLU相比,LReLU对最终的结果几乎没什么影响。

    6.ELU (Exponential Linear Units)

    f(x)=\left\{\begin{matrix} x,if\; x>0\\ \alpha (e^{x}-1),otherwise \end{matrix}\right.

    ELU.png
        ELU也是为解决ReLU存在的问题而提出,显然,ELU有ReLU的基本所有优点,以及:
    • 融合了sigmoid和ReLU,左侧具有软饱和性,右侧无饱和性;
    • 右侧线性部分使得ELU能够缓解梯度消失,而左侧软饱能够让ELU对输入变化或噪声更鲁棒,不会有Dead ReLU问题;
    • ELU的输出均值接近于零,所以收敛速度更快。

        它还有的一个小问题在于计算量稍大。类似于Leaky ReLU,理论上虽然好于ReLU,但在实际使用中目前并没有好的证据ELU总是优于ReLU。

    总结

    summary.png

    收集与:
    https://www.cnblogs.com/lliuye/p/9486500.html
    https://zhuanlan.zhihu.com/p/44398148
    https://liam.page/2018/04/17/zero-centered-active-function/
    https://zhuanlan.zhihu.com/p/25110450
    https://www.cnblogs.com/jins-note/p/9646602.html
    https://blog.csdn.net/zrh_CSDN/article/details/81266188

    相关文章

      网友评论

          本文标题:机器学习笔记(五)——激活函数

          本文链接:https://www.haomeiwen.com/subject/igxfhhtx.html