GELU

GELU (高斯误差线性单元) 是一种在深度学习中使用的激活函数,由 Dan HendrycksKevin Gimpel 提出。GELU 激活函数的形式为 xΦ(x),其中 Φ(x) 是标准高斯累积分布函数。与 ReLU(修正线性单元)和 ELU(指数线性单元)等其他常见激活函数相比,GELU 的特点在于它通过输入的值来权重输入,而不是像 ReLU 那样通过输入的符号来控制输入。

定义

GELU 激活函数的形式为 xΦ(x),其中 Φ(x) 是标准高斯累积分布函数。这意味着 GELU 函数会根据输入的大小来调整输入的权重。

GELU(x)=xΦ(x)

其中,Φ(x) 是标准高斯累积分布函数,其定义如下:

Φ(x)=12[1+erf(x2)]

这里,erf(x) 是误差函数,定义如下:

erf(x)=2π0xet2dt

以下是关于 GELU 的一些重要信息:

性质:与 ReLU 和 ELU 等激活函数相比,GELU 通过输入的值来权重输入,而不是通过输入的符号。这意味着 GELU 更加关注输入的实际值,而不仅仅是它是否大于零。

性能:在计算机视觉、自然语言处理和语音任务中,GELU 都显示出了优于 ReLU 和 ELU 的性能。这可能是因为 GELU 能更好地处理输入的细微差异,而不仅仅是简单地将它们分类为正或负。

图形

Pasted image 20230603121038.png

实现

来自 minGPT model.py

class NewGELU(nn.Module):
    """
    Implementation of the GELU activation function currently in Google BERT repo (identical to OpenAI GPT).
    Reference: Gaussian Error Linear Units (GELU) paper: https://arxiv.org/abs/1606.08415
    """
    def forward(self, x):
        return 0.5 * x * \
            (1.0 + torch.tanh(math.sqrt(2.0 / math.pi) * \
            (x + 0.044715 * torch.pow(x, 3.0))))

思考

学习 GELU 的一些思考问题:

  1. 为什么 GELU 会比 ReLU 和 ELU 表现得更好? 这可能与 GELU 能更好地处理输入的细微差异有关。在许多任务中,输入的微小变化可能会导致输出的大变化,而 GELU 能够捕捉到这些变化。

  2. 在什么情况下应该使用 GELU? 考虑到 GELU 在各种任务中的表现,当你需要一个能够处理输入细微差异的激活函数时,GELU 可能是一个好选择。

  3. GELU 有什么潜在的缺点? 尽管 GELU 在许多任务中表现出色,但它可能会比其他更简单的激活函数(如 ReLU)需要更多的计算资源。此外,由于 GELU 是相对较新的激活函数,因此关于其性能和适用性的研究可能还不如其他更成熟的激活函数那么丰富。


本文作者:Maeiee

本文链接:GELU

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!