激活函数

激活函数介绍。

Activation

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

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

    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函数是光滑且非单调的。