深度学习中的激活函数

激活函数

神经网络神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function。

为什么要使用激活函数?

神经网络中激活函数的主要作用是提供网络的非线性建模能力,如不特别说明,激活函数一般而言是非线性函数。假设一个示例神经网络中仅包含线性卷积和全连接运算,那么该网络仅能够表达线性映射,即便增加网络的深度也依旧还是线性映射,难以有效建模实际环境中非线性分布的数据。加入(非线性)激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。

常用的激活函数详解:

sigmoid函数/Logistic 函数

g ( z ) = 1 1 + e − z g(z)= \frac{1}{1+e^{-z}} g(z)=1+ez1
在这里插入图片描述
sigmoid 在定义域内处处可导,且两侧导数逐渐趋近于0。将具有这类性质的激活函数定义为软饱和激活函数。如果Z的值很大或者很小的时候,那么函数的梯度(函数的斜率)会非常小,在反向传播的过程中,导致了向底层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为梯度消失。一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象。

sigmoid函数一般只用于二分类的输出层。

tanh函数(双曲正切函数)

t a n h ( x ) = e x − e − x e x + e − x tanh(x)=\frac{e^x - e^{-x}}{e^x + e^{-x}} tanh(x)=ex+exexex
在这里插入图片描述
tanh也是一种非常常见的激活函数。与sigmoid相比,它的输出均值是0,有类似于数据中心化的效果,使得其收敛速度要比sigmoid快,减少迭代次数。然而,从图中可以看出,tanh一样具有软饱和性,从而造成梯度消失。但是tanh在大于0的时候的导数为1,基本避免了梯度消失和梯度爆炸。

使用时可在隐层使用tanh函数,在输出层使用sigmoid函数。

ReLU函数(修正线性单元)

r e l u ( x ) = m a x ( 0 , x ) relu(x)=max(0,x) relu(x)=max(0,x)
在这里插入图片描述
ReLU的全称是Rectified Linear Units,是一种后来才出现的激活函数,也是目前最常用的默认选择激活函数。 可以看到,当x<0时,ReLU硬饱和,而当x>0时,则不存在饱和问题。所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。这让我们能够直接以监督的方式训练深度神经网络,而无需依赖无监督的逐层预训练。

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

针对在x<0的硬饱和问题,我们对ReLU做出相应的改进,使得
在这里插入图片描述
这就是Leaky-ReLU,
l e a k y r e l u ( x ) = m a x ( a x , x ) leaky_relu(x)=max(ax,x) leakyrelu(x)=max(ax,x)
α也可以作为一个参数来学习,原文献建议初始化a为0.25,不采用正则。

基于Gate mechanism的GLU、GTU 单元

介绍一下基于gate mechanism实现的,两个比较新颖的激活函数GTU和GLU。

GTU(Gated Tanh Unit)的表达式为:

f(X) = tanh(XW+b) * O(XV+c)

GLU(Gated Liner Unit)的表达式为:

f(X) = (X * W + b) * O(X * V + c)

分析GTU和GLU的组成结构可以发现:

Tanh激活单元:tanh(XW+b),加上一个Sigmoid激活单元:O(XV+c)构成的gate unit,就构成了GTU单元。

Relu激活单元:(X * W + b),加上一个Sigmoid激活单元:O(X * V + c)构成的gate unit,就构成了GLU单元。
gate mechanism影响及各激活单元对比
在这里插入图片描述

(1)、gate mechanism 影响

把GTU中的Sigmoid gate去掉的话,就是一个Tanh激活函数。因此,可以通过比较Tanh和GTU的实验效果,来对比Gate mechanism对模型性能的影响。通过图1中的左图可以发现,使用GTU的效果远远优于Tanh激活函数,可见,gate units有助于深度网络建模。

(2)、Tanh、GLU与Relu、GLU对比

Tanh激活函数和GTU都存在梯度消失的问题,因为即使是GTU,当units的激活处于饱和区时,输入单元激活单元:tanh(X*W+b)和gate单元:O(X * V + c)都会削弱梯度值。相反,GLU和Relu不存在这样的问题。GLU和Relu都拥有线性的通道,可以使梯度很容易通过激活的units,反向传播且不会减小。因此,采用GLU或Relu做为激活,训练时收敛速度更快。

(3)、Relu与GLU对比

Relu单元并没有完全抛弃GLU中的gate units,GLU可以看做是处于激活状态下的一种简化的Relu单元。对比Relu和GLU,通过图1右图可以大显,在相同的训练时间下,GLU单元可以获得比Relu更高的精度。

(4)GLU与GTU对比:

GTU存在tanh激活的非线性单元,GLU存在的线性单元,GLU中不存在类似于GTU中的梯度消失问题。通过对比可以发现,GLU获得比GTU更快的收敛速度,以及更高的准确率。

Gelu(Transformer)

Bert Transfromer结构中使用了这个激活函数—gelu(Gaussian error linear units,高斯误差线性单元),Gelu在论文中已经被验证,是一种高性能的神经网络激活函数,因为GELU的非线性变化是一种符合预期的随机正则变换方式。

参考

https://www.jianshu.com/p/d39944eeafe2
https://zhuanlan.zhihu.com/p/27084042
Bert使用的激活函数:gelu—高斯误差线性单元

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值