常用激活函数汇总

激活函数

一、什么是激活函数

所谓激活函数(Activation Function),就是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。

二、激活函数为什么是非线性的?

如果使用线性激活函数,那么输入跟输出之间的关系为线性的,无论神经网络有多少层都是线性组合。

使用非线性激活函数是为了增加神经网络模型的非线性因素,以便使网络更加强大,增加它的能力,使它可以学习复杂的事物,复杂的表单数据,以及表示输入输出之间非线性的复杂的任意函数映射。

输出层可能会使用线性激活函数,但在隐含层都使用非线性激活函数。

三、激活函数的作用

如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机(Perceptron)。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。

如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

四、常用的激活函数

1. sigmoid

公式:

σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+ex1

对其求导数:

σ ′ ( x ) = e − x ( 1 + e − x ) 2 = σ ( x ) ( 1 − σ ( x ) ) \sigma^{'} (x) = \frac{e^{-x}}{(1+e^{-x})^2} = \sigma(x) (1-\sigma(x)) σ(x)=(1+ex)2ex=σ(x)(1σ(x))

图示:
在这里插入图片描述

优点:

  • sigmoid 函数的输出在(0, 1)之间,输出范围有限,优化稳定,可以用作输出层。
  • 连续函数便于求导。
  • Sigmoid函数比Tanh函数梯度收敛更为平滑。

缺点:

  • sigmoid 函数输入的值趋于正无穷或负无穷时,梯度会趋近零,权重基本不会更新, 从而发生梯度弥散现象
  • sigmoid函数的输出恒为正值,不是以零为中心的,这会导致权值更新时只能朝一个方向更新,从而影响收敛速度
  • 计算复杂度高,因为sigmoid函数是指数形式。

2. Tanh

双曲正切函数。

公式:

t a n h ( x ) = e x − e − x e x + e − x tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} tanh(x)=ex+exexex

对其求导数:

t a n h ′ ( x ) = 1 − t a n h 2 ( x ) tanh'(x) = 1 - tanh^2(x) tanh(x)=1tanh2(x)

图示:

在这里插入图片描述

与 sigmoid 函数的关系:

2 σ ( x ) − 1 = t a n h ( x 2 ) 2 \sigma(x) -1 = tanh(\frac{x}{2}) 2σ(x)1=tanh(2x)

优点:

  • Tanh函数是是以零为中心的对称函数,收敛速度快, 因此实际应用中 Tanh 会比 sigmoid 更好。

缺点:

  • 仍然存在梯度饱和与exp计算的问题。

3. ReLU

线性整流函数。

公式:

f ( x ) = m a x ( 0 , x ) f(x) = max(0, x) f(x)=max(0,x)

对其求导数:

f ′ ( x ) = { 0 , i f x < 0 ; 1 , i f x > 0 ; f'(x) = \bigg\{ \begin{matrix} 0, \quad if \quad x < 0; \\ 1, \quad if \quad x > 0; \end{matrix} f(x)={0,ifx<0;1,ifx>0;

图示:

在这里插入图片描述

优点:

  • 使用ReLU的SGD算法的收敛速度比 sigmoid 和 tanh 快,因为没有了指数运算.
  • 在x>0区域上,不会出现梯度饱和、梯度消失的问题。

缺点:

  • ReLU的输出不是以0为均值的。
  • ReLU不会对数据做幅度压缩,所以数据的幅度会随着模型层数的增加不断扩张。
  • ReLU在零点不可导,在做反向传播的计算时,对ReLu这个函数的导数分情况讨论,即ReLU在零点时人为地给它赋予一个导数,比如0或者1.
  • Dead ReLU Problem(神经元坏死现象):ReLU在负数区域被直接置0的现象叫做dead relu。在x<0时,梯度为0。这个神经元及之后的神经元梯度永远为0,不再对任何数据有所响应,导致相应参数永远不会被更新。

但是dead ReLU是一个动态的问题,而并不是一个永久性问题,只要不是所有输入都小于0,神经元就可以保持活跃,权重可以更新,网络可以继续学习。因此,dead的relu也是可以复活的。

4. Leaky ReLU

渗漏整流线性单元(Leaky ReLU),为了解决dead ReLU现象。用一个类似0.01的小值来初始化神经元,从而使得ReLU在负数区域更偏向于激活而不是死掉。这里的斜率都是确定的。

公式:

f ( x ) = { x , i f x ≥ 0 ; α x , i f x < 0 ; α ∼ U ( l , u ) , l < u a n d l , u ∈ [ 0 , 1 ) f(x) = \bigg\{ \begin{matrix} x, \quad if \quad x \geq 0; \\ \alpha x, \quad if \quad x < 0; \end{matrix} \\ \alpha \sim U(l, u), \quad l < u\quad and \quad l, u \in [0, 1) f(x)={x,ifx0;αx,ifx<0;αU(l,u),l<uandl,u[0,1)

对其求导数:

f ′ ( x ) = { 1 , i f x ≥ 0 ; α , i f x < 0 ; α ∼ U ( l , u ) , l < u a n d l , u ∈ [ 0 , 1 ) f'(x) = \bigg\{ \begin{matrix} 1, \quad if \quad x \geq 0; \\ \alpha, \quad if \quad x < 0; \end{matrix} \\ \alpha \sim U(l, u), \quad l < u\quad and \quad l, u \in [0, 1) f(x)={1,ifx0;α,ifx<0;αU(l,u),l<uandl,u[0,1)

图示:

在这里插入图片描述

优点:

  • 解决dead ReLU问题.

缺点:

  • 有些近似线性,导致在复杂分类中效果不好。

5. PReLU

参数整流线性单元(Parametric Rectified linear unit),也是用来解决ReLU带来的dead relu的问题。PReLU可以看作是Leaky ReLU的一个变体。在PReLU中,负值部分的斜率是根据数据来定的,而非预先定义的。

公式:

f ( x ) = m a x ( α x , x ) f(x) = max(\alpha x , x) f(x)=max(αx,x)

对其求导数:

f ′ ( x ) = { 1 , i f x ≥ 0 ; α , i f x < 0 ; f'(x) = \bigg\{ \begin{matrix} 1, \quad if \quad x \geq 0; \\ \alpha, \quad if \quad x < 0; \end{matrix} \\ f(x)={1,ifx0;α,ifx<0;

图示:

在这里插入图片描述

其中 α \alpha α通过反向传播学习出来的,而不是预先设定的.

优点:

  • 解决dead ReLU问题.

缺点:

  • α \alpha α 是通过反向传播学习出来的,而不是预先设定的.

6. ELU

指数线性单元(ELU).

公式:

f ( x ) = { x , i f x ≥ 0 ; α ( e x − 1 ) , i f x < 0 ; f(x) = \bigg\{ \begin{matrix} x, &\quad if \quad x \geq 0; \\ \alpha (e^x - 1), &\quad if \quad x < 0; \end{matrix} \\ f(x)={x,α(ex1),ifx0;ifx<0;

其中 α = 1 \alpha = 1 α=1

对其求导数:

f ′ ( x ) = { 1 , i f x ≥ 0 ; α e x , i f x < 0 ; f'(x) = \bigg\{ \begin{matrix} 1, &\quad if \quad x \geq 0; \\ \alpha e^x, &\quad if \quad x < 0; \end{matrix} \\ f(x)={1,αex,ifx0;ifx<0;

图示:

在这里插入图片描述

优点:

  • 解决dead ReLU问题.
  • 与ReLU相比,ELU有负值,这会使激活的平均值接近零。均值激活接近于零可以使学习更快,因为它们使梯度更接近自然梯度。ELU 在较小的输入下会饱和至负值,从而减少前向传播的变异和信息。

缺点:

  • 有指数的计算,速度会慢.
  • α \alpha α 是人工指定的超参数

7. SELU

缩放指数线性单元(scaled exponential linear units).

公式:

f ( x ) = λ { x , i f x > 0 ; α ( e x − 1 ) , i f x ≤ 0 ; f(x) = \lambda \bigg\{ \begin{matrix} x, &\quad if \quad x > 0; \\ \alpha (e^x - 1), &\quad if \quad x \leq 0; \end{matrix} \\ f(x)=λ{x,α(ex1),ifx>0;ifx0;

其中 α ≈ 1.6733 \alpha \approx 1.6733 α1.6733, λ ≈ 1.0507 \lambda \approx 1.0507 λ1.0507

对其求导数:

f ′ ( x ) = { λ , i f x > 0 ; λ α e x , i f x ≤ 0 ; f'(x) = \bigg\{ \begin{matrix} \lambda, &\quad if \quad x > 0; \\ \lambda \alpha e^x , &\quad if \quad x \leq 0; \end{matrix} \\ f(x)={λ,λαex,ifx>0;ifx0;

8. ReLU6

ReLU的变形.

公式:

R e L U 6 ( x ) = m i n ( 6 , m a x ( 0 , x ) ) ReLU6(x) = min(6, max(0, x)) ReLU6(x)=min(6,max(0,x))

对其求导数:

f ′ ( x ) = { 0 , i f x < 0 o r x > 6 ; 1 , i f x > 0 ; f'(x) = \bigg\{ \begin{matrix} 0, &\quad if \quad x < 0 \quad or \quad x > 6; \\ 1, &\quad if \quad x > 0; \end{matrix} f(x)={0,1,ifx<0orx>6;ifx>0;

图示:

在这里插入图片描述

优点:

  • 在x>0处做了幅度的限制,防止数值爆炸.
  • 增强浮点数的小数位表达能力。因为整数位最大是6,所以只占3个bit,其他bit全部用来表达小数位。
  • 可以让模型更早地学到稀疏特征(相对于relu而言,更容易出现权重不更新的现象,因为取值一旦小于0或超过6,则权重停止更新,直接输出常数0或6,训练的过程中可能出现的情况就是有用的输入特征和权重不断得到更新,无用的特征和权重停止更新输出常数,ps:relu也是可以学到稀疏特征的);

缺点:

  • dead ReLU的问题
  • ReLU的输出不是以0为均值的。

9. Swish

公式:

f ( x ) = x ∗ σ ( β x ) f(x) = x * \sigma(\beta x) f(x)=xσ(βx)

其中 σ ( ⋅ ) \sigma(\cdot) σ()是sigmoid函数. β \beta β 可以是固定的,也可以是训练出来的. 如果 β = 1 \beta = 1 β=1 就和SiLU是一样的.

对其求导数:

f ′ ( x ) = σ ( β x ) + β x ⋅ σ ( β x ) ( 1 − σ ( β x ) ) = σ ( β x ) + β x ⋅ σ ( β x ) − β x ⋅ σ ( β x ) 2 = β x ⋅ σ ( x ) + σ ( β x ) ( 1 − β x ⋅ σ ( β x ) ) = β f ( x ) + σ ( β x ) ( 1 − β f ( x ) ) \begin{matrix} f'(x) = &\sigma(\beta x) + \beta x \cdot \sigma(\beta x)(1 - \sigma(\beta x)) \\ = &\sigma(\beta x) + \beta x \cdot \sigma(\beta x) - \beta x \cdot \sigma(\beta x)^2 \\ = &\beta x \cdot \sigma(x) + \sigma(\beta x)(1- \beta x \cdot \sigma(\beta x)) \\ = &\beta f(x) + \sigma(\beta x) (1 - \beta f(x)) \end{matrix} f(x)====σ(βx)+βxσ(βx)(1σ(βx))σ(βx)+βxσ(βx)βxσ(βx)2βxσ(x)+σ(βx)(1βxσ(βx))βf(x)+σ(βx)(1βf(x))

图示:
在这里插入图片描述

优点:

  • 在x进入负半轴初期,依然会有一个较大的梯度帮助收敛,随着x在负半轴中取负值越来越大,梯度逐渐减小。
  • 在x取负半轴中一个非常大的值时,f(x)会接近0,保持了原来ReLU的特性。

缺点:

  • 指数计算,在移动设备上计算花费很大.

10. Hard-Swish

MobileNetV3上面使用的激活函数.对swish进行优化

公式:

h-swish(x) = x ReLU6(x+3) 6 \text{h-swish(x)} = x \frac{\text{ReLU6(x+3)}}{6} h-swish(x)=x6ReLU6(x+3)

或者

h-swish(x) = { 0 , i f x ≤ − 3 x , i f x ≥ 3 x ( x + 3 ) 6 , o t h e r w i s e \text{h-swish(x)} = \bigg \{ \begin{matrix} 0, & if \quad x \leq -3 \\ x , & if \quad x \geq 3 \\ \frac{x(x+3)}{6}, & otherwise \end{matrix} h-swish(x)={0,x,6x(x+3),ifx3ifx3otherwise

对其求导数:

f ′ ( x ) = { 0 , i f x ≤ − 3 1 , i f x ≥ 3 2 x + 3 6 , o t h e r w i s e f'(x) = \bigg \{ \begin{matrix} 0, & if \quad x \leq -3 \\ 1 , & if \quad x \geq 3 \\ \frac{2x+3}{6}, & otherwise \end{matrix} f(x)={0,1,62x+3,ifx3ifx3otherwise

图示:
在这里插入图片描述

优点:

  • 减少指数的计算,在嵌入式平台性能较好,保持了swish的优势.
  • 在实践中,hardswish激活函数可以实现为分段功能,以减少内存访问次数,从而大大降低了等待时间成本。

缺点:

  • 无上界

11. SoftPlus

可以看作是ReLU的平滑.

公式:

f ( x ) = l n ( 1 + e x ) f(x) = ln(1+e^x) f(x)=ln(1+ex)

对其求导数:

f ′ ( x ) = 1 1 + e − x f'(x) = \frac{1}{1+ e^{-x}} f(x)=1+ex1
它的导数是sigmoid函数

图示:

在这里插入图片描述

优点:

  • 值域不包含0,解决了dead relu的问题,但不包含负区间,不能加速学习.
  • 约束神经元输出恒大于0,可以用在一些必须为正的量的映射上,比如标准差

缺点:

  • 指数运算
  • 函数不穿过0,导致反向传播时出现zigzag现象,收敛慢

12. Mish

YOLOv4采用的激活函数

公式:
f ( x ) = x ∗ tanh ( softplus ( x ) ) f(x) = x * \text{tanh} (\text{softplus}(x)) f(x)=xtanh(softplus(x))

对其求导数:

f ′ ( x ) = e x ( 4 ( x + 1 ) + 4 e 2 x + e 3 x + e x ( 4 x + 6 ) ) ( 2 e x + e 2 x + 2 ) 2 f'(x) = \frac{e^x(4(x+1) + 4e^{2x} + e^{3x} + e^x(4x+6))}{(2e^x+e^{2x}+2)^2} f(x)=(2ex+e2x+2)2ex(4(x+1)+4e2x+e3x+ex(4x+6))

图示:

在这里插入图片描述

优点:

  • Mish是一个光滑、连续、自正则化、非单调的激活函数。
  • Mish是有下界、无上界的激活函数. Mish避免了饱和,不会导致梯度消失;有下界会导致强正则化的特性。
  • Mish又是连续可微的,这避免了奇异点,在执行基于梯度的优化时避免了不必要的副作用。
  • 拥有平滑的轮廓对梯度的流动起到了很好的作用,有助于更容易的优化和更好的泛化。
  • 解决dead relu问题

缺点:

  • 指数运算

13. Softmax

**softmax通常来讲是激活函数,但是softmax函数要与交叉熵损失函数一起使用来避免数值溢出的问题。**所以,在我们的深度学习框架中,在网络构造中通常是看不见softmax函数的,而在我们调用交叉熵损失函数时(cross-entropy),框架会在cross-entropy之前自动为我们添加softmax函数。

Reference

  1. https://zhuanlan.zhihu.com/p/337902763
  2. https://zhuanlan.zhihu.com/p/427092022
  3. https://zhuanlan.zhihu.com/p/494343453
  4. https://zhuanlan.zhihu.com/p/461707201
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值