激活函数:从ReLU到SwiGLU
本文主要介绍常用的激活函数
ReLU激活函数**
最初的 Transformer 中 FFN 层使用的就是ReLU激活函数。
1 | def relu(x): |
优点:计算简单,输出具有稀疏性。
缺点:
GELU激活函数
论文《Gaussian Error Linear Units(GELUs)》提出了GELU,这是ReLU的平滑版本。
1 | def gelu(x): |
这是一个处处可微的非线性函数。
优点:具有更光滑的导数,避免梯度消失,提高模型的性能,加速收敛。
Swish激活函数
论文《Swish: a Self-Gated Activation Function》提出了Swish,这也是对带有非零负值梯度的ReLU平滑版本。
1 | def swish(x, beta=1): |
Swish同样是个处处可微的非线性函数,且有一个参数beta用于控制函数的形状。
GLU及其变体
GLU(Gated Linear Units)其实不算是一种激活函数,而是一种神经网络层。它是一个线性变换后面接门控机制的结构。其中门控机制是一个sigmoid函数(可以替换成其他激活函数)用来控制信息能够通过多少。