神经网络中的激活函数

1.什么是激活函数?

激活函数(Activation functions)对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用。它们将非线性特性引入到我们的网络中。如在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。

引入激活函数是为了增加神经网络模型的非线性。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。

2.为什么需要激活函数?

激活函数还有助于我们根据要求将神经元的输出值限定在一定的范围内。这一点很重要,因为激活函数的输入是 W*x+b,其中 W 是单元的权重,x 是输入值,然后加上偏置 b。如果输出值不被限定在某个范围内,它可能会变得非常大,特别是在具有数百万个参数的深层神经网络中,从而导致计算量过大。例如,有一些激活函数(如 softmax)对于不同的输入值(0 或 1)会输出特定的值。

如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少深,输出都是输入的线性组合,这种情况就是最原始的感知机。

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

3.激活函数的特点
  • 非线性:即导数不是常数。保证多层网络不退化成单层线性网络。这也是激活函数的意义所在。

  • 可微性:保证了在优化中梯度的可计算性。虽然 ReLU 存在有限个点处不可微,但处处 subgradient,可以替代梯度。

  • 计算简单:激活函数复杂就会降低计算速度,因此 RELU 要比 Exp 等操作的激活函数更受欢迎。

  • 非饱和性(saturation):饱和指的是在某些区间梯度接近于零(即梯度消失),使得参数无法继续更新的问题。最经典的例子是 Sigmoid,它的导数在 x 为比较大的正值和比较小的负值时都会接近于 0。RELU 对于 x<0,其梯度恒为 0,这时候它也会出现饱和的现象。Leaky ReLU 和 PReLU 的提出正是为了解决这一问题。

  • 单调性(monotonic):即导数符号不变。当激活函数是单调的时候,单层网络能够保证是凸函数。但是激活函数如 mish 等并不满足单调的条件,因此单调性并不是硬性条件,因为神经网络本来就是非凸的。

  • 参数少:大部分激活函数都是没有参数的。像 PReLU 带单个参数会略微增加网络的大小。还有一个例外是 Maxout,尽管本身没有参数,但在同样输出通道数下 k 路 Maxout 需要的输入通道数是其它函数的 k 倍,这意味着神经元数目也需要变为 k 倍。

  • 归一化(normalization):这个是最近才出来的概念,对应的激活函数是SELU,主要思想是使样本分布自动归一化到零均值、单位方差的分布,从而稳定训练。在这之前,这种归一化的思想也被用于网络结构的设计,比如Batch Normalization。

4.常用激活函数介绍

Sigmoid

Sigmoid又叫作 Logistic 激活函数,它将实数值压缩进 0 到 1 的区间内,还可以在预测概率的输出层中使用。该函数将大的负数转换成 0,将大的正数转换成 1。数学公式为:
在这里插入图片描述
下图展示了 Sigmoid 函数及其导数:
Sigmoid 激活函数
Sigmoid 激活函数
在这里插入图片描述
Sigmoid 导数

优点:

  • Sigmoid函数连续,光滑,严格单调,以(0,0.5)中心对称,是一个非常良好的阈值函数
  • 输出值在 0-1 之间

缺点:

  • 梯度消失:注意:Sigmoid 函数趋近 0 和 1 的时候变化率会变得平坦,也就是说,Sigmoid 的梯度趋近于 0。神经网络使用 Sigmoid 激活函数进行反向传播时,输出接近 0 或 1 的神经元其梯度趋近于 0。这些神经元叫作饱和神经元。因此,这些神经元的权重不会更新。此外,与此类神经元相连的神经元的权重也更新得很慢。该问题叫作梯度消失。因此,想象一下,如果一个大型神经网络包含 Sigmoid 神经元,而其中很多个都处于饱和状态,那么该网络无法执行反向传播。

  • 不以零为中心:Sigmoid 输出不以零为中心的。

  • 计算成本高昂:exp() 函数与其他非线性激活函数相比,计算成本高昂。

Tanh

函数及导数的图像如下:
在这里插入图片描述

优点:

  • 同 sigmoid

  • tanh(x) 的梯度消失问题比 sigmoid 要轻,收敛更快

  • 输出是以 0 为中心 zero-centered

缺点:

该导数在正负饱和区的梯度都会接近于0值(仍然具有软饱和性),会造成梯度消失。还有其更复杂的幂运算。

线性整流函数(Rectified Linear Unit, ReLU)

函数:
在这里插入图片描述
在这里插入图片描述
ReLU函数

在这里插入图片描述
ReLU 导数

优点:

  • 可以看到,当x<0时,ReLU硬饱和,而当x>0时,则不存在饱和问题。所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。这让我们能够直接以监督的方式训练深度神经网络,而无需依赖无监督的逐层预训练。

  • 简单高效:不涉及指数等运算;

缺点:

  • 随着训练的推进,部分输入会落入硬饱和区,导致对应权重无法更新。这种现象被称为“神经元死亡”。与Sigmoid类似,ReLU的输出均值也大于0,偏移现象和神经元死亡会共同影响网络的收敛性。

Leaky ReLU 和 Parametric ReLU 函数

函数表达式和导数:
在这里插入图片描述
函数图像:
在这里插入图片描述
特点:

为了改善ReLU在时梯度为造成Dead ReLU,提出了Leaky ReLU使得这一问题得到了缓解。例如在我们耳熟能详的YOLOV3网络中就使用了Leaky ReLU这一激活函数,一般取。另外PReLU就是将Leaky ReLU公式里面的当成可学习参数参与到网络训练中。

ReLU6 函数

函数表达式: f ( x ) = m i n ( m a x ( 0 , x ) , 6 ) f(x)=min(max(0,x),6) f(x)=min(max(0,x),6)

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

  • 助于阻止激活增长,从而防止梯度爆炸(趋近无限时)以及正常 ReLUs 发生的其他小问题。
  • 特点:ReLU6就是普通的ReLU但是限制最大输出值为6(对输出值做clip),这是为了在移动端设备float16的低精度的时候,也能有很好的数值分辨率,如果对ReLU的激活范围不加限制,输出范围为0到正无穷,如果激活值非常大,分布在一个很大的范围内,则低精度的float16无法很好地精确描述如此大范围的数值,带来精度损失。

指数线性单元(ELU)

ELU 的函数及其导数如下:

在这里插入图片描述
优点:

  • 能避免死亡 ReLU 问题:x 小于 0 时函数值不再是 0,因此可以避免 dying relu 问题;

  • 融合了sigmoid和ReLU,左侧具有软饱和性,右侧无饱和性。右侧线性部分使得ELU能够缓解梯度消失,而左侧软饱能够让ELU对输入变化或噪声更鲁棒。ELU的输出均值接近于零,所以收敛速度更快。在 ImageNet上,不加Batch Normalization 30层以上的ReLU网络会无法收敛,PReLU网络在MSRA的Fan-in (caffe )初始化下会发散,而 ELU 网络在Fan-in/Fan-out下都能收敛。

缺点:

  • 计算耗时:包含指数运算;

  • α 值是超参数,需要人工设定

SoftSign

函数表达式: f ( x ) = x / 1 + ∣ x ∣ f(x) =x/1 +|x| f(x)=x/1+x
在这里插入图片描述

  • 特点:Softsign是tanh激活函数的另一个替代选择,从图中可以看到它和tanh的曲线极其相似,不过相比于tanh,Softsign的曲线更平坦,导数下降的更慢一点,这个特性使得它可以缓解梯度消失问题,可以更高效的学习。

SoftPlus

函数表达式: f ( x ) = l n ( 1 + e x ) f(x) = ln(1+e^x) f(x)=ln(1+ex)

函数图像:
在这里插入图片描述

  • 函数导数:SoftPlus激活函数的导数恰好就是sigmoid激活函数
  • 优点:SoftPlus可以作为ReLu的一个不错的替代选择,可以看到与ReLU不同的是,SoftPlus的导数是连续的、非零的、无处不在的,这一特性可以防止出现ReLU中的“神经元死亡”现象。
  • 缺点:SoftPlus是不对称的,不以0为中心,存在偏移现象;而且,由于其导数常常小于1,也可能会出现梯度消失的问题。

扩展型指数线性单元激活函数(SELU)

SELU 源于论文 Self-Normalizing Neural Networks,作者为 Sepp Hochreiter,ELU 同样来自于他们组。

SELU 的函数及其导数如下:

在这里插入图片描述

  • 这个激活函数来自论文:https://arxiv.org/abs/1706.02515 。

优点:

  • SELU 激活能够对神经网络进行自归一化(self-normalizing);

  • 不可能出现梯度消失或爆炸问题,论文附录的定理 2 和 3 提供了证明。

缺点:

  • 应用较少,需要更多验证;

  • lecun_normal 和 Alpha Dropout:需要 lecun_normal 进行权重初始化;如果 dropout,则必须用 Alpha Dropout 的特殊版本。

Swish 函数

Swish 激活函数形式为: f ( x ) = x ∗ s i g m o i d ( x ) f(x)= x* sigmoid(x) f(x)=xsigmoid(x)

其中是个常数或可训练的参数.Swish 具备无上界有下界、平滑、非单调的特性。

在这里插入图片描述
Swish激活函数

在这里插入图片描述
Swish激活函数导数

特点:Swish 在深层模型上的效果优于 ReLU。与 ReLU 相比,尽管图形非常相似,Swish 的性能却要稍好一些。然而,ReLU 在 x=0 时会突然发生改变,而 Swish 与此不同,它不会在某个点上突然改变,这使得训练时 Swish 更容易收敛。

但是,Swish 的缺点是它的计算成本很高

论文:https://arxiv.org/abs/1710.05941v2

Maxout

函数表达式:
在这里插入图片描述
在这里插入图片描述
特点:Maxout模型实际上也是一种新型的激活函数,在前馈式神经网络中,Maxout的输出即取该层的最大值,在卷积神经网络中,一个Maxout特征图可以是由多个特征图取最值得到。Maxout的拟合能力是非常强的,它可以拟合任意的的凸函数。但是它和Dropout一样需要人为设定一个k值。为了便于理解,假设有一个在第i层有2个节点i+1层有个1节点构成的神经网络.
在这里插入图片描述
激活值 o u t = f ( W ∗ X + b ) out = f(W*X+b) out=f(WX+b),其中 f f f是激活函数, ∗ * 在这里代表內积。然后 X = ( x 1 , x 2 ) T X=(x1,x2)^T X=(x1,x2)T, W = ( w 1 , w 2 ) T W=(w1,w2)^T W=(w1,w2)T。那么当我们对 i + 1 i+1 i+1层使用Maxout(设定)然后再输出的时候,情况就发生了改变。网络就变成了:
在这里插入图片描述
此时网络形式上就变成上面的样子 z 1 = W 1 ∗ X + b 1 z 2 = W 2 ∗ X + b 2... z1=W1*X+b1 z2=W2*X+b2 ... z1=W1X+b1z2=W2X+b2...,用公式表现出来就是: o u t = m a x ( z 1 , z 2 , z 3 , z 4 , z 5 ) out=max(z1,z2,z3,z4,z5) out=max(z1,z2,z3,z4,z5) 也就是说第 i + 1 i+1 i+1层的激活值计算了 5 5 5次,可我们明明只需要个激活值,那么我们该怎么办?其实上面的叙述中已经给出了答案,取这个的最大值来作为最终的结果。

可以看到采用Maxout的话参数个数也增加了 k k k倍,计算开销会增大。

Mish

函数表达式: M i s h ( x ) = x ∗ t a n h ( l n ( 1 + e X ) ) Mish(x)=x*tanh(ln(1+e^X)) Mish(x)=xtanh(ln(1+eX))
函数图像:
在这里插入图片描述
MisH激活函数

  • 特点:这个激活函数是最新的SOTA激活函数,我还没具体使用和了解过这个激活函数,就暂时不总结这一个了。不过论文中提到,以上无边界(即正值可以达到任何高度)避免了由于封顶而导致的饱和,理论上对负值的轻微允许更好的梯度流,而不是像ReLU中那样的硬零边界,并且整个损失函数仍然保持了平滑性。
  • 论文名为:Mish: A Self Regularized Non-Monotonic Neural Activation Function
5.激活函数使用经验
  • 首先,Tanh 和 sigmoid 函数会引起巨大的梯度消失问题,因此一般不推荐使用
  • 使用ReLU,速度最快,然后观察模型的表现。
  • 如果ReLU效果不是很好,可以尝试Leaky ReLU或Maxout等变种。
  • 在深度不是特别深的CNN中,激活函数的影响一般不会太大。
  • 如果网络中也有 Batch-Norm 层(批标准化层),则需要在执行激活函数之前添加该层,顺序是先进行 CNN-Batch(卷积神经网络批处理),再进行 Norm-Act(标准化动作)。
  • 比赛中,可以参观尝试下Mish。

附录:
https://mp.weixin.qq.com/s/0omCNSOmFj–_2Z7V8qgYg
https://mp.weixin.qq.com/s/Lc-sil9UcOYMIJ_WhPn7XQ
https://mp.weixin.qq.com/s/pSHKrtLTSE3lv51hyX5BDA
https://mp.weixin.qq.com/s/MFqiWPJgI9y6fGL16FMdCg
https://mp.weixin.qq.com/s/-rsN__v3kOhUOP6tWhZqEA

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值