跳转到内容

输入关键词开始搜索

    SwiGLU

    概念更新 2026-08-02置信度 high#概念#基础#长青#大模型#架构

    用 SiLU/Swish 激活一条投影作为门,逐元素调制另一条投影,再映射回模型维度的门控前馈网络;Llama 系列 Transformer block 使用这一结构。

    SiLU(也称 Swish)为:

    SiLU(x)=xσ(x)=x1+ex.\operatorname{SiLU}(x)=x\sigma(x)=\frac{x}{1+e^{-x}}.

    Llama 风格 SwiGLU 可写为:

    FFN(x)=W2(SiLU(W1x)W3x).\operatorname{FFN}(x)=W_2\left(\operatorname{SiLU}(W_1x)\odot W_3x\right).

    其中 W1W_1 产生门控分支,W3W_3 产生内容分支,逐元素相乘后由 W2W_2 投影回 hidden size。与普通两层 FFN 相比,它有三组主要线性权重。

    def forward(x):
    gate = F.silu(w1(x))
    value = w3(x)
    return w2(gate * value)

    命名在不同实现中可能交换,判断结构应看“SiLU 分支 × 线性分支 → 输出投影”,而不是死记 w1/w2/w3 名字。

    忽略 bias,若输入维度为 dd、中间维度为 dffd_{ff},三组矩阵约有:

    NSwiGLU3ddff.N_{SwiGLU}\approx 3dd_{ff}.

    因此比较不同模型参数量时,不能套用传统两层 FFN 的 2ddff2dd_{ff}。Llama 会选择特定的 dffd_{ff},使门控能力与总参数预算平衡。

    第 17 讲 notebook 可执行部分主要手写 SiLU/Swish 并与 F.silu 对照;完整 SwiGLU 公式来自 Llama 源码上下文。不能把“画出 SiLU 曲线”表述为“完整复现了 Llama FFN”。第 29 讲用 SwiGLU 的三个投影解释 Llama 2/3 MLP 参数量差异。

    • SwiGLU 就是 SiLU:SiLU 是激活函数;SwiGLU 是包含门控乘法和三组投影的 FFN 结构。
    • 门控等于 attention:SwiGLU 的门控发生在 token-wise FFN 内,不执行 token 间注意力。
    • 中间维越大越好:参数量、FLOPs 与模型总预算同时增加。