激活函数演进与 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 中的自注意力计算。