激活函数总结(sigmoid、tanh、RELU、LRel、PReLU、ELU、GELU和SELUS)

sigmoid函数

激活函数总结(sigmoid、tanh、RELU、LRel、PReLU、ELU、GELU和SELUS)_第1张图片

特点:函数值介于(0,1)之间,x在负无穷和正无穷之间。
缺点:
1、有饱和区域,是软饱和,在大的正数和负数作为输入的时候,梯度就会变成零,使得神经元基本不能更新。
2、只有正数输出(不是zero-centered),这就导致所谓的zigzag现象
激活函数总结(sigmoid、tanh、RELU、LRel、PReLU、ELU、GELU和SELUS)_第2张图片
3、计算量大(exp)

tanh(x)

函数值介意(-1,1)之间。tanh和sigmoid函数是具有一定的关系的,可以从公式中看出,它们的形状是一样的,只是尺度和范围不同。tanh是zero-centered,但是还是会饱和。
激活函数总结(sigmoid、tanh、RELU、LRel、PReLU、ELU、GELU和SELUS)_第3张图片
激活函数总结(sigmoid、tanh、RELU、LRel、PReLU、ELU、GELU和SELUS)_第4张图片

RELU

激活函数总结(sigmoid、tanh、RELU、LRel、PReLU、ELU、GELU和SELUS)_第5张图片
CNN中常用。对正数原样输出,负数直接置零。在正数不饱和,在负数硬饱和。relu计算上比sigmoid或者tanh更省计算量,因为不用exp,因而收敛较快。能够帮助解决sigmoid随着层数的增加梯度衰减现象。但是还是非zero-centered

relu在负数区域被kill的现象叫做dead relu,(出现这个问题的原因参数初始化及学习率过大,从而导致在训练过程中参数更新更大)这样的情况下,有人通过初始化的时候用一个稍微大于零的数比如0.01来初始化神经元,从而使得relu更偏向于激活而不是死掉,但是这个方法是否有效有争议。
解决方法:Xavier初始化方法、避免使用学习率设置太大,或者使用Adagrad自动调节学习率
参考文献:Deep Sparse Rectifier Neural Networks
函数值介于
激活函数总结(sigmoid、tanh、RELU、LRel、PReLU、ELU、GELU和SELUS)_第6张图片
激活函数总结(sigmoid、tanh、RELU、LRel、PReLU、ELU、GELU和SELUS)_第7张图片

LREL

激活函数总结(sigmoid、tanh、RELU、LRel、PReLU、ELU、GELU和SELUS)_第8张图片
激活函数总结(sigmoid、tanh、RELU、LRel、PReLU、ELU、GELU和SELUS)_第9张图片
为了解决上述的dead ReLU现象。这里选择一个数,让负数区域不在饱和死掉。这里的斜率都是确定的。
参考文献:Rectifier Nonlinearities Improve Neural Network Acoustic Models

PReLU

f(x) = max(ax,x),但是这里的a不是固定下来的,而是可学习的

ELU

激活函数总结(sigmoid、tanh、RELU、LRel、PReLU、ELU、GELU和SELUS)_第10张图片
具有relu的优势,且输出均值接近零,实际上prelu和LeakyReLU都有这一优点。有负数饱和区域,从而对噪声有一些鲁棒性。可以看做是介于relu和LeakyReLU之间的一个东西。当然,这个函数也需要计算exp,从而计算量上更大一些。

GELU

在神经网络的建模过程中,模型很重要的性质就是非线性,同时为了模型泛化能力,需要加入随机正则,例如dropout(随机置一些输出为0,其实也是一种变相的随机非线性激活), 而随机正则与非线性激活是分开的两个事情, 而其实模型的输入是由非线性激活与随机正则两者共同决定的 激活函数总结(sigmoid、tanh、RELU、LRel、PReLU、ELU、GELU和SELUS)_第11张图片激活函数总结(sigmoid、tanh、RELU、LRel、PReLU、ELU、GELU和SELUS)_第12张图片

SELUS

SNN脉冲神经网络拥有一个映射g:映射一个层到另一个层的均值和方差,那么这个函数就是自归一化。SNN方差不大,对扰动更健壮,并且学习速度更快。
在这里插入图片描述
参考文献:Self-NormalizingNeuralNetworks

你可能感兴趣的:(神经网络)