神经网络中常见的几种激活函数

文章目录

  • 一、常见的几种激活函数
  • 1、Sigmoid函数:
  • 3、ReLU函数
  • 4、ELU函数
  • PReLU函数

一、常见的几种激活函数

1、Sigmoid函数:

神经网络中常见的几种激活函数_第1张图片
曲线:
神经网络中常见的几种激活函数_第2张图片
神经网络中常见的几种激活函数_第3张图片
导数:
在这里插入图片描述
在sigmod函数中我们可以看到,其输出是在(0,1)这个开区间内,这点很有意思,可以联想到概率,但是严格意义上讲,不要当成概率。sigmod函数曾经是比较流行的,它可以想象成一个神经元的放电率,在中间斜率比较大的地方是神经元的敏感区,在两边斜率很平缓的地方是神经元的抑制区。

缺陷

1、容易出现梯度消失(gradient  vanishing)的现象:当激活函数接近饱和区时,导数接近0,后向传递的数学依据是微积分求导的链式法则,当前导数需要之前各层导数的乘积,几个比较小的数相乘,导数结果很接近0,从而无法完成深层网络的训练。
2、幂运算相对耗时

为何会出现梯度消失
反向传播算法中,要对激活函数求导,sigmoid 原函数及导数图形如下:
神经网络中常见的几种激活函数_第4张图片
由图可知,导数从 0 开始很快就又趋近于 0 了,易造成“梯度消失”现象

  • Sigmoid 的软饱和性,使得深度神经网络在二三十年里一直难以有效的训练,是阻碍神经网络发展的重要原因。具体来说,由于在后向传递过程中,sigmoid向下传导的梯度包含了一个f‘(x) 因子(sigmoid关于输入的导数)

  • 因此一旦输入落入饱和区,f‘(x) 就会变得接近于0,导致了向底层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为梯度消失

  • 一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象[Understanding the difficulty of training deep feedforward neural networks]

梯度消失问题至今仍然存在,但被新的优化方法有效缓解了

Sigmoid 的饱和性虽然会导致梯度消失,但也有其有利的一面。例如它在物理意义上最为接近生物神经元。(0, 1) 的输出还可以被表示作概率,或用于输入的归一化,代表性的如Sigmoid交叉熵损失函数
#2、tanh函数
tanh函数公式和曲线如下:

神经网络中常见的几种激活函数_第5张图片
神经网络中常见的几种激活函数_第6张图片
神经网络中常见的几种激活函数_第7张图片
tanh是双曲正切函数,tanh函数和sigmod函数的曲线是比较相近的,咱们来比较一下看看。首先相同的是,这两个函数在输入很大或是很小的时候,输出都几乎平滑,梯度很小,不利于权重更新;不同的是输出区间,tanh的输出区间是在(-1,1)之间,而且整个函数是以0为中心的,这个特点比sigmod的好。

一般二分类问题中,隐藏层用tanh函数,输出层用sigmod函数。不过这些也都不是一成不变的,具体使用什么激活函数,还是要根据具体的问题来具体分析,还是要靠调试的。

3、ReLU函数

Rectified Linear Unit(ReLU) - 用于隐层神经元输出
公式:
在这里插入图片描述
曲线:
神经网络中常见的几种激活函数_第8张图片

ReLU(Rectified Linear Unit)函数是目前比较火的一个激活函数,相比于sigmod函数和tanh函数,它有以下几个优点:

  1. 在输入为正数的时候,不存在梯度饱和问题。

  2. 计算速度要快很多。ReLU函数只有线性关系,不管是前向传播还是反向传播,都比sigmod和tanh要快很多。(sigmod和tanh要计算指数,计算速度会比较慢)

缺点

  1. 当输入是负数的时候,ReLU是完全不被激活的,这就表明一旦输入到了负数,ReLU就会死掉。这样在前向传播过程中,还不算什么问题,有的区域是敏感的,有的是不敏感的。但是到了反向传播过程中,输入负数,梯度就会完全到0,这个和sigmod函数、tanh函数有一样的问题。

  2. 我们发现ReLU函数的输出要么是0,要么是正数,这也就是说,ReLU函数也不是以0为中心的函数。

4、ELU函数

神经网络中常见的几种激活函数_第9张图片
神经网络中常见的几种激活函数_第10张图片
ELU函数是针对ReLU函数的一个改进型,相比于ReLU函数,在输入为负数的情况下,是有一定的输出的,而且这部分输出还具有一定的抗干扰能力。这样可以消除ReLU死掉的问题,不过还是有梯度饱和和指数运算的问题。

PReLU函数

在这里插入图片描述
神经网络中常见的几种激活函数_第11张图片
PReLU也是针对ReLU的一个改进型,在负数区域内,PReLU有一个很小的斜率,这样也可以避免ReLU死掉的问题。相比于ELU,PReLU在负数区域内是线性运算,斜率虽然小,但是不会趋于0,这算是一定的优势吧。

我们看PReLU的公式,里面的参数α一般是取0~1之间的数,而且一般还是比较小的,如零点零几。当α=0.01时,我们叫PReLU为Leaky ReLU,算是PReLU的一种特殊情况吧。
Leaky-ReLU
神经网络中常见的几种激活函数_第12张图片
为了避免ReLU在x<0时的神经元死亡现象,添加了一个参数。
神经网络中常见的几种激活函数_第13张图片

原文链接:https://blog.csdn.net/kangyi411/article/details/78969642

你可能感兴趣的:(目标检测,神经网络,深度学习,机器学习)