常用激活函数

发布时间 2023-03-22 21:13:28作者: HoroSherry

常用激活函数

定义

​ 在神经网络中,输入经过权值加权计算并求和之后,需要经过一个函数的作用,这个函数就是激活函数(Activation Function)。

作用

​ 首先我们需要知道,如果在神经网络中不引入激活函数,那么在该网络中,每一层的输出都是上一层输入的线性函数,无论最终的神经网络有多少层,输出都是输入的线性组合;其一般也只能应用于线性分类问题中,例如非常典型的多层感知机。若想在非线性的问题中继续发挥神经网络的优势,则此时就需要通过添加激活函数来对每一层的输出做处理,引入非线性因素,使得神经网络可以逼近任意的非线性函数,进而使得添加了激活函数的神经网络可以在非线性领域继续发挥重要作用!

更进一步的,激活函数在神经网络中的应用,除了引入非线性表达能力,其在提高模型鲁棒性、缓解梯度消失问题、将特征输入映射到新的特征空间以及加速模型收敛等方面都有不同程度的改善作用!

常用激活函数

一、 饱和激活函数

(以Tanh,Sigmoid和hard-Sigmoid函数为主)

	##### Sigmoid函数

\[f(x)=\frac{1}{1+e^{-x}} \]

  • 可以看到:Sigmoid函数的值域在0 ~ 1之间。
  • 优点:
    1. 将很大范围内的输入特征值压缩到了0 ~ 1之间,使得在深层网络中可以保持数据幅度不会出现较大的变化
    2. 在物理意义上最接近生物神经元
    3. 根据其输出范围,该函数适用于将预测概率作为输出的模型
  • 缺点:
    1. 当输入非常大或非常小时,输出基本上为常数,进而导致梯度接近于0
    2. 输出非0均值(激活函数的输出值恒大于 0,将会导致激活函数下一层的线性层权重w朝一个方向变化,即不会朝相反方向变化(只会增大或只会减小)。)进而导致后一层神经元将得到上一层输出的非0均值的信号作为输入。随着网络的加深,会改变原始数据的分布趋势
    3. 梯度可能会过早消失,进而导致收敛速度较慢
    4. 幂运算相对耗时
Tanh函数

\[\tanh (x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} \]

  • 可以看到,Tanh函数的值域在-1 ~ 1之间。
  • 优点:
    1. 解决了上述Sigmoid函数输出非0均值的问题
    2. Tanh函数求导后的值域在0 ~ 1之间,优于Sigmoid的0 ~ 0.25,一定程度上缓解了梯度消失的问题
    3. Tanh函数在原点附近与 y = x的函数形式相近,当输入的激活值较低时,可以直接进行矩阵运算,训练相对容易
  • 缺点:
    1. 与Sigmoid函数类似,梯度消失问题依然存在
    2. 幂函数的运算问题依然存在

二、 非饱和激活函数

(以ReLU、ReLU6及变体P-R-Leaky、ELU、Swish、Mish、Maxout、hard-sigmoid、hard-swish为主)

ReLU

\[\operatorname{ReLU}(x)=\max (0, x) \]

  • 可见在输入为负值时,输出均为0。输入为正值时,输出 y = x。该函数并非全区间可导
  • 优点:
    1. 相较于sigmoid函数以及Tanh函数来看,在输入为正时,Relu函数不存在饱和问题,即解决了gradient vanishing问题,使得深层网络可训练
    2. 计算速度非常快,只需要判断输入是否大于0
    3. 收敛速度优于Sigmoid和Tanh函数
    4. Relu输出会使一部分神经元为0值,在带来网络稀疏性的同时,也减少了参数之间的关联性,一定程度上缓解了过拟合的问题
  • 缺点:
    1. Relu函数的输出也不是以0为均值的函数
    2. 存在Dead Relu Problem,即某些神经元可能永远不会被激活,进而导致相应参数一直得不到更新,产生该问题主要原因包括参数初始化问题以及学习率设置过大问题
    3. 当输入为正值,导数为1,在“链式反应”中,不会出现梯度消失,但梯度下降的强度则完全取决于权值的乘积,如此可能会导致梯度爆炸问题
ReLU6

\[\operatorname{ReLU} 6(\mathrm{x})=\min (\max (0, \mathrm{x}), 6) \]

  • 优点:该激活函数可以在移动端设备使用float16/int8低精度的时候也能良好工作。如果对 ReLU 的激活范围不加限制,激活值非常大,则低精度的float16/int8无法很好地精确描述如此大范围的数值,带来精度损失
LeakyReLU

\[\operatorname{LeakyReLU}(x)=\left\{\begin{aligned} x & , x>0 \\ \alpha x & , x \leq 0 \end{aligned}\right. \]

  • 在x >= 0 时,y = x,当x < 0 时, y = αx
  • 优点:
    1. 针对Relu函数中存在的Dead Relu Problem,Leaky Relu函数在输入为负值时,给予输入值一个很小的斜率,在解决了负输入情况下的0梯度问题的基础上,也很好的缓解了Dead Relu问题
    2. 该函数的输出为负无穷到正无穷,即leaky扩大了Relu函数的范围,其中α的值一般设置为一个较小值,如0.01
  • 缺点:
    1. 理论上来说,该函数具有比Relu函数更好的效果,但是大量的实践证明,其效果不稳定,故实际中该函数的应用并不多
    2. 由于在不同区间应用的不同的函数所带来的不一致结果,将导致无法为正负输入值提供一致的关系预测
ELU

\[\operatorname{ELU}(\mathrm{x})=\left\{\begin{aligned} \mathrm{x} & , \mathrm{x}>0 \\ \alpha\left(\mathrm{e}^{\mathrm{x}}-1\right) & , \mathrm{x} \leqq 0 \end{aligned}\right. \]

  • 可看作ReLU和Leaky ReLU之间的函数
  • 优点:
    1. ELU具有Relu的大多数优点,不存在Dead Relu问题,输出的均值也接近为0值
    2. 该函数通过减少偏置偏移的影响,使正常梯度更接近于单位自然梯度,从而使均值向0加速学习
    3. 该函数通过减少偏置偏移的影响,使正常梯度更接近于单位自然梯度,从而使均值向0加速学习
  • 缺点:
    1. 计算强度较高,含有幂运算
    2. 在实践中同样没有较Relu更突出的效果,故应用不多
Swish

\[\operatorname{Swish}(\mathrm{x})={ }{\mathrm{x}} * \text { Sigmoid }(\mathrm{x} ) \]

  • Swish是Sigmoid和ReLU的改进版,类似于ReLU和Sigmoid的结合。Swish 具备无上界有下界、平滑、非单调的特性。Swish 在深层模型上的效果优于 ReLU
  • 优点:
    1. Swish 具备无上界有下界、平滑、非单调的特性。Swish 在深层模型上的效果优于 ReLU
    2. Swish具有一定Sigmoid函数的优点
    3. Swish函数可以看做是介于线性函数与ReLU函数之间的平滑函数
  • 缺点:
    1. 运算复杂,速度较慢