面试积累 - FFN 层激活函数
在 FFN 层中,有几个常见的激活函数,这次我们尝试梳理它们。
GLU 变体公式
图片来源:论文 GLU Variants Improve Transformer
说明:$\otimes$ 表示逐元素相乘;$\sigma$ 为 sigmoid 激活;基础组中的 $\mathbf{x}$、$\mathbf{0}$ 为向量(故加粗)。
为什么需要激活函数
在神经网络中,我们对神经元进行线性变换 $z=Wx+b$ 后,通过激活函数 $a=f(z)$ 作为下一层函数的输入,反映该函数是否被激活。
激活函数赋予了神经网络非线性,如果没有激活函数,神经网络就是多个线性变换堆叠,对于一个两层的网络 $z{2}=W{2}(W{1}x+b{1})+b{2}$ 来说,其可以写成 $z_2=W{1}W{2}x+W{2}b_1+b_2 = Wx+b$ 这仍然是一个线性变换。
什么函数可以作为激活函数
在解答这个问题之前,我们看看激活函数参与了什么过程:
1.它参与了神经网络的非线性变换
2.它参与了反向传播
因此,它必须是一个非线性函数(条件 1 ),他必须可导(或者仅在有限点不可导)。
此外,它最好计算的效率高,梯度性质较好,输出范围适当,且足够平滑。
很遗憾,下面的条件很难一起满足。
在接下来的内容中,我们根据是否存在 $\otimes$ 来区分门控函数与非门控函数,因为门控函数定义为
其中:
- $a$:用来计算“门”的那一路输入;
- $g(a)$:门控信号;
- $z$:真正要通过的信息;
- $\otimes$:逐元素相乘。
非门控函数
RELU
最简单的函数,其输出范围 $[0,+\infty]$ ,当 $x=0$ 时,函数不可导,需要定义其导数为 $0$ 或者 $1$
当输入长期小于 $0$ ,该函数可能不再激活 ,称为 Dead ReLU 问题

函数如图所示
LeakyReLU
为了解决ReLU在负半轴导数为0的情况,我们对其在负半轴做一下修改
其中 $\alpha$ 是一个极小的正数(例如 $0.01$ )
图就不放了。
sigmoid
其易于求导,设 sigmoid 函数为 $\sigma(x)$ 则导数为 $\sigma’(x)=\sigma(x)(1-\sigma(x))$
当 $x$ 很大或者很小时,函数导数 $\sigma’(x)$ 接近 $0$ ,此时 $x$ 无论变化多少,函数变化不大,反向传播时参数更新极小甚至不更新,发生梯度饱和。
函数范围变成 $(0,1)$

tanh
其导数为 $\tanh’(x)=1-\tanh^2(x)$ ,输出范围变成了 $(-1,1)$ 但是计算量高于 ReLU 函数。

门控函数
GeLU
GeLU 输入和门控都取决于 $x$ ,所以也可以认为不是门控函数。
$\otimes$ 表示逐元素相乘, erf函数定义如下
其与正态分布损失函数有关
其中 $Z \sim N(0,1)$ ,因此GeLU 还可以写作 $\mathrm{GeLU}(x) =x \otimes \Phi(x)$ ,其函数图像如图所示。

Swish与SiLU
Swish 与 SiLU 输入和门控都取决于 $x$ ,所以也可以认为不是门控函数。
当 $\beta = 1$ 时,称为 SiLU ,更通常地,如果说明 Swish 但没有指明 $\beta$ ,则可以默认指的是 $\beta = 1$ 的情况

GeGLU 与 SwiGLU
将 GeLU 右边的门控函数套娃成 GeLU,即得到 GeGLU
将 GeLU 右边的门控函数套娃成 Swish,即得到 SwiGLU


由于就是直接将 GeLU 套娃,对函数本身没有什么好说的,我们回到 FFN 层来区别三者
GeLU,GeGLU,SwiGLU in FFN
在 FFN 层中,三者公式如下,其中 GeGLU,SwiGLU 需要额外一个可学习的权重矩阵
GELU FFN:
GeGLU FFN:
SwiGLU FFN:
顺带一说,对于一个长度为 len*d1 的输入,首先经过三个 d1*d1 的注意力矩阵,经过缩放,残差链接与 LN 后,进入FFN层,此时会先遇到一个维度为 d1*d2 的升维矩阵 $W_1$ ,如果需要引入非自身门控,则还需要一个维度与之相符的矩阵 $W_2$ ,接着需要一个降维矩阵 $W_3$
一般来说 $d_2 = 4 d_1$ ,则不考虑门控的FFN层参数为注意力层的 $\frac{3}{8}$ ,如果考虑门控就变成 $4$ 倍了,为了保证和原来无门控的时候差不多,需要将维度 $d_2$ 变成原来 $\frac{2}{3}$ 倍。
!!! note 注意
主流的大模型几乎清一色使用SwiGLU,FFN层无门控模型已经实质上不存在了,因此$d_2 = 4 d_1$ 并需要让门控模型保持总参数不变这个基础也不存在了,且对于MoE 模型 ,该规则也不一定适用。
近似计算
以上函数可以近似计算,这里在面试中不太重要,因此先不更新。





