本文共 1165 字,大约阅读时间需要 3 分钟。
GELU(Gaussian Error Linear Unit)是一种新的激活函数,近年来在深度学习领域中备受关注。它通过引入高斯分布的变换,解决了传统激活函数中梯度消失问题,同时提升了模型的训练效率。本文将从原理、优点以及代码实现三个方面,详细解析GELU激活函数。
GELU激活函数的定义公式为:
$$ GELU(x) = x \cdot \Phi(x) $$
其中,$\Phi(x)$ 是标准正态分布的累积分布函数(CDF),表示为:
$$ \Phi(x) = \frac{1}{\sqrt{2\pi}} \int_{-\infty}^{x} e^{-t^2/2} dt $$
这个公式虽然精确,但计算复杂,难以在实时推理中使用。因此,研究者提出了一个近似公式:
$$ GELU(x) \approx 0.5 \cdot x \cdot \left(1 + \tanh\left(\sqrt{\frac{\pi}{2}} \cdot (x + 0.047715 x^3)\right)\right) $$
这个近似公式不仅简化了计算,还保持了与原公式的很高一致性。
相比RELU激活函数,GELU具有以下显著优点:
无梯度消失问题
RELU在输入为负值时,激活输出恒为0,导致导数为0,导致梯度消失。GELU激活函数在输入为负值时,输出并不会完全为零,从而避免了梯度消失问题。更好的平滑性
在输入为0时,RELU激活函数不可导,而GELU激活函数在该点处具有光滑的曲线,保证了导数的连续性,使得模型更容易训练。更广的输出范围
GELU激活函数的输出范围比RELU更广,输出值可以在-1到1之间变化,这有助于加速模型的收敛速度。以下是PyTorch框架中GELU激活函数的实现代码:
class GELU(nn.Module): def __init__(self): super(GELU, self).__init__() def forward(self, x): return 0.5 * x * (1 + torch.tanh(np.sqrt(2 / np.pi) * (x + 0.044715 * torch.pow(x, 3))))
这个代码实现了GELU激活函数的近似公式,能够在实际应用中快速计算出激活值。
GELU激活函数凭借其独特的数学特性和优点,逐渐成为深度学习模型中的重要组成部分。相比传统的激活函数如RELU,GELU不仅解决了梯度消失问题,还提升了模型的训练效率。如果你正在寻找一种更高效的激活函数,GELU绝对值得一试。
转载地址:http://lzrfk.baihongyu.com/