版权声明:本文为博主原创文章,未经博主允许不得转载。
1、Sigmoid和Tanh激活函数及存在问题
深度学习(神经网络)中最先被广泛使用的激活函数是Sigmoid函数和双曲正切激活函数,都是非线性的激活函数,两个激活函数的表达式如下:
sigmoid函数: f(x)= 1 / (1+exp(−x))
双曲正切函数: f(x)= tanh(x)
激活函数的图形如图所示:
Sigmoid和双曲正切激活函数有两个明显的缺点:
1、存在饱和死区特性,梯度反向传播时,容易导致梯度爆炸(Gradient Explosion)和梯度消失(Gradient Vanish)问题。
2、对于多层非线性变换嵌套操作的深度学习网络,关于参数W的梯度计算比较复杂,计算量大。
2、Relu系列激活函数
为了解决上面两个问题,深度学习研究领域陆续提出了Relu(Rectified linear unit)及其变体Leaky Relu、Elu、pRelu、PRelu、RRelu等。借鉴LSTM的Gate Mechanism思想,基于Relu激活函数和Tanh激活函数,结合gate unit产生的GTU units、GLU units等激活单元。
Relu激活函数的表达式为:f(x)=max(0,x)
Relu激活函数及它一些变体的曲线如下图所示:
关于Relu及其变体激活函数介绍的资料比较多,这里我就不赘述了。
3、基于Gate mechanism的GLU、GTU 单元
介绍一下基于gate mechanism实现的,两个比较新颖的激活函数GTU和GLU。
GTU(Gated Tanh Unit)的表达式为:
f(X) = tanh(X*W+b) * O(X*V+c)
GLU(Gated Liner Unit)的表达式为:
f(X) = (X * W + b) * O(X * V + c)
分析GTU和GLU的组成结构可以发现:
Tanh激活单元:tanh(X*W+b),加上一个Sigmoid激活单元:O(X*V+c)构成的gate unit,就构成了GTU单元。
Relu激活单元:(X * W + b),加上一个Sigmoid激活单元:O(X * V + c)构成的gate unit,就构成了GLU单元。
4、gate mechanism影响及各激活单元对比
下图实验结果来源于论文《Language Modeling with Gated Convolutional Networks》 5.2节。
图1 Tanh、Relu、GTU和GLU激活单元性能对比
(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更快的收敛速度,以及更高的准确率。
5、参考文献
[1] Conditional Image Generation with PixelCNN Decoders
[2] Language Modeling with Gated Convolutional Networks
更多深度学习在NLP方面应用的经典论文、实践经验和最新消息,欢迎关注微信公众号“深度学习与NLP”或“DeepLearning_NLP”或扫描二维码添加关注。