Have a Question?
GELU(Gaussian Error Linear Unit)激活函数简介
GELU 在深度学习领域,特别是在 BERT、GPT 等大型语言模型中有比较多的应用。本文介绍了 GELU(Gaussian Error Linear Unit)激活函数的理论和应用。从概率论视角出发,推导了 GELU 的数学形式及其导数,并通过与 ReLU、ELU 等经典激活函数的对比,分析了 GELU 的特性。
1. 简介
在深度学习的发展历程中,激活函数扮演着至关重要的角色。从早期的 Sigmoid 到广泛使用的 ReLU,激活函数的选择直接影响着神经网络的性能。GeLU (Gaussian Error Linear Unit) 作为一种新型激活函数,在多个领域都展现出了优异的性能,并在 BERT、GPT 等大型语言模型中得到广泛应用。
概率视角
从概率视角看,GELU 可以被解释为一个随机正则化过程的确定性近似。可以类比下一些常见的方法,比如 ReLU,可以看做是确定地将输入乘以 0 或 1;而 Dropout 就相当于不确定性地将输入乘以 0。类似地 GELU 对于输入 x,其输出可以看作是以下随机过程的期望:
\begin{equation}\text{GELU}(x) = x \cdot \mathbb{E}[m], \text{ where } m \sim \text{Bernoulli}(\Phi(x))\end{equation}这种解释使得 GELU 在理论上具有更好的统计学意义。
2. GELU 的数学表示
2.1 基本定义
\begin{equation}\text{GELU}(x) = x \cdot \Phi(x)\end{equation}其中 \Phi(x) 是标准正态分布的累积分布函数(CDF)。
对于标准正态分布,其概率密度函数为:
\begin{equation}f(x)=\frac1{\sqrt{2\pi}}\mathrm{~exp}{\left(-\frac{x^2}2\right)}\end{equation}则累积分布函数 {P}\left(X\leq{x}\right) 为:
\begin{equation}\Phi(x)=F(x;0,1)=\frac1{\sqrt{2\pi}}\int_{-\infty}^x\exp\left(-\frac{t^2}2\right)dt.\end{equation}基于误差函数 erf 定义:
\begin{equation}\mathrm{erf}(x)=\frac1{\sqrt{\pi}}\int_{-x}^xe^{-t^2}\mathrm{~d}t=\frac2{\sqrt{\pi}}\int_0^xe^{-t^2}\mathrm{~d}t.\end{equation}
推导下:
\begin{equation}\begin{aligned}\Phi(x)&=\frac{1}{\sqrt{2\pi}}\int_{-\infty}^{x}e^{-\frac{t^{2}}{2}}dt \\&=\frac{1}{\sqrt{2\pi}}\int_{-\infty}^{0}e^{-\frac{t^{2}}{2}}dt\quad+\quad\frac{1}{\sqrt{2\pi}}\int_{0}^{x}e^{-\frac{t^{2}}{2}}dt \\&\overset{z=\frac{t}{\sqrt{2}}}{\Longrightarrow } \frac{1}{2}+\frac{1}{\sqrt{2\pi}}\int_{0}^{x}e^{-z^{2}}\cdot\sqrt{2}\cdot dz \\&= \frac{1}{2}\left[1+\frac{2}{\sqrt{\pi}}\int_{0}^{x}e^{-z^{2}}\cdot dz \right] \\&=\frac{1}{2}\left[ 1+\operatorname{erf}(\frac{x}{\sqrt{2}}) \right]\end{aligned}\end{equation}
则 \Phi(x) 简化为:
\begin{equation}\Phi(z)=\frac{1}{2}\left[1+\mathrm{erf}{\left(\frac{z}{\sqrt{2}}\right)}\right]\end{equation}
基于上述公式,GELU 的完整形式可以表示为:
\begin{equation}\begin{align*}\text{GELU}\left(x\right) &= x{P}\left(X\leq{x}\right) \\&= x\frac1{\sqrt{2\pi}}\int_{-\infty}^x\exp\left(-\frac{t^2}2\right)dt \\&= x\Phi\left(x\right) \\&= x \cdot \frac{1}{2}\left[1 + \text{erf}(x/\sqrt{2})\right],\end{align*}\end{equation}不同于不同于 ReLU 通过符号 (x\mathbf{1}_{x>0}) 来门控输入,在 GELU 中,输入值 x 被其在标准正态分布中的累积概率(即百分位数)所加权,因此提供了比 ReLU 更平滑的激活曲线。
2.2 近似计算
由于 GELU 的精确计算相对复杂,在实际应用中常用以下两种近似方法:
近似方法 1(基于双曲正切,又叫 tanh 近似):
\begin{equation}\text{GELU}(x) \approx 0.5x\left(1 + \tanh\left[\sqrt{2/\pi}(x + 0.044715x^3)\right]\right)\end{equation}近似方法 2(基于 Sigmoid 函数,又叫 sigmoid 近似):
\begin{equation}\text{GELU}(x) \approx x \cdot \sigma(1.702x)\end{equation}其中 \sigma(x) 是 sigmoid 函数。
2.3 导数推导过程
使用链式法则
要计算 GELU 的导数,我们需要使用链式法则。首先将 GELU 函数展开:
\begin{equation}\text{GELU}(x) = \frac{x}{2} + \frac{x}{2}\text{erf}\left(\frac{x}{\sqrt{2}}\right)\end{equation}对这个表达式求导,需要使用乘法法则:
\begin{equation}\frac{\mathrm{d}}{\mathrm{dx}}\text{GELU}(x) = \frac{\mathrm{d}}{\mathrm{dx}}\left(\frac{x}{2}\right) + \frac{\mathrm{d}}{\mathrm{dx}}\left(\frac{x}{2}\text{erf}\left(\frac{x}{\sqrt{2}}\right)\right)\end{equation}分步推导
第一项很简单:
\begin{equation}\frac{\mathrm{d}}{\mathrm{dx}}\left(\frac{x}{2}\right) = \frac{1}{2}\end{equation}第二项需要使用乘积法则:
\begin{equation}\frac{\mathrm{d}}{\mathrm{dx}}\left(\frac{x}{2}\text{erf}\left(\frac{x}{\sqrt{2}}\right)\right) = \frac{1}{2}\text{erf}\left(\frac{x}{\sqrt{2}}\right) + \frac{x}{2}\frac{\mathrm{d}}{\mathrm{dx}}\text{erf}\left(\frac{x}{\sqrt{2}}\right)\end{equation}误差函数的导数
误差函数的导数是:
\begin{equation}\frac{\mathrm{d}}{\mathrm{dx}}\text{erf}(x) = \frac{2}{\sqrt{\pi}}e^{-x^2}\end{equation}使用链式法则,我们可以得到:
\begin{equation}\frac{\mathrm{d}}{\mathrm{dx}}\text{erf}\left(\frac{x}{\sqrt{2}}\right) = \frac{2}{\sqrt{\pi}}e^{-x^2/2} \cdot \frac{1}{\sqrt{2}} = \sqrt{\frac{2}{\pi}}e^{-x^2/2}\end{equation}合并结果
将所有部分组合在一起:
\begin{equation}\begin{aligned}\frac{\mathrm{d}}{\mathrm{dx}}\text{GELU}(x) &= \frac{1}{2} + \frac{1}{2}\text{erf}\left(\frac{x}{\sqrt{2}}\right) + \frac{x}{2} \cdot \sqrt{\frac{2}{\pi}}e^{-x^2/2} \\&= \frac{1}{2}\left[1 + \text{erf}\left(\frac{x}{\sqrt{2}}\right)\right] + \frac{x}{\sqrt{2\pi}}e^{-x^2/2}\end{aligned}\end{equation}导数的另一种表示形式
利用标准正态分布的累积分布函数 \Phi(x) 和概率密度函数 \phi(x),我们可以将 GELU 的导数写成更简洁的形式:
\begin{equation}\frac{\mathrm{d}}{\mathrm{dx}}\text{GELU}(x) = \Phi(x) + x\phi(x)\end{equation}其中:
\begin{equation}\begin{aligned}\Phi(x) &= \frac{1}{2}\left[1 + \text{erf}\left(\frac{x}{\sqrt{2}}\right)\right] \\\phi(x) &= \frac{1}{\sqrt{2\pi}}e^{-x^2/2}\end{aligned}\end{equation}导数的性质分析
GELU 的导数具有以下重要性质:
- 处处连续且可导
- 当 x \to +\infty 时,导数趋近于 1
- 当 x \to -\infty 时,导数趋近于 0
- 在 x = 0 处,导数值为 0.5
3. GELU 与其他激活函数的对比
3.1 与 ReLU 对比
ReLU 的激活函数表达式:
\begin{equation}\operatorname{ReLU}(x)=\begin{cases}x &\quad \text{ if } x>0\\0 &\quad \text{ if } x\leq0\end{cases}\end{equation}
GELU 可以看作是对 ReLU 的概率化推广:
- 当 x \gg 0 时,\Phi(x) \approx 1,此时 \operatorname{GELU}(x) \approx x,类似于 ReLU
- 当 x \ll 0 时,\Phi(x) \approx 0,此时 \operatorname{GELU}(x) \approx 0,类似于 ReLU
3.2 与 ELU 对比
ELU 的激活函数表达式:
\begin{equation}\operatorname{ELU}(x)=\begin{cases}x &\quad \text{ if } x \geq 0 \\\alpha(e^x-1) &\quad \text{ if } x < 0\end{cases}\end{equation}
- ELU可以看作是 xP(X \leq x), X \sim \operatorname{Cauchy}(0, 1) (Cauchy distribution 柯西分布) 的变型,与 GELU 形式上相近。
- 在 0 附近,GELU 提供了一个平滑的过渡,这一特性类似于 ELU