激活函数详解

激活函数详解

ELU函数

激活函数详解_第1张图片
       ELUs是“指数线性单元”,它试图将激活函数的平均值接近零,从而加快学习的速度。同时,它还能通过正值的标识来避免梯度消失的问题。根据一些研究,ELUs分类精确度是高于ReLUs的。具有relu的优势,且输出均值接近零,实际上preluLeakyReLU都有这一优点。有负数饱和区域,从而对噪声有一些鲁棒性。可以看做是介于reluLeakyReLU之间的一个东西。当然,这个函数也需要计算exp,从而计算量上更大一些。

Gelu函数

      bert源码中有一个神奇的激活函数,那就是GeLUs,在激活函数领域,大家公式的鄙视链应该是:Elus > Relu > Sigmoid ,这些激活函数都有自身的缺陷, sigmoid容易饱和,ElusRelu缺乏随机因素。
      bert源码给出的GELU代码表示如下:

def gelu(input_tensor):
	cdf = 0.5 * (1.0 + tf.erf(input_tensor / tf.sqrt(2.0)))
	return input_tesnsor*cdf

       GeLUs其实是dropout、zoneout、relus的综合,GeLUs对于输入乘以一个0,1组成的mask,而该mask的生成则是依概率随机的依赖于输入。假设输入为X, mask为m,则m服从一个伯努利分布 ( Φ ( x ) , Φ ( x ) = P ( X < = x ) , X 服 从 正 态 分 布 ) (Φ(x),Φ(x)=P(X<=x), X服从正态分布) (Φ(x)Φ(x)=P(X<=x),X)       这么选择是因为神经元的输入趋向于正太分布,这么设定使得当输入x减小的时候,输入会有一个更高的概率被dropout掉,这样的激活变换就会随机依赖于输入了。

你可能感兴趣的:(激活函数详解)