说明

本文对深度学习中的重要组件——激活函数做系统性汇总。

了解激活函数

什么是激活函数

在神经网络中,一个节点的激活函数(Activation Function)定义了该节点在给定的输入变量或输入集合下的输出。wiki中以计算机芯片电路为例,标准的计算机芯片电路可以看作是根据输入得到开(1)或关(0)输出的数字电路激活函数。激活函数主要用于提升神经网络解决非线性问题的能力。激活函数各式各样,各有优缺点,目前常用的有 ReLU、sigmoid、tanh等。各个激活函数的细节详见下文。

为什么需要激活函数

当不用激活函数时,神经网络的权重和偏差只会进行线性变换。线性方程很简单,但是解决复杂问题的能力有限。没有激活函数的神经网络实质上就是一个线性回归模型。为了方便理解,以一个简单的例子来说明。考虑如下网络

一个简单神经网络图

在不用激活函数的情况下,该图可用如下公式表示

实质是的线性方程。

若在隐藏层引入激活函数,例如令,那么原始式子就无法用简单线性方程表示了。

激活函数类型

wiki中给出了激活函数的类型,这里略做归纳

Identity function (恒等函数)

Step function (阶跃函数)

Sigmoidal function (S形函数)

Ramp function (斜坡函数)

Binary 和 Bipolar 的区别应该是 Binary(单位)对应值为 0 或 1, Bipolar(两极)对应值为 -1 或 1

激活函数的一些特性

非线性(Nonlinear) 当激活函数是非线性的,那么一个两层神经网络也证明是一个通用近似函数通用近似理论。而恒等激活函数则无法满足这一特性,当多层网络的每一层都是恒等激活函数时,该网络实质等同于一个单层网络。

输出值域(Range) 若激活函数的值域是有限的,因为对权重的更新影响有限,所以基于梯度的训练方法更稳定。若值域是无限的,因为大多数情况下权重更新更明显,所以训练通常更有效,通常需要设定较小的学习率。

连续可微(Continuously differentiable) 通常情况下,当激活函数连续可微,则可以用基于梯度的优化方法。(也有例外,如ReLU函数虽不是连续可微,使用梯度优化也存在一些问题,如ReLU存在由于梯度过大或学习率过大而导致某个神经元输出小于0,从而使得该神经元输出始终是0,并且无法对与其相连的神经元参数进行更新,相当于该神经元进入了“休眠”状态,参考深度学习中,使用relu存在梯度过大导致神经元“死亡”,怎么理解? - 知乎,但ReLU还是可以使用梯度优化的。)二值阶跃函数在0处不可微,并且在其他地方的导数是零,所以梯度优化方法不适用于该激活函数。

单调(Monotonic) 当激活函数为单调函数时,单层模型的误差曲面一定是凸面。即对应的误差函数是凸函数,求得的最小值一定是全局最小值。

一阶导单调(Smooth functions with a monotonic derivative) 通常情况下,这些函数表现更好。

原点近似恒等函数(Approximates identity near the origin) 若激活函数有这一特性,神经网络在随机初始化较小的权重时学习更高效。若激活函数不具备这一特性,初始化权重时必须特别小心。参考machine learning - Why activation functions that approximate the identity near origin are preferable? - Cross Validated

激活函数速查表

以下是输入为一个变量的激活函数列表,主要参考自 wiki

函数

图形

值域

连续性

单调

一阶导单调

原点近似恒等

Identity(恒等函数)

Binary step(单位阶跃函数)

Sigmoid(S函数又称Logistic逻辑函数)

TanH(双曲正切函数)

ArcTan(反正切函数)

Softsign函数

Inverse square root unit(反平方根函数,ISRU)

Inverse square root linear unit(反平方根线性函数,ISRLU)

Square Nonlinearity(平方非线性函数,SQNL)

Rectified linear unit(线性整流函数,ReLU)

Bipolar rectified linear unit(二级线性整流函数,BReLU)

Leaky rectified linear unit(带泄露随机线性整流函数,Leaky ReLU)

Parameteric rectified linear unit(参数化线性整流函数,PReLU)

是 iff

是 iff

Randomized leaky rectified linear unit(带泄露随机线性整流函数,RReLU)

Exponential linear unit(指数线性函数,ELU)

是 iff

是 iff

是 iff

Scaled exponential linear unit(扩展指数线性函数,SELU)

S-shaped rectified linear activation unit(S型线性整流激活函数,SReLU)

Adaptive piecewise linear(自适应分段线性函数,APL)

SoftPlus函数

Bent identity(弯曲恒等函数)

Sigmoid-weighted linear unit (SiLU)[11] (也被称为Swish[12])

SoftExponential函数

是 iff

Soft Clipping(柔性剪峰函数)

Sinusoid(正弦函数)

Sinc函数

Gaussian(高斯函数)

Hard Sigmoid(分段近似Sigmoid函数)

Hard Tanh(分段近似Tanh函数)

LeCun Tanh(也称Scaled Tanh,按比例缩放的Tanh函数)

Symmetrical Sigmoid(对称Sigmoid函数)

Complementary Log Log函数

Absolute(绝对值函数)

激活函数详细描述

函数图形说明

函数图形主要取自Visualising Activation Functions in Neural Networks。

左侧蓝线是激活函数方程式图形,黄色是激活函数一阶导图形。

右侧篮框是对激活函数方程式的各项特性描述,包括:

Range(激活函数输出值域)

Monotonic(激活函数是否单调)

Continuity(激活函数连续性类型)

Identity at Origin(激活函数在原点处是否近似恒等)

Symmetry(激活函数是否对称)

右侧黄框是对激活函数一阶导的各项特性描述,包括:

Range(一阶导输出值域)

Monotonic(一阶导是否单调)

Continuous(一阶导是否连续)

Vanishing Gradient(是否梯度消失:指随着网络向后传递,是否存在当梯度值过小时,梯度变化以指数形式衰减,直至消失,导致后面的网络节点几乎无法更新参数)

Exploding Gradient(是否梯度爆炸:指是否存在当梯度值过大,梯度变化以指数形式增加,直至爆炸)

Saturation(饱和:指激活函数值接近其边界时,如sigmoid函数值接近0或1时,函数曲线是否平缓,过于平缓可能会导致在向后传播时梯度消失)

Dead Neurons(神经元死亡:指在网络传播时,是否会出现某个神经元永远不会再更新的情况)

Identity(恒等函数)

描述: 一种输入和输出相等的激活函数,比较适合线性问题,如线性回归问题。但不适用于解决非线性问题。

方程式:

一阶导:

图形:

Binary step(单位阶跃函数)

描述: step与神经元激活的含义最贴近,指当刺激超过阈值时才会激发。但是由于该函数的梯度始终为0,不能作为深度网络的激活函数

方程式:

一阶导:

图形:

Sigmoid(S函数又称Logistic逻辑函数)

描述: 使用很广的一类激活函数,具有指数函数形状,在物理意义上最接近生物神经元。并且值域在(0,1)之间,可以作为概率表示。该函数也通常用于对输入的归一化,如Sigmoid交叉熵损失函数。Sigmoid激活函数具有梯度消失和饱和的问题,一般来说,sigmoid网络在5层之内就会产生梯度消失现象。

方程式:

一阶导:

图形:

TanH(双曲正切函数)

描述: TanH与Sigmoid函数类似,在输入很大或很小时,输出几乎平滑,梯度很小,不利于权重更新,容易出现梯度消失和饱和的问题。不过TanH函数值域在(-1,1)之间,以0为中心反对称,且原点近似恒等,这些点是加分项。一般二分类问题中,隐藏层用tanh函数,输出层用sigmod函数。

方程式:

一阶导:

图形:

ArcTan(反正切函数)

描述: ArcTen从图形上看类似TanH函数,只是比TanH平缓,值域更大。从一阶导看出导数趋于零的速度比较慢,因此训练比较快。

方程式:

一阶导:

图形:

Softsign函数

描述: Softsign从图形上看也类似TanH函数,以0为中心反对称,训练比较快。

方程式:

一阶导:

图形:

Inverse square root unit(反平方根函数,ISRU)

描述: 图形类似于tanH和Sigmoid函数,论文说可作为RNN层的激活函数,号称在RNN层中达到与tanh和sigmoid一样效果的情况下,计算复杂度更低。

方程式:

一阶导:

图形:

Inverse square root linear unit(反平方根线性函数,ISRLU)

描述: 一个分段函数,小于0部分是ISRU,大于等于0部分是恒等函数,论文里说这函数在CNN层上相较于ReLU学习更快,更一般化。

方程式:

一阶导:

图形:

Square Nonlinearity(平方非线性函数,SQNL)

描述: 类似Softsign的函数,论文摘要中将这个与Softsign对比,说该函数在收敛速度上更快。

方程式:

一阶导:

图形:

Rectified linear unit(线性整流函数,ReLU)

描述: 比较流行的激活函数,该函数保留了类似step那样的生物学神经元机制,即高于0才激活,不过因在0以下的导数都是0,可能会引起学习缓慢甚至神经元死亡的情况。

方程式:

一阶导:

图形:

Bipolar rectified linear unit(二级线性整流函数,BReLU)

描述: relu系列的一种激活函数,形式很奇怪,采用mod 2作为条件分段,论文说在个别场景上能取得更好的效果。

方程式:

一阶导:

图形:

Leaky rectified linear unit(带泄露随机线性整流函数,Leaky ReLU)

描述: relu的一个变化,即在小于0部分不等于0,而是加一个很小的不为零的斜率,减少神经元死亡带来的影响。

方程式:

一阶导:

图形:

Parameteric rectified linear unit(参数化线性整流函数,PReLU)

描述: 也是ReLU的一个变化,与Leaky ReLU类似,只不过PReLU将小于零部分的斜率换成了可变参数α。这种变化使值域会依据α不同而不同。

方程式:

一阶导:

图形:

Randomized leaky rectified linear unit(带泄露随机线性整流函数,RReLU)

描述: 在PReLU基础上将α变成了随机数。参考论文

方程式:

一阶导:

图形:

Exponential linear unit(指数线性函数,ELU)

描述: ELU小于零的部分采用了负指数形式,相较于ReLU权重可以有负值,并且在输入取较小值时具有软饱和的特性,提升了对噪声的鲁棒性。参考ELU激活函数的提出

方程式:

一阶导:

图形:

Scaled exponential linear unit(扩展指数线性函数,SELU)

描述: ELU的一种变化,引入超参λ和α,并给出了相应取值,这些取值在原论文中(Self-Normalizing Neural Networks)详细推导过程

方程式:

一阶导:

图形:

S-shaped rectified linear activation unit(S型线性整流激活函数,SReLU)

描述: 也是ReLU的一种变化,不同的是该函数有三个分段,四个超参数,这种设置使函数图形看起来像S型,具体参考论文。

方程式:

一阶导:

图形:

Adaptive piecewise linear(自适应分段线性函数,APL)

描述: 原论文表示通过分段为神经元学习加入自适应激活功能,比ReLU在cifar-10、cifar-100上有更好的性能。

方程式:

一阶导:

图形:

SoftPlus函数

描述: 是ReLU的平滑替代,函数在任何地方连续且值域非零,避免了死神经元。不过因不对称且不以零为中心,可以影响网络学习。由于导数必然小于1,所以也存在梯度消失问题。

方程式:

一阶导:

图形:

Bent identity(弯曲恒等函数)

描述: 可以理解为identity和ReLU之间的一种折中,不会出现死神经元的问题,不过存在梯度消失和梯度爆炸风险。

方程式:

一阶导:

图形:

Sigmoid-weighted linear unit (SiLU)

描述: 具体参考论文

方程式:

一阶导:

图形:

SoftExponential函数

描述: 参考论文

方程式:

一阶导:

图形:

Soft Clipping(柔性剪峰函数)

描述: 参考论文

方程式:

一阶导:

图形:

Sinusoid(正弦函数)

描述: Sinusoid作为激活函数,为神经网络引入了周期性,且该函数处处联系,以零点对称。参考论文

方程式:

一阶导:

图形:

Sinc函数

描述: Sinc函数在信号处理中尤为重要,因为它表征了矩形函数的傅立叶变换。作为激活函数,它的优势在于处处可微和对称的特性,不过容易产生梯度消失的问题。

方程式:

一阶导:

图形:

Gaussian(高斯函数)

描述: 高斯激活函数不常用。

方程式:

一阶导:

图形:

Hard Sigmoid(分段近似Sigmoid函数)

描述: 是Sigmoid函数的分段线性近似,更容易计算,不过存在梯度消失和神经元死亡的问题

方程式:

一阶导:

图形:

Hard Tanh(分段近似Tanh函数)

描述: Tanh激活函数的分段线性近似。

方程式:

一阶导:

图形:

LeCun Tanh(也称Scaled Tanh,按比例缩放的Tanh函数)

描述: Tanh的缩放版本,参考论文

方程式:

一阶导:

图形:

Symmetrical Sigmoid(对称Sigmoid函数)

描述: 是Tanh的一种替代方法,比Tanh形状更扁平,导数更小,下降更缓慢。

方程式:

一阶导:

图形:

Complementary Log Log函数

描述: 是Sigmoid的一种替代,相较于Sigmoid更饱和。

方程式:

一阶导:

图形:

Absolute(绝对值函数)

描述: 导数只有两个值。

方程式:

一阶导:

图形:

附录

Order of continuity(函数连续性)

函数参数连续性是个人的意译,大概意思应该是激活函数曲线的连续性类型。wiki中有对各个值的说明,可参考Order_of_continuity和描述光滑度中对于曲线、曲面的C0、C1、C2和G0、G1、G2定义和区别 - chenchen_fcj程序猿的博客 - CSDN博客,简单说明如下

: 曲线不连续

: 曲线本身是连续的,但不可导

: 曲线一阶导是连续的,但无法二阶导

: 曲线一阶导和二阶导是连续的,但无法三阶导

: 曲线一阶导到n阶导是连续的,但无法进行n+1阶导

: 曲线无穷阶可导

参考

visualising-activation-functions-in-neural-networks

Activation_function

https://zhuanlan.zhihu.com/p/32824193