SwiGLU
用 SiLU/Swish 激活一条投影作为门,逐元素调制另一条投影,再映射回模型维度的门控前馈网络;Llama 系列 Transformer block 使用这一结构。
从 SiLU 到 SwiGLU
Section titled “从 SiLU 到 SwiGLU”SiLU(也称 Swish)为:
Llama 风格 SwiGLU 可写为:
其中 产生门控分支, 产生内容分支,逐元素相乘后由 投影回 hidden size。与普通两层 FFN 相比,它有三组主要线性权重。
def forward(x): gate = F.silu(w1(x)) value = w3(x) return w2(gate * value)命名在不同实现中可能交换,判断结构应看“SiLU 分支 × 线性分支 → 输出投影”,而不是死记 w1/w2/w3 名字。
忽略 bias,若输入维度为 、中间维度为 ,三组矩阵约有:
因此比较不同模型参数量时,不能套用传统两层 FFN 的 。Llama 会选择特定的 ,使门控能力与总参数预算平衡。
课程证据边界
Section titled “课程证据边界”第 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 与模型总预算同时增加。