激活函数
神经网络神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function。
为什么要使用激活函数?
神经网络中激活函数的主要作用是提供网络的非线性建模能力,如不特别说明,激活函数一般而言是非线性函数。假设一个示例神经网络中仅包含线性卷积和全连接运算,那么该网络仅能够表达线性映射,即便增加网络的深度也依旧还是线性映射,难以有效建模实际环境中非线性分布的数据。加入(非线性)激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。
常用的激活函数详解:
sigmoid函数/Logistic 函数
g
(
z
)
=
1
1
+
e
−
z
g(z)= \frac{1}{1+e^{-z}}
g(z)=1+e−z1

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+e−xex−e−x

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—高斯误差线性单元
2318

被折叠的 条评论
为什么被折叠?



