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

激活函数区别和作用

本质:
    激活函数是来向神经网络中引入非线性因素,通过激活函数,神经网络就可以拟合各种曲线。
    在神经网络中,我们经常可以看到对于某一个隐藏层的节点,该节点的激活值计算一般分为两步:
      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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容