Skip to content

激活函数演进与 GELU 详解

激活函数是神经网络非线性能力的来源。从 Sigmoid 到 ReLU 再到 GELU,激活函数的演进反映了深度学习对训练稳定性和表达能力的持续追求。

激活函数演进

GELU 数学定义

GELU(Gaussian Error Linear Unit)的定义:

python
import torch
import torch.nn.functional as F

# 精确 GELU
def gelu_exact(x):
    return x * 0.5 * (1 + torch.erf(x / math.sqrt(2)))

# 近似 GELU(tanh 版本,计算更快)
def gelu_approx(x):
    return 0.5 * x * (1 + torch.tanh(
        math.sqrt(2 / math.pi) * (x + 0.044715 * x ** 3)
    ))

# PyTorch 内置
F.gelu(x)  # 默认使用精确版本

为什么 Transformer 选择 GELU

GELU 在负值区域有非零梯度(不像 ReLU 完全截断),且在正值区域近似线性。这种平滑的非线性更适合 Transformer 中的自注意力计算。

相关资源

最近更新