SwiGLU激活函数
一句话总结
SwiGLU将Swish激活与门控线性单元(GLU)结合,为Transformer的FFN层提供了更强的表达能力和更好的训练效果。
核心概念
标准FFN结构为:FFN(x) = W2 * ReLU(W1 * x)。SwiGLU将其改为:SwiGLU(x) = (Swish(W1 * x)) * (W3 * x),其中Swish(x) = x * sigmoid(beta * x),表示逐元素乘法。GLU(门控线性单元)的核心思想是用一个门控分支控制信息流通,W3x作为门控信号决定哪些特征被保留。由于SwiGLU引入了第三个权重矩阵W3,为保持参数量不变,通常将隐藏层维度从4d缩小到约8d/3(约2.67d)。
为什么重要
Google在PaLM论文中验证了SwiGLU相比ReLU/GELU能带来稳定的性能提升。门控机制让网络能自适应地选择信息,类似LSTM中门控的作用。在相同参数量下SwiGLU的性能优于传统激活函数,已被LLaMA、Mistral等采纳为标准组件。
实践要点
使用SwiGLU时FFN的参数量计算要注意:三个矩阵为W1(d->h)、W3(d->h)、W2(h->d),总参数3dh,隐藏层h通常取8d/3并向上取整到某个整除数(如128的倍数)以优化矩阵运算。Swish中的beta参数通常固定为1,即SiLU(Sigmoid Linear Unit)。
常见误区
误区一:忽视隐藏层维度调整,直接用SwiGLU替换ReLU会导致参数量增加50%。误区二:将SwiGLU的优势归因于Swish激活本身。实际上门控机制(GLU部分)才是性能提升的主要来源。误区三:认为激活函数的选择不重要,实际上在大规模训练中微小的优势会被放大。