查看: 1413|回复: 1

GELU 激活函数

[复制链接]

166

主题

616

帖子

1万

积分

xdtech

Rank: 5Rank: 5

积分
10746
发表于 2019-12-4 22:47:38 | 显示全部楼层 |阅读模式
Gaussian Error Linerar Units(GELUS)

论文链接:https://arxiv.org/abs/1606.08415
最近在看bert源码,发现里边的激活函数不是Relu等常见的函数,是一个新的激活函数GELUs, 这里记录分析一下该激活函数的特点。

不管其他领域的鄙视链,在激活函数领域,大家公式的鄙视链应该是:Elus > Relu > Sigmoid ,这些激活函数都有自身的缺陷, sigmoid容易饱和,Elus与Relu缺乏随机因素。

在神经网络的建模过程中,模型很重要的性质就是非线性,同时为了模型泛化能力,需要加入随机正则,例如dropout(随机置一些输出为0,其实也是一种变相的随机非线性激活), 而随机正则与非线性激活是分开的两个事情, 而其实模型的输入是由非线性激活与随机正则两者共同决定的。

GELUs正是在激活中引入了随机正则的思想,是一种对神经元输入的概率描述,直观上更符合自然的认识,同时实验效果要比Relus与ELUs都要好。

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

这里Φ(x) \Phi(x)Φ(x)是正太分布的概率函数,可以简单采用正太分布N(0,1) \N(0,1)N(0,1), 要是觉得不刺激当然可以使用参数化的正太分布N(μ,σ) \N(\mu,\sigma)N(μ,σ), 然后通过训练得到μ,σ \mu,\sigmaμ,σ。

对于假设为标准正太分布的GELU(x) GELU(x)GELU(x), 论文中提供了近似计算的数学公式,如下:
GELU(x)=0.5x(1+tanh[2/π−−−√(x+0.044715x3)]) GELU(x) = 0.5x(1+tanh[\sqrt{2/\pi}(x+0.044715x^3)])
GELU(x)=0.5x(1+tanh[
2/π
​       
(x+0.044715x
3
)])


回复

使用道具 举报

166

主题

616

帖子

1万

积分

xdtech

Rank: 5Rank: 5

积分
10746
 楼主| 发表于 2019-12-4 22:47:45 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表