有哪些激活函数,各自有什么优缺点?
(1)Sigmoid函数
优点:一是输出在(0,1)之间,单调连续,输出范围有限。二是容易求导。
缺点:一是容易产生梯度消失,导致训练困难。二是其输出不是以0为中心。三是要进行指数运算,速度相对较慢。
建议:基于上面Sigmoid的性质,所以不建议在中间层使用Sigmoid激活函数,因为它会让梯度消失。
(2)Tanh函数(双曲正切函数)
优点:一是比Sigmoid函数收敛速度快。二是与Sigmoid函数相比,其输出以0为中心。
缺点:一是容易产生梯度消失,导致训练困难。二是要进行指数运算,速度相对较慢。
(3)ReLU函数(线性整流函数)
优点:一是非饱和,收敛速度块。二是简单,易于计算。三是有效缓解梯度消失的问题。四是在无监督预训练的时候也能有较好的表现。五是具有稀疏表达能力。
缺点:训练过程中会出现神经元死亡,导致参数此后无法更新。
(4)GELU函数(高斯误差线性单元激活函数)
优点:一是在NLP领域效果最佳,尤其在 Transformer 模型中表现最好。二是类似ReLU能避免梯度消失问题。
缺点:涉及到指数运算,计算量大。
GELU与ReLU激活函数差异是什么?
ReLU(线性整流函数)将小于0的数据映射到0,将大于0的数据不变,相当于其输入乘以一个0或者1,所乘的值是确定的。虽然性能比Sigmoid好,但是缺乏数据的统计特性。
GELU(高斯误差线性单元激活函数)则在ReLU的基础上加入了统计的特性,他的表达式为对于每一个输入x,其服从于标准正态分布 N(0, 1),乘上一个伯努利分布Bernoulli(Φ(x)),该伯努利分布又是依赖于输入x的,这个权值取决于当前的输入有多大的概率大于其余的输入,也就是当输入值较小时,其被drop的可能性更大。相当于其所加的0或者1的mask值是随机的,同时是依赖于输入的分布的。
如何选择正确的激活函数?
ReLU函数是一个通用的激活函数,目前在大多数情况下使用。在Transformer模型中使用GELU函数。用于分类器时,Sigmoid函数及其组合通常效果更好。ReLU函数用在隐藏层中。输出层使用Sigmoid函数或softmax函数用于分类。在回归中使用线性函数。