激活函数

激活函数介绍。

Activation

ReLU

$$
ReLU(x) = max(0, x)
$$

GELU(Gaussian Error Linear Unit)

$$
GELU(X) = x P(X <= x) = x \times \Phi(x)
$$
其中$\Phi(x)$表示高斯分布的累积概率分布,即在$(-∞,x]$区间对高斯分布的定积分。
$$
\Phi(x)=\int_{-\infty}^{x} \frac{e^{-t^{2} / 2}}{\sqrt{2 \pi}} d t=\frac{1}{2}\left[1+\operatorname{erf}\left(\frac{x}{\sqrt{2}}\right)\right] \tag{2}
$$
其中$\Phi(x)$是标准正态分布的累积分布函数,
$$
\operatorname{erf}(x) = \frac{2}{\sqrt{\pi}} \int_{0}^{x} e^{-t^{2}} dt \tag{3}
$$

Gaussian

当方差为无穷大,均值为0的时候,GeLU就等价于ReLU了。GELU可以当作为RELU的一种平滑策略。

GELU函数的导数是连续的,这使得在训练深度神经网络时可以更容易地传播梯度,避免了ReLU函数在$x=0$处的导数不连续的问题,从而减少了训练过程中出现的梯度消失问题。

GELU函数在激活函数的非线性变换中引入了类似于sigmoid函数的变换,这使得GELU函数的输出可以落在一个更广的范围内,有助于加速模型的收敛速度。

Swish

$$
Swish(x) =x * sigmoid(\beta x)
$$
ß 为可学习参数。Swish可以比ReLU激活函数更好,因为它在0附近提供了更平滑的转换,这可以带来更好的优化。

GLU

$$
GLU(x) = sigmoid(W_1 x + b)\otimes(Vx+c)
$$
GLU可以有效地捕获序列中的远程依赖关系,同时避免与lstm和gru等其他门控机制相关的一些梯度消失问题。

SwiGLU

$$
SwiGLU(x) = Swish(W_1 x + b)\otimes(Vx+c)
$$
SwiGLU是一个GLU,但不是将sigmoid作为激活函数,而是使用ß=1的swish

  • Swish对于负值的响应相对较小克服了 ReLU 某些神经元上输出始终为零的缺点
  • GLU 的门控特性,这意味着它可以根据输入的情况决定哪些信息应该通过、哪些信息应该被过滤。这种机制可以使网络更有效地学习到有用的表示,有助于提高模型的泛化能力。
  • 计算效率相比某些较复杂的激活函数(如 GELU)更高,同时仍能保持较好的性能。

SwiGLU

当β趋近于0时,Swish函数趋近于线性函数$y = x^2$ ;当β 趋近于无穷大时,Swish函数趋近于ReLU函数;当β 取值为1时,Swish函数是光滑且非单调的。