激活函数总结

1.为什么需要激活函数

神经网络用于实现复杂的函数,非线性激活函数可以使神经网络随意逼近复杂函数。没有激活函数带来的非线性,多层神经网络和单层无异。

2. sigmoid

将实数值压缩进 0 到 1 的区间内,还可以在预测概率的输出层中使用。该函数将大的负数转换成 0,将大的正数转换成 1。
σ ( x ) = 1 1 + e − x \sigma(x)=\frac{1}{1+e^{-x}} σ(x)=1+ex1
下图展示了 Sigmoid 函数及其导数:
在这里插入图片描述
在这里插入图片描述
Sigmoid 函数的三个主要缺陷:
(1) 梯度消失:注意:Sigmoid 函数趋近 0 和 1 的时候变化率会变得平坦,也就是说,Sigmoid 的梯度趋近于 0。神经网络使用 Sigmoid 激活函数进行反向传播时,输出接近 0 或 1 的神经元其梯度趋近于 0。这些神经元叫作饱和神经元。因此,这些神经元的权重不会更新。此外,与此类神经元相连的神经元的权重也更新得很慢。该问题叫作梯度消失。因此,想象一下,如果一个大型神经网络包含 Sigmoid 神经元,而其中很多个都处于饱和状态,那么该网络无法执行反向传播。
(2)不以零为中心:Sigmoid 输出不以零为中心的,这会导致神经网络收敛较慢reference
(3) 计算成本高昂:exp() 函数与其他非线性激活函数相比,计算成本高昂。

补充: 为什么sigmoid不以零为中心,会导致网络收敛变慢
梯度反向传播参数更新
在这里插入图片描述
梯度更新的方向
在这里插入图片描述
以零为中心的影响
在这里插入图片描述
在这里插入图片描述

3. tanh

tanh ⁡ ( x ) = 2 σ ( 2 x ) − 1 = e x − e − x e x + e − x \tanh (x)=2 \sigma(2 x)-1=\frac{\mathrm{e}^{x}-\mathrm{e}^{-x}}{\mathrm{e}^{x}+\mathrm{e}^{-x}} tanh(x)=2σ(2x)1=ex+exexex
tanh ⁡ ′ ( x ) = 1 − tanh ⁡ 2 ( x ) \tanh ^{\prime}(x)=1-\tanh ^{2}(x) tanh(x)=1tanh2(x)
在这里插入图片描述
在这里插入图片描述
Tanh 激活函数又叫作双曲正切激活函数。Tanh 函数将值压缩至-1 到 1 的区间内。与 Sigmoid 不同,Tanh 函数的输出以零为中心,因为区间在-1 到 1 之间。在实践中,Tanh 函数的使用优先性高于 Sigmoid 函数。负数输入被当作负值,零输入值的映射接近零,正数输入被当作正值。

缺点
Tanh 函数也会有梯度消失的问题,因此在饱和时也会「杀死」梯度

4. 修正线性单元(ReLU)

在这里插入图片描述
在这里插入图片描述
从上图可以看到,ReLU 是从底部开始半修正的一种函数。数学公式为:
f ( x ) = m a x ( 0 , x ) f(x)=max(0, x) f(x)=max(0,x)
当输入 x<0 时,输出为 0,当 x> 0 时,输出为 x。

优点:
该激活函数使网络更快速地收敛它不会饱和,即它可以对抗梯度消失问题,至少在正区域(x> 0 时)可以这样,因此神经元至少在一半区域中不会把所有零进行反向传播。由于使用了简单的阈值化(thresholding),ReLU 计算效率很高

缺点:
(1) 不以零为中心:和 Sigmoid 激活函数类似,ReLU 函数的输出不以零为中心。
(2) 前向传导(forward pass)过程中,如果 x < 0,则神经元保持非激活状态,且在后向传导(backward pass)中「杀死」梯度。这样权重无法得到更新,网络无法学习。当 x = 0 时,该点的梯度未定义,但是这个问题在实现中得到了解决,通过采用左侧或右侧的梯度的方式

为了解决 ReLU 激活函数中的梯度消失问题,当 x < 0 时,我们使用 Leaky ReLU——该函数试图修复 dead ReLU 问题。

5. Leaky ReLU

在这里插入图片描述
f ( x ) = m a x ( 0.1 x , x ) f(x)=max(0.1x, x) f(x)=max(0.1x,x)
当 x < 0 时,它得到 0.1 的正梯度。该函数一定程度上缓解了 dead ReLU 问题,但是使用该函数的结果并不连贯。尽管它具备 ReLU 激活函数的所有特征,如计算高效、快速收敛、在正区域内不会饱和。

6. Parametric ReLU

Leaky ReLU 可以得到更多扩展。不让 x 乘常数项,而是让 x 乘超参数,这看起来比 Leaky ReLU 效果要好。该扩展就是 Parametric ReLU。
f ( x ) = m a x ( α x , x ) f(x)=max(\alpha x, x) f(x)=max(αx,x)
其中是超参数。这里引入了一个随机的超参数,它可以被学习,因为你可以对它进行反向传播。这使神经元能够选择负区域最好的梯度,有了这种能力,它们可以变成 ReLU 或 Leaky ReLU。

7. Swish

在这里插入图片描述
该函数又叫作自门控激活函数
σ ( x ) = x 1 + e − x \sigma(x)=\frac{x}{1+e^{-x}} σ(x)=1+exx
我们可以观察到在 x 轴的负区域曲线的形状与 ReLU 激活函数不同,因此,Swish 激活函数的输出可能下降,即使在输入值增大的情况下。大多数激活函数是单调的,即输入值增大的情况下,输出值不可能下降。而 Swish 函数为 0 时具备单侧有界(one-sided boundedness)的特性,它是平滑、非单调的。

8. GELU

在神经网络的建模过程中,模型很重要的性质就是非线性,同时为了模型泛化能力,需要加入随机正则,例如dropout(随机置一些输出为0,其实也是一种变相的随机非线性激活), 而随机正则与非线性激活是分开的两个事情, 而其实模型的输入是由非线性激活与随机正则两者共同决定的。

GELUs正是在激活中引入了随机正则的思想,是一种对神经元输入的概率描述,直观上更符合自然的认识,同时实验效果要比Relus与ELUs都要好。

GELUs其实是 dropout、zoneout、Relus的综合,GELUs对于输入乘以一个0,1组成的mask,而该mask的生成则是依概率随机的依赖于输入。假设输入为X, mask为m,则m服从一个伯努利分布 ϕ ( x ) = P ( X ≤ x ) , X \phi(x)=P(X \leq x), X ϕ(x)=P(Xx),X服从标准正态分布)这么选择是因为神经元的输入趋向于正太分布,这么设定使得当输入x减小的时候,输入会有一个更高的概率被dropout掉,这样的激活变换就会随机依赖于输入了。
G E L U ( X ) = x P ( X ≤ x ) = x ϕ ( x ) GELU(X)=xP(X \leq x)=x\phi(x) GELU(X)=xP(Xx)=xϕ(x)
这里 ϕ ( x ) \phi(x) ϕ(x)是正太分布的概率分布函数, ϕ ( x ) = ∫ − ∞ x e − t 2 / 2 2 π d t = 1 2 [ 1 + erf ⁡ ( x 2 ) ] \phi(x)=\int_{-\infty}^{x} \frac{e^{-t^{2} / 2}}{\sqrt{2 \pi}} d t=\frac{1}{2}\left[1+\operatorname{erf}\left(\frac{x}{\sqrt{2}}\right)\right] ϕ(x)=x2π et2/2dt=21[1+erf(2 x)],其中 erf ⁡ ( x ) = 2 π ∫ 0 x e − t 2 d t \operatorname{erf}(x)=\frac{2}{\sqrt{\pi}} \int_{0}^{x} e^{-t^{2}} d t erf(x)=π 20xet2dt

ϕ ( x ) \phi(x) ϕ(x) x x x成正比,且取值范围为 [ 0 , 1 ] [0, 1] [0,1],当 x x x越小,越有可能激活结果为0,即此时神经元被dropout,而当 x x x越大越有可能被保留

对于假设为标准正太分布的 G E L U ( x ) GELU(x) GELU(x) 论文中提供了近似计算的数学公式,如下:
G E L U ( x ) = 0.5 x ( 1 + t a n h ( 2 / π ( x + 0.044715 x 3 ) ) ) GELU(x)=0.5x(1+tanh(\sqrt{2/\pi}(x+0.044715x^3))) GELU(x)=0.5x(1+tanh(2/π (x+0.044715x3)))

GELU激活函数示意图如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值