SwiGLU(Swish-Gated Linear Unit)是一种结合了Swish激活函数和GLU(Gated Linear Unit)机制的激活函数,广泛应用于现代大型语言模型(LLM)中,尤其是在Transformer架构的前馈网络(FFN)部分。
那么在介绍SwiGLU之前,先介绍一下Swish激活函数和GLU(Gated Linear Unit)机制:
1.Swish激活函数
参考博客:神经网络常见激活函数 12-Swish函数
特性与优势:
缺点: 与 ReLU 相比,Swish 的计算成本更高,因为它涉及到 sigmoid 函数的计算。由于计算复杂度的增加,Swish 可能会导致训练时间变长。
2.GLU(Gated Linear Unit)
GLU(Gated Linear Unit)是一种引入了门控机制的激活函数,核心思想是将输入数据通过两个线性变换,其中一个变换的结果通过Sigmoid函数进行非线性处理,另一个保持线性,然后两者逐元素相乘。其数学表达式为
GLU 的优势:
✅ 提高模型的表达能力
由于门控单元可以学习性地决定信息流动,GLU 允许模型有选择地传递重要信息,而抑制无关信息。
✅避免梯度消失
标准 ReLU 会导致负数变成 0,信息丢失。GLU 使用 Sigmoid 门控,不会直接丢失所有信息,即使梯度较小,也能保留一定的信息流。
✅ 适用于序列建模
在 NLP、时间序列等任务中,GLU 可以有效捕获长距离依赖关系,为什么,解释如下:
GLU激活函数通过门控机制对输入进行筛选和调控。门控部分使用Sigmoid函数对中间向量进行处理,生成一个0到1之间的门控向量。这个门控向量决定了输入的哪些部分应该被保留、哪些部分应该被抑制。通过这个机制,GLU能够有选择地过滤输入的某些部分,将重要的信息传递给下一层,而抑制不重要的信息。这种筛选机制使得网络能够更加关注长期依赖关系中的重要部分,长距离依赖的信息如果重要,门控值会较大(接近 1),从而保持信息流动,更好地捕捉长期依赖关系。
思考:如果W=1,b=0,Swish的超参=1,输入X是单变量,那么GLU应该和Swish一样
3)SwiGLU:Swish和GLU的结合
SwiGLU结合了Swish的平滑性和GLU的门控机制,在大语言模型(如LLaMA、GPT)中表现出色,⊙表示逐元素相乘
它与标准GLU的区别是,SwiGLU 用 Swish 替代了 Sigmoid作为门控单元,使得SwiGLU更具表达能力
为什么 SwiGLU 更强?
1️⃣ 更平滑的梯度流动
GLU 使用 Sigmoid 作为门控,而 Sigmoid 在极端值(接近 0 或 1)时梯度很小,可能会导致梯度消失。
SwiGLU 采用 Swish,其梯度更加平滑,使得信息可以更稳定地通过网络,提高模型的训练效率。
2️⃣ 增强的信息选择能力
GLU 只会让信息 “通过” 或 “不通过”,本质上是一个二值化的门控(尽管是连续的)。
SwiGLU 允许信息部分通过,因为 Swish 在 <0时仍有非零输出,使得信息可以更细腻地被保留和调整。
3️⃣ 更强的特征表达能力
Swish 是一个非单调激活函数(不像 ReLU 或 Sigmoid)。SwiGLU 在 Transformer FFN 结构中比 GLU 更有效,因为 Swish 允许负值信息在一定程度上通过,而 Sigmoid 可能会完全抑制负值信息。