GeLU,(Gaussian Error Linerar Units),高斯误差线性单元
1 Gelu数学原理
G(x) = xΦ(X<=x)
其中,Φ(X)为正态分布。
累积分布函数是指随机变量XX小于或等于xx的概率,用概率密度函数表示为:
正态分布的累积分布函数可以用“误差函数” erf 表示:
其中误差函数的表达式为:
2 代码实现:
def gelu(x):
"""Implementation of the gelu activation function.
For information: OpenAI GPT's gelu is slightly different (and gives slightly different results):
0.5 * x * (1 + torch.tanh(math.sqrt(2 / math.pi) * (x + 0.044715 * torch.pow(x, 3))))
Also see https://arxiv.org/abs/1606.08415
"""
return x * 0.5 * (1.0 + torch.erf(x / math.sqrt(2.0)))
3 GeLU与ReLU、sigmoid的区别
GeLU激活函数的最大特点是将非线性与依赖输入数据分布的随机正则化器相结合在一个激活函数的表达中。与以往dropout指定随机概率值或ReLU根据输入值的正负进行mask的方式不同,GeLU根据当前input大于其余inputs的概率进行随机正则化,即为在mask时依赖输入的数据分布。
GeLU可以看做是ReLU、zoneout、dropout的一个综合。