SwiGLU是LLaMA、Mistral、Qwen、Gemma和大多数现代LLM使用的前馈激活函数。理解它有助于你阅读模型架构,并解释为什么现代FFN层有三个权重矩阵而不是两个。这是一个对模型质量有重大影响的小架构选择。
标准FFN:FFN(x) = W2 · GELU(W1 · x)。两个权重矩阵,一个激活。SwiGLU FFN:SwiGLU(x) = W2 · (SiLU(W1 · x) ⊗ W3 · x)。三个权重矩阵,一个门控机制。门控(W3 · x)控制什么通过,让网络选择性地抑制或放大不同的特征。为保持参数数量不变,中间维度通常从4×model_dim减少到(8/3)×model_dim。
门控给网络提供了标准激活所缺乏的乘法交互。标准激活应用固定的非线性。门控应用学习到的、依赖输入的非线性。这种额外的表达力帮助网络每层学习更复杂的函数,这意味着你需要更少的层(或更小的层)来获得等效性能。Shazeer(2020)表明GLU变体在各种模型规模上始终优于标准FFN。
SwiGLU是几种GLU变体之一:GeGLU(使用GELU而非SiLU)、ReGLU(使用ReLU)和原始GLU(使用sigmoid)。SwiGLU和GeGLU表现相似,都优于ReGLU。它们之间的选择主要是经验性的——SwiGLU通过惯例成为默认(LLaMA采用了它,其他人跟随),而非对GeGLU有明确的理论优势。