1. 概述
SwiGLU[1] 激活函数的全称是 Swish‑Gated Linear Unit,现在已经成为 LLM 中的标配激活函数,实际上,SwiGLU 激活函数是由两部分组成的,分别是 Swish[2] 激活函数和 GLU[3](Gated Linear Unit)激活函数,集合了两个激活函数的特点。
2. GLU 激活函数
GLU(Gated Linear Unit)称为门控线性单元,最早又 Dauphine 等人[3]提出,采用的是两个线性投影的逐元素乘积的形式,其中的一个投影还需要通过一个 Sigmoid 函数,具体的公式如下所示:
其中, 为 Sigmoid 函数, 表示的是逐元素乘积。
注意:在数学的严格意义上来说, 才是逐元素乘积(element-wise product),也称为 Hadamard 乘积(Hadamard product),而 在数学上则是外积(outer product),或者称为克罗内克积(Kronecker product)。在参考文献[1]和参考文献[3]中都同时使用了 ,并将其描述成逐元素乘积。这可能是作者的定义,导致在很多地方都沿用这种表述,我们这里也保持与论文一致。注意与数学上的区分。
在参考文献[1]中,作者 Shazeer 测试了 Gated Linear Unit (GLU) 的多种变体,这些变体是通过替换上面的 Sigmoid 门控函数,最终发现他们要优于最初 Transformer[4] 中使用的 ReLU 激活函数,这个在后面还会提及到。因为其他的变体不是本文的主要内容,在这里也就不再展开。
门控的作用是允许信息通过的多少,在 LSTM[5] 等网络模型中有广泛的使用。为了更方便看出门控对信息通过的影响,我们对上述 GLU 激活函数改变下,画出 的图:

其中,横轴是门控输入 ,纵轴是 GLU 的输出,不同颜色的曲线对应不同的 值,从图中可以看到:当 很大时,,输出趋近于 ;当 很小时,,输出趋近于 。也就是说,门控 决定了 的信息能通过多少。
3. Swish 激活函数
Swish 激活函数是由 Ramachandran 等人[2]提出,采用的是自身与其 Sigmoid 相乘,具体的公式如下所示:
通常取 ,这时候公式为:
这时也成为 SiLU(Sigmoid Linear Unit)。Swish 激活函数的形状如下图所示:

4. SwiGLU 激活函数
这时候该本文的主角,也就是 SwiGLU 激活函数登场了,正如上面所述,SwiGLU 是 GLU 的变种形式,其使用的是 Swish 激活函数替换 GLU 中的 Sigmoid 门控,因此也就有了如下的 SwiGLU 激活函数的具体公式:
SwiGLU 激活函数已经被众多 LLM 采用为其前馈网络 FFN 内部的激活函数,如下图所示:

5. 总结
SwiGLU 激活函数是当前 LLM 中 FFN 部分使用较多的激活函数,在 SwiGLU 中,融合了 Swish 激活函数和 GLU(Gated Linear Unit)激活函数两个部分。
参考文献
[1] Shazeer N. Glu variants improve transformer[J]. arXiv preprint arXiv:2002.05202, 2020.
[2] Ramachandran P, Zoph B, Le Q V. Searching for activation functions[J]. arXiv preprint arXiv:1710.05941, 2017.
[3] Dauphin Y N, Fan A, Auli M, et al. Language modeling with gated convolutional networks[C]//International conference on machine learning. PMLR, 2017: 933-941.
[4] Vaswani A , Shazeer N , Parmar N ,et al.Attention Is All You Need[J].arXiv, 2017.DOI:10.48550/arXiv.1706.03762.
[5] 长短期记忆网络LSTM