GELU 激活函数

GELU(Gaussian Error Linear Unit,高斯误差线性单元)激活函数在 NLP 任务中被广泛使用,例如:BERT、ALBERT、GPT 等模型都用到 GELU 激活函数。其公式如下:

GELU 函数通过将激活值乘以 1 或 0,实现将不重要的信息设置为 0。那么,如何确定激活值是乘以 0 还是乘以 1 呢?

如果神经网络的激活值越小,其被保留的概率也就越低,即: 乘以1的概率也越低,反之则乘以 0 的概率很高。这种引入概率的机制,能够更好的保持网络对输入的依赖性。

公式中的 φ 函数就是根据激活值的分布来计算出的 0 或者 1 的概率,从而最终产生 0 或 1,该函数可能存在不同的计算方法。

在 PyTorch 中 GELU 的函数图像、导数图像如下:

以上函数图像由下列代码产生:

import torch
import matplotlib.pyplot as plt
import torch.nn.functional as F


def test():
    
    _, axes = plt.subplots(1, 2)

    # 函数图像
    x = torch.linspace(-20, 20, 1000)
    y = F.gelu(x)
    axes[0].plot(x, y)
    axes[0].grid()
    axes[0].set_title('GELU 函数图像')

    # 导数图像
    x = torch.linspace(-20, 20, 1000, requires_grad=True)
    F.gelu(x).sum().backward()

    axes[1].plot(x.detach(), x.grad)
    axes[1].grid()
    axes[1].set_title('GELU 导数图像')

    plt.show()

if __name__ == '__main__':
    test()

在 PyTorch 中 φ 函数计算的是激活值的高斯分布的累计分布。
论文地址:https://arxiv.org/pdf/1606.08415.pdf

未经允许不得转载:一亩三分地 » GELU 激活函数
评论 (0)

2 + 5 =