PRelu和一些激活函数

PRelu和一些激活函数PRelu可以参考这篇文章:https://www.cnblogs.com/catpainter/p/8406285.htmlPReLU全名ParametricRectifiedLinearUnit. PReLU-nets在ImageNet2012分类数据集top-5上取得了4

大家好,欢迎来到IT知识分享网。

PRelu可以参考这篇文章:

https://www.cnblogs.com/catpainter/p/8406285.html

PReLU全名Parametric Rectified Linear Unit. PReLU-nets在ImageNet 2012分类数据集top-5上取得了4.94%的错误率,首次超越了人工分类的错误率(5.1%)。PReLU增加的计算量和过拟合的风险几乎为零。考虑了非线性因素的健壮初始化方法使得该方法可以训练很深很深的修正模型(rectified model)来研究更深更大的网络结构。

  ReLU和PReLU图像:

PRelu和一些激活函数

  PReLU的数学表达式(i代表不同的通道,即每一个通道都有参数不相同的PReLU函数):

 PRelu和一些激活函数

 ai被初始化为0.25。

 

 

神经网络为什么需要非线性激活函数?

非线性函数是指的一阶导数不为常数的函数

线性函数的组合还是线性函数,所以网络再深,最后输出的还是线性函数。所以用非线性激活函数,神经网络理论上可以逼近任意函数。

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

 

常见的激活函数主要包括如下几种:sigmoid函数、tanh函数、Relu函数、Leaky Relu函数、ELU函数。

PRelu和一些激活函数

 

 

 

以下参考这篇文章:

https://www.cnblogs.com/Joejwu/p/Joejwu_blog210618.html

《常用激活函数:Sigmoid、Tanh、Relu、Leaky Relu、ELU优缺点总结》

 

Sigmoid函数

PRelu和一些激活函数

 

 PRelu和一些激活函数

 

 

优点:  1、将很大范围内的输入特征值压缩到0~1之间,使得在深层网络中可以保持数据幅度不会出现较大的变化,而Relu函数则不会对数据的幅度作出约束;
     2、在物理意义上最为接近生物神经元;
          3、根据其输出范围,该函数适用于将预测概率作为输出的模型;
 
缺点:1、当输入非常大或非常小的时候,输出基本为常数,即变化非常小,进而导致梯度接近于0;
      2、输出不是0均值,进而导致后一层神经元将得到上一层输出的非0均值的信号作为输入。随着网络的加深,会改变原始数据的分布趋势;
      3、梯度可能会过早消失,进而导致收敛速度较慢,例如与Tanh函数相比,其就比sigmoid函数收敛更快,是因为其梯度消失问题较sigmoid函数要轻一些;
      4、幂运算相对耗时。
 
 
 
Tanh函数
PRelu和一些激活函数

PRelu和一些激活函数

与Sigmoid函数对比,可见这两种激活函数均为饱和激活函数,该函数的输出范围在-1~1之间,其优缺点总结如下:
PRelu和一些激活函数
优点:1、解决了上述的Sigmoid函数输出不是0均值的问题;
      2、Tanh函数的导数取值范围在0~1之间,优于sigmoid函数的0~0.25,一定程度上缓解了梯度消失的问题;
      3、Tanh函数在原点附近与y=x函数形式相近,当输入的激活值较低时,可以直接进行矩阵运算,训练相对容易;
 
缺点:1、与Sigmoid函数类似,梯度消失问题仍然存在;
      2、观察其两种形式的表达式,即2*sigmoid(2x)-1与(exp(x)-exp(-x))/(exp(x)+exp(-x)),可见,幂运算的问题仍然存在;
 
 
Relu函数
PRelu和一些激活函数
 
 
PRelu和一些激活函数
PRelu和一些激活函数

 

 上图即为Relu函数的曲线图,可见在输入为负值时,输出均为0值,在输入大于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,在“链式反应”中,不会出现梯度消失,但梯度下降的强度则完全取决于权值的乘积,如此可能会导致梯度爆炸问题;
 
 
Leaky Relu函数
PRelu和一些激活函数
PRelu和一些激活函数
PRelu和一些激活函数(a固定的话就是LRelu,不固定的话就是PRelu)
 
上图即为Leaky Relu函数的示意图,在x大于等于0时,y=x,x小于0时,y=α*x,图中选择的α值为0.1;其优缺点总结给如下:
优点:1、针对Relu函数中存在的Dead Relu Problem,Leaky Relu函数在输入为负值时,给予输入值一个很小的斜率,在解决了负输入情况下的0梯度问题的基础上,也很好的缓解了Dead Relu问题;
      2、该函数的输出为负无穷到正无穷,即leaky扩大了Relu函数的范围,其中α的值一般设置为一个较小值,如0.01;
 
缺点:1、理论上来说,该函数具有比Relu函数更好的效果,但是大量的实践证明,其效果不稳定,故实际中该函数的应用并不多。
      2、由于在不同区间应用的不同的函数所带来的不一致结果,将导致无法为正负输入值提供一致的关系预测。

 

ELU函数
PRelu和一些激活函数
PRelu和一些激活函数
PRelu和一些激活函数

 

 图中所示即为ELU函数,其也是Relu函数的一种变体,x大于0时,y=x,x小于等于0时,y=α(exp(x)-1),可看作介于Relu与Leaky Relu之间的函数;其优缺点总结如下:

优点:1、ELU具有Relu的大多数优点,不存在Dead Relu问题,输出的均值也接近为0值;
   2、该函数通过减少偏置偏移的影响,使正常梯度更接近于单位自然梯度,从而使均值向0加速学习;
      3、该函数在负数域存在饱和区域,从而对噪声具有一定的鲁棒性;
 
缺点:1、计算强度较高,含有幂运算;
      2、在实践中同样没有较Relu更突出的效果,故应用不多;

 

 

 

以下参考这篇文章:

https://www.cnblogs.com/makefile/p/activation-function.html

 

 

Maxout

Maxout可以看做是在深度学习网络中加入一层激活函数层,包含一个参数k.这一层相比ReLU,sigmoid等,其特殊之处在于增加了k个神经元,然后输出激活值最大的值.

PRelu和一些激活函数

 

 

优点:

  • Maxout的拟合能力非常强,可以拟合任意的凸函数。
  • Maxout具有ReLU的所有优点,线性、不饱和性。
  • 同时没有ReLU的一些缺点。如:神经元的死亡。

缺点:
从上面的激活函数公式中可以看出,每个神经元中有两组(w,b)参数,那么参数量就增加了一倍,这就导致了整体参数的数量激增。

 

与常规激活函数不同的是,它是一个可学习的分段线性函数.

然而任何一个凸函数,都可以由线性分段函数进行逼近近似。其实我们可以把以前所学到的激活函数:ReLU、abs激活函数,看成是分成两段的线性函数,如下示意图所示:

maxout-convex-func-approximate!

 

实验结果表明Maxout与Dropout组合使用可以发挥比较好的效果。

前边的两种ReLU便是两种Maxout,函数图像为两条直线的拼接。

 

 

 

梯度消失/爆炸原因及解决办法

原因,浅层的梯度计算需要后面各层的权重及激活函数导数的乘积,因此可能出现前层比后层的学习率小(vanishing gradient)或大(exploding)的问题,所以具有不稳定性.

 

怎么解决,需要考虑几个方面:

  • 权重初始化
    使用合适的方式初始化权重, 如ReLU使用MSRA的初始化方式, tanh使用xavier初始化方式.
  • 激活函数选择
    激活函数要选择ReLU等梯度累乘稳定的.
  • 学习率
    一种训练优化方式是对输入做白化操作(包括正规化和去相关), 目的是可以选择更大的学习率. 现代深度学习网络中常使用Batch Normalization(包括正规化步骤,但不含去相关). (All you need is a good init. If you can’t find the good init, use Batch Normalization.)

 

梯度爆炸
由于sigmoid,ReLU等函数的梯度都在[0,1]以内,所以不会引发梯度爆炸问题。 而梯度爆炸需要采用梯度裁剪、BN、设置较小学习率等方式解决。

 

激活函数选择

  1. 首先尝试ReLU,速度快,但要注意训练的状态.
  2. 如果ReLU效果欠佳,尝试Leaky ReLU或Maxout等变种。
  3. 尝试tanh正切函数(以零点为中心,零点处梯度为1)
  4. sigmoid/tanh在RNN(LSTM、注意力机制等)结构中有所应用,作为门控或者概率值.
  5. 在浅层神经网络中,如不超过4层的,可选择使用多种激励函数,没有太大的影响。

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/30224.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信